src/Controller/User/UserWarehouseController.php line 2053

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