src/Controller/User/UserWarehouseController.php line 1868

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