src/Service/ProductService.php line 200

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