src/Controller/User/UserWarehouseController.php line 308

Open in your IDE?
  1. <?php
  2. namespace App\Controller\User;
  3. use Doctrine\Persistence\ManagerRegistry;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  7. use Symfony\Component\Filesystem\Filesystem;
  8. use Symfony\Component\Form\FormFactoryInterface;
  9. use Symfony\Component\Form\FormError;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\HttpFoundation\StreamedResponse;
  13. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  14. use Symfony\Component\Mailer\MailerInterface;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Symfony\Component\Validator\Validator\ValidatorInterface;
  17. use Spipu\Html2Pdf\Html2Pdf;
  18. use Knp\Component\Pager\PaginatorInterface;
  19. use App\Entity\Slave\JoinTableUserWarehouse;
  20. use App\Entity\Slave\JoinTableProductProductTransfer;
  21. use App\Entity\Slave\ProductTransfer;
  22. use App\Entity\Slave\Product;
  23. use App\Entity\Slave\ProductRequest;
  24. use App\Entity\Slave\Warehouse;
  25. use App\Form\Model\DdtPrint;
  26. use App\Form\Model\ProductRegister;
  27. use App\Form\Model\ProductRecover;
  28. use App\Form\Model\ImportInventory;
  29. use App\Form\Slave\ImportInventoryType;
  30. use App\Form\Slave\DdtPrintType;
  31. use App\Form\Slave\ProductType;
  32. use App\Form\Slave\ProductTransferEditType;
  33. use App\Form\Slave\ProductTransferDdtType;
  34. use App\Form\Slave\ProductTransferDownloadType;
  35. use App\Form\Slave\ProductTransferReceiveType;
  36. use App\Form\Slave\ProductTransferSendType;
  37. use App\Form\Slave\ProductTransferSendProductsType;
  38. use App\Form\Slave\ProductRegisterType;
  39. use App\Form\Slave\ProductRecoverType;
  40. use App\Form\Slave\ProductRequestType;
  41. use App\Form\Slave\WarehouseType;
  42. use App\Service\FilterService;
  43. use App\Service\FormValidatorService;
  44. use App\Service\ProductService;
  45. use App\Service\MediaService;
  46. use App\Service\ValidationService;
  47. /**
  48.  * @Route("/scrivania/magazzini")
  49.  * @Security("is_granted('ROLE_USER') and is_granted('active', user)")
  50.  */
  51. class UserWarehouseController extends AbstractController
  52. {
  53.     private $mr;
  54.     private $params;
  55.     public function __construct(ManagerRegistry $mrParameterBagInterface $params)
  56.     {
  57.         $this->mr $mr;
  58.         $this->params $params;
  59.     }
  60.     public function createDdtProductsArray($products)
  61.     {
  62.         $first true;
  63.         $total 0;
  64.         $qty 0;
  65.         $arrayRows = array();
  66.         $arrayCodes = array();
  67.         foreach($products as $product){
  68.             if($first){
  69.                 $first false;
  70.                 $oldModel $product->getModel();
  71.             }
  72.             if($product->getModel()->getId() == $oldModel->getId()){
  73.                 $qty++;
  74.                 $tmp = array();
  75.                 if($product->getCodeProducer()) array_push($tmp$product->getCodeProducer()); else array_push($tmp'ND');
  76.                 if($product->getCodeSupplier()) array_push($tmp$product->getCodeSupplier()); else array_push($tmp'ND');
  77.                 array_push($arrayCodes$tmp);
  78.             }
  79.             else{
  80.                 $arrayTmp = array();
  81.                 array_push($arrayTmp$qty$oldModel->getSku(), '('.$oldModel->getProducer()->getName().') - '.$oldModel->getName(), $arrayCodes);
  82.                 array_push($arrayRows$arrayTmp);
  83.                 $qty 1;
  84.                 $oldModel $product->getModel();
  85.                 $arrayCodes = array();
  86.                 $tmp = array();
  87.                 if($product->getCodeProducer()) array_push($tmp$product->getCodeProducer()); else array_push($tmp'ND');
  88.                 if($product->getCodeSupplier()) array_push($tmp$product->getCodeSupplier()); else array_push($tmp'ND');
  89.                 array_push($arrayCodes$tmp);
  90.             }
  91.             $total++;
  92.             if(sizeof($products) == $total){
  93.                 $arrayTmp = array();
  94.                 array_push($arrayTmp$qty$product->getModel()->getSku(), '('.$product->getModel()->getProducer()->getName().') - '.$product->getModel()->getName(), $arrayCodes);
  95.                 array_push($arrayRows$arrayTmp);
  96.             }
  97.         }
  98.         return [$arrayRows$total];
  99.     }
  100.     public function searchDDTSender($em$transfer)
  101.     {
  102.         $supplier null;
  103.         $sender null;
  104.         $warehouseHeadquarter null;
  105.         switch($transfer->getType()){
  106.             case 'destination'$supplier $transfer->getSupplier(); break;
  107.             case 'technician'
  108.                 if($transfer->getUserFrom() != null)
  109.                     $sender $transfer->getUserFrom();
  110.                 else
  111.                     $warehouseHeadquarter $transfer->getWarehouseFrom();
  112.                 break;
  113.             case 'main'$sender $transfer->getUserFrom(); break;
  114.             default: break;
  115.         }
  116.         return [$supplier$sender$warehouseHeadquarter];
  117.     }
  118.     public function searchDDTDestination($em$transfer)
  119.     {
  120.         $destination null;
  121.         $receiver null;
  122.         $warehouseHeadquarter null;
  123.         switch($transfer->getType()){
  124.             case 'destination'$destination $transfer->getWarehouseTo()->getDestination(); break;
  125.             case 'technician'$receiver $transfer->getUserTo(); break;
  126.             case 'main'$warehouseHeadquarter $transfer->getWarehouseTo(); break;
  127.             default: break;
  128.         }
  129.         return [$destination$receiver$warehouseHeadquarter];
  130.     }
  131.     public function downloadSetByType($em$transfer)
  132.     {
  133.         $status null;
  134.         $toManage null;
  135.         $toManagePriority 2;
  136.         switch($transfer->getType()){
  137.             case 'main'
  138.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
  139.                 $toManage true;
  140.                 $toManagePriority 1;
  141.                 break;
  142.             case 'technician':
  143.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  144.                 $toManage false;
  145.                 break;
  146.             case 'destination':
  147.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
  148.                 $toManage false;
  149.                 break;
  150.             default: break;
  151.         }
  152.         return [$status$toManage$toManagePriority];
  153.     }
  154.     public function registerReceiveProducts($em$warehouse$status$form$codeProducer$codeSupplier$arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats)
  155.     {
  156.         $product null;
  157.         if($product == null && $codeProducer != null$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $codeProducer));
  158.         if($product == null && $codeSupplier != null$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $codeSupplier));
  159.         if($product != null){
  160.             if(!in_array($codeProducer$arrayProducerCodes) && !in_array($codeSupplier$arraySupplierCodes)){
  161.                 $product ProductService::updateProduct($em$product$form->get('model')->getData(), $codeProducer$codeSupplier$form->get('suppliers')->getData(), $status$form->get('condition')->getData());
  162.                 $countProductsUpdated++;
  163.                 $productsUpdatedMats.="<br>".$codeProducer.";".$codeSupplier;
  164.             }
  165.             else{
  166.                 $countProductsDouble++;
  167.                 $productsDoubleMats.="<br>".$codeProducer.";".$codeSupplier;
  168.             }
  169.         }
  170.         else{
  171.             $product ProductService::createProduct($em$form->get('model')->getData(), $codeProducer$codeSupplier$form->get('suppliers')->getData(), $status$form->get('condition')->getData());
  172.             $countProductsNew++;
  173.         }
  174.         $product->setActualWarehouse($warehouse);
  175.         $product->setDateLastTransfer(new \Datetime());
  176.         if($codeProducer != null && $codeProducer != ''array_push($arrayProducerCodes$codeProducer);
  177.         if($codeSupplier != null && $codeSupplier != ''array_push($arraySupplierCodes$codeSupplier);
  178.         return [$product$arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats];
  179.     }
  180.     /**
  181.      * @Route("/lista", name="user_warehouse_list")
  182.      */
  183.     public function userWarehouseList(Request $requestValidatorInterface $validatorPaginatorInterface $paginatorFormFactoryInterface $formFactory)
  184.     {
  185.         $em $this->mr->getManager('slave');
  186.         $session $request->getSession();
  187.         $filters FilterService::nicknameFilter($request);
  188.         $canSeeAll false;
  189.         foreach($this->getUser()->getAccountType()->getPermissions() as $jtatp){
  190.             if($jtatp->getPermission()->getSlug() == 'warehouse' && $jtatp->getRw() == 'RW'){
  191.                 $canSeeAll true;
  192.             }
  193.         }
  194.         if($canSeeAll){
  195.             $warehousesActiveQuery $em->getRepository("App\Entity\Slave\Warehouse")->queryNotClientsAndDestinationFiltered($filterstrue);
  196.             $warehousesNotActiveQuery $em->getRepository("App\Entity\Slave\Warehouse")->queryNotClientsAndDestinationFiltered($filtersfalse);
  197.         }
  198.         else{
  199.             $warehousesActiveQuery $em->getRepository("App\Entity\Slave\Warehouse")->queryByActiveAndUserFiltered($filterstrue$this->getUser()->getId());
  200.             $warehousesNotActiveQuery $em->getRepository("App\Entity\Slave\Warehouse")->queryByActiveAndUserFiltered($filtersfalse$this->getUser()->getId());
  201.         }
  202.         $warehousesActive $paginator->paginate($warehousesActiveQuery$request->getSession()->get($request->get("_route")."_page"), 15);
  203.         $warehousesNotActive $paginator->paginate($warehousesNotActiveQuery$request->getSession()->get($request->get("_route")."_page"), 15);
  204.         $countActive sizeof($warehousesActiveQuery->getResult());
  205.         $countNotActive sizeof($warehousesNotActiveQuery->getResult());
  206.         $warehouse = new Warehouse();
  207.         $form $formFactory->createNamed("form_warehouse_new"WarehouseType::class, $warehouse);
  208.         $form->handleRequest($request);
  209.         $editId 0;
  210.         if($form->isSubmitted()){
  211.             $valid ValidationService::validateNotDuplicate($validator$form->get("nickname"), $em"App\Entity\Slave\Warehouse", ['id' => 0]);
  212.             if($form->isValid()){
  213.                 $em->persist($warehouse);
  214.                 $em->flush();
  215.                 $jtuw = new JoinTableUserWarehouse();
  216.                 $jtuw->setUser($this->getUser());
  217.                 $jtuw->setWarehouse($warehouse);
  218.                 $jtuw->setPermission("RW");
  219.                 $em->persist($jtuw);
  220.                 $em->flush();
  221.                 if($this->getUser()->getAccountTypology() != 'agency'){
  222.                     $userAgency $em->getRepository('App\Entity\Slave\User')->findMainAccountAgency();
  223.                     $jtuw = new JoinTableUserWarehouse();
  224.                     $jtuw->setUser($userAgency);
  225.                     $jtuw->setWarehouse($warehouse);
  226.                     $jtuw->setPermission("RW");
  227.                     $em->persist($jtuw);
  228.                     $em->flush();
  229.                 }
  230.                 $this->addFlash('notice_success'"Valore inserito");
  231.                 return $this->redirectToRoute('user_warehouse_list');
  232.             }
  233.             else
  234.                 $session->set('openNewModal'true);
  235.         }
  236.         
  237.         return $this->render('role/user/warehouse/list.html.twig',[
  238.             "filters" => $filters,
  239.             'warehousesActive' => $warehousesActive,
  240.             'warehousesNotActive' => $warehousesNotActive,
  241.             'countActive' => $countActive,
  242.             'countNotActive' => $countNotActive,
  243.             "form" => $form->createView()
  244.         ]);
  245.     }
  246.     /**
  247.      * @Route("/cambia-stato", name="user_warehouse_change_status")
  248.      * @Security("is_granted('edit', 'warehouse')")
  249.      */
  250.     public function userUsersStaffChangeStatus(Request $request)
  251.     {    
  252.         $em $this->mr->getManager('slave');
  253.         $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($request->request->get("warehouseChangeId"));
  254.         $warehouse->setactive(!$warehouse->isActive());
  255.         $em->flush();
  256.         
  257.         $this->addFlash('notice_success'"Stato aggiornato");
  258.         return $this->redirectToRoute('user_warehouse_list');
  259.     }
  260.     
  261.     /**
  262.      * @Route("/elimina", name="user_warehouse_delete")
  263.      * @Security("is_granted('edit', 'warehouse')")
  264.      */
  265.     public function userWarehouseDelete(Request $request)
  266.     {    
  267.         $em $this->mr->getManager('slave');
  268.         $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($request->request->get("warehouseDelId"));
  269.         foreach($warehouse->getUsers() as $jt)
  270.             $em->remove($jt);
  271.         $em->remove($warehouse);
  272.         $em->flush();
  273.         $this->addFlash('notice_success'"Magazzino eliminato");
  274.         return $this->redirectToRoute('user_warehouse_list');
  275.     }
  276.     /**
  277.      * @Route("/{warehouseId}/scheda", name="user_warehouse_sheet")
  278.      * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  279.      */
  280.     public function userWarehouseSheet($warehouseIdRequest $requestValidatorInterface $validatorPaginatorInterface $paginatorFormFactoryInterface $formFactoryFileSystem $fs)
  281.     {    
  282.         $em $this->mr->getManager('slave');
  283.         $emMaster $this->mr->getManager('master');
  284.         $session $request->getSession();
  285.         $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  286.         $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  287.         $productModels $em->getRepository('App\Entity\Slave\ProductModel')->findAll();
  288.         $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  289.         $settingRegisterStock $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'warehouse_register_stock'));
  290.         $settingRecoverStock $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'warehouse_recover_stock'));
  291.         $settingDdtMandatory $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'ddt_internal_mandatory'));
  292.         $settingWarehouseProductConditions $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'warehouse_technician_product_conditions'));
  293.         $suppliers $em->getRepository('App\Entity\Slave\Supplier')->findAllActiveOrdered();
  294.         
  295.         // DATI MAGAZZINO
  296.         $formEdit $formFactory->createNamed("form_warehouse_edit"WarehouseType::class, $warehouse);
  297.         $formEdit->handleRequest($request);
  298.         if($formEdit->isSubmitted()){
  299.             $valid ValidationService::validateNotBlank($validator$formEdit->get("nickname"));
  300.             if($valid && $formEdit->isValid()){
  301.                 $em->flush();
  302.                 $this->addFlash('notice_success'"Magazzino aggiornato");
  303.                 return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  304.             }
  305.             else{
  306.                 $session->set('openEditModal'true);
  307.             }
  308.         }
  309.         $filters FilterService::userWarehouseSheetFilter($request);
  310.         // STOCK
  311.         $toManageProductsQuery $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true$warehouse->getId(), 'to_manage'$filters0);
  312.         $toManageProducts $paginator->paginate($toManageProductsQuery$request->getSession()->get($request->get("_route")."_page_0"), 100, array('pageParameterName' => 'page_0'));
  313.         $availableProductsQuery $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true$warehouse->getId(), 'available'$filters1);
  314.         $availableProducts $paginator->paginate($availableProductsQuery$request->getSession()->get($request->get("_route")."_page_1"), 100, array('pageParameterName' => 'page_1'));
  315.         
  316.         $notAvailableProductsQuery $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true$warehouse->getId(), 'not_available'$filters1);
  317.         $notAvailableProducts $paginator->paginate($notAvailableProductsQuery$request->getSession()->get($request->get("_route")."_page_1"), 100, array('pageParameterName' => 'page_1'));
  318.         
  319.         $transferProductsQuery $em->getRepository("App\Entity\Slave\Product")->findByWarehouseFiltered(true$warehouse->getId(), 'transfer'$filters1);
  320.         $transferProducts $paginator->paginate($transferProductsQuery$request->getSession()->get($request->get("_route")."_page_1"), 100, array('pageParameterName' => 'page_1'));
  321.         // INVENTORY
  322.         if($session->get('inventorySupplierId') != null$session->remove('inventorySupplierId');
  323.         if($session->get('inventoryStatusId') != null$session->remove('inventoryStatusId');
  324.         if($session->get('inventoryResults') != null$session->remove('inventoryResults');
  325.         $importInventory = new ImportInventory();
  326.         $formInventory $formFactory->createNamed("form_import_inventory"ImportInventoryType::class, $importInventory);
  327.         $formInventory->handleRequest($request);
  328.         if($formInventory->isSubmitted()){
  329.             
  330.             $valid true;
  331.             if($valid$valid ValidationService::validateNotBlank($validator$formInventory->get('supplier'));
  332.             if($valid$valid ValidationService::validateNotBlank($validator$formInventory->get('status'));
  333.             if($valid$valid ValidationService::validateFile($validator$formInventory->get('file'), true$formInventory->get('file')->getData(), '10', array('csv''txt'));
  334.             if($valid && $formInventory->isValid()){
  335.                 $row 0;
  336.                 $productsIdsFound = array();
  337.                 $results = array();
  338.                 if(($handle fopen($formInventory->get('file')->getData(), "r")) !== FALSE) {
  339.                     while(($data fgetcsv($handle2000',')) !== FALSE) {
  340.                         $data array_map("utf8_encode"$data);
  341.                         if($row 0){
  342.                             $found false;
  343.                             $color 'bg_r_l';
  344.                             $errorMsg '';
  345.                             $prod null;
  346.                             $prodCodeProducer null;
  347.                             $prodCodeSupplier null;
  348.                             $prodModel null;
  349.                             $prodWarehouse null;
  350.                             $priority 5;
  351.                             $trimmedCode rtrim(ltrim($data[0], " ")," ");
  352.                             foreach($warehouse->getProducts() as $p){
  353.                                 if($trimmedCode == $p->getCodeProducer()){
  354.                                     $found true;
  355.                                     $prod $p;
  356.                                     break;
  357.                                 }
  358.                                 if(!$found && $trimmedCode == $p->getCodeSupplier()){
  359.                                     $found true;
  360.                                     $prod $p;
  361.                                     break;
  362.                                 }
  363.                             }
  364.                             if($found){
  365.                                 // PRODOTTO TROVATO NEL MAGAZZINO
  366.                                 // CONTROLLO FORNITORE
  367.                                 $suppliersIds = array();
  368.                                 foreach($prod->getSuppliers() as $supplier)
  369.                                     array_push($suppliersIds$supplier->getId());
  370.                                 if(!in_array($formInventory->get('supplier')->getData()->getId(), $suppliersIds)){
  371.                                     $color 'bg_r_m';
  372.                                     $errorMsg 'Prodotto presente --- Fornitore non corretto';
  373.                                     $priority 3;
  374.                                 }
  375.                                 // CONTROLLO STATO
  376.                                 if($prod->getStatus()->getId() != $formInventory->get('status')->getData()->getId()){ 
  377.                                     $color 'bg_r_l_m';
  378.                                     $errorMsg 'Prodotto presente --- Stato non corretto';
  379.                                     $priority 4;
  380.                                 }
  381.                             }
  382.                             else{
  383.                                 // PRODOTTO NON TROVATO --- CERCO TRA TUTTI I PRODOTTI
  384.                                 if($prod == null$prod $em->getRepository('App\Entity\Slave\Product')->findOneByCodeProducer($trimmedCode);
  385.                                 if($prod == null$prod $em->getRepository('App\Entity\Slave\Product')->findOneByCodeSupplier($trimmedCode);
  386.                                 if($prod != null){
  387.                                     // MAGAZZINO SBAGLIATO
  388.                                     $color 'bg_r_m_h';
  389.                                     $errorMsg 'Prodotto non presente --- Presente in un altro magazzino';
  390.                                     $priority 2;
  391.                                 }
  392.                                 else{
  393.                                     // PRODOTTO NON IN PIATTAFORMA
  394.                                     $color 'bg_r_b';
  395.                                     $errorMsg 'Prodotto non presente in piattaforma';
  396.                                     $priority 0;
  397.                                     $prodCodeProducer $trimmedCode;
  398.                                 }
  399.                             }
  400.                             
  401.                             $prodLastTransfer '';
  402.                             if($prod != null){
  403.                                 if($prod->getCodeProducer() != null$prodCodeProducer $prod->getCodeProducer(); else $prodCodeProducer '---';
  404.                                 if($prod->getCodeSupplier() != null$prodCodeSupplier $prod->getCodeSupplier(); else $prodCodeSupplier '---';
  405.                                 $prodModel $prod->getModel()->__toString();
  406.                                 $prodWarehouse $prod->getActualWarehouse()->__toString();
  407.                                 if($prod->getLastTransfer() != null){
  408.                                     $transfer $prod->getLastTransfer();
  409.                                     $prodLastTransfer 'Magazzino partenza: '.$transfer->getWarehouseFrom().' --- Magazzino destinazione: '.$transfer->getWarehouseTo();
  410.                                     if($transfer->getDatetimeCompletion() != null)
  411.                                         $prodLastTransfer .= ' --- Data completamento: '.$transfer->getDatetimeCompletion()->format('d-m-Y H:i');
  412.                                 }
  413.                                 array_push($productsIdsFound$prod->getId());
  414.                             }
  415.                             if($trimmedCode != '' && $trimmedCode != ' '){
  416.                                 $arrayTmp = array();
  417.                                 array_push($arrayTmp$priority$color$prodModel$prodCodeProducer$prodCodeSupplier$prodWarehouse$errorMsg$prodLastTransfer);
  418.                                 array_push($results$arrayTmp);
  419.                             }
  420.                         }
  421.                         $row++;
  422.                     }
  423.                     fclose($handle);
  424.                 }
  425.                 // RECUPERO PRODOTTI NEL MAGAZZINO E NON NEL FILE
  426.                 $color 'bg_r_h';
  427.                 $errorMsg 'Prodotto non presente nel file';
  428.                 $priority 1;
  429.                 $productsInWarehouseAndNotInFile $em->getRepository('App\Entity\Slave\Product')->findByWarehouseSupplierStatusAndNotInIds($warehouseId$formInventory->get('supplier')->getData()->getId(), $formInventory->get('status')->getData()->getId(), $productsIdsFound);
  430.                 foreach($productsInWarehouseAndNotInFile as $p){
  431.                     $arrayTmp = array();
  432.                     $prodCodeProducer '';
  433.                     $prodCodeSupplier '';
  434.                     $prodModel '';
  435.                     $prodWarehouse '';
  436.                     if($p->getCodeProducer() != null$prodCodeProducer $p->getCodeProducer(); else $prodCodeProducer '---';
  437.                     if($p->getCodeSupplier() != null$prodCodeSupplier $p->getCodeSupplier(); else $prodCodeSupplier '---';
  438.                     $prodModel $p->getModel()->__toString();
  439.                     $prodWarehouse $p->getActualWarehouse()->__toString();
  440.                     $prodLastTransfer '';
  441.                     if($p->getLastTransfer() != null){
  442.                         $transfer $p->getLastTransfer();
  443.                         $prodLastTransfer 'Magazzino partenza: '.$transfer->getWarehouseFrom().' --- Magazzino destinazione: '.$transfer->getWarehouseTo();
  444.                         if($transfer->getDatetimeCompletion() != null)
  445.                             $prodLastTransfer .= ' --- Data completamento: '.$transfer->getDatetimeCompletion()->format('d-m-Y H:i');
  446.                     }
  447.                     array_push($arrayTmp$priority$color$prodModelrtrim(ltrim($prodCodeProducer)), rtrim(ltrim($prodCodeSupplier)), $prodWarehouse$errorMsg$prodLastTransfer);
  448.                     array_push($results$arrayTmp);
  449.                 }
  450.                 $session->set('inventorySupplierId'$formInventory->get('supplier')->getData()->getId());
  451.                 $session->set('inventoryStatusId'$formInventory->get('status')->getData()->getId());
  452.                 $session->set('inventoryResults'$results);
  453.                 return $this->redirectToRoute('user_warehouse_stock_inventory', array('warehouseId' => $warehouse->getId()));
  454.             }
  455.             else{
  456.                 $session->set('openStockInventoryModal'true);
  457.             }
  458.         }
  459.         // TRANSFER
  460.         $incomingTransfersQuery $em->getRepository("App\Entity\Slave\ProductTransfer")->findByWarehouseTypeAndPhaseNotCompletedFiltered(true$warehouse->getId(), 'to'$filters);
  461.         $incomingTransfers $paginator->paginate($incomingTransfersQuery$request->getSession()->get($request->get("_route")."_page_2"), 100, array('pageParameterName' => 'page_2'));
  462.         
  463.         $outputTransfersQuery $em->getRepository("App\Entity\Slave\ProductTransfer")->findByWarehouseTypeAndPhaseNotCompletedFiltered(true$warehouse->getId(), 'from'$filters);
  464.         $outputTransfers $paginator->paginate($outputTransfersQuery$request->getSession()->get($request->get("_route")."_page_2"), 100, array('pageParameterName' => 'page_2'));
  465.         
  466.         $transferReceive = new ProductTransfer();
  467.         $formReceive $formFactory->createNamed("form_transfer_receive"ProductTransferReceiveType::class, $transferReceive);
  468.         $formReceive->handleRequest($request);
  469.         
  470.         if($formReceive->isSubmitted()){
  471.             $valid true;
  472.             if($formReceive->get('ddtMandatory')->getData()){
  473.                 if($valid$valid ValidationService::ValidateNotBlank($validator$formReceive->get('ddt'));
  474.                 $valid ValidationService::validateFile($validator$formReceive->get('ddtPath'), false$formReceive->get('file')->getData(), '10', array('pdf''jpg''jpeg''png'));
  475.             }
  476.             if($valid$valid ValidationService::ValidateNotBlank($validator$formReceive->get('warehouse'));
  477.             if($valid && $formReceive->isValid()){
  478.                 $warehouseFrom $formReceive->get('warehouse')->getData();
  479.                 $transferReceive->setDatetimeCreation(new \Datetime());
  480.                 $transferReceive->setPhase('inserted');
  481.                 $transferReceive->setWarehouseFrom($warehouseFrom);
  482.                 $transferReceive->setWarehouseTo($warehouse);
  483.                 if($formReceive->get('file')->getData() != null){
  484.                     if($formReceive->get('file')->getData()->guessExtension() == 'pdf')
  485.                         MediaService::uploadDocument($formReceive->get('file')->getData(), $uploadDir$transferReceive'signedDdt');
  486.                     else
  487.                         MediaService::uploadImage($fs$formReceive->get('file')->getData(), null$uploadDir$transferReceive'signedDdt'1001000200false);
  488.                 }
  489.                 $transferReceive->setType('destination');
  490.                 $em->persist($transferReceive);
  491.                 $em->flush();
  492.                 $session->set('transferId'$transferReceive->getId());
  493.                 return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouse->getId(), 'transferId' => $transferReceive->getId()));
  494.             }
  495.             else{
  496.                 $session->set('openTransferReceiveModal'true);
  497.             }
  498.         }
  499.         
  500.         $transferSend = new ProductTransfer();
  501.         $formSend $formFactory->createNamed("form_transfer_send"ProductTransferSendType::class, $transferSend, array('warehouseId' => $warehouse->getId()));
  502.         $formSend->handleRequest($request);
  503.         
  504.         if($formSend->isSubmitted()){
  505.             $valid true;
  506.             switch($formSend->get('type')->getData()){
  507.                 case 'destination':
  508.                     if($valid)
  509.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('supplier'));
  510.                     break;
  511.                 case 'main':
  512.                     if($valid && $warehouse->isHeadquarter() == && $this->getUser()->getAccountTypology() != 'technician')
  513.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('userFrom'));
  514.                     break;
  515.                 case 'technician':
  516.                     if($valid)
  517.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('userTo'));
  518.                     if($valid && $warehouse->isHeadquarter() == 0){
  519.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('userFrom'));
  520.                     }
  521.                 default: break;
  522.             }
  523.             if($warehouse->getId() == $formSend->get('warehouse')->getData()->getId()){
  524.                 $valid false;
  525.                 $formSend->get('warehouse')->addError(new FormError("Il magazzino di destinazione non può essere lo stesso del magazzino di invio."));
  526.             }
  527.             if($valid && $formSend->isValid()){
  528.                 $warehouseTo $formSend->get('warehouse')->getData();
  529.                 $transferSend->setDatetimeCreation(new \Datetime());
  530.                 $transferSend->setPhase('inserted');
  531.                 $transferSend->setWarehouseFrom($warehouse);
  532.                 $transferSend->setWarehouseTo($warehouseTo);
  533.                 switch($formSend->get('type')->getData()){
  534.                     case 'main'
  535.                         if($warehouse->isHeadquarter() == && $this->getUser()->getAccountTypology() != 'technician')
  536.                             $transferSend->setUserFrom($formSend->get('userFrom')->getData());
  537.                         else
  538.                             $transferSend->setUserFrom($this->getUser());
  539.                         break;
  540.                     case 'technician':
  541.                         $transferSend->setUserTo($formSend->get('userTo')->getData());
  542.                         if($warehouse->isHeadquarter() == 0){
  543.                             $transferSend->setUserFrom($this->getUser());
  544.                         }
  545.                         break;
  546.                     default: break;
  547.                 }
  548.                 $em->persist($transferSend);
  549.                 $em->flush();
  550.                 if($formSend->get('productRequestId')->getData() != null)
  551.                     $session->set('productRequestId'$formSend->get('productRequestId')->getData());
  552.                 $session->set('transferId'$transferSend->getId());
  553.                 $session->set('transferStocksIds'$formSend->get('sendStocksIds')->getData());
  554.                 $session->set('action_edit'false);
  555.                 return $this->redirectToRoute('user_warehouse_transfer_send', array('warehouseId' => $warehouse->getId(), 'transferId' => $transferSend->getId()));
  556.             }
  557.             else{
  558.                 $session->set('openTransferSendModal'true);
  559.             }
  560.         }
  561.         // PRODUCT REQUEST
  562.         $productConditions = array();
  563.         $conditions $em->getRepository('App\Entity\Slave\ProductCondition')->findAll();
  564.         $insertedProductRequests null;
  565.         $takeChargeProductRequests null;
  566.         $completedProductRequests null;
  567.         switch($this->getUser()->getAccountTypology()){
  568.             case 'administration':
  569.             case 'agency':
  570.             case 'commercial':
  571.             case 'warehouse':
  572.                 foreach($conditions as $condition)
  573.                     array_push($productConditions$condition);
  574.                 break;
  575.             case 'technician':
  576.                 $conditionsIds explode(','$settingWarehouseProductConditions->getValue());
  577.                 foreach($conditionsIds as $conditionId){
  578.                     $condition $em->getRepository('App\Entity\Slave\ProductCondition')->findOneById($conditionId);
  579.                     array_push($productConditions$condition);
  580.                 }
  581.                 break;
  582.             default: break;
  583.         }
  584.         if($warehouse->isHeadquarter()){
  585.             $insertedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true$warehouse->getId(), 'inserted'$filters);
  586.             $insertedProductRequests $paginator->paginate($insertedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  587.             $takeChargeProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true$warehouse->getId(), 'take_charge'$filters);
  588.             $takeChargeProductRequests $paginator->paginate($takeChargeProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  589.             
  590.             $completedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true$warehouse->getId(), 'completed'$filters);
  591.             $completedProductRequests $paginator->paginate($completedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  592.         }
  593.         else{
  594.             $insertedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true$warehouse->getId(), 'inserted'$filters);
  595.             $insertedProductRequests $paginator->paginate($insertedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  596.             
  597.             $takeChargeProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true$warehouse->getId(), 'take_charge'$filters);
  598.             $takeChargeProductRequests $paginator->paginate($takeChargeProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  599.             
  600.             $completedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true$warehouse->getId(), 'completed'$filters);
  601.             $completedProductRequests $paginator->paginate($completedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  602.         }
  603.         return $this->render('role/user/warehouse/sheet.html.twig', array(
  604.             'company' => $company,
  605.             'settingRegisterStock' => $settingRegisterStock,
  606.             'settingRecoverStock' => $settingRecoverStock,
  607.             'settingDdtMandatory' => $settingDdtMandatory,
  608.             'warehouse' => $warehouse,
  609.             'productConditions' => $productConditions,
  610.             'suppliers' => $suppliers,
  611.             'productModels' => $productModels,
  612.             'toManageProducts' => $toManageProducts,
  613.             'availableProducts' => $availableProducts,
  614.             'notAvailableProducts' => $notAvailableProducts,
  615.             'transferProducts' => $transferProducts,
  616.             'filters' => $filters,
  617.             'incomingTransfers' => $incomingTransfers,
  618.             'outputTransfers' => $outputTransfers,
  619.             'insertedProductRequests' => $insertedProductRequests,
  620.             'takeChargeProductRequests' => $takeChargeProductRequests,
  621.             'completedProductRequests' => $completedProductRequests,
  622.             "formEdit" => $formEdit->createView(),
  623.             'formInventory' => $formInventory->createView(),
  624.             'formReceive' => $formReceive->createView(),
  625.             'formSend' => $formSend->createView()
  626.         ));
  627.     }
  628.     // SCORTE
  629.         /**
  630.          * @Route("/{warehouseId}/scheda/scorte/selezione-multipla-azione", name="user_warehouse_stock_multiple_select_action")
  631.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  632.          */
  633.         public function userWarehouseStockMultipleSelectAction($warehouseIdRequest $request)
  634.         {    
  635.             $em $this->mr->getManager('slave');
  636.             $session $request->getSession();
  637.             $productIds explode(','$request->request->get('ids'));
  638.             switch($request->request->get('action')){
  639.                 case 'managed':
  640.                     $session->set('user_warehouse_stock_multiple_selection_tab''to_manage');
  641.                     foreach($productIds as $id){
  642.                         $product $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
  643.                         $oldStatus $product->getStatus();
  644.                         $product->setToManage(false);
  645.                         $product->setToManagePriority(0);
  646.                         $newStatus ProductService::getStatusByCondition($em$product->getCondition());
  647.                         if($oldStatus->getId() != $newStatus->getId()){
  648.                             ProductService::createProductLog($em$product$this->getUser(), 'status'$newStatus->getValue(), null$oldStatus->getId());
  649.                             $product->setStatus($newStatus);
  650.                         }
  651.                     }
  652.                     $this->addFlash('notice_success''Scorte gestite!');
  653.                     break;
  654.                 case 'supplier':
  655.                     $session->set('user_warehouse_stock_multiple_selection_tab''to_manage');
  656.                     $allSuppliers $em->getRepository('App\Entity\Slave\Supplier')->findAllActiveOrdered();
  657.                     $selectedSuppliers = array();
  658.                     foreach($allSuppliers as $s){
  659.                         if($request->request->get('supplier_'.$s->getId()) == 'on')
  660.                             array_push($selectedSuppliers$s);
  661.                     }
  662.                     foreach($productIds as $id){
  663.                         $product $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
  664.                         foreach($selectedSuppliers as $s){
  665.                             if(!$product->hasSupplier($s))
  666.                                 $product->addSupplier($s);
  667.                         }
  668.                     }
  669.                     $this->addFlash('notice_success''Fornitori dei prodotti aggiornati!');
  670.                     break;
  671.                 case 'condition':
  672.                     $session->set('user_warehouse_stock_multiple_selection_tab'$request->request->get('tab'));
  673.                     $productCondition $em->getRepository('App\Entity\Slave\ProductCondition')->findOneById($request->request->get('productCondition'));
  674.                     foreach($productIds as $id){
  675.                         $product $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
  676.                         if($product->getStatus()->getSlug() != 'transfer' && $product->getStatus()->getSlug() != 'in_use'){
  677.                             ProductService::productChangeCondition($em$this->getUser(), $product$productCondition);
  678.                             $product->setToManage(false);
  679.                             $product->setToManagePriority(2);
  680.                         }
  681.                     }
  682.                     $this->addFlash('notice_success''Condizione scorte aggiornata!');
  683.                     break;
  684.                 default: break;
  685.             }
  686.             $em->flush();
  687.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  688.         }
  689.         
  690.         /**
  691.          * @Route("/{warehouseId}/scheda/scorte/registra", name="user_warehouse_stocks_register")
  692.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  693.          */
  694.         public function userWarehouseStocksRegister($warehouseIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  695.         {    
  696.             $em $this->mr->getManager('slave');
  697.             $session $request->getSession();
  698.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  699.             $register = new ProductRegister();
  700.             $form $formFactory->createNamed("form_register"ProductRegisterType::class, $register);
  701.             $form->handleRequest($request);
  702.             
  703.             if($form->isSubmitted()){
  704.                 [$valid$methodRegister$errorMsg] = FormValidatorService::validateProductRegister($em$validator$form);
  705.                 if($valid && $form->isValid()){
  706.                     
  707.                     $arrayProducerCodes = array();
  708.                     $arraySupplierCodes = array();
  709.                     $countProductsUpdated 0;
  710.                     $countProductsNew 0;
  711.                     $countProductsDouble 0;
  712.                     $productsUpdatedMats "";
  713.                     $productsDoubleMats "";
  714.                     $status ProductService::getStatusByCondition($em$form->get('condition')->getData());
  715.                     if($methodRegister == 'gun'){
  716.                         // IMPORTAZIONE TRAMITE SPARO
  717.                         foreach($form->get('products')->getData() as $prod){
  718.                             if(!($prod->getCodeProducer() == null && $prod->getCodeSupplier() == null)){
  719.                                 [$product$arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats] = $this->registerReceiveProducts($em$warehouse$status$form$prod->getCodeProducer(), $prod->getCodeSupplier(), $arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats);
  720.                             }
  721.                         }
  722.                     }
  723.                     else{
  724.                         // IMPORTAZIONE TRAMITE FILE
  725.                         $result ProductService::checkProducts($form->get('file')->getData(), $form->get('separator')->getData());
  726.                         
  727.                         if($result['error'] != null){
  728.                             $this->addFlash('notice_danger'$result['msg']);
  729.                             return $this->redirect($request->server->get('HTTP_REFERER'));
  730.                         }
  731.                         else{
  732.                             $row 0;
  733.                             if(($handle fopen($form->get('file')->getData(), "r")) !== FALSE) {
  734.                                 while(($data fgetcsv($handle1000$form->get('separator')->getData())) !== FALSE) {
  735.                                     $data array_map("utf8_encode"$data);
  736.                                     if($row 0){
  737.                                         if(!($data[0] == null && $data[1] == null)){
  738.                                             [$product$arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats] = $this->registerReceiveProducts($em$warehouse$status$form$data[0], $data[1], $arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats);
  739.                                         }
  740.                                     }
  741.                                     $row++;
  742.                                 }
  743.                                 fclose($handle);
  744.                             }
  745.                         }
  746.                     }
  747.                     $em->flush();
  748.                     $this->addFlash('notice_success''<br>Prodotti nuovi inseriti: '.$countProductsNew.'<br>Prodotti aggiornati: '.$countProductsUpdated.$productsUpdatedMats.'<br>Prodotti doppi ignorati: '.$countProductsDouble.$productsDoubleMats);
  749.                     if($request->request->get('submit_action') == 'list')
  750.                         return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  751.                     elseif($request->request->get('submit_action') == 'add')
  752.                         return $this->redirectToRoute('user_warehouse_stocks_register', array('warehouseId' => $warehouse->getId()));
  753.                 }
  754.                 else{
  755.                     if($errorMsg != ''){
  756.                         $this->addFlash('notice_danger'$errorMsg);
  757.                     }
  758.                 }
  759.             }
  760.             
  761.             return $this->render('role/user/warehouse/stocks_register.html.twig', array(
  762.                 "form" => $form->createView(),
  763.                 'warehouse' => $warehouse
  764.             ));
  765.         }
  766.         
  767.         /**
  768.          * @Route("/{warehouseId}/scheda/scorte/rientra", name="user_warehouse_stocks_recover")
  769.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  770.          */
  771.         public function userWarehouseStocksRecover($warehouseIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  772.         {    
  773.             $em $this->mr->getManager('slave');
  774.             $session $request->getSession();
  775.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  776.             $productsIdsToRecover = array();
  777.             $countMoved 0;
  778.             $error "";
  779.             $recover = new ProductRecover();
  780.             $form $formFactory->createNamed("form_recover"ProductRecoverType::class, $recover);
  781.             $form->handleRequest($request);
  782.             
  783.             if($form->isSubmitted()){
  784.                 if($form->get('gunOrImport')->getData())
  785.                     $methodRegister 'import';
  786.                 else
  787.                     $methodRegister 'gun';
  788.                 $valid true;
  789.                 if($methodRegister == 'gun'){
  790.                     // IMPORTAZIONE TRAMITE SPARO
  791.                     if(sizeof($form->get('products')->getData()) <= 0){
  792.                         $valid false;
  793.                         $form->get('products')->addError(new FormError('Inserire almeno una matricola prodotto!'));
  794.                     }
  795.                 }
  796.                 else{
  797.                     // IMPORTAZIONE TRAMITE FILE
  798.                     $valid ValidationService::validateFile($validator$form->get('filePath'), true$form->get('file')->getData(), '10', array('csv''txt'));
  799.                 }
  800.                 if($valid && $form->isValid()){
  801.                     
  802.                     if($methodRegister == 'gun'){
  803.                         foreach($form->get('products')->getData() as $prod){
  804.                             $product $em->getRepository('App\Entity\Slave\Product')->findOneById($prod->getId());
  805.                             if($product != null)
  806.                                 array_push($productsIdsToRecover$product->getId());
  807.                         }
  808.                     }
  809.                     else{
  810.                         $row 0;
  811.                         if(($handle fopen($form->get('file')->getData(), "r")) !== FALSE) {
  812.                             while(($data fgetcsv($handle1000$form->get('separator')->getData())) !== FALSE) {
  813.                                 $data array_map("utf8_encode"$data);
  814.                                 if($row 0){
  815.                                     if(!($data[0] == null && $data[1] == null)){
  816.                                         $product null;
  817.                                         if($product == null && $data[0] != null$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $data[0]));
  818.                                         if($product == null && $data[1] != null$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $data[1]));
  819.                                         if($product != null){
  820.                                             if($product->getStatus()->getSlug() == 'transfer'){
  821.                                                 $error.= '<br>Errore alla riga '.($row 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché in fase "In trasferimento"';
  822.                                             }
  823.                                             if($product->getStatus()->getSlug() == 'in_use'){
  824.                                                 $error.= '<br>Errore alla riga '.($row 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché uso da un cliente';
  825.                                             }
  826.                                             if($product->getCondition()->getSlug() == 'historic'){
  827.                                                 $error '<br>Errore alla riga '.($row 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché in una destinazione esterna';
  828.                                             }
  829.                                             array_push($productsIdsToRecover$product->getId());
  830.                                         }
  831.                                         else{
  832.                                             if($data[0] != null)
  833.                                                 $code $data[0];
  834.                                             else
  835.                                                 $code $data[1];
  836.                                             $error.= '<br>Errore alla riga '.($row 1).' -> Non Ã¨ stato trovato alcun prodotto con codice '.$code;
  837.                                         }
  838.                                     }
  839.                                 }
  840.                                 $row++;
  841.                             }
  842.                             fclose($handle);
  843.                             if($error != ""){
  844.                                 $this->addFlash('notice_warning'"Errori rilevati:".$error);
  845.                                 return $this->redirectToRoute('user_warehouse_stocks_recover', array('warehouseId' => $warehouse->getId()));
  846.                             }
  847.                         }
  848.                     }
  849.                     
  850.                     // Scorro l'array di ProductIds e li rientro
  851.                     $statusNotAvailable $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(['slug' => 'not_available']);
  852.                     foreach($productsIdsToRecover as $ptrId){
  853.                         $ptr $em->getRepository('App\Entity\Slave\Product')->findOneById($ptrId);
  854.                         $oldStatusId $ptr->getStatus()->getId();
  855.                         if($statusNotAvailable->getId() != $oldStatusId){
  856.                             ProductService::createProductLog($em$ptr$this->getUser(), 'status'$statusNotAvailable->getValue(), null$oldStatusId);
  857.                             $ptr->setStatus($statusNotAvailable);
  858.                         }
  859.                         if($ptr->getActualWarehouse()->getId() != $warehouse->getId()){
  860.                             ProductService::createProductTransferLog($em$ptrnull$this->getUser(), $warehouse, new \Datetime(), 'forced');
  861.                             $ptr->setActualWarehouse($warehouse);
  862.                         }
  863.                         $ptr->setDateLastTransfer(new \Datetime());
  864.                         $ptr->setToManage(true);
  865.                         $ptr->setToManagePriority(2);
  866.                         $countMoved++;
  867.                     }
  868.                     $em->flush();
  869.                     $this->addFlash('notice_success''<br>Prodotti spostati: '.$countMoved);
  870.                     return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  871.                 }
  872.             }
  873.             
  874.             return $this->render('role/user/warehouse/stocks_recover.html.twig', array(
  875.                 "form" => $form->createView(),
  876.                 'warehouse' => $warehouse
  877.             ));
  878.         }
  879.         /**
  880.          * @Route("/{warehouseId}/scheda/scorte/rientra-cerca", name="user_warehouse_stocks_recover_search")
  881.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  882.          */
  883.         public function userWarehouseStocksRecoverSearch($warehouseIdRequest $request)
  884.         {
  885.             $em $this->mr->getManager('slave');
  886.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  887.             $productCode $request->request->get('productCode');
  888.             $codeType $request->request->get('codeType');
  889.             $product null;
  890.             $error 'Il prodotto con il codice "'.$productCode.'" non Ã¨ stato trovato!';
  891.             $errorRead 'Il prodotto non Ã¨ stato trovato!';
  892.             $found false;
  893.             $product false;
  894.             if($productCode != null){
  895.                 switch($codeType){
  896.                     case 'producer'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeProducer' => $productCode]); break;
  897.                     case 'supplier'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeSupplier' => $productCode]); break;
  898.                     default: break;
  899.                 }
  900.             }
  901.             if($product != null){
  902.                 if($product->getStatus()->getSlug() == 'transfer'){
  903.                     $error 'Impossibile spostare un prodotto in fase "In trasferimento"';
  904.                     $errorRead $error;
  905.                     return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  906.                 }
  907.                 if($product->getStatus()->getSlug() == 'in_use'){
  908.                     $error 'Impossibile spostare un prodotto in uso da un cliente';
  909.                     $errorRead $error;
  910.                     return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  911.                 }
  912.                 if($product->getCondition()->getSlug() == 'historic'){
  913.                     $error 'Impossibile spostare un prodotto in una destinazione esterna';
  914.                     $errorRead $error;
  915.                     return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  916.                 }
  917.                 $found true;
  918.                     
  919.                 $json '{
  920.                     "id":"'.$product->getId().'", 
  921.                     "codeProducer":"'.$product->getCodeProducer().'", 
  922.                     "codeSupplier":"'.$product->getCodeSupplier().'",
  923.                     "model":"'.$product->getModel()->getName().'",
  924.                     "condition":"'.$product->displayCondition('string-short').'", 
  925.                     "suppliers":"'.$product->displayStringSuppliers().'", 
  926.                     "warehouseNickname":"'.$product->getActualWarehouse()->__toString().'"}';
  927.                 return new Response(json_encode(array("code" => 200"success" => true"found" => $found'product' => $json)));
  928.             }
  929.             return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  930.         }
  931.         
  932.         /**
  933.          * @Route("/{warehouseId}/scheda/scorte/rientra-sposta-prodotto", name="user_warehouse_stocks_recover_move_product")
  934.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  935.          */
  936.         public function userWarehouseStocksRecoverMoveProduct($warehouseIdRequest $request)
  937.         {
  938.             $em $this->mr->getManager('slave');
  939.             $session $request->getSession();
  940.             $product $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
  941.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  942.             ProductService::createProductTransferLog($em$productnull$this->getUser(), $warehouse, new \Datetime(), 'manual');                
  943.             $product->setActualWarehouse($warehouse);
  944.             $product->setDateLastTransfer(new \Datetime);
  945.             $em->flush();
  946.             return new Response(json_encode(array("code" => 200"success" => true)));
  947.         }
  948.         
  949.         /**
  950.          * @Route("/{warehouseId}/scheda/scorte/inventario", name="user_warehouse_stock_inventory")
  951.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  952.          */
  953.         public function userWarehouseStockInventory($warehouseIdRequest $request)
  954.         {    
  955.             $em $this->mr->getManager('slave');
  956.             $session $request->getSession();
  957.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  958.             $supplier $em->getRepository("App\Entity\Slave\Supplier")->findOneById($session->get('inventorySupplierId'));
  959.             $status $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($session->get('inventoryStatusId'));
  960.             return $this->render('role/user/warehouse/inventory.html.twig', array(
  961.                 'warehouse' => $warehouse,
  962.                 'supplier' => $supplier,
  963.                 'status' => $status,
  964.                 'results' => $session->get('inventoryResults')
  965.             ));
  966.         }
  967.         
  968.         /**
  969.          * @Route("/{warehouseId}/scheda/scorte/inventario-esporta", name="user_warehouse_stock_inventory_export")
  970.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  971.          */
  972.         public function userWarehouseStockInventoryExport($warehouseIdRequest $request)
  973.         {    
  974.             $em $this->mr->getManager('slave');
  975.             $session $request->getSession();
  976.             $results $session->get('inventoryResults');
  977.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  978.             $supplier $em->getRepository("App\Entity\Slave\Supplier")->findOneById($session->get('inventorySupplierId'));
  979.             $status $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($session->get('inventoryStatusId'));
  980.     
  981.             $response = new StreamedResponse();
  982.             $response->setCallback(function() use($results$warehouse$supplier$status) {
  983.                 $handle fopen('php://output''w+');
  984.                 fputcsv($handle, array('Magazzino',$warehouse->getNickname(),'','',''), ";"'"'"\\");
  985.                 fputcsv($handle, array('Fornitore',$supplier->getName(),'','',''), ";"'"'"\\");
  986.                 fputcsv($handle, array('Stato',$status->getValue(),'','',''), ";"'"'"\\");
  987.                 fputcsv($handle, array('Modello''Matricola produttore','Matricola fornitore','Magazzino attuale','Errore''Ultimo trasferimento'), ";"'"'"\\");
  988.                 foreach($results as $r){
  989.                     fputcsv($handle, array($r[2], $r[3], $r[4], $r[5], $r[6], $r[7]), ";"'"'"\\");
  990.                 }
  991.                 fclose($handle);
  992.             });
  993.             
  994.             $response->setStatusCode(200);
  995.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$warehouse->getNickname().' - Inventario.csv');
  996.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  997.             $response->headers->set('Content-Disposition'$dispositionHeader);
  998.             return $response;
  999.         }
  1000.     //
  1001.     // TRASFERIMENTI
  1002.         /**
  1003.          * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/riprendi", name="user_warehouse_transfer_resume")
  1004.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1005.          */
  1006.         public function userWarehouseTransferSelect(Request $request$warehouseId$transferId)
  1007.         {
  1008.             $em $this->mr->getManager('slave');
  1009.             $session $request->getSession();
  1010.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1011.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1012.             if($transfer->getWarehouseTo()->getId() == $warehouse->getId()){
  1013.                 return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1014.             }
  1015.             elseif($transfer->getWarehouseFrom()->getId() == $warehouse->getId()){
  1016.                 $session->set('action_edit'true);
  1017.                 return $this->redirectToRoute('user_warehouse_transfer_send', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1018.             }
  1019.         }
  1020.         /**
  1021.          * @Route("/{warehouseId}/scheda/trasferimento/elimina", name="user_warehouse_transfer_delete")
  1022.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1023.          */
  1024.         public function userWarehouseTransferDelete($warehouseIdRequest $request)
  1025.         {    
  1026.             $em $this->mr->getManager('slave');
  1027.             $session $request->getSession();
  1028.             $transfer $em->getRepository("App\Entity\Slave\ProductTransfer")->findOneById($request->request->get("transferDelId"));
  1029.             foreach($transfer->getProducts() as $jtppt){
  1030.                 $status ProductService::getStatusByCondition($em$jtppt->getProduct()->getCondition());
  1031.                 ProductService::createProductLog($em$jtppt->getProduct(), $this->getUser(), 'status'$status->getValue(), null$jtppt->getProduct()->getStatus()->getId());
  1032.                 $jtppt->getProduct()->setStatus($status);
  1033.                 $em->remove($jtppt);
  1034.             }
  1035.             $em->remove($transfer);
  1036.             $em->flush();
  1037.             $this->addFlash('notice_success'"Trasferimento eliminato");
  1038.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  1039.         }
  1040.         /**
  1041.          * @Route("/{warehouseId}/scheda/trasferimento-aggiorna-magazzini", name="user_warehouse_transfer_update_warehouses")
  1042.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1043.          */
  1044.         public function userWarehouseTransferUpdateWarehouses($warehouseIdRequest $request)
  1045.         {    
  1046.             $em $this->mr->getManager('slave');
  1047.             $type $request->request->get("type");
  1048.             switch($type){
  1049.                 case 'technician'$warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesTechnicians($warehouseId); break;
  1050.                 case 'destination'$warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesDestinations(); break;
  1051.                 case 'main'$warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findHeadquarterWarehouses(); break;
  1052.                 default: break;
  1053.             }
  1054.             $first true;
  1055.             $json "[";
  1056.             foreach($warehouses as $w){
  1057.                 if($first$first false; else $json.= ',';
  1058.                 $json.= '{"id":'.$w->getId().', "nickname":"'.$w->getNickname().'"}';
  1059.             }
  1060.             $json.= "]";
  1061.         
  1062.             return new Response(json_encode(array("code" => 200"success" => true"warehouses" => $json))); 
  1063.         }
  1064.         /**
  1065.          * @Route("/{warehouseId}/scheda/trasferimento-aggiorna-magazzini-tecnico", name="user_warehouse_transfer_update_technician_warehouses")
  1066.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1067.          */
  1068.         public function userWarehouseTransferUpdateTechnicianWarehouses($warehouseIdRequest $request)
  1069.         {    
  1070.             $em $this->mr->getManager('slave');
  1071.             $technicianId $request->request->get("technicianId");
  1072.             $technician $em->getRepository('App\Entity\Slave\User')->findOneById($technicianId);
  1073.             $first true;
  1074.             $json "[";
  1075.             foreach($technician->getWarehouses() as $jt){
  1076.                 if($jt->getPermission() == "RW"){
  1077.                     if($first$first false; else $json.= ',';
  1078.                     $json.= '{"id":'.$jt->getWarehouse()->getId().', "nickname":"'.$jt->getWarehouse()->getNickname().'"}';
  1079.                 }
  1080.             }
  1081.             $json.= "]";
  1082.         
  1083.             return new Response(json_encode(array("code" => 200"success" => true"warehouses" => $json))); 
  1084.         }
  1085.         /**
  1086.          * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scheda", name="user_warehouse_transfer_sheet")
  1087.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId) || is_granted('transfer_edit', transferId)")
  1088.          */
  1089.         public function userWarehouseTransferSheet($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactoryFileSystem $fs)
  1090.         {    
  1091.             $em $this->mr->getManager('slave');
  1092.             $emMaster $this->mr->getManager('master');
  1093.             $session $request->getSession();
  1094.             $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1095.             $warehouse $em->getRepository('App\Entity\Slave\Warehouse')->findOneById($warehouseId);
  1096.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1097.             $transferType $transfer->getType();
  1098.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1099.             $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1100.             $session->remove('productRequestId');
  1101.             // RESETTO VARIABILI STAMPA
  1102.             $session->remove('ddtHeader');
  1103.             $session->remove('port');
  1104.             $session->remove('ddtCausal');
  1105.             $session->remove('appearance');
  1106.             $session->remove('numberGoods');
  1107.             $session->remove('weight');
  1108.             $session->remove('transport');
  1109.             $session->remove('courier');
  1110.             $session->remove('courierId');
  1111.             $session->remove('notes');
  1112.                     
  1113.             $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1114.             
  1115.             // EDIT TRANSFER DATA
  1116.             $formEdit $formFactory->createNamed("form_transfer_edit"ProductTransferEditType::class, $transfer);
  1117.             $formEdit->handleRequest($request);
  1118.             
  1119.             if($formEdit->isSubmitted()){
  1120.                 $valid true;
  1121.                 // Da destinazione a sede centrale
  1122.                 if($transfer->getType() == 'destination' && $transfer->getWarehouseTo()->getId() == $warehouse->getId() && $formEdit->get('ddtMandatory')->getData()){
  1123.                     if($valid$valid ValidationService::validateNotBlank($validator$formEdit->get('ddt'));
  1124.                     if($valid && $formEdit->get('file')->getData() != null$valid ValidationService::validateFile($validator$formEdit->get('signedDdtPath'), true$formEdit->get('file')->getData(), '10', array('pdf''jpg''jpeg''png'));
  1125.                 }
  1126.                 if($valid && $formEdit->isValid()){
  1127.                     
  1128.                     // Da destinazione a sede centrale
  1129.                     if($transfer->getType() == 'destination' && $transfer->getWarehouseTo()->getId() == $warehouse->getId()){
  1130.                         $transfer->setDdtMandatory($formEdit->get('ddtMandatory')->getData());
  1131.                         if($formEdit->get('ddtMandatory')->getData()){
  1132.                             $transfer->setDdt($formEdit->get('ddt')->getData());
  1133.                             if($formEdit->get('file')->getData() != null)
  1134.                                 MediaService::uploadDocument($formEdit->get('file')->getData(), $uploadDir$transfer'signedDdt');
  1135.                         }
  1136.                     }
  1137.                     if($transfer->getType() == 'technician'){
  1138.                         $transfer->setDdtMandatory($formEdit->get('ddtMandatory')->getData());
  1139.                         if($transfer->getPhase() == 'inserted' || $transfer->getPhase() == 'inserted_editable'){
  1140.                             $transfer->setUserTo($formEdit->get('userTo')->getData());
  1141.                             $transfer->setWarehouseTo($formEdit->get('warehouse')->getData());
  1142.                         }
  1143.                     }
  1144.                     $em->flush();
  1145.                     return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1146.                 }
  1147.                 else{
  1148.                     $session->set('openEditModal'true);
  1149.                 }
  1150.             }            
  1151.             // UPLOAD DDT
  1152.             $formDdt $formFactory->createNamed("form_transfer_ddt"ProductTransferDdtType::class, $transfer);
  1153.             $formDdt->handleRequest($request);
  1154.             
  1155.             if($formDdt->isSubmitted()){
  1156.                 $valid ValidationService::validateFile($validator$formDdt->get('ddtPath'), true$formDdt->get('file')->getData(), '10',array('pdf''jpg''jpeg''png'));
  1157.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1158.                 if($valid && $formDdt->isValid()){
  1159.                     
  1160.                     if($formDdt->get('file')->getData() != null){
  1161.                         if($formDdt->get('file')->getData()->guessExtension() == 'pdf')
  1162.                             MediaService::uploadDocument($formDdt->get('file')->getData(), $uploadDir$transfer'signedDdt');
  1163.                         else
  1164.                             MediaService::uploadImage($fs$formDdt->get('file')->getData(), null$uploadDir$transfer'signedDdt'1001000200false);
  1165.                     }
  1166.                     $transfer->setPhaseDdt('completed');
  1167.                    
  1168.                     $conditionHistoric $em->getRepository('App\Entity\Slave\ProductCondition')->findOneBySlug('historic');
  1169.                     $statusNotAvailable $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBySlug('not_available');
  1170.                     foreach($transfer->getProducts() as $jtppt){
  1171.                         $product $jtppt->getProduct();
  1172.                         ProductService::createProductTransferLog($em$product$jtppt->getTransfer(), $this->getUser(), null, new \Datetime(), 'scan');
  1173.                         ProductService::moveProductTransfer($em$jtppt$this->getUser(), $statusNotAvailable);
  1174.                         ProductService::createProductLog($em$product$this->getUser(), 'condition'$conditionHistoric->getValue(), null$product->getCondition()->getId());
  1175.                         $product->setCondition($conditionHistoric);
  1176.                     }
  1177.                     $transfer->setPhase('completed');
  1178.                     $transfer->setDatetimeCompletion(new \Datetime());
  1179.                     $this->addFlash('notice_success'"Consegna registrata!");
  1180.                     $em->flush();
  1181.                     return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1182.                 }
  1183.             }
  1184.             
  1185.             // CHANGE UPLOADED DDT
  1186.             $formChangeDdt $formFactory->createNamed("form_transfer_change_ddt"ProductTransferDdtType::class, $transfer);
  1187.             $formChangeDdt->handleRequest($request);
  1188.             
  1189.             if($formChangeDdt->isSubmitted()){
  1190.                 $valid ValidationService::validateFile($validator$formChangeDdt->get('ddtPath'), true$formChangeDdt->get('file')->getData(), '10',array('pdf''jpg''jpeg''png'));
  1191.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1192.                 if($valid && $formChangeDdt->isValid()){
  1193.                     
  1194.                     if($formChangeDdt->get('file')->getData() != null){
  1195.                         MediaService::removeDocument($fs$transfer->getSignedDdtPath(), $uploadDir);
  1196.                         if($formChangeDdt->get('file')->getData()->guessExtension() == 'pdf')
  1197.                             MediaService::uploadDocument($formChangeDdt->get('file')->getData(), $uploadDir$transfer'signedDdt');
  1198.                         else
  1199.                             MediaService::uploadImage($fs$formChangeDdt->get('file')->getData(), null$uploadDir$transfer'signedDdt'1001000200false);
  1200.                     }
  1201.                                         
  1202.                     $transfer->setPhaseDdt('completed');
  1203.                     $em->flush();
  1204.                     $this->addFlash('notice_success'"DDT caricato!");
  1205.                     return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1206.                 }
  1207.             }
  1208.             
  1209.             return $this->render('role/user/warehouse/transfer/sheet.html.twig', array(
  1210.                 'company' => $company,
  1211.                 'warehouse' => $warehouse,
  1212.                 'transfer' => $transfer,
  1213.                 'transferType' => $transferType,
  1214.                 'transferInternalDdtActive' => $transferInternalDdtActive,
  1215.                 'formEdit' => $formEdit->createView(),
  1216.                 'formDdt' => $formDdt->createView(),
  1217.                 'formChangeDdt' => $formChangeDdt->createView()
  1218.             ));
  1219.         }
  1220.         // RICEVI
  1221.             /**
  1222.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/ricevi", name="user_warehouse_transfer_receive")
  1223.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1224.              */
  1225.             public function userWarehouseTransferReceive($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1226.             {    
  1227.                 $em $this->mr->getManager('slave');
  1228.                 $session $request->getSession();
  1229.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1230.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1231.                 $transferType $transfer->getType();
  1232.                 $register = new ProductRegister();
  1233.                 $form $formFactory->createNamed("form_transfer_receive"ProductRegisterType::class, $register);
  1234.                 $form->handleRequest($request);
  1235.                 
  1236.                 if($form->isSubmitted()){
  1237.                     [$valid$methodRegister$errorMsg] = FormValidatorService::validateProductReceive($em$validator$form$transferType);
  1238.                     if($valid && $form->isValid()){
  1239.                         
  1240.                         $arrayProducerCodes = array();
  1241.                         $arraySupplierCodes = array();
  1242.                         $countProductsUpdated 0;
  1243.                         $countProductsNew 0;
  1244.                         $countProductsDouble 0;
  1245.                         $productsUpdatedMats "";
  1246.                         $productsDoubleMats "";
  1247.                         $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'transfer'));
  1248.                         $transfer->setPhase('product_insert');
  1249.                         if($methodRegister == 'gun'){
  1250.                             // IMPORTAZIONE TRAMITE SPARO
  1251.                             foreach($form->get('products')->getData() as $prod){
  1252.                                 if(!($prod->getCodeProducer() == null && $prod->getCodeSupplier() == null)){
  1253.                                     [$product$arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats] = $this->registerReceiveProducts($em$warehouse$status$form$prod->getCodeProducer(), $prod->getCodeSupplier(), $arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats);
  1254.                                     ProductService::createJtProductTransfer($em$product$transfer, new \Datetime());
  1255.                                 }
  1256.                             }
  1257.                         }
  1258.                         else{
  1259.                             // IMPORTAZIONE TRAMITE FILE
  1260.                             $result ProductService::checkProducts($form->get('file')->getData(), $form->get('separator')->getData());
  1261.                             
  1262.                             if($result['error'] != null){
  1263.                                 $this->addFlash('notice_danger'$result['msg']);
  1264.                                 return $this->redirect($request->server->get('HTTP_REFERER'));
  1265.                             }
  1266.                             else{
  1267.                                 $row 0;
  1268.                                 if(($handle fopen($form->get('file')->getData(), "r")) !== FALSE) {
  1269.                                     while(($data fgetcsv($handle1000$form->get('separator')->getData())) !== FALSE) {
  1270.                                         $data array_map("utf8_encode"$data);
  1271.                                         if($row 0){
  1272.                                             if(!($data[0] == null && $data[1] == null)){
  1273.                                                 [$product$arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats] = $this->registerReceiveProducts($em$warehouse$status$form$data[0], $data[1], $arrayProducerCodes$arraySupplierCodes$countProductsUpdated$countProductsNew$countProductsDouble$productsUpdatedMats$productsDoubleMats);
  1274.                                                 ProductService::createJtProductTransfer($em$product$transfer, new \Datetime());
  1275.                                             }
  1276.                                         }
  1277.                                         $row++;
  1278.                                     }
  1279.                                     fclose($handle);
  1280.                                 }
  1281.                             }
  1282.                         }
  1283.                         
  1284.                         $em->flush();
  1285.                         if($request->request->get('submit_action') == 'add_products')
  1286.                             return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouse->getId(), 'transferId' => $transfer->getId()));
  1287.                         else{
  1288.                             foreach($transfer->getProducts() as $jtppt){
  1289.                                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  1290.                                 ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1291.                                 ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1292.                             }
  1293.                             $transfer->setPhase('completed');
  1294.                             $transfer->setDatetimeCompletion(new \Datetime());
  1295.                             $em->flush();
  1296.                             $this->addFlash('notice_success''<br>Prodotti nuovi inseriti: '.$countProductsNew.'<br>Prodotti aggiornati: '.$countProductsUpdated.$productsUpdatedMats.'<br>Prodotti doppi ignorati: '.$countProductsDouble.$productsDoubleMats);
  1297.                             return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1298.                         }
  1299.                     }
  1300.                     else{
  1301.                         $receiveSuppliersIds = [];
  1302.                         foreach($form->get('suppliers')->getData() as $sup){
  1303.                             array_push($receiveSuppliersIds$sup->getId());
  1304.                         }
  1305.                         $session->set('receiveSuppliersIds'$receiveSuppliersIds);
  1306.                         if($errorMsg != ''){
  1307.                             $this->addFlash('notice_danger'$errorMsg);
  1308.                         }
  1309.                     }
  1310.                 }
  1311.                 
  1312.                 return $this->render('role/user/warehouse/transfer/receive.html.twig', array(
  1313.                     'transfer' => $transfer,
  1314.                     'transferType' => $transferType,
  1315.                     'warehouse' => $warehouse,
  1316.                     "form" => $form->createView()
  1317.                 ));
  1318.             }
  1319.             /**
  1320.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/ricevi-concludi", name="user_warehouse_transfer_receive_complete")
  1321.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1322.              */
  1323.             public function userWarehouseTransferReceiveComplete($warehouseId$transferIdRequest $request)
  1324.             {    
  1325.                 $em $this->mr->getManager('slave');
  1326.                 $session $request->getSession();
  1327.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1328.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1329.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  1330.                 foreach($transfer->getProducts() as $jtppt){
  1331.                     ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1332.                     ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1333.                 }
  1334.                 $transfer->setPhase('completed');
  1335.                 $transfer->setDatetimeCompletion(new \Datetime());
  1336.                 $em->flush();
  1337.                 $this->addFlash('notice_success''Prodotti inseriti a magazzino');
  1338.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1339.             }
  1340.                         
  1341.             /**
  1342.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scarica-materiale", name="user_warehouse_transfer_download")
  1343.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1344.              */
  1345.             public function userWarehouseTransferDownload($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactoryFileSystem $fs)
  1346.             {    
  1347.                 $em $this->mr->getManager('slave');
  1348.                 $emMaster $this->mr->getManager('master');
  1349.                 $session $request->getSession();
  1350.                 $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1351.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1352.                 $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1353.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1354.                 // SCARICA MATERIALE
  1355.                 $form $formFactory->createNamed("form_transfer_download"ProductTransferDownloadType::class, $transfer, array('transferId' => $transfer->getId()));
  1356.                 $form->handleRequest($request);
  1357.                 
  1358.                 if($form->isSubmitted()){
  1359.     
  1360.                     $file $form->get('file')->getData();
  1361.                     $valid true;
  1362.                     if($transferInternalDdtActive && $transfer->isDdtMandatory()){
  1363.                         $valid ValidationService::validateFile($validator$form->get('ddtPath'), true$file10, array('pdf''jpg''jpeg''png'));
  1364.                     }
  1365.                     if($valid && $form->isValid()){
  1366.     
  1367.                         if($transferInternalDdtActive){
  1368.                             if($file != null){
  1369.                                 if($file->guessExtension() == 'pdf')
  1370.                                     MediaService::uploadDocument($file$uploadDir$transfer'signedDdt');
  1371.                                 else
  1372.                                     MediaService::uploadImage($fs$filenull$uploadDir$transfer'signedDdt'1001000200false);
  1373.                                 $transfer->setPhaseDdt('completed');
  1374.                             }
  1375.                             else{
  1376.                                 $transfer->setPhaseDdt('signed_missing');
  1377.                             }
  1378.                         }
  1379.                         $transfer->setPhase('completed');
  1380.                         $transfer->setDatetimeCompletion(new \Datetime());
  1381.                         [$status$toManage$toManagePriority] = $this->downloadSetByType($em$transfer);
  1382.                         
  1383.                         if($request->request->get('jtpptGunIds') != null){
  1384.                             $gunIds explode(','$request->request->get('jtpptGunIds'));
  1385.                             for($i 0$i sizeof($gunIds); $i++){
  1386.                                 $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($gunIds[$i]);
  1387.                                 ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1388.                                 ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1389.                                 $jtppt->setDownloadType('scan');
  1390.                                 $jtppt->getProduct()->setToManage($toManage);
  1391.                                 $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1392.                             }
  1393.                         }
  1394.                         
  1395.                         if($request->request->get('jtpptManualIds') != null){
  1396.                             $manualIds explode(','$request->request->get('jtpptManualIds'));
  1397.                             for($i 0$i sizeof($manualIds); $i++){
  1398.                                 $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($manualIds[$i]);
  1399.                                 ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1400.                                 ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'manual');
  1401.                                 $jtppt->setDownloadType('manual');
  1402.                                 $jtppt->getProduct()->setToManage($toManage);
  1403.                                 $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1404.                             }
  1405.                         }
  1406.                         $em->flush();
  1407.                         // I PRODOTTI NON SCARICATI LI RIMETTO NELLO STATO PRECEDENTE
  1408.                         foreach($transfer->getProducts() as $jtppt){
  1409.                             if(!$jtppt->isTransferOk()){
  1410.                                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
  1411.                                 ProductService::createProductLog($em$jtppt->getProduct(), $this->getUser(), 'status'$status->getValue(), null$jtppt->getProduct()->getStatus()->getId());
  1412.                                 ProductService::createProductTransferBackLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'manual');
  1413.                                 $jtppt->getProduct()->setStatus($status);
  1414.                                 if($transfer->getWarehouseFrom()->isHeadquarter()){
  1415.                                     $jtppt->getProduct()->setToManage(true);
  1416.                                     $jtppt->getProduct()->setToManagePriority('5');
  1417.                                 }
  1418.                             }
  1419.                         }
  1420.                         
  1421.                         $em->flush();
  1422.                         
  1423.                         $this->addFlash('notice_success''Trasferimento scaricato correttamente!');
  1424.                         return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1425.                     }
  1426.                     else{
  1427.                         $session->set('openModalTransferComplete'true);
  1428.                         $session->set('jtpptGunIds'$request->request->get('jtpptGunIds'));
  1429.                         $session->set('jtpptManualIds'$request->request->get('jtpptManualIds'));
  1430.                     }
  1431.                 }
  1432.                 return $this->render('role/user/warehouse/transfer/download.html.twig', array(
  1433.                     'company' => $company,
  1434.                     'transfer' => $transfer,
  1435.                     'transferInternalDdtActive' => $transferInternalDdtActive,
  1436.                     "form" => $form->createView()
  1437.                 ));
  1438.             }
  1439.             /**
  1440.              * @Route("/{warehouseId}/scheda/trasferimento/scarica-materiale/parziale", name="user_warehouse_transfer_download_partial")
  1441.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1442.              */
  1443.             public function userWarehouseTransferDownloadPartial($warehouseIdRequest $request)
  1444.             {
  1445.                 $em $this->mr->getManager('slave');
  1446.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1447.                 [$status$toManage$toManagePriority] = $this->downloadSetByType($em$transfer);
  1448.                 if($request->request->get('jtpptGunIds') != null){
  1449.                     $gunIds explode(','$request->request->get('jtpptGunIds'));
  1450.                     for($i 0$i sizeof($gunIds); $i++){
  1451.                         $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($gunIds[$i]);
  1452.                         ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1453.                         ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1454.                         $jtppt->setDownloadType('scan');
  1455.                         $jtppt->getProduct()->setToManage($toManage);
  1456.                         $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1457.                     }
  1458.                 }
  1459.                 
  1460.                 if($request->request->get('jtpptManualIds') != null){
  1461.                     $manualIds explode(','$request->request->get('jtpptManualIds'));
  1462.                     for($i 0$i sizeof($manualIds); $i++){
  1463.                         $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($manualIds[$i]);
  1464.                         ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1465.                         ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'manual');
  1466.                         $jtppt->setDownloadType('manual');
  1467.                         $jtppt->getProduct()->setToManage($toManage);
  1468.                         $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1469.                     }
  1470.                 }
  1471.                 
  1472.                 $em->flush();
  1473.                 $this->addFlash('notice_success''Trasferimento parziale effettuato!');
  1474.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1475.             }
  1476.             /**
  1477.              * @Route("/{warehouseId}/scheda/trasferimento/scarica-materiale/cerca", name="user_warehouse_transfer_download_search")
  1478.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1479.              */
  1480.             public function userWarehouseTransferDownloadSearch($warehouseIdRequest $request)
  1481.             {
  1482.                 $em $this->mr->getManager('slave');
  1483.                 $session $request->getSession();
  1484.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1485.                 $productCode $request->request->get('productCode');
  1486.                 $jtpptId null;
  1487.                 $found false;
  1488.                 foreach($transfer->getProducts() as $jtppt){
  1489.                     if($productCode == $jtppt->getProduct()->getCodeProducer() || $productCode == $jtppt->getProduct()->getCodeSupplier()){
  1490.                         $jtpptId $jtppt->getId();
  1491.                         $found true;
  1492.                         break;
  1493.                     }
  1494.                 }
  1495.                 return new Response(json_encode(array("code" => 200"success" => true"found" => $found'jtpptId' => $jtpptId)));
  1496.             }
  1497.         //
  1498.         // INVIA
  1499.             /**
  1500.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/invia", name="user_warehouse_transfer_send")
  1501.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1502.              */
  1503.             public function userWarehouseTransferSend($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1504.             {
  1505.                 $em $this->mr->getManager('slave');
  1506.                 $emMaster $this->mr->getManager('master');
  1507.                 $session $request->getSession();
  1508.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1509.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1510.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1511.                 $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1512.                 $form $formFactory->createNamed("form_transfer_send"ProductTransferSendProductsType::class, $transfer);
  1513.                 $form->handleRequest($request);
  1514.                 
  1515.                 if($form->isSubmitted()){
  1516.                     [$valid$methodRegister$errorMsg$arrayProducts] = FormValidatorService::validateProductSend($em$validator$form$warehouse);
  1517.                     // Se magazzino principale e verso destinazione esterna -> Controllo se prodotti hanno il fornitore inserito
  1518.                     if($valid && $warehouse->isHeadquarter() && $transfer->getType() == 'destination'){
  1519.                         foreach($arrayProducts as $p){
  1520.                             $suppliersIds = [];
  1521.                             foreach($p->getSuppliers() as $sup){
  1522.                                 array_push($suppliersIds$sup->getId());
  1523.                             }
  1524.                             if(!in_array($transfer->getSupplier()->getId(), $suppliersIds)){
  1525.                                 $valid false;
  1526.                                 $errorMsg 'Il prodotto '.$p.' non ha il fornitore inserito '.$transfer->getSupplier();
  1527.                                 $form->get('file')->addError(new FormError('Il prodotto '.$p.' non ha il fornitore inserito '.$transfer->getSupplier()));
  1528.                                 break;
  1529.                             }
  1530.                         }
  1531.                     }
  1532.                     if($valid && $form->isValid()){
  1533.                         // Se i controlli sono andati a buon fine -> inserisco le JoinTableProductTransfer per le righe non vuote
  1534.                         $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'transfer'));
  1535.                         foreach($arrayProducts as $product){
  1536.                             ProductService::createProductLog($em$product$this->getUser(), 'status'$status->getValue(), null$product->getStatus()->getId());
  1537.                             $product->setStatus($status);
  1538.                             ProductService::createJtProductTransfer($em$product$transfer, new \Datetime());
  1539.                         }
  1540.                         
  1541.                         if($transferInternalDdtActive || $transfer->getType() == 'destination'){
  1542.                             $transfer->setPhase('inserted_editable');
  1543.                             $transfer->setPhaseDdt('create');
  1544.                         }
  1545.                         else{
  1546.                             $transfer->setPhase('waiting_receiver');
  1547.                         }
  1548.                         $em->flush();
  1549.                         
  1550.                         $session->remove('transferStocksIds');
  1551.                         if($request->request->get('submit_action') == 'ddt')
  1552.                             return $this->redirectToRoute('user_warehouse_transfer_create_ddt', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1553.                         else
  1554.                             return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouse->getId(), 'transferId' => $transfer->getId()));
  1555.                     }
  1556.                     else{
  1557.                         $this->addFlash('notice_danger'$errorMsg);       
  1558.                         return $this->redirect($request->server->get('HTTP_REFERER'));
  1559.                     }
  1560.                 }
  1561.                 
  1562.                 return $this->render('role/user/warehouse/transfer/send.html.twig', array(
  1563.                     'company' => $company,
  1564.                     'transfer' => $transfer,
  1565.                     'warehouse' => $warehouse,
  1566.                     'transferInternalDdtActive' => $transferInternalDdtActive,
  1567.                     'actionEdit' => $session->get('action_edit'),
  1568.                     "form" => $form->createView()
  1569.                 ));
  1570.             }
  1571.             /**
  1572.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/crea-ddt", name="user_warehouse_transfer_create_ddt")
  1573.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1574.              */
  1575.             public function userWarehouseTransferCreateDdt($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1576.             {
  1577.                 $em $this->mr->getManager('slave');
  1578.                 $emMaster $this->mr->getManager('master');
  1579.                 $session $request->getSession();
  1580.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1581.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1582.                 $useCounterForTechnicians $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt_number_for_technicians'))->getValue();
  1583.                 $ddtHeaders $em->getRepository('App\Entity\Slave\DdtHeader')->findAll();
  1584.                 $products $em->getRepository('App\Entity\Slave\Product')->findByTransferOrderedByModel($transfer->getId());
  1585.                 [$arrayRows$total] = $this->createDdtProductsArray($products);
  1586.                 [$senderSupplierSlave$senderTechnician$senderWarehouseHeadquarter] = $this->searchDDTSender($em$transfer);
  1587.                 [$destinationExternal$destinationTechnician$destinationWarehouseHeadquarter] = $this->searchDDTDestination($em$transfer);
  1588.                 
  1589.                 $senderSupplier null;
  1590.                 if($senderSupplierSlave != null)
  1591.                     $senderSupplier $emMaster->getRepository('App\Entity\Master\Supplier')->findOneById($senderSupplierSlave->getIdSupplier());
  1592.                 $ddtPrint = new DdtPrint();
  1593.                 $form $formFactory->createNamed("form_ddt_print"DdtPrintType::class, $ddtPrint);
  1594.                 $form->handleRequest($request);
  1595.                 
  1596.                 if($form->isSubmitted()){
  1597.                     $valid true;
  1598.                     if($valid && $this->getUser()->getAccountTypology() != 'technician'$valid ValidationService::validateNotBlank($validator$form->get('ddtHeader'));
  1599.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('port'));
  1600.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('ddtCausal'));
  1601.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('appearance'));
  1602.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('numberGoods'));
  1603.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('weight'));
  1604.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('transport'));
  1605.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('courier'));
  1606.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('total'));
  1607.                     if($valid && $form->isValid()){
  1608.                     
  1609.                         if(!$useCounterForTechnicians && $transfer->getUserFrom() != null && $transfer->getUserFrom()->getAccountTypology() == "technician")
  1610.                             $transfer->setDdt($form->get('ddtTechnicianNumber')->getData());
  1611.                         $transfer->setDdtHeader($form->get('ddtHeader')->getData());
  1612.                         $em->flush();
  1613.                         
  1614.                         $session->set('port'$form->get('port')->getData());
  1615.                         $session->set('ddtCausal'$form->get('ddtCausal')->getData()->getId());
  1616.                         $session->set('appearance'$form->get('appearance')->getData());
  1617.                         $session->set('numberGoods'$form->get('numberGoods')->getData());
  1618.                         $session->set('weight'$form->get('weight')->getData());
  1619.                         $session->set('transport'$form->get('transport')->getData());
  1620.                         $session->set('courier'$form->get('courier')->getData());
  1621.                         $session->set('courierId'$form->get('courier')->getData()->getId());
  1622.                         $session->set('total'$form->get('total')->getData());
  1623.                         $session->set('notes'$form->get('notes')->getData());
  1624.                         return $this->redirectToRoute('user_warehouse_transfer_send_ddt', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1625.                     }
  1626.                 }
  1627.                 return $this->render('role/user/warehouse/transfer/ddt.html.twig', array(
  1628.                     'company' => $company,
  1629.                     'transfer' => $transfer,
  1630.                     'senderSupplier' => $senderSupplier,
  1631.                     'senderTechnician' => $senderTechnician,
  1632.                     'senderWarehouseHeadquarter' => $senderWarehouseHeadquarter,
  1633.                     'destinationExternal' => $destinationExternal,
  1634.                     'destinationTechnician' => $destinationTechnician,
  1635.                     'destinationWarehouseHeadquarter' => $destinationWarehouseHeadquarter,
  1636.                     'useCounterForTechnicians' => $useCounterForTechnicians,
  1637.                     'arrayRows' => $arrayRows,
  1638.                     'total' => $total,
  1639.                     'ddtHeaders' => $ddtHeaders,
  1640.                     "form" => $form->createView()
  1641.                 ));
  1642.             }
  1643.             /**
  1644.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/invia-ddt", name="user_warehouse_transfer_send_ddt")
  1645.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1646.              */
  1647.             public function userWarehouseTransferSendDdt($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactoryFileSystem $fs)
  1648.             {
  1649.                 $em $this->mr->getManager('slave');
  1650.                 $emMaster $this->mr->getManager('master');
  1651.                 $session $request->getSession();
  1652.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1653.                 $useCounterForTechnicians $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt_number_for_technicians'))->getValue();
  1654.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1655.                 $oldDDt $transfer->getDdtPath();
  1656.                 $ddtCausal $em->getRepository('App\Entity\Slave\DdtCausal')->findOneById($session->get('ddtCausal'));
  1657.                 $ddtHeader $transfer->getDdtHeader();
  1658.                 $products $em->getRepository('App\Entity\Slave\Product')->findByTransferOrderedByModel($transfer->getId());
  1659.                 $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1660.                 [$arrayRows$total] = $this->createDdtProductsArray($products);
  1661.                 [$senderSupplierSlave$senderTechnician$senderWarehouseHeadquarter] = $this->searchDDTSender($em$transfer);
  1662.                 [$destinationExternal$destinationTechnician$destinationWarehouseHeadquarter] = $this->searchDDTDestination($em$transfer);
  1663.                 $senderSupplier null;
  1664.                 if($senderSupplierSlave != null)
  1665.                     $senderSupplier $emMaster->getRepository('App\Entity\Master\Supplier')->findOneById($senderSupplierSlave->getIdSupplier());
  1666.                 $html2pdf = new Html2Pdf('P''A4''it'true'UTF-8', array(5555), false);
  1667.                 $html2pdf->writeHTML($this->renderView('role/user/print/ddt.html.twig', array(
  1668.                     'company' => $company,
  1669.                     'transfer' => $transfer,
  1670.                     'senderSupplier' => $senderSupplier,
  1671.                     'senderTechnician' => $senderTechnician,
  1672.                     'senderWarehouseHeadquarter' => $senderWarehouseHeadquarter,
  1673.                     'destinationExternal' => $destinationExternal,
  1674.                     'destinationTechnician' => $destinationTechnician,
  1675.                     'destinationWarehouseHeadquarter' => $destinationWarehouseHeadquarter,
  1676.                     'useCounterForTechnicians' => $useCounterForTechnicians,
  1677.                     'arrayRows' => $arrayRows,
  1678.                     'total' => $session->get('total'),
  1679.                     'port' => $session->get('port'),
  1680.                     'ddtCausal' => $ddtCausal,
  1681.                     'appearance' => $session->get('appearance'),
  1682.                     'numberGoods' => $session->get('numberGoods'),
  1683.                     'weight' => $session->get('weight'),
  1684.                     'transport' => $session->get('transport'),
  1685.                     'courier' => $session->get('courier'),
  1686.                     'notes' => $session->get('notes')
  1687.                 )));
  1688.                 ob_end_clean();
  1689.                 
  1690.                 $fileName md5(uniqid()).'.pdf';
  1691.                 $html2pdf->Output($uploadDir.$fileName'F');
  1692.                 $transfer->setDdtPath($fileName);
  1693.                 $transfer->setPhase('waiting_receiver');
  1694.                 $transfer->setPhaseDdt('prepared');
  1695.                 
  1696.                 if($useCounterForTechnicians || ($transfer->getUserFrom() == null || $transfer->getUserFrom()->getAccountTypology() != "technician")){
  1697.                     if($transfer->getType() == "destination" && !$ddtHeader->isUseOneCounter()){
  1698.                         if($transfer->getDdt() == null){
  1699.                             $transfer->setDdt($ddtHeader->getExternalNumber());
  1700.                             $ddtHeader->setExternalNumber(intval($ddtHeader->getExternalNumber() + 1));
  1701.                         }
  1702.                     }
  1703.                     else{
  1704.                         if($transfer->getDdt() == null){
  1705.                             $transfer->setDdt($ddtHeader->getInternalNumber());
  1706.                             $ddtHeader->setInternalNumber(intval($ddtHeader->getInternalNumber() + 1));
  1707.                         }
  1708.                     }
  1709.                 }
  1710.                 $em->flush();
  1711.                 MediaService::removeDocument($fs$oldDDt$uploadDir);
  1712.                 $this->addFlash('notice_success''Trasferimento completato!');
  1713.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1714.             }
  1715.             
  1716.             /**
  1717.              * @Route("/{warehouseId}/scheda/trasferimento/invia-cerca", name="user_warehouse_transfer_send_search")
  1718.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1719.              */
  1720.             public function userWarehouseTransferSendSearch($warehouseIdRequest $request)
  1721.             {
  1722.                 $em $this->mr->getManager('slave');
  1723.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1724.                 $productCode $request->request->get('productCode');
  1725.                 $codeType $request->request->get('codeType');
  1726.                 $product null;
  1727.                 $error 'Il prodotto con il codice "'.$productCode.'" non Ã¨ stato trovato!';
  1728.                 $found false;
  1729.                 foreach($transfer->getWarehouseFrom()->getProducts() as $pr){
  1730.                     // CERCO TRA I PRODOTTI DEL MAGAZZINO DI PARTENZA
  1731.                     if($codeType == 'producer' && $productCode != null){
  1732.                         if($pr->getCodeProducer() == $productCode){
  1733.                             $error $pr->canBeTransferredStatus($transfer);
  1734.                             $found true;
  1735.                             if($error == "ok")
  1736.                                 $product $pr;
  1737.                             break;
  1738.                         }
  1739.                     }
  1740.                     elseif($codeType == 'supplier' && $pr->getCodeSupplier() != null){
  1741.                         if($pr->getCodeSupplier() == $productCode){
  1742.                             $error $pr->canBeTransferredStatus($transfer);
  1743.                             $found true;
  1744.                             if($error == "ok")
  1745.                                 $product $pr;
  1746.                             break;
  1747.                         }
  1748.                     }
  1749.                 }
  1750.                 if($found){
  1751.                     if($error == "ok"){
  1752.                         $json '{
  1753.                             "id":"'.$product->getId().'", 
  1754.                             "model":"'.$product->getModel()->getName().'",
  1755.                             "producer":"'.$product->getModel()->getProducer()->getName().'",
  1756.                             "condition":"'.$product->displayCondition('string-short').'",
  1757.                             "suppliers":"'.$product->displayStringSuppliers().'",
  1758.                             "codeProducer":"'.$product->getCodeProducer().'", 
  1759.                             "codeSupplier":"'.$product->getCodeSupplier().'"
  1760.                         }';
  1761.                         return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error'product' => $json)));
  1762.                     }
  1763.                 }
  1764.                 else{
  1765.                     if($productCode != null){
  1766.                         switch($codeType){
  1767.                             case 'producer'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeProducer' => $productCode]); break;
  1768.                             case 'supplier'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeSupplier' => $productCode]); break;
  1769.                             default: break;
  1770.                         }
  1771.                     }
  1772.                     if($product != null)
  1773.                         $error 'Il prodotto non Ã¨ in questo magazzino! Si trova nel "'.$product->getActualWarehouse()->getNickname().'"';
  1774.                 }
  1775.                 return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error'product' => null)));
  1776.             }
  1777.             
  1778.             /**
  1779.              * @Route("/{warehouseId}/scheda/trasferimento/invia-preselezionati", name="user_warehouse_transfer_send_preselected")
  1780.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1781.              */
  1782.             public function userWarehouseTransferSendPreselected($warehouseIdRequest $request)
  1783.             {
  1784.                 $em $this->mr->getManager('slave');
  1785.                 $product $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
  1786.                 $json '{
  1787.                     "id":"'.$product->getId().'", 
  1788.                     "model":'.json_encode($product->getModel()->getName()).',
  1789.                     "producer":'.json_encode($product->getModel()->getProducer()->getName()).', 
  1790.                     "condition":"'.$product->displayCondition('string-short').'",
  1791.                     "suppliers":"'.$product->displayStringSuppliers().'",
  1792.                     "codeProducer":"'.$product->getCodeProducer().'", 
  1793.                     "codeSupplier":"'.$product->getCodeSupplier().'"
  1794.                 }';
  1795.                 return new Response(json_encode(array("code" => 200"success" => true'product' => $json)));
  1796.             }
  1797.             
  1798.             /**
  1799.              * @Route("/{warehouseId}/scheda/trasferimento/invia-sposta-prodotto", name="user_warehouse_transfer_send_move_product")
  1800.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1801.              */
  1802.             public function userWarehouseTransferSendMoveProduct($warehouseIdRequest $request)
  1803.             {
  1804.                 $em $this->mr->getManager('slave');
  1805.                 $session $request->getSession();
  1806.                 $product $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
  1807.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1808.                 ProductService::createProductTransferLog($em$productnull$this->getUser(), $warehouse, new \Datetime(), 'manual');                
  1809.                 $product->setActualWarehouse($warehouse);
  1810.                 $product->setDateLastTransfer(new \Datetime);
  1811.                 $em->flush();
  1812.                 return new Response(json_encode(array("code" => 200"success" => true)));
  1813.             }
  1814.             
  1815.             /**
  1816.              * @Route("/{warehouseId}/scheda/trasferimento/invia-elimina-prodotto-trasferimento", name="user_warehouse_transfer_send_delete_product")
  1817.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1818.              */
  1819.             public function userWarehouseTransferSendDeleteProduct($warehouseIdRequest $request)
  1820.             {
  1821.                 $em $this->mr->getManager('slave');
  1822.                 $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1823.                 $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($request->request->get('jtpptId'));
  1824.                 $transferId $jtppt->getTransfer()->getId();
  1825.                 $product $jtppt->getProduct();
  1826.                 $status ProductService::getStatusByCondition($em$product->getCondition());
  1827.                 ProductService::createProductLog($em$product$this->getUser(), 'status'$status->getValue(), null$product->getStatus()->getId());
  1828.                 $product->setStatus($status);
  1829.                 $em->remove($jtppt);
  1830.                 $em->flush();
  1831.                 // RESETTO LO FASE TRANSFER A CREA DDT --- SE PRESENTE
  1832.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1833.                 if($transferInternalDdtActive || $transfer->getType() == 'destination'){
  1834.                     $transfer->setPhase('inserted_editable');
  1835.                     $transfer->setPhaseDdt('create');
  1836.                 }
  1837.                 else{
  1838.                     if(sizeof($transfer->getProducts()) > 0){
  1839.                         $transfer->setPhase('waiting_receiver');
  1840.                     }
  1841.                     else
  1842.                         $transfer->setPhase('inserted');
  1843.                 }
  1844.                 $em->flush();
  1845.                 return new Response(json_encode(array("code" => 200"success" => true)));
  1846.             }
  1847.             
  1848.             /**
  1849.              * @Route("/{warehouseId}/scheda/trasferimento/invia-a-destinazione", name="user_warehouse_transfer_send_destination")
  1850.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1851.              */
  1852.             public function userWarehouseTransferSendDestination($warehouseIdRequest $request)
  1853.             {
  1854.                 $em $this->mr->getManager('slave');
  1855.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1856.                 $transfer->setPhase('to_download');
  1857.                 $transfer->setDatetimeSend(new \Datetime());
  1858.                 $em->flush();
  1859.                 $this->addFlash('notice_success''Trasferimento inviato correttamente!');
  1860.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1861.             }
  1862.             
  1863.             /**
  1864.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/torna-a-modifica-dati", name="user_warehouse_transfer_back_edit_data")
  1865.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1866.              */
  1867.             public function userWarehouseTransferBackEditData($warehouseId$transferIdRequest $requestFileSystem $fs)
  1868.             {
  1869.                 $em $this->mr->getManager('slave');
  1870.                 $emMaster $this->mr->getManager('master');
  1871.                 $session $request->getSession();
  1872.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1873.                 $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1874.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1875.                 $oldDDt $transfer->getDDtPath();
  1876.                 $transfer->setPhase('inserted_editable');
  1877.                 $transfer->setPhaseDdt('create');
  1878.                 $transfer->setDdtPath(null);
  1879.                 MediaService::removeDocument($fs$oldDDt$uploadDir);
  1880.                 $em->flush();
  1881.                 $this->addFlash('notice_success''Trasferimento riportato alla fase precedente!');
  1882.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1883.             }
  1884.         //
  1885.     //
  1886.     // RICHIESTE TECNICI
  1887.         /**
  1888.          * @Route("/{warehouseId}/scheda/tecnico-richiedi-scorte/nuova", name="user_warehouse_product_request_new")
  1889.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1890.          */
  1891.         public function userWarehouseProductRequestNew($warehouseIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1892.         {    
  1893.             $em $this->mr->getManager('slave');
  1894.             $session $request->getSession();
  1895.             $warehouse $em->getRepository('App\Entity\Slave\Warehouse')->findOneById($warehouseId);
  1896.             $technician $this->getUser();
  1897.             $headquarterWarehouses $em->getRepository('App\Entity\Slave\Warehouse')->findBy(array('headquarter' => true));
  1898.             
  1899.             $productRequest = new ProductRequest();
  1900.             $form $formFactory->createNamed("form_product_request"ProductRequestType::class, $productRequest);
  1901.             $form->handleRequest($request);
  1902.             
  1903.             if($form->isSubmitted()){
  1904.                 $valid true;
  1905.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('warehouseHeadquarter'));
  1906.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('supplier'));
  1907.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('model'));
  1908.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('qty'));
  1909.                 if($valid && $form->isValid()){
  1910.                     $model $em->getRepository('App\Entity\Slave\ProductModel')->findOneById($form->get('model')->getData());
  1911.                     $supplier $em->getRepository('App\Entity\Slave\Supplier')->findOneById($form->get('supplier')->getData());
  1912.                     $qty $form->get('qty')->getData();
  1913.                     $json '{
  1914.                         "categoryId":"'.$model->getSubcategory()->getCategory()->getId().'",
  1915.                         "categoryName":"'.$model->getSubcategory()->getCategory()->getName().'",
  1916.                         "subcategoryId":"'.$model->getSubcategory()->getId().'",
  1917.                         "subcategoryName":"'.$model->getSubcategory()->getName().'",
  1918.                         "producerId":"'.$model->getProducer()->getId().'",
  1919.                         "producerName":"'.$model->getProducer()->getName().'",
  1920.                         "supplierName":"'.$supplier->getName().'",
  1921.                         "modelId":"'.$model->getId().'",
  1922.                         "modelName":"'.$model->getName().'",
  1923.                         "qty":"'.$qty.'"
  1924.                     }';
  1925.                     $productRequest->setTechnician($technician);
  1926.                     $productRequest->setWarehouse($warehouse);
  1927.                     $productRequest->setPhase('inserted');
  1928.                     $productRequest->setDatetime(new \Datetime());
  1929.                     $productRequest->setDetails($json);
  1930.                     $em->persist($productRequest);
  1931.                     $em->flush();
  1932.                     if($request->request->get('action') == 'add'){
  1933.                         $this->addFlash('notice_success''Richiesta aggiunta!');
  1934.                         return $this->redirectToRoute('user_warehouse_product_request_new', array('warehouseId' => $warehouse->getId()));
  1935.                     }
  1936.                     else{
  1937.                         $this->addFlash('notice_success''Richiesta inoltrata al magazzino centrale!');
  1938.                         return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  1939.                     }
  1940.                 }
  1941.             }
  1942.             
  1943.             return $this->render('role/user/warehouse/product_request.html.twig', array(
  1944.                 'warehouse' => $warehouse,
  1945.                 'headquarterWarehouses' => $headquarterWarehouses,
  1946.                 "form" => $form->createView()
  1947.             ));
  1948.         }
  1949.         /**
  1950.          * @Route("/{warehouseId}/scheda/richiesta-tecnico/elimina", name="user_warehouse_product_request_delete")
  1951.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1952.          */
  1953.         public function userWarehouseProductRequestDelete($warehouseIdRequest $request)
  1954.         {
  1955.             $em $this->mr->getManager('slave');
  1956.             $productRequest $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
  1957.             $em->remove($productRequest);
  1958.             $em->flush();
  1959.             $this->addFlash('notice_success''Richiesta eliminata!');
  1960.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  1961.         }
  1962.         
  1963.         /**
  1964.          * @Route("/{warehouseId}/scheda/richiesta-tecnico/prendi-in-carico", name="user_warehouse_product_request_take_charge")
  1965.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1966.          */
  1967.         public function userWarehouseProductRequestTakeCharge($warehouseIdRequest $request)
  1968.         {
  1969.             $em $this->mr->getManager('slave');
  1970.             $productRequest $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
  1971.             $productRequest->setPhase('take_charge');
  1972.             $em->flush();
  1973.             $this->addFlash('notice_success''Richiesta presa in carico!');
  1974.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  1975.         }
  1976.         
  1977.         /**
  1978.          * @Route("/{warehouseId}/scheda/richiesta-tecnico/dichiara-gestita", name="user_warehouse_product_request_managed")
  1979.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1980.          */
  1981.         public function userWarehouseProductRequestManaged($warehouseIdRequest $request)
  1982.         {
  1983.             $em $this->mr->getManager('slave');
  1984.             $productRequest $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
  1985.             $productRequest->setPhase('completed');
  1986.             $em->flush();
  1987.             $this->addFlash('notice_success''Richiesta gestita!');
  1988.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  1989.         }
  1990.     //
  1991.     // ESPORTAZIONI
  1992.         /**
  1993.          * @Route("/{warehouseId}/scorte/esporta-csv", name="user_warehouse_stocks_export_csv")
  1994.          * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  1995.          */
  1996.         public function userWarehouseStocksExportCsv($warehouseIdRequest $request)
  1997.         {    
  1998.             $em $this->mr->getManager('slave');
  1999.             $session $request->getSession();
  2000.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2001.             $products $em->getRepository('App\Entity\Slave\Product')->findByWarehouseOrdered($warehouse->getId());
  2002.             $response = new StreamedResponse();
  2003.             $response->setCallback(function() use($products) {
  2004.                 $handle fopen('php://output''w+');
  2005.                 fputcsv($handle, array('Stato','Modello','Matricola produttore','Matricola fornitore','Condizione''Fornitori'), ";"'"'"\\");
  2006.                 foreach($products as $p){
  2007.             
  2008.                     $status null;
  2009.                     $model null;
  2010.                     $codeProducer '';
  2011.                     $codeSupplier '';
  2012.                     $condition null;
  2013.                     $suppliers '';
  2014.                     if($p->getStatus() != null$status $p->getStatus()->getValue();
  2015.                     if($p->getModel() != null$model $p->getModel()->getName().' - '.$p->getModel()->getSubcategory()->getName().' - '.$p->getModel()->getSubcategory()->getCategory()->getName();
  2016.                     if($p->getCodeProducer() != null$codeProducer $p->getCodeProducer();
  2017.                     if($p->getCodeSupplier() != null$codeSupplier $p->getCodeSupplier();
  2018.                     if($p->getCondition() != null$condition $p->getCondition()->getValue();
  2019.                     if(sizeof($p->getSuppliers()) > 0){
  2020.                         $suppliers "";
  2021.                         $first true;
  2022.                         foreach($p->getSuppliers() as $s){
  2023.                             if($first$first false; else $suppliers.= ', ';
  2024.                             $suppliers.= $s->getName();
  2025.                         }
  2026.                     }
  2027.         
  2028.                     fputcsv($handle, array($status$model$codeProducer$codeSupplier$condition$suppliers), ";"'"'"\\");
  2029.                 }
  2030.                 fclose($handle);
  2031.             });
  2032.             
  2033.             $response->setStatusCode(200);
  2034.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Magazzino '.$warehouse->getNickname().' - Scorte.csv');
  2035.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2036.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2037.             return $response;
  2038.         }
  2039.         /**
  2040.          * @Route("/{warehouseId}/scorte/esporta-csv-filtrate/{status}", name="user_warehouse_stocks_export_csv_filtered")
  2041.          * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  2042.          */
  2043.         public function userWarehouseStocksExportCsvFiltered($warehouseId$statusRequest $request)
  2044.         {    
  2045.             $em $this->mr->getManager('slave');
  2046.             $session $request->getSession();
  2047.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2048.             $filters $session->get('user_warehouse_sheet_filters');
  2049.             $products $em->getRepository('App\Entity\Slave\Product')->findByWarehouseFiltered(false$warehouse->getId(), $status$filters1);
  2050.             $response = new StreamedResponse();
  2051.             $response->setCallback(function() use($products) {
  2052.                 $handle fopen('php://output''w+');
  2053.                 fputcsv($handle, array('Stato','Modello','Matricola produttore','Matricola fornitore','Condizione''Fornitori'), ";"'"'"\\");
  2054.                 foreach($products as $p){
  2055.             
  2056.                     $status null;
  2057.                     $model null;
  2058.                     $codeProducer '';
  2059.                     $codeSupplier '';
  2060.                     $condition null;
  2061.                     $suppliers '';
  2062.                     if($p->getStatus() != null$status $p->getStatus()->getValue();
  2063.                     if($p->getModel() != null$model $p->getModel()->getName().' - '.$p->getModel()->getSubcategory()->getName().' - '.$p->getModel()->getSubcategory()->getCategory()->getName();
  2064.                     if($p->getCodeProducer() != null$codeProducer $p->getCodeProducer();
  2065.                     if($p->getCodeSupplier() != null$codeSupplier $p->getCodeSupplier();
  2066.                     if($p->getCondition() != null$condition $p->getCondition()->getValue();
  2067.                     if(sizeof($p->getSuppliers()) > 0){
  2068.                         $suppliers "";
  2069.                         $first true;
  2070.                         foreach($p->getSuppliers() as $s){
  2071.                             if($first$first false; else $suppliers.= ', ';
  2072.                             $suppliers.= $s->getName();
  2073.                         }
  2074.                     }
  2075.         
  2076.                     fputcsv($handle, array($status$model$codeProducer$codeSupplier$condition$suppliers), ";"'"'"\\");
  2077.                 }
  2078.                 fclose($handle);
  2079.             });
  2080.             
  2081.             $response->setStatusCode(200);
  2082.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Magazzino '.$warehouse->getNickname().' - Scorte filtrate.csv');
  2083.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2084.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2085.             return $response;
  2086.         }
  2087.         
  2088.         /**
  2089.          * @Route("/{warehouseId}/scorte/esporta-csv-per-invio/{status}", name="user_warehouse_stocks_export_csv_for_send")
  2090.          * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  2091.          */
  2092.         public function userWarehouseStocksExportCsvForSend($warehouseId$statusRequest $request)
  2093.         {    
  2094.             $em $this->mr->getManager('slave');
  2095.             $session $request->getSession();
  2096.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2097.             $filters $session->get('user_warehouse_sheet_filters');
  2098.             $products $em->getRepository('App\Entity\Slave\Product')->findByWarehouseFiltered(false$warehouse->getId(), $status$filters1);
  2099.             $response = new StreamedResponse();
  2100.             $response->setCallback(function() use($products) {
  2101.                 $handle fopen('php://output''w+');
  2102.                 fputcsv($handle, array('Matricola produttore','Matricola fornitore'), ";"'"'"\\");
  2103.                 foreach($products as $p){
  2104.             
  2105.                     $codeProducer '';
  2106.                     $codeSupplier '';
  2107.                     if($p->getCodeProducer() != null$codeProducer $p->getCodeProducer();
  2108.                     if($p->getCodeSupplier() != null$codeSupplier $p->getCodeSupplier();
  2109.         
  2110.                     fputcsv($handle, array($codeProducer$codeSupplier), ";"'"'"\\");
  2111.                 }
  2112.                 fclose($handle);
  2113.             });
  2114.             
  2115.             $response->setStatusCode(200);
  2116.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Magazzino '.$warehouse->getNickname().' - Scorte per invio.csv');
  2117.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2118.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2119.             return $response;
  2120.         }
  2121.         
  2122.         /**
  2123.          * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scheda/esporta-csv", name="user_warehouse_transfer_sheet_export")
  2124.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  2125.          */
  2126.         public function userWarehouseTransferSheetExport($warehouseId$transferIdRequest $request)
  2127.         {    
  2128.             $em $this->mr->getManager('slave');
  2129.             $emMaster $this->mr->getManager('master');
  2130.             $session $request->getSession();
  2131.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2132.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  2133.             $jtppts $transfer->getProducts();
  2134.             $response = new StreamedResponse();
  2135.             $response->setCallback(function() use($jtppts) {
  2136.                 $handle fopen('php://output''w+');
  2137.                 fputcsv($handle, array("Fornitori""Modello""Matricola produttore",'Matricola fornitore'), ";"'"'"\\");
  2138.                 foreach($jtppts as $jtppt){
  2139.                     $suppliers $jtppt->getProduct()->displayStringSuppliers();
  2140.                     $productModel $jtppt->getProduct()->getModel()->getName();
  2141.                     $codeProducer '';
  2142.                     $codeSupplier '';
  2143.                     if($jtppt->getProduct()->getCodeProducer() != null$codeProducer $jtppt->getProduct()->getCodeProducer();
  2144.                     if($jtppt->getProduct()->getCodeSupplier() != null$codeSupplier $jtppt->getProduct()->getCodeSupplier();
  2145.                     fputcsv($handle, array($suppliers$productModel$codeProducer$codeSupplier), ";"'"'"\\");
  2146.                 }
  2147.                 fclose($handle);
  2148.             });
  2149.     
  2150.             $response->setStatusCode(200);
  2151.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Matricole trasferimento.csv');
  2152.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2153.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2154.     
  2155.             return $response;
  2156.         }
  2157.     //
  2158. }