src/Service/ProductService.php line 197

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Slave\Product;
  4. use App\Entity\Slave\ProductLog;
  5. use App\Entity\Slave\ProductRegenerated;
  6. use App\Entity\Slave\ProductTransferLog;
  7. use App\Entity\Slave\JoinTableProductProductTransfer;
  8. class ProductService
  9. {  
  10.     // MAGAZZINI - PRODOTTI/MATRICOLE
  11.     static public function getStatusByCondition($em$condition){
  12.         $status null;
  13.         switch($condition->getSlug()){
  14.             case 'new':
  15.             case 'refurbished':
  16.             case 'repaired':
  17.             case 'free':
  18.             case 'regenerated':
  19.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  20.                 break;
  21.             case 'retired':
  22.             case 'doa':
  23.             case 'lost':
  24.             case 'broken':
  25.             case 'old':
  26.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
  27.                 break;
  28.             default: break;
  29.         }
  30.         return $status;
  31.     }
  32.     // MAGAZZINI - PRODOTTI/MATRICOLE
  33.     static public function checkProducts($file$separator){
  34.         $row 0;
  35.         $result = array();
  36.         if(($handle fopen($file"r")) !== FALSE) {
  37.             while(($data fgetcsv($handle1000$separator)) !== FALSE) {
  38.                 $data array_map("utf8_encode"$data);
  39.                 if(sizeof($data) < 2){
  40.                     $result['error'] = true;
  41.                     $result['msg'] = "Si è verificato un errore durante l'importazione del file; verificare di aver inserito il separatore corretto!";
  42.                     break;
  43.                 }
  44.                 else{
  45.                     if($row 0){
  46.                         $result ProductService::checkData($data[0], "textNull"$row"Matricola produttore"); if($result['error']) break;
  47.                         $result ProductService::checkData($data[1], "textNull"$row"Matricola fornitore"); if($result['error']) break;
  48.                     }
  49.                     $row++;
  50.                 }
  51.             }
  52.             fclose($handle);
  53.         }
  54.         return $result;
  55.     }
  56.     
  57.     // CHECK DATA
  58.     static public function checkData($data$type$row$columnName){
  59.         $result = array();
  60.         switch($type){
  61.             case 'text'
  62.                 if($data == "" || $data == null || strlen($data) > 255){
  63.                     $result['error'] = true;
  64.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  65.                 }
  66.                 else
  67.                     $result['error'] = false;
  68.                 break;
  69.             case 'textNull'
  70.                 if(strlen($data) > 255){
  71.                     $result['error'] = true;
  72.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  73.                 }
  74.                 else
  75.                     $result['error'] = false;
  76.                 break;
  77.             case 'zip'
  78.                 if($data == "" || $data == null || strlen($data) != 5){
  79.                     $result['error'] = true;
  80.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  81.                 }
  82.                 else
  83.                     $result['error'] = false;
  84.                 break;
  85.             case 'zipNull'
  86.                 if($data != "" && $data != null && strlen($data) != 5){
  87.                     $result['error'] = true;
  88.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  89.                 }
  90.                 else
  91.                     $result['error'] = false;
  92.                 break;
  93.             case 'value'
  94.                 if($data == "" || $data == null || floatval(preg_replace('/,/''.'$data)) == 0){
  95.                     $result['error'] = true;
  96.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  97.                 }
  98.                 else
  99.                     $result['error'] = false;
  100.                 break;
  101.             case 'date':
  102.                 $date date_create_from_format("d/m/Y"$data);
  103.                 if($date !== false){
  104.                     $result['error'] = false;
  105.                     $result['date'] = $date;
  106.                 }
  107.                 else{
  108.                     $result['error'] = true;
  109.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  110.                 }
  111.                 break;
  112.             case 'dateNull':
  113.                 if($data != "" || $data != null){
  114.                     $date date_create_from_format("d/m/Y"$data);
  115.                     if($date !== false){
  116.                         $result['error'] = false;
  117.                         $result['date'] = $date;
  118.                     }
  119.                     else{
  120.                         $result['error'] = true;
  121.                         $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  122.                     }
  123.                 }
  124.                 else{
  125.                     $result['error'] = false;
  126.                     $result['date'] = '';
  127.                 }
  128.                 break;
  129.             case 'sex':
  130.                 if($data != 'M' && $data != 'F'){
  131.                     $result['error'] = true;
  132.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  133.                 }
  134.                 else
  135.                     $result['error'] = false;
  136.                 break;
  137.             case 'fiscalcode':
  138.                 if(strlen($data) != 11 && strlen($data) != 16){
  139.                     $result['error'] = true;
  140.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  141.                 }
  142.                 else
  143.                     $result['error'] = false;
  144.                 break;
  145.             case 'bool':
  146.                 if($data != && $data != 1){
  147.                     $result['error'] = true;
  148.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  149.                 }
  150.                 else
  151.                     $result['error'] = false;
  152.                 break;
  153.             case 'vat':
  154.                 if(strlen($data) != 11){
  155.                     $result['error'] = true;
  156.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  157.                 }
  158.                 else
  159.                     $result['error'] = false;
  160.                 break;
  161.             case 'num8':
  162.                 if($data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != 8){
  163.                     $result['error'] = true;
  164.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  165.                 }
  166.                 else
  167.                     $result['error'] = false;
  168.                 break;
  169.             case 'num10':
  170.                 if($data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != 10){
  171.                     $result['error'] = true;
  172.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  173.                 }
  174.                 else
  175.                     $result['error'] = false;
  176.                 break;
  177.             case 'num33':
  178.                 if($data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != && $data != 10 && $data != 11 && $data != 12 && $data != 13 && $data != 14 && $data != 15 && $data != 16 && $data != 17 && $data != 18 && $data != 19 && $data != 20 && $data != 21 && $data != 22 && $data != 23 && $data != 24 && $data != 25 && $data != 26 && $data != 27 && $data != 28 && $data != 29 && $data != 30 && $data != 31 && $data != 32 && $data != 33){
  179.                     $result['error'] = true;
  180.                     $result['msg'] = "Si è verificato un errore alla riga ".($row 1)." nella colonna '".$columnName."'.";
  181.                 }
  182.                 else
  183.                     $result['error'] = false;
  184.                 break;
  185.             break;
  186.         }
  187.         return $result;
  188.     }
  189.     // CREO PRODOTTO
  190.     static public function createProduct($em$model$codeProducer$codeSupplier$suppliers$status$condition)
  191.     {
  192.         $product = new Product();
  193.         $product->setDateCreation(new \Datetime());
  194.         $product->setDateLastTransfer(new \Datetime());
  195.         $em->persist($product);
  196.         $em->flush();
  197.         $p ProductService::updateProduct($em$product$model$codeProducer$codeSupplier$suppliers$status$condition);
  198.         return $p;
  199.     }
  200.     // AGGIORNO PRODOTTO
  201.     static public function updateProduct($em$product$model$codeProducer$codeSupplier$suppliers$status$condition)
  202.     {
  203.         $product->setModel($model);
  204.         if($codeProducer != ''$product->setCodeProducer($codeProducer);
  205.         if($codeSupplier != ''$product->setCodeSupplier($codeSupplier);
  206.         foreach($product->getSuppliers() as $sup$product->removeSupplier($sup);
  207.         foreach($suppliers as $sup$product->addSupplier($sup);
  208.         $product->setStatus($status);
  209.         $product->setActive(true);
  210.         $product->setCondition($condition);
  211.         $em->flush();
  212.         return $product;
  213.     }
  214.     
  215.     // CREO JT PRODUCT TRANSFER
  216.     static public function createJtProductTransfer($em$product$transfer$datetime)
  217.     {
  218.         $jtppt = new JoinTableProductProductTransfer();
  219.         $jtppt->setProduct($product);
  220.         $jtppt->setTransfer($transfer);
  221.         $jtppt->setTransferOk(false);
  222.         $em->persist($jtppt);
  223.         $em->flush();
  224.     }
  225.     
  226.     // CREO TRANSFER LOG
  227.     static public function createProductTransferLog($em$product$transfer$user$warehouse$datetime$downloadType)
  228.     {
  229.         $ptLog = new ProductTransferLog();
  230.         $ptLog->setProduct($product);
  231.         $ptLog->setTransfer($transfer);
  232.         $ptLog->setUser($user);
  233.         $ptLog->setProductName($product->getModel()->getName().' ('.$product->getModel()->getSku().')');
  234.         $ptLog->setCodeSupplier($product->getCodeSupplier());
  235.         $ptLog->setCodeProducer($product->getCodeProducer());
  236.         if($transfer != null){
  237.             $ptLog->setWarehouseFrom($transfer->getWarehouseFrom()->getNickname());
  238.             $ptLog->setWarehouseTo($transfer->getWarehouseTo()->getNickname());
  239.             $ptLog->setDdt($transfer->getDdt());
  240.             $ptLog->setDdtPath($transfer->getDdtPath());
  241.         }
  242.         else{
  243.             $ptLog->setWarehouseFrom($product->getActualWarehouse()->getNickname());
  244.             $ptLog->setWarehouseTo($warehouse->getNickname());
  245.         }
  246.         $ptLog->setUserName($user->getProfile()->getName().' '.$user->getProfile()->getSurname());
  247.         $ptLog->setDownloadType($downloadType);
  248.         $ptLog->setDatetime($datetime);
  249.         $em->persist($ptLog);
  250.         $em->flush();
  251.     }
  252.     static public function createProductTransferBackLog($em$product$transfer$user$warehouse$datetime$downloadType)
  253.     {
  254.         $ptLog = new ProductTransferLog();
  255.         $ptLog->setProduct($product);
  256.         $ptLog->setTransfer($transfer);
  257.         $ptLog->setUser($user);
  258.         $ptLog->setProductName($product->getModel()->getName().' ('.$product->getModel()->getSku().')');
  259.         $ptLog->setCodeSupplier($product->getCodeSupplier());
  260.         $ptLog->setCodeProducer($product->getCodeProducer());
  261.         $ptLog->setWarehouseFrom($transfer->getWarehouseTo()->getNickname());
  262.         $ptLog->setWarehouseTo($transfer->getWarehouseFrom()->getNickname());
  263.         $ptLog->setDdt($transfer->getDdt());
  264.         $ptLog->setDdtPath($transfer->getDdtPath());
  265.         $ptLog->setUserName($user->getProfile()->getName().' '.$user->getProfile()->getSurname());
  266.         $ptLog->setDownloadType($downloadType);
  267.         $ptLog->setDatetime($datetime);
  268.         $em->persist($ptLog);
  269.         $em->flush();
  270.     }
  271.     
  272.     static public function createProductTransferLogClient($em$product$user$warehouseFrom$warehouseTo$datetime$downloadType)
  273.     {
  274.         $ptLog = new ProductTransferLog();
  275.         $ptLog->setProduct($product);
  276.         $ptLog->setTransfer(null);
  277.         $ptLog->setUser($user);
  278.         $ptLog->setProductName($product->getModel()->getName().' ('.$product->getModel()->getSku().')');
  279.         $ptLog->setCodeSupplier($product->getCodeSupplier());
  280.         $ptLog->setCodeProducer($product->getCodeProducer());
  281.         $ptLog->setWarehouseFrom($warehouseFrom->__toString());
  282.         $ptLog->setWarehouseTo($warehouseTo->__toString());
  283.         $ptLog->setUserName($user->getProfile()->getName().' '.$user->getProfile()->getSurname());
  284.         $ptLog->setDownloadType($downloadType);
  285.         $ptLog->setDatetime($datetime);
  286.         $ptLog->setDdt(null);
  287.         $ptLog->setDdtPath(null);
  288.         $em->persist($ptLog);
  289.         $em->flush();
  290.     }
  291.     // SPOSTA PRODOTTO
  292.     static public function moveProductTransfer($em$jtppt$user$status)
  293.     {        
  294.         $product $jtppt->getProduct();
  295.         ProductService::createProductLog($em$product$user'status'$status->getValue(), null$product->getStatus()->getId());
  296.         $product->setStatus($status);
  297.         $product->setActualWarehouse($jtppt->getTransfer()->getWarehouseTo());
  298.         $product->setDateLastTransfer(new \Datetime());
  299.         $jtppt->setTransferOk(true);
  300.         $em->flush();
  301.     }
  302.     static public function moveProductClient($em$product$warehouse)
  303.     {
  304.         $product->setActualWarehouse($warehouse);
  305.         $product->setDateLastTransfer(new \Datetime());
  306.         $em->flush();
  307.     }
  308.     // CREO LOG
  309.     static public function createProductLog($em$product$user$type$newValue$intervention$oldDataId)
  310.     {
  311.         $text '<table class="table table_no_padding b_none m_b_none"><tr><th class="td_w_70p">Utente</th><td>'.$user.'</td></tr><tr><th>Prodotto</th><td>'.$product.'</td></tr>';
  312.         switch($type){
  313.             case 'status'
  314.                 $oldStatus $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($oldDataId);
  315.                 $text.= '<tr><th>Modifica a</th><td>Stato</td><tr><th>Da</th><td>'.$oldStatus->getValue().'</td></tr><tr><th>A</th><td>'.$newValue.'</td></th></tr>'; break;
  316.             case 'condition'
  317.                 $oldCondition $em->getRepository("App\Entity\Slave\ProductCondition")->findOneById($oldDataId);
  318.                 $text.= '<tr><th>Modifica a</th><td>Condizione</td><tr><th>Da</th><td>'.$oldCondition->getValue().'</td></tr><tr><th>A</th><td>'.$newValue.'</td></th></tr>'; break;
  319.             case 'code-producer'
  320.                 $oldCode $product->getCodeProducer();
  321.                 $text.= '<tr><th>Modifica a</th><td>Codice produttore</td><tr><th>Da</th><td>'.$oldCode.'</td></tr><tr><th>A</th><td>'.$newValue.'</td></th></tr>'; break;
  322.             case 'code-supplier'
  323.                 $oldCode $product->getCodeSupplier();
  324.                 $text.= '<tr><th>Modifica a</th><td>Codice fornitore</td><tr><th>Da</th><td>'.$oldCode.'</td></tr><tr><th>A</th><td>'.$newValue.'</td></th></tr>'; break;
  325.             default: break;
  326.         }
  327.         $text.='</table>';
  328.         $productLog = new ProductLog();
  329.         $productLog->setProduct($product);
  330.         $productLog->setDatetime(new \Datetime());
  331.         $productLog->setType($type);
  332.         $productLog->setText($text);
  333.         $productLog->setIntervention($intervention);
  334.         $productLog->setOldDataId($oldDataId);
  335.         $em->persist($productLog);
  336.         $em->flush();
  337.     }
  338.     
  339.     // CAMBIA CONDIZIONE E STATO DI CONSEGUENZA
  340.     static public function productChangeCondition($em$user$product$newCondition)
  341.     {
  342.         $statusAvailable $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  343.         $statusNotAvailable $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
  344.         ProductService::createProductLog($em$product$user'condition'$newCondition->getValue(), null$product->getCondition()->getId());
  345.         $product->setCondition($newCondition);
  346.         // Se STATO non "In trasferimento" e non "In uso"
  347.         if($product->getStatus()->getSlug() != 'transfer' && $product->getStatus()->getSlug() != 'in_use'){
  348.             // Se CONDIZIONE NUOVA "Disponibile" (Nuovo / Ricondizionato / Riparato / Svincolato / Rigenerato) e STATO "Non disponibile"
  349.             if($newCondition->isStatusAvailable() && $product->getStatus()->getSlug() == "not_available"){
  350.                 ProductService::createProductLog($em$product$user'status'$statusAvailable->getValue(), null$product->getStatus()->getId());
  351.                 $product->setStatus($statusAvailable);
  352.                 if($newCondition->getSlug() == 'regenerated')
  353.                     ProductService::createProductRegenerated($em$user$product);
  354.             }
  355.             // Se CONDIZIONE "Non disponibile" (Guasto / Ritirato / DOA / Smarrito / Storico) e STATO "Disponibile"
  356.             elseif(!$newCondition->isStatusAvailable() && $product->getStatus()->getSlug() == "available"){
  357.                 ProductService::createProductLog($em$product$user'status'$statusNotAvailable->getValue(), null$product->getStatus()->getId());
  358.                 $product->setStatus($statusNotAvailable);
  359.             }
  360.         }
  361.         $em->flush();
  362.     }
  363.     // CREO PRODOTTO DA RIGENERARE
  364.     static public function createProductRegenerated($em$user$product)
  365.     {
  366.         $productRegenerated = new ProductRegenerated();
  367.         $productRegenerated->setProduct($product);
  368.         $productRegenerated->setDatetime(new \Datetime());
  369.         $em->persist($productRegenerated);
  370.         if(sizeof($product->getSuppliers()) == 1){
  371.             $productRegenerated->setSupplier($product->getSuppliers()[0]);
  372.         }
  373.         $em->flush();
  374.     }
  375. }