src/Controller/User/UserWarehouseController.php line 308

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