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.                         // $valid = ValidationService::ValidateNotBlank($validator, $formSend->get('stockOrder'));
  511.                     break;
  512.                 case 'main':
  513.                     if($valid && $warehouse->isHeadquarter() == && $this->getUser()->getAccountTypology() != 'technician')
  514.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('userFrom'));
  515.                     break;
  516.                 case 'technician':
  517.                     if($valid)
  518.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('userTo'));
  519.                     if($valid && $warehouse->isHeadquarter() == 0){
  520.                         $valid ValidationService::ValidateNotBlank($validator$formSend->get('userFrom'));
  521.                     }
  522.                 default: break;
  523.             }
  524.             if($warehouse->getId() == $formSend->get('warehouse')->getData()->getId()){
  525.                 $valid false;
  526.                 $formSend->get('warehouse')->addError(new FormError("Il magazzino di destinazione non può essere lo stesso del magazzino di invio."));
  527.             }
  528.             if($valid && $formSend->isValid()){
  529.                 $warehouseTo $formSend->get('warehouse')->getData();
  530.                 $transferSend->setDatetimeCreation(new \Datetime());
  531.                 $transferSend->setPhase('inserted');
  532.                 $transferSend->setWarehouseFrom($warehouse);
  533.                 $transferSend->setWarehouseTo($warehouseTo);
  534.                 switch($formSend->get('type')->getData()){
  535.                     case 'main'
  536.                         if($warehouse->isHeadquarter() == && $this->getUser()->getAccountTypology() != 'technician')
  537.                             $transferSend->setUserFrom($formSend->get('userFrom')->getData());
  538.                         else
  539.                             $transferSend->setUserFrom($this->getUser());
  540.                         break;
  541.                     case 'technician':
  542.                         $transferSend->setUserTo($formSend->get('userTo')->getData());
  543.                         if($warehouse->isHeadquarter() == 0){
  544.                             $transferSend->setUserFrom($this->getUser());
  545.                         }
  546.                         break;
  547.                     default: break;
  548.                 }
  549.                 $em->persist($transferSend);
  550.                 $em->flush();
  551.                 if($formSend->get('productRequestId')->getData() != null)
  552.                     $session->set('productRequestId'$formSend->get('productRequestId')->getData());
  553.                 $session->set('transferId'$transferSend->getId());
  554.                 $session->set('transferStocksIds'$formSend->get('sendStocksIds')->getData());
  555.                 $session->set('action_edit'false);
  556.                 return $this->redirectToRoute('user_warehouse_transfer_send', array('warehouseId' => $warehouse->getId(), 'transferId' => $transferSend->getId()));
  557.             }
  558.             else{
  559.                 $session->set('openTransferSendModal'true);
  560.             }
  561.         }
  562.         // PRODUCT REQUEST
  563.         $productConditions = array();
  564.         $conditions $em->getRepository('App\Entity\Slave\ProductCondition')->findAll();
  565.         $insertedProductRequests null;
  566.         $takeChargeProductRequests null;
  567.         $completedProductRequests null;
  568.         switch($this->getUser()->getAccountTypology()){
  569.             case 'administration':
  570.             case 'agency':
  571.             case 'commercial':
  572.             case 'warehouse':
  573.                 foreach($conditions as $condition)
  574.                     array_push($productConditions$condition);
  575.                 break;
  576.             case 'technician':
  577.                 $conditionsIds explode(','$settingWarehouseProductConditions->getValue());
  578.                 foreach($conditionsIds as $conditionId){
  579.                     $condition $em->getRepository('App\Entity\Slave\ProductCondition')->findOneById($conditionId);
  580.                     array_push($productConditions$condition);
  581.                 }
  582.                 break;
  583.             default: break;
  584.         }
  585.         if($warehouse->isHeadquarter()){
  586.             $insertedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true$warehouse->getId(), 'inserted'$filters);
  587.             $insertedProductRequests $paginator->paginate($insertedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  588.             $takeChargeProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true$warehouse->getId(), 'take_charge'$filters);
  589.             $takeChargeProductRequests $paginator->paginate($takeChargeProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  590.             
  591.             $completedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseHeadquarterAndPhaseFiltered(true$warehouse->getId(), 'completed'$filters);
  592.             $completedProductRequests $paginator->paginate($completedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  593.         }
  594.         else{
  595.             $insertedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true$warehouse->getId(), 'inserted'$filters);
  596.             $insertedProductRequests $paginator->paginate($insertedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  597.             
  598.             $takeChargeProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true$warehouse->getId(), 'take_charge'$filters);
  599.             $takeChargeProductRequests $paginator->paginate($takeChargeProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  600.             
  601.             $completedProductRequestsQuery $em->getRepository("App\Entity\Slave\ProductRequest")->findByWarehouseAndPhaseFiltered(true$warehouse->getId(), 'completed'$filters);
  602.             $completedProductRequests $paginator->paginate($completedProductRequestsQuery$request->getSession()->get($request->get("_route")."_page_3"), 50, array('pageParameterName' => 'page_3'));
  603.         }
  604.         return $this->render('role/user/warehouse/sheet.html.twig', array(
  605.             'company' => $company,
  606.             'settingRegisterStock' => $settingRegisterStock,
  607.             'settingRecoverStock' => $settingRecoverStock,
  608.             'settingDdtMandatory' => $settingDdtMandatory,
  609.             'warehouse' => $warehouse,
  610.             'productConditions' => $productConditions,
  611.             'suppliers' => $suppliers,
  612.             'productModels' => $productModels,
  613.             'toManageProducts' => $toManageProducts,
  614.             'availableProducts' => $availableProducts,
  615.             'notAvailableProducts' => $notAvailableProducts,
  616.             'transferProducts' => $transferProducts,
  617.             'filters' => $filters,
  618.             'incomingTransfers' => $incomingTransfers,
  619.             'outputTransfers' => $outputTransfers,
  620.             'insertedProductRequests' => $insertedProductRequests,
  621.             'takeChargeProductRequests' => $takeChargeProductRequests,
  622.             'completedProductRequests' => $completedProductRequests,
  623.             "formEdit" => $formEdit->createView(),
  624.             'formInventory' => $formInventory->createView(),
  625.             'formReceive' => $formReceive->createView(),
  626.             'formSend' => $formSend->createView()
  627.         ));
  628.     }
  629.     // SCORTE
  630.         /**
  631.          * @Route("/{warehouseId}/scheda/scorte/selezione-multipla-azione", name="user_warehouse_stock_multiple_select_action")
  632.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  633.          */
  634.         public function userWarehouseStockMultipleSelectAction($warehouseIdRequest $request)
  635.         {    
  636.             $em $this->mr->getManager('slave');
  637.             $session $request->getSession();
  638.             $productIds explode(','$request->request->get('ids'));
  639.             switch($request->request->get('action')){
  640.                 case 'managed':
  641.                     $session->set('user_warehouse_stock_multiple_selection_tab''to_manage');
  642.                     foreach($productIds as $id){
  643.                         $product $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
  644.                         $oldStatus $product->getStatus();
  645.                         $product->setToManage(false);
  646.                         $product->setToManagePriority(0);
  647.                         $newStatus ProductService::getStatusByCondition($em$product->getCondition());
  648.                         if($oldStatus->getId() != $newStatus->getId()){
  649.                             ProductService::createProductLog($em$product$this->getUser(), null'status'$oldStatus->getValue(), $newStatus->getValue());
  650.                             $product->setStatus($newStatus);
  651.                         }
  652.                     }
  653.                     $this->addFlash('notice_success''Scorte gestite!');
  654.                     break;
  655.                 case 'supplier':
  656.                     $session->set('user_warehouse_stock_multiple_selection_tab''to_manage');
  657.                     $allSuppliers $em->getRepository('App\Entity\Slave\Supplier')->findAllActiveOrdered();
  658.                     $selectedSuppliers = array();
  659.                     foreach($allSuppliers as $s){
  660.                         if($request->request->get('supplier_'.$s->getId()) == 'on')
  661.                             array_push($selectedSuppliers$s);
  662.                     }
  663.                     foreach($productIds as $id){
  664.                         $product $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
  665.                         foreach($selectedSuppliers as $s){
  666.                             if(!$product->hasSupplier($s))
  667.                                 $product->addSupplier($s);
  668.                         }
  669.                     }
  670.                     $this->addFlash('notice_success''Fornitori dei prodotti aggiornati!');
  671.                     break;
  672.                 case 'condition':
  673.                     $session->set('user_warehouse_stock_multiple_selection_tab'$request->request->get('tab'));
  674.                     $productCondition $em->getRepository('App\Entity\Slave\ProductCondition')->findOneById($request->request->get('productCondition'));
  675.                     foreach($productIds as $id){
  676.                         $product $em->getRepository('App\Entity\Slave\Product')->findOneById($id);
  677.                         if($product->getStatus()->getSlug() != 'transfer' && $product->getStatus()->getSlug() != 'in_use'){
  678.                             ProductService::productChangeCondition($em$this->getUser(), $product$productCondition);
  679.                             $product->setToManage(false);
  680.                             $product->setToManagePriority(2);
  681.                         }
  682.                     }
  683.                     $this->addFlash('notice_success''Condizione scorte aggiornata!');
  684.                     break;
  685.                 default: break;
  686.             }
  687.             $em->flush();
  688.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  689.         }
  690.         
  691.         /**
  692.          * @Route("/{warehouseId}/scheda/scorte/registra", name="user_warehouse_stocks_register")
  693.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  694.          */
  695.         public function userWarehouseStocksRegister($warehouseIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  696.         {    
  697.             $em $this->mr->getManager('slave');
  698.             $session $request->getSession();
  699.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  700.             $register = new ProductRegister();
  701.             $form $formFactory->createNamed("form_register"ProductRegisterType::class, $register);
  702.             $form->handleRequest($request);
  703.             
  704.             if($form->isSubmitted()){
  705.                 [$valid$methodRegister$errorMsg] = FormValidatorService::validateProductRegister($em$validator$form);
  706.                 if($valid && $form->isValid()){
  707.                     
  708.                     $arrayProducerCodes = array();
  709.                     $arraySupplierCodes = array();
  710.                     $countProductsUpdated 0;
  711.                     $countProductsNew 0;
  712.                     $countProductsDouble 0;
  713.                     $productsUpdatedMats "";
  714.                     $productsDoubleMats "";
  715.                     $status ProductService::getStatusByCondition($em$form->get('condition')->getData());
  716.                     if($methodRegister == 'gun'){
  717.                         // IMPORTAZIONE TRAMITE SPARO
  718.                         foreach($form->get('products')->getData() as $prod){
  719.                             if(!($prod->getCodeProducer() == null && $prod->getCodeSupplier() == null)){
  720.                                 [$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);
  721.                             }
  722.                         }
  723.                     }
  724.                     else{
  725.                         // IMPORTAZIONE TRAMITE FILE
  726.                         $result ProductService::checkProducts($form->get('file')->getData(), $form->get('separator')->getData());
  727.                         
  728.                         if($result['error'] != null){
  729.                             $this->addFlash('notice_danger'$result['msg']);
  730.                             return $this->redirect($request->server->get('HTTP_REFERER'));
  731.                         }
  732.                         else{
  733.                             $row 0;
  734.                             if(($handle fopen($form->get('file')->getData(), "r")) !== FALSE) {
  735.                                 while(($data fgetcsv($handle1000$form->get('separator')->getData())) !== FALSE) {
  736.                                     $data array_map("utf8_encode"$data);
  737.                                     if($row 0){
  738.                                         if(!($data[0] == null && $data[1] == null)){
  739.                                             [$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);
  740.                                         }
  741.                                     }
  742.                                     $row++;
  743.                                 }
  744.                                 fclose($handle);
  745.                             }
  746.                         }
  747.                     }
  748.                     $em->flush();
  749.                     $this->addFlash('notice_success''<br>Prodotti nuovi inseriti: '.$countProductsNew.'<br>Prodotti aggiornati: '.$countProductsUpdated.$productsUpdatedMats.'<br>Prodotti doppi ignorati: '.$countProductsDouble.$productsDoubleMats);
  750.                     if($request->request->get('submit_action') == 'list')
  751.                         return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  752.                     elseif($request->request->get('submit_action') == 'add')
  753.                         return $this->redirectToRoute('user_warehouse_stocks_register', array('warehouseId' => $warehouse->getId()));
  754.                 }
  755.                 else{
  756.                     if($errorMsg != ''){
  757.                         $this->addFlash('notice_danger'$errorMsg);
  758.                     }
  759.                 }
  760.             }
  761.             
  762.             return $this->render('role/user/warehouse/stocks_register.html.twig', array(
  763.                 "form" => $form->createView(),
  764.                 'warehouse' => $warehouse
  765.             ));
  766.         }
  767.         
  768.         /**
  769.          * @Route("/{warehouseId}/scheda/scorte/rientra", name="user_warehouse_stocks_recover")
  770.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  771.          */
  772.         public function userWarehouseStocksRecover($warehouseIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  773.         {    
  774.             $em $this->mr->getManager('slave');
  775.             $session $request->getSession();
  776.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  777.             $productsIdsToRecover = array();
  778.             $countMoved 0;
  779.             $error "";
  780.             $recover = new ProductRecover();
  781.             $form $formFactory->createNamed("form_recover"ProductRecoverType::class, $recover);
  782.             $form->handleRequest($request);
  783.             
  784.             if($form->isSubmitted()){
  785.                 if($form->get('gunOrImport')->getData())
  786.                     $methodRegister 'import';
  787.                 else
  788.                     $methodRegister 'gun';
  789.                 $valid true;
  790.                 if($methodRegister == 'gun'){
  791.                     // IMPORTAZIONE TRAMITE SPARO
  792.                     if(sizeof($form->get('products')->getData()) <= 0){
  793.                         $valid false;
  794.                         $form->get('products')->addError(new FormError('Inserire almeno una matricola prodotto!'));
  795.                     }
  796.                 }
  797.                 else{
  798.                     // IMPORTAZIONE TRAMITE FILE
  799.                     $valid ValidationService::validateFile($validator$form->get('filePath'), true$form->get('file')->getData(), '10', array('csv''txt'));
  800.                 }
  801.                 if($valid && $form->isValid()){
  802.                     
  803.                     if($methodRegister == 'gun'){
  804.                         foreach($form->get('products')->getData() as $prod){
  805.                             $product $em->getRepository('App\Entity\Slave\Product')->findOneById($prod->getId());
  806.                             if($product != null)
  807.                                 array_push($productsIdsToRecover$product->getId());
  808.                         }
  809.                     }
  810.                     else{
  811.                         $row 0;
  812.                         if(($handle fopen($form->get('file')->getData(), "r")) !== FALSE) {
  813.                             while(($data fgetcsv($handle1000$form->get('separator')->getData())) !== FALSE) {
  814.                                 $data array_map("utf8_encode"$data);
  815.                                 if($row 0){
  816.                                     if(!($data[0] == null && $data[1] == null)){
  817.                                         $product null;
  818.                                         if($product == null && $data[0] != null$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $data[0]));
  819.                                         if($product == null && $data[1] != null$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $data[1]));
  820.                                         if($product != null){
  821.                                             if($product->getStatus()->getSlug() == 'transfer'){
  822.                                                 $error.= '<br>Errore alla riga '.($row 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché in fase "In trasferimento"';
  823.                                             }
  824.                                             if($product->getStatus()->getSlug() == 'in_use'){
  825.                                                 $error.= '<br>Errore alla riga '.($row 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché uso da un cliente';
  826.                                             }
  827.                                             if($product->getCondition()->getSlug() == 'historic'){
  828.                                                 $error '<br>Errore alla riga '.($row 1).' -> Impossibile spostare il prodotto '.$product->getCodeProducer().' poiché in una destinazione esterna';
  829.                                             }
  830.                                             array_push($productsIdsToRecover$product->getId());
  831.                                         }
  832.                                         else{
  833.                                             if($data[0] != null)
  834.                                                 $code $data[0];
  835.                                             else
  836.                                                 $code $data[1];
  837.                                             $error.= '<br>Errore alla riga '.($row 1).' -> Non Ã¨ stato trovato alcun prodotto con codice '.$code;
  838.                                         }
  839.                                     }
  840.                                 }
  841.                                 $row++;
  842.                             }
  843.                             fclose($handle);
  844.                             if($error != ""){
  845.                                 $this->addFlash('notice_warning'"Errori rilevati:".$error);
  846.                                 return $this->redirectToRoute('user_warehouse_stocks_recover', array('warehouseId' => $warehouse->getId()));
  847.                             }
  848.                         }
  849.                     }
  850.                     
  851.                     // Scorro l'array di ProductIds e li rientro
  852.                     $statusNotAvailable $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(['slug' => 'not_available']);
  853.                     foreach($productsIdsToRecover as $ptrId){
  854.                         $ptr $em->getRepository('App\Entity\Slave\Product')->findOneById($ptrId);
  855.                         $oldStatusId $ptr->getStatus()->getId();
  856.                         if($statusNotAvailable->getId() != $oldStatusId){
  857.                             ProductService::createProductLog($em$ptr$this->getUser(), null'status'$ptr->getStatus()->getValue(), $statusNotAvailable->getValue());
  858.                             $ptr->setStatus($statusNotAvailable);
  859.                         }
  860.                         if($ptr->getActualWarehouse()->getId() != $warehouse->getId()){
  861.                             ProductService::createProductTransferLog($em$ptrnull$this->getUser(), $warehouse, new \Datetime(), 'forced');
  862.                             $ptr->setActualWarehouse($warehouse);
  863.                         }
  864.                         $ptr->setDateLastTransfer(new \Datetime());
  865.                         $ptr->setToManage(true);
  866.                         $ptr->setToManagePriority(2);
  867.                         $countMoved++;
  868.                     }
  869.                     $em->flush();
  870.                     $this->addFlash('notice_success''<br>Prodotti spostati: '.$countMoved);
  871.                     return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  872.                 }
  873.             }
  874.             
  875.             return $this->render('role/user/warehouse/stocks_recover.html.twig', array(
  876.                 "form" => $form->createView(),
  877.                 'warehouse' => $warehouse
  878.             ));
  879.         }
  880.         /**
  881.          * @Route("/{warehouseId}/scheda/scorte/rientra-cerca", name="user_warehouse_stocks_recover_search")
  882.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  883.          */
  884.         public function userWarehouseStocksRecoverSearch($warehouseIdRequest $request)
  885.         {
  886.             $em $this->mr->getManager('slave');
  887.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  888.             $productCode $request->request->get('productCode');
  889.             $codeType $request->request->get('codeType');
  890.             $product null;
  891.             $error 'Il prodotto con il codice "'.$productCode.'" non Ã¨ stato trovato!';
  892.             $errorRead 'Il prodotto non Ã¨ stato trovato!';
  893.             $found false;
  894.             $product false;
  895.             if($productCode != null){
  896.                 switch($codeType){
  897.                     case 'producer'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeProducer' => $productCode]); break;
  898.                     case 'supplier'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeSupplier' => $productCode]); break;
  899.                     default: break;
  900.                 }
  901.             }
  902.             if($product != null){
  903.                 if($product->getStatus()->getSlug() == 'transfer'){
  904.                     $error 'Impossibile spostare un prodotto in fase "In trasferimento"';
  905.                     $errorRead $error;
  906.                     return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  907.                 }
  908.                 if($product->getStatus()->getSlug() == 'in_use'){
  909.                     $error 'Impossibile spostare un prodotto in uso da un cliente';
  910.                     $errorRead $error;
  911.                     return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  912.                 }
  913.                 if($product->getCondition()->getSlug() == 'historic'){
  914.                     $error 'Impossibile spostare un prodotto in una destinazione esterna';
  915.                     $errorRead $error;
  916.                     return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  917.                 }
  918.                 $found true;
  919.                     
  920.                 $json '{
  921.                     "id":"'.$product->getId().'", 
  922.                     "codeProducer":"'.$product->getCodeProducer().'", 
  923.                     "codeSupplier":"'.$product->getCodeSupplier().'",
  924.                     "model":"'.$product->getModel()->getName().'",
  925.                     "condition":"'.$product->displayCondition('string-short').'", 
  926.                     "suppliers":"'.$product->displayStringSuppliers().'", 
  927.                     "warehouseNickname":"'.$product->getActualWarehouse()->__toString().'"}';
  928.                 return new Response(json_encode(array("code" => 200"success" => true"found" => $found'product' => $json)));
  929.             }
  930.             return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error"errorRead" => $errorRead)));
  931.         }
  932.         
  933.         /**
  934.          * @Route("/{warehouseId}/scheda/scorte/rientra-sposta-prodotto", name="user_warehouse_stocks_recover_move_product")
  935.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  936.          */
  937.         public function userWarehouseStocksRecoverMoveProduct($warehouseIdRequest $request)
  938.         {
  939.             $em $this->mr->getManager('slave');
  940.             $session $request->getSession();
  941.             $product $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
  942.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  943.             ProductService::createProductTransferLog($em$productnull$this->getUser(), $warehouse, new \Datetime(), 'manual');                
  944.             $product->setActualWarehouse($warehouse);
  945.             $product->setDateLastTransfer(new \Datetime);
  946.             $em->flush();
  947.             return new Response(json_encode(array("code" => 200"success" => true)));
  948.         }
  949.         
  950.         /**
  951.          * @Route("/{warehouseId}/scheda/scorte/inventario", name="user_warehouse_stock_inventory")
  952.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  953.          */
  954.         public function userWarehouseStockInventory($warehouseIdRequest $request)
  955.         {    
  956.             $em $this->mr->getManager('slave');
  957.             $session $request->getSession();
  958.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  959.             $supplier $em->getRepository("App\Entity\Slave\Supplier")->findOneById($session->get('inventorySupplierId'));
  960.             $status $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($session->get('inventoryStatusId'));
  961.             return $this->render('role/user/warehouse/inventory.html.twig', array(
  962.                 'warehouse' => $warehouse,
  963.                 'supplier' => $supplier,
  964.                 'status' => $status,
  965.                 'results' => $session->get('inventoryResults')
  966.             ));
  967.         }
  968.         
  969.         /**
  970.          * @Route("/{warehouseId}/scheda/scorte/inventario-esporta", name="user_warehouse_stock_inventory_export")
  971.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  972.          */
  973.         public function userWarehouseStockInventoryExport($warehouseIdRequest $request)
  974.         {    
  975.             $em $this->mr->getManager('slave');
  976.             $session $request->getSession();
  977.             $results $session->get('inventoryResults');
  978.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  979.             $supplier $em->getRepository("App\Entity\Slave\Supplier")->findOneById($session->get('inventorySupplierId'));
  980.             $status $em->getRepository("App\Entity\Slave\ProductStatus")->findOneById($session->get('inventoryStatusId'));
  981.     
  982.             $response = new StreamedResponse();
  983.             $response->setCallback(function() use($results$warehouse$supplier$status) {
  984.                 $handle fopen('php://output''w+');
  985.                 fputcsv($handle, array('Magazzino',$warehouse->getNickname(),'','',''), ";"'"'"\\");
  986.                 fputcsv($handle, array('Fornitore',$supplier->getName(),'','',''), ";"'"'"\\");
  987.                 fputcsv($handle, array('Stato',$status->getValue(),'','',''), ";"'"'"\\");
  988.                 fputcsv($handle, array('Modello''Matricola produttore','Matricola fornitore','Magazzino attuale','Errore''Ultimo trasferimento'), ";"'"'"\\");
  989.                 foreach($results as $r){
  990.                     fputcsv($handle, array($r[2], $r[3], $r[4], $r[5], $r[6], $r[7]), ";"'"'"\\");
  991.                 }
  992.                 fclose($handle);
  993.             });
  994.             
  995.             $response->setStatusCode(200);
  996.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT$warehouse->getNickname().' - Inventario.csv');
  997.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  998.             $response->headers->set('Content-Disposition'$dispositionHeader);
  999.             return $response;
  1000.         }
  1001.     //
  1002.     // TRASFERIMENTI
  1003.         /**
  1004.          * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/riprendi", name="user_warehouse_transfer_resume")
  1005.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1006.          */
  1007.         public function userWarehouseTransferSelect(Request $request$warehouseId$transferId)
  1008.         {
  1009.             $em $this->mr->getManager('slave');
  1010.             $session $request->getSession();
  1011.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1012.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1013.             if($transfer->getWarehouseTo()->getId() == $warehouse->getId()){
  1014.                 return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1015.             }
  1016.             elseif($transfer->getWarehouseFrom()->getId() == $warehouse->getId()){
  1017.                 $session->set('action_edit'true);
  1018.                 return $this->redirectToRoute('user_warehouse_transfer_send', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1019.             }
  1020.         }
  1021.         /**
  1022.          * @Route("/{warehouseId}/scheda/trasferimento/elimina", name="user_warehouse_transfer_delete")
  1023.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1024.          */
  1025.         public function userWarehouseTransferDelete($warehouseIdRequest $request)
  1026.         {    
  1027.             $em $this->mr->getManager('slave');
  1028.             $session $request->getSession();
  1029.             $transfer $em->getRepository("App\Entity\Slave\ProductTransfer")->findOneById($request->request->get("transferDelId"));
  1030.             foreach($transfer->getProducts() as $jtppt){
  1031.                 $status ProductService::getStatusByCondition($em$jtppt->getProduct()->getCondition());
  1032.                 ProductService::createProductLog($em$jtppt->getProduct(), $this->getUser(), null'status'$jtppt->getProduct()->getStatus()->getValue(), $status->getValue());
  1033.                 $jtppt->getProduct()->setStatus($status);
  1034.                 $em->remove($jtppt);
  1035.             }
  1036.             $em->remove($transfer);
  1037.             $em->flush();
  1038.             $this->addFlash('notice_success'"Trasferimento eliminato");
  1039.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  1040.         }
  1041.         /**
  1042.          * @Route("/{warehouseId}/scheda/trasferimento-aggiorna-magazzini", name="user_warehouse_transfer_update_warehouses")
  1043.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1044.          */
  1045.         public function userWarehouseTransferUpdateWarehouses($warehouseIdRequest $request)
  1046.         {    
  1047.             $em $this->mr->getManager('slave');
  1048.             $type $request->request->get("type");
  1049.             switch($type){
  1050.                 case 'technician'$warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesTechnicians($warehouseId); break;
  1051.                 case 'destination'$warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesDestinations(); break;
  1052.                 case 'main'$warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findHeadquarterWarehouses(); break;
  1053.                 default: break;
  1054.             }
  1055.             $first true;
  1056.             $json "[";
  1057.             foreach($warehouses as $w){
  1058.                 if($first$first false; else $json.= ',';
  1059.                 $json.= '{"id":'.$w->getId().', "nickname":"'.$w->getNickname().'"}';
  1060.             }
  1061.             $json.= "]";
  1062.         
  1063.             return new Response(json_encode(array("code" => 200"success" => true"warehouses" => $json))); 
  1064.         }
  1065.         /**
  1066.          * @Route("/{warehouseId}/scheda/trasferimento-aggiorna-magazzini-tecnico", name="user_warehouse_transfer_update_technician_warehouses")
  1067.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1068.          */
  1069.         public function userWarehouseTransferUpdateTechnicianWarehouses($warehouseIdRequest $request)
  1070.         {    
  1071.             $em $this->mr->getManager('slave');
  1072.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get("transferId"));
  1073.             $technician $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get("technicianId"));
  1074.             $first true;
  1075.             $json "[";
  1076.             if($transfer != null){
  1077.                 switch($transfer->getType()){
  1078.                     case 'technician':
  1079.                         foreach($technician->getWarehouses() as $jt){
  1080.                             if($jt->getPermission() == "RW"){
  1081.                                 if($first$first false; else $json.= ',';
  1082.                                 $json.= '{"id":'.$jt->getWarehouse()->getId().', "nickname":"'.$jt->getWarehouse()->getNickname().'"}';
  1083.                             }
  1084.                         }
  1085.                         break;
  1086.                     case 'destination':
  1087.                         $warehouses $em->getRepository('App\Entity\Slave\Warehouse')->findWarehousesDestinations();
  1088.                         foreach($warehouses as $w){
  1089.                             if($first$first false; else $json.= ',';
  1090.                             $json.= '{"id":'.$w->getId().', "nickname":"'.$w->getNickname().'"}';
  1091.                         }
  1092.                         break;
  1093.                     default: break;
  1094.                 }
  1095.             }
  1096.             else{
  1097.                 foreach($technician->getWarehouses() as $jt){
  1098.                     if($jt->getPermission() == "RW"){
  1099.                         if($first$first false; else $json.= ',';
  1100.                         $json.= '{"id":'.$jt->getWarehouse()->getId().', "nickname":"'.$jt->getWarehouse()->getNickname().'"}';
  1101.                     }
  1102.                 }
  1103.             }
  1104.             $json.= "]";
  1105.         
  1106.             return new Response(json_encode(array("code" => 200"success" => true"warehouses" => $json))); 
  1107.         }
  1108.         /**
  1109.          * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scheda", name="user_warehouse_transfer_sheet")
  1110.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId) || is_granted('transfer_edit', transferId)")
  1111.          */
  1112.         public function userWarehouseTransferSheet($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactoryFileSystem $fs)
  1113.         {    
  1114.             $em $this->mr->getManager('slave');
  1115.             $emMaster $this->mr->getManager('master');
  1116.             $session $request->getSession();
  1117.             $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1118.             $warehouse $em->getRepository('App\Entity\Slave\Warehouse')->findOneById($warehouseId);
  1119.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1120.             $transferType $transfer->getType();
  1121.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1122.             $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1123.             $session->remove('productRequestId');
  1124.             // RESETTO VARIABILI STAMPA
  1125.             $session->remove('ddtHeader');
  1126.             $session->remove('port');
  1127.             $session->remove('ddtCausal');
  1128.             $session->remove('appearance');
  1129.             $session->remove('numberGoods');
  1130.             $session->remove('weight');
  1131.             $session->remove('transport');
  1132.             $session->remove('courier');
  1133.             $session->remove('courierId');
  1134.             $session->remove('notes');
  1135.                     
  1136.             $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1137.             
  1138.             // EDIT TRANSFER DATA
  1139.             $formEdit $formFactory->createNamed("form_transfer_edit"ProductTransferEditType::class, $transfer);
  1140.             $formEdit->handleRequest($request);
  1141.             
  1142.             if($formEdit->isSubmitted()){
  1143.                 $valid true;
  1144.                 // Da destinazione a sede centrale
  1145.                 if($transfer->getType() == 'destination' && $transfer->getWarehouseTo()->getId() == $warehouse->getId() && $formEdit->get('ddtMandatory')->getData()){
  1146.                     if($valid$valid ValidationService::validateNotBlank($validator$formEdit->get('ddt'));
  1147.                     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'));
  1148.                 }
  1149.                 if($valid && $formEdit->isValid()){
  1150.                     
  1151.                     // Da destinazione a sede centrale
  1152.                     if($transfer->getType() == 'destination'){
  1153.                         $transfer->setWarehouseTo($formEdit->get('warehouse')->getData());
  1154.                         if($transfer->getWarehouseTo()->getId() == $warehouse->getId()){
  1155.                             $transfer->setDdtMandatory($formEdit->get('ddtMandatory')->getData());
  1156.                             if($formEdit->get('ddtMandatory')->getData()){
  1157.                                 $transfer->setDdt($formEdit->get('ddt')->getData());
  1158.                                 if($formEdit->get('file')->getData() != null)
  1159.                                     MediaService::uploadDocument($formEdit->get('file')->getData(), $uploadDir$transfer'signedDdt');
  1160.                             }
  1161.                         }
  1162.                     }
  1163.                     if($transfer->getType() == 'technician'){
  1164.                         $transfer->setDdtMandatory($formEdit->get('ddtMandatory')->getData());
  1165.                         if($transfer->getPhase() == 'inserted' || $transfer->getPhase() == 'inserted_editable'){
  1166.                             $transfer->setUserTo($formEdit->get('userTo')->getData());
  1167.                             $transfer->setWarehouseTo($formEdit->get('warehouse')->getData());
  1168.                         }
  1169.                     }
  1170.                     $this->addFlash('notice_success'"Dati aggiornati!");
  1171.                     $em->flush();
  1172.                     return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1173.                 }
  1174.                 else{
  1175.                     $session->set('openEditModal'true);
  1176.                 }
  1177.             }            
  1178.             // UPLOAD DDT
  1179.             $formDdt $formFactory->createNamed("form_transfer_ddt"ProductTransferDdtType::class, $transfer);
  1180.             $formDdt->handleRequest($request);
  1181.             
  1182.             if($formDdt->isSubmitted()){
  1183.                 $valid ValidationService::validateFile($validator$formDdt->get('ddtPath'), true$formDdt->get('file')->getData(), '10',array('pdf''jpg''jpeg''png'));
  1184.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1185.                 if($valid && $formDdt->isValid()){
  1186.                     
  1187.                     if($formDdt->get('file')->getData() != null){
  1188.                         if($formDdt->get('file')->getData()->guessExtension() == 'pdf')
  1189.                             MediaService::uploadDocument($formDdt->get('file')->getData(), $uploadDir$transfer'signedDdt');
  1190.                         else
  1191.                             MediaService::uploadImage($fs$formDdt->get('file')->getData(), null$uploadDir$transfer'signedDdt'1001000200false);
  1192.                     }
  1193.                     $transfer->setPhaseDdt('completed');
  1194.                    
  1195.                     $conditionHistoric $em->getRepository('App\Entity\Slave\ProductCondition')->findOneBySlug('historic');
  1196.                     $statusNotAvailable $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBySlug('not_available');
  1197.                     foreach($transfer->getProducts() as $jtppt){
  1198.                         $product $jtppt->getProduct();
  1199.                         ProductService::createProductTransferLog($em$product$jtppt->getTransfer(), $this->getUser(), null, new \Datetime(), 'scan');
  1200.                         ProductService::moveProductTransfer($em$jtppt$this->getUser(), $statusNotAvailable);
  1201.                         ProductService::createProductLog($em$product$this->getUser(), null'condition'$product->getCondition()->getValue(), $conditionHistoric->getValue());
  1202.                         $product->setCondition($conditionHistoric);
  1203.                     }
  1204.                     $transfer->setPhase('completed');
  1205.                     $transfer->setDatetimeCompletion(new \Datetime());
  1206.                     $this->addFlash('notice_success'"Consegna registrata!");
  1207.                     $em->flush();
  1208.                     return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1209.                 }
  1210.             }
  1211.             
  1212.             // CHANGE UPLOADED DDT
  1213.             $formChangeDdt $formFactory->createNamed("form_transfer_change_ddt"ProductTransferDdtType::class, $transfer);
  1214.             $formChangeDdt->handleRequest($request);
  1215.             
  1216.             if($formChangeDdt->isSubmitted()){
  1217.                 $valid ValidationService::validateFile($validator$formChangeDdt->get('ddtPath'), true$formChangeDdt->get('file')->getData(), '10',array('pdf''jpg''jpeg''png'));
  1218.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1219.                 if($valid && $formChangeDdt->isValid()){
  1220.                     
  1221.                     if($formChangeDdt->get('file')->getData() != null){
  1222.                         MediaService::removeDocument($fs$transfer->getSignedDdtPath(), $uploadDir);
  1223.                         if($formChangeDdt->get('file')->getData()->guessExtension() == 'pdf')
  1224.                             MediaService::uploadDocument($formChangeDdt->get('file')->getData(), $uploadDir$transfer'signedDdt');
  1225.                         else
  1226.                             MediaService::uploadImage($fs$formChangeDdt->get('file')->getData(), null$uploadDir$transfer'signedDdt'1001000200false);
  1227.                     }
  1228.                                         
  1229.                     $transfer->setPhaseDdt('completed');
  1230.                     $em->flush();
  1231.                     $this->addFlash('notice_success'"DDT caricato!");
  1232.                     return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transferId));
  1233.                 }
  1234.             }
  1235.             
  1236.             return $this->render('role/user/warehouse/transfer/sheet.html.twig', array(
  1237.                 'company' => $company,
  1238.                 'warehouse' => $warehouse,
  1239.                 'transfer' => $transfer,
  1240.                 'transferType' => $transferType,
  1241.                 'transferInternalDdtActive' => $transferInternalDdtActive,
  1242.                 'formEdit' => $formEdit->createView(),
  1243.                 'formDdt' => $formDdt->createView(),
  1244.                 'formChangeDdt' => $formChangeDdt->createView()
  1245.             ));
  1246.         }
  1247.         // RICEVI
  1248.             /**
  1249.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/ricevi", name="user_warehouse_transfer_receive")
  1250.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1251.              */
  1252.             public function userWarehouseTransferReceive($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1253.             {    
  1254.                 $em $this->mr->getManager('slave');
  1255.                 $session $request->getSession();
  1256.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1257.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1258.                 $transferType $transfer->getType();
  1259.                 $register = new ProductRegister();
  1260.                 $form $formFactory->createNamed("form_transfer_receive"ProductRegisterType::class, $register);
  1261.                 $form->handleRequest($request);
  1262.                 
  1263.                 if($form->isSubmitted()){
  1264.                     [$valid$methodRegister$errorMsg] = FormValidatorService::validateProductReceive($em$validator$form$transferType);
  1265.                     if($valid && $form->isValid()){
  1266.                         
  1267.                         $arrayProducerCodes = array();
  1268.                         $arraySupplierCodes = array();
  1269.                         $countProductsUpdated 0;
  1270.                         $countProductsNew 0;
  1271.                         $countProductsDouble 0;
  1272.                         $productsUpdatedMats "";
  1273.                         $productsDoubleMats "";
  1274.                         $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'transfer'));
  1275.                         $transfer->setPhase('product_insert');
  1276.                         if($methodRegister == 'gun'){
  1277.                             // IMPORTAZIONE TRAMITE SPARO
  1278.                             foreach($form->get('products')->getData() as $prod){
  1279.                                 if(!($prod->getCodeProducer() == null && $prod->getCodeSupplier() == null)){
  1280.                                     [$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);
  1281.                                     ProductService::createJtProductTransfer($em$product$transfer, new \Datetime());
  1282.                                 }
  1283.                             }
  1284.                         }
  1285.                         else{
  1286.                             // IMPORTAZIONE TRAMITE FILE
  1287.                             $result ProductService::checkProducts($form->get('file')->getData(), $form->get('separator')->getData());
  1288.                             
  1289.                             if($result['error'] != null){
  1290.                                 $this->addFlash('notice_danger'$result['msg']);
  1291.                                 return $this->redirect($request->server->get('HTTP_REFERER'));
  1292.                             }
  1293.                             else{
  1294.                                 $row 0;
  1295.                                 if(($handle fopen($form->get('file')->getData(), "r")) !== FALSE) {
  1296.                                     while(($data fgetcsv($handle1000$form->get('separator')->getData())) !== FALSE) {
  1297.                                         $data array_map("utf8_encode"$data);
  1298.                                         if($row 0){
  1299.                                             if(!($data[0] == null && $data[1] == null)){
  1300.                                                 [$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);
  1301.                                                 ProductService::createJtProductTransfer($em$product$transfer, new \Datetime());
  1302.                                             }
  1303.                                         }
  1304.                                         $row++;
  1305.                                     }
  1306.                                     fclose($handle);
  1307.                                 }
  1308.                             }
  1309.                         }
  1310.                         
  1311.                         $em->flush();
  1312.                         if($request->request->get('submit_action') == 'add_products')
  1313.                             return $this->redirectToRoute('user_warehouse_transfer_receive', array('warehouseId' => $warehouse->getId(), 'transferId' => $transfer->getId()));
  1314.                         else{
  1315.                             foreach($transfer->getProducts() as $jtppt){
  1316.                                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  1317.                                 ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1318.                                 ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1319.                             }
  1320.                             $transfer->setPhase('completed');
  1321.                             $transfer->setDatetimeCompletion(new \Datetime());
  1322.                             $em->flush();
  1323.                             $this->addFlash('notice_success''<br>Prodotti nuovi inseriti: '.$countProductsNew.'<br>Prodotti aggiornati: '.$countProductsUpdated.$productsUpdatedMats.'<br>Prodotti doppi ignorati: '.$countProductsDouble.$productsDoubleMats);
  1324.                             return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1325.                         }
  1326.                     }
  1327.                     else{
  1328.                         $receiveSuppliersIds = [];
  1329.                         foreach($form->get('suppliers')->getData() as $sup){
  1330.                             array_push($receiveSuppliersIds$sup->getId());
  1331.                         }
  1332.                         $session->set('receiveSuppliersIds'$receiveSuppliersIds);
  1333.                         if($errorMsg != ''){
  1334.                             $this->addFlash('notice_danger'$errorMsg);
  1335.                         }
  1336.                     }
  1337.                 }
  1338.                 
  1339.                 return $this->render('role/user/warehouse/transfer/receive.html.twig', array(
  1340.                     'transfer' => $transfer,
  1341.                     'transferType' => $transferType,
  1342.                     'warehouse' => $warehouse,
  1343.                     "form" => $form->createView()
  1344.                 ));
  1345.             }
  1346.             /**
  1347.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/ricevi-concludi", name="user_warehouse_transfer_receive_complete")
  1348.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1349.              */
  1350.             public function userWarehouseTransferReceiveComplete($warehouseId$transferIdRequest $request)
  1351.             {    
  1352.                 $em $this->mr->getManager('slave');
  1353.                 $session $request->getSession();
  1354.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1355.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1356.                 $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  1357.                 foreach($transfer->getProducts() as $jtppt){
  1358.                     ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1359.                     ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1360.                 }
  1361.                 $transfer->setPhase('completed');
  1362.                 $transfer->setDatetimeCompletion(new \Datetime());
  1363.                 $em->flush();
  1364.                 $this->addFlash('notice_success''Prodotti inseriti a magazzino');
  1365.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1366.             }
  1367.                         
  1368.             /**
  1369.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scarica-materiale", name="user_warehouse_transfer_download")
  1370.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1371.              */
  1372.             public function userWarehouseTransferDownload($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactoryFileSystem $fs)
  1373.             {    
  1374.                 $em $this->mr->getManager('slave');
  1375.                 $emMaster $this->mr->getManager('master');
  1376.                 $session $request->getSession();
  1377.                 $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1378.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1379.                 $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1380.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1381.                 // SCARICA MATERIALE
  1382.                 $form $formFactory->createNamed("form_transfer_download"ProductTransferDownloadType::class, $transfer, array('transferId' => $transfer->getId()));
  1383.                 $form->handleRequest($request);
  1384.                 
  1385.                 if($form->isSubmitted()){
  1386.     
  1387.                     $file $form->get('file')->getData();
  1388.                     $valid true;
  1389.                     if($transferInternalDdtActive && $transfer->isDdtMandatory()){
  1390.                         $valid ValidationService::validateFile($validator$form->get('ddtPath'), true$file10, array('pdf''jpg''jpeg''png'));
  1391.                     }
  1392.                     if($valid && $form->isValid()){
  1393.     
  1394.                         if($transferInternalDdtActive){
  1395.                             if($file != null){
  1396.                                 if($file->guessExtension() == 'pdf')
  1397.                                     MediaService::uploadDocument($file$uploadDir$transfer'signedDdt');
  1398.                                 else
  1399.                                     MediaService::uploadImage($fs$filenull$uploadDir$transfer'signedDdt'1001000200false);
  1400.                                 $transfer->setPhaseDdt('completed');
  1401.                             }
  1402.                             else{
  1403.                                 $transfer->setPhaseDdt('signed_missing');
  1404.                             }
  1405.                         }
  1406.                         $transfer->setPhase('completed');
  1407.                         $transfer->setDatetimeCompletion(new \Datetime());
  1408.                         [$status$toManage$toManagePriority] = $this->downloadSetByType($em$transfer);
  1409.                         
  1410.                         if($request->request->get('jtpptGunIds') != null){
  1411.                             $gunIds explode(','$request->request->get('jtpptGunIds'));
  1412.                             for($i 0$i sizeof($gunIds); $i++){
  1413.                                 $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($gunIds[$i]);
  1414.                                 ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1415.                                 ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1416.                                 $jtppt->setDownloadType('scan');
  1417.                                 $jtppt->getProduct()->setToManage($toManage);
  1418.                                 $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1419.                             }
  1420.                         }
  1421.                         
  1422.                         if($request->request->get('jtpptManualIds') != null){
  1423.                             $manualIds explode(','$request->request->get('jtpptManualIds'));
  1424.                             for($i 0$i sizeof($manualIds); $i++){
  1425.                                 $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($manualIds[$i]);
  1426.                                 ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1427.                                 ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'manual');
  1428.                                 $jtppt->setDownloadType('manual');
  1429.                                 $jtppt->getProduct()->setToManage($toManage);
  1430.                                 $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1431.                             }
  1432.                         }
  1433.                         $em->flush();
  1434.                         // I PRODOTTI NON SCARICATI LI RIMETTO NELLO STATO PRECEDENTE
  1435.                         foreach($transfer->getProducts() as $jtppt){
  1436.                             if(!$jtppt->isTransferOk()){
  1437.                                 if($jtppt->getProduct()->getCondition()->isStatusAvailable())
  1438.                                     $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'available'));
  1439.                                 else
  1440.                                     $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'not_available'));
  1441.                                 ProductService::createProductLog($em$jtppt->getProduct(), $this->getUser(), null'status'$jtppt->getProduct()->getStatus()->getValue(), $status->getValue());
  1442.                                 ProductService::createProductTransferBackLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'manual');
  1443.                                 $jtppt->getProduct()->setStatus($status);
  1444.                                 if($transfer->getWarehouseFrom()->isHeadquarter()){
  1445.                                     $jtppt->getProduct()->setToManage(true);
  1446.                                     $jtppt->getProduct()->setToManagePriority('5');
  1447.                                 }
  1448.                             }
  1449.                         }
  1450.                         
  1451.                         $em->flush();
  1452.                         
  1453.                         $this->addFlash('notice_success''Trasferimento scaricato correttamente!');
  1454.                         return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1455.                     }
  1456.                     else{
  1457.                         $session->set('openModalTransferComplete'true);
  1458.                         $session->set('jtpptGunIds'$request->request->get('jtpptGunIds'));
  1459.                         $session->set('jtpptManualIds'$request->request->get('jtpptManualIds'));
  1460.                     }
  1461.                 }
  1462.                 return $this->render('role/user/warehouse/transfer/download.html.twig', array(
  1463.                     'company' => $company,
  1464.                     'transfer' => $transfer,
  1465.                     'transferInternalDdtActive' => $transferInternalDdtActive,
  1466.                     "form" => $form->createView()
  1467.                 ));
  1468.             }
  1469.             /**
  1470.              * @Route("/{warehouseId}/scheda/trasferimento/scarica-materiale/parziale", name="user_warehouse_transfer_download_partial")
  1471.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1472.              */
  1473.             public function userWarehouseTransferDownloadPartial($warehouseIdRequest $request)
  1474.             {
  1475.                 $em $this->mr->getManager('slave');
  1476.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1477.                 [$status$toManage$toManagePriority] = $this->downloadSetByType($em$transfer);
  1478.                 if($request->request->get('jtpptGunIds') != null){
  1479.                     $gunIds explode(','$request->request->get('jtpptGunIds'));
  1480.                     for($i 0$i sizeof($gunIds); $i++){
  1481.                         $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($gunIds[$i]);
  1482.                         ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1483.                         ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'scan');
  1484.                         $jtppt->setDownloadType('scan');
  1485.                         $jtppt->getProduct()->setToManage($toManage);
  1486.                         $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1487.                     }
  1488.                 }
  1489.                 
  1490.                 if($request->request->get('jtpptManualIds') != null){
  1491.                     $manualIds explode(','$request->request->get('jtpptManualIds'));
  1492.                     for($i 0$i sizeof($manualIds); $i++){
  1493.                         $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($manualIds[$i]);
  1494.                         ProductService::moveProductTransfer($em$jtppt$this->getUser(), $status);
  1495.                         ProductService::createProductTransferLog($em$jtppt->getProduct(), $transfer$this->getUser(), null, new \Datetime(), 'manual');
  1496.                         $jtppt->setDownloadType('manual');
  1497.                         $jtppt->getProduct()->setToManage($toManage);
  1498.                         $jtppt->getProduct()->setToManagePriority($toManagePriority);
  1499.                     }
  1500.                 }
  1501.                 
  1502.                 $em->flush();
  1503.                 $this->addFlash('notice_success''Trasferimento parziale effettuato!');
  1504.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1505.             }
  1506.             /**
  1507.              * @Route("/{warehouseId}/scheda/trasferimento/scarica-materiale/cerca", name="user_warehouse_transfer_download_search")
  1508.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1509.              */
  1510.             public function userWarehouseTransferDownloadSearch($warehouseIdRequest $request)
  1511.             {
  1512.                 $em $this->mr->getManager('slave');
  1513.                 $session $request->getSession();
  1514.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1515.                 $productCode $request->request->get('productCode');
  1516.                 $jtpptId null;
  1517.                 $found false;
  1518.                 foreach($transfer->getProducts() as $jtppt){
  1519.                     if($productCode == $jtppt->getProduct()->getCodeProducer() || $productCode == $jtppt->getProduct()->getCodeSupplier()){
  1520.                         $jtpptId $jtppt->getId();
  1521.                         $found true;
  1522.                         break;
  1523.                     }
  1524.                 }
  1525.                 return new Response(json_encode(array("code" => 200"success" => true"found" => $found'jtpptId' => $jtpptId)));
  1526.             }
  1527.         //
  1528.         // INVIA
  1529.             /**
  1530.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/invia", name="user_warehouse_transfer_send")
  1531.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1532.              */
  1533.             public function userWarehouseTransferSend($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1534.             {
  1535.                 $em $this->mr->getManager('slave');
  1536.                 $emMaster $this->mr->getManager('master');
  1537.                 $session $request->getSession();
  1538.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1539.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1540.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1541.                 $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1542.                 $form $formFactory->createNamed("form_transfer_send"ProductTransferSendProductsType::class, $transfer);
  1543.                 $form->handleRequest($request);
  1544.                 
  1545.                 if($form->isSubmitted()){
  1546.                     [$valid$methodRegister$errorMsg$arrayProducts] = FormValidatorService::validateProductSend($em$validator$form$warehouse);
  1547.                     // Se magazzino principale e verso destinazione esterna -> Controllo se prodotti hanno il fornitore inserito
  1548.                     if($valid && $warehouse->isHeadquarter() && $transfer->getType() == 'destination'){
  1549.                         foreach($arrayProducts as $p){
  1550.                             $suppliersIds = [];
  1551.                             foreach($p->getSuppliers() as $sup){
  1552.                                 array_push($suppliersIds$sup->getId());
  1553.                             }
  1554.                             if(!in_array($transfer->getSupplier()->getId(), $suppliersIds)){
  1555.                                 $valid false;
  1556.                                 $errorMsg 'Il prodotto '.$p.' non ha il fornitore inserito '.$transfer->getSupplier();
  1557.                                 $form->get('file')->addError(new FormError('Il prodotto '.$p.' non ha il fornitore inserito '.$transfer->getSupplier()));
  1558.                                 break;
  1559.                             }
  1560.                         }
  1561.                     }
  1562.                     if($valid && $form->isValid()){
  1563.                         // Se i controlli sono andati a buon fine -> inserisco le JoinTableProductTransfer per le righe non vuote
  1564.                         $status $em->getRepository('App\Entity\Slave\ProductStatus')->findOneBy(array('slug' => 'transfer'));
  1565.                         foreach($arrayProducts as $product){
  1566.                             ProductService::createProductLog($em$product$this->getUser(), null'status'$product->getStatus()->getValue(), $status->getValue());
  1567.                             $product->setStatus($status);
  1568.                             ProductService::createJtProductTransfer($em$product$transfer, new \Datetime());
  1569.                         }
  1570.                         
  1571.                         if($transferInternalDdtActive || $transfer->getType() == 'destination'){
  1572.                             $transfer->setPhase('inserted_editable');
  1573.                             $transfer->setPhaseDdt('create');
  1574.                         }
  1575.                         else{
  1576.                             $transfer->setPhase('waiting_receiver');
  1577.                         }
  1578.                         $em->flush();
  1579.                         
  1580.                         $session->remove('transferStocksIds');
  1581.                         if($request->request->get('submit_action') == 'ddt')
  1582.                             return $this->redirectToRoute('user_warehouse_transfer_create_ddt', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1583.                         else
  1584.                             return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouse->getId(), 'transferId' => $transfer->getId()));
  1585.                     }
  1586.                     else{
  1587.                         $this->addFlash('notice_danger'$errorMsg);       
  1588.                         return $this->redirect($request->server->get('HTTP_REFERER'));
  1589.                     }
  1590.                 }
  1591.                 
  1592.                 return $this->render('role/user/warehouse/transfer/send.html.twig', array(
  1593.                     'company' => $company,
  1594.                     'transfer' => $transfer,
  1595.                     'warehouse' => $warehouse,
  1596.                     'transferInternalDdtActive' => $transferInternalDdtActive,
  1597.                     'actionEdit' => $session->get('action_edit'),
  1598.                     "form" => $form->createView()
  1599.                 ));
  1600.             }
  1601.             /**
  1602.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/crea-ddt", name="user_warehouse_transfer_create_ddt")
  1603.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1604.              */
  1605.             public function userWarehouseTransferCreateDdt($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1606.             {
  1607.                 $em $this->mr->getManager('slave');
  1608.                 $emMaster $this->mr->getManager('master');
  1609.                 $session $request->getSession();
  1610.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1611.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1612.                 $useCounterForTechnicians $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt_number_for_technicians'))->getValue();
  1613.                 $ddtHeaders $em->getRepository('App\Entity\Slave\DdtHeader')->findAll();
  1614.                 $products $em->getRepository('App\Entity\Slave\Product')->findByTransferOrderedByModel($transfer->getId());
  1615.                 [$arrayRows$total] = $this->createDdtProductsArray($products);
  1616.                 [$senderSupplierSlave$senderTechnician$senderWarehouseHeadquarter] = $this->searchDDTSender($em$transfer);
  1617.                 [$destinationExternal$destinationTechnician$destinationWarehouseHeadquarter] = $this->searchDDTDestination($em$transfer);
  1618.                 
  1619.                 $senderSupplier null;
  1620.                 if($senderSupplierSlave != null)
  1621.                     $senderSupplier $emMaster->getRepository('App\Entity\Master\Supplier')->findOneById($senderSupplierSlave->getIdSupplier());
  1622.                 $ddtPrint = new DdtPrint();
  1623.                 $form $formFactory->createNamed("form_ddt_print"DdtPrintType::class, $ddtPrint);
  1624.                 $form->handleRequest($request);
  1625.                 
  1626.                 if($form->isSubmitted()){
  1627.                     $valid true;
  1628.                     if($valid && $this->getUser()->getAccountTypology() != 'technician'$valid ValidationService::validateNotBlank($validator$form->get('ddtHeader'));
  1629.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('port'));
  1630.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('ddtCausal'));
  1631.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('appearance'));
  1632.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('numberGoods'));
  1633.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('weight'));
  1634.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('transport'));
  1635.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('courier'));
  1636.                     if($valid$valid ValidationService::validateNotBlank($validator$form->get('total'));
  1637.                     if($valid && $form->isValid()){
  1638.                     
  1639.                         if(!$useCounterForTechnicians && $transfer->getUserFrom() != null && $transfer->getUserFrom()->getAccountTypology() == "technician")
  1640.                             $transfer->setDdt($form->get('ddtTechnicianNumber')->getData());
  1641.                         $transfer->setDdtHeader($form->get('ddtHeader')->getData());
  1642.                         $em->flush();
  1643.                         
  1644.                         $session->set('port'$form->get('port')->getData());
  1645.                         $session->set('ddtCausal'$form->get('ddtCausal')->getData()->getId());
  1646.                         $session->set('appearance'$form->get('appearance')->getData());
  1647.                         $session->set('numberGoods'$form->get('numberGoods')->getData());
  1648.                         $session->set('weight'$form->get('weight')->getData());
  1649.                         $session->set('transport'$form->get('transport')->getData());
  1650.                         $session->set('courier'$form->get('courier')->getData());
  1651.                         $session->set('courierId'$form->get('courier')->getData()->getId());
  1652.                         $session->set('total'$form->get('total')->getData());
  1653.                         $session->set('notes'$form->get('notes')->getData());
  1654.                         return $this->redirectToRoute('user_warehouse_transfer_send_ddt', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1655.                     }
  1656.                 }
  1657.                 return $this->render('role/user/warehouse/transfer/ddt.html.twig', array(
  1658.                     'company' => $company,
  1659.                     'transfer' => $transfer,
  1660.                     'senderSupplier' => $senderSupplier,
  1661.                     'senderTechnician' => $senderTechnician,
  1662.                     'senderWarehouseHeadquarter' => $senderWarehouseHeadquarter,
  1663.                     'destinationExternal' => $destinationExternal,
  1664.                     'destinationTechnician' => $destinationTechnician,
  1665.                     'destinationWarehouseHeadquarter' => $destinationWarehouseHeadquarter,
  1666.                     'useCounterForTechnicians' => $useCounterForTechnicians,
  1667.                     'arrayRows' => $arrayRows,
  1668.                     'total' => $total,
  1669.                     'ddtHeaders' => $ddtHeaders,
  1670.                     "form" => $form->createView()
  1671.                 ));
  1672.             }
  1673.             /**
  1674.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/invia-ddt", name="user_warehouse_transfer_send_ddt")
  1675.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1676.              */
  1677.             public function userWarehouseTransferSendDdt($warehouseId$transferIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactoryFileSystem $fs)
  1678.             {
  1679.                 $em $this->mr->getManager('slave');
  1680.                 $emMaster $this->mr->getManager('master');
  1681.                 $session $request->getSession();
  1682.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1683.                 $useCounterForTechnicians $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt_number_for_technicians'))->getValue();
  1684.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1685.                 $oldDDt $transfer->getDdtPath();
  1686.                 $ddtCausal $em->getRepository('App\Entity\Slave\DdtCausal')->findOneById($session->get('ddtCausal'));
  1687.                 $ddtHeader $transfer->getDdtHeader();
  1688.                 $products $em->getRepository('App\Entity\Slave\Product')->findByTransferOrderedByModel($transfer->getId());
  1689.                 $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1690.                 [$arrayRows$total] = $this->createDdtProductsArray($products);
  1691.                 [$senderSupplierSlave$senderTechnician$senderWarehouseHeadquarter] = $this->searchDDTSender($em$transfer);
  1692.                 [$destinationExternal$destinationTechnician$destinationWarehouseHeadquarter] = $this->searchDDTDestination($em$transfer);
  1693.                 $senderSupplier null;
  1694.                 if($senderSupplierSlave != null)
  1695.                     $senderSupplier $emMaster->getRepository('App\Entity\Master\Supplier')->findOneById($senderSupplierSlave->getIdSupplier());
  1696.                 $html2pdf = new Html2Pdf('P''A4''it'true'UTF-8', array(5555), false);
  1697.                 $html2pdf->writeHTML($this->renderView('role/user/print/ddt.html.twig', array(
  1698.                     'company' => $company,
  1699.                     'transfer' => $transfer,
  1700.                     'senderSupplier' => $senderSupplier,
  1701.                     'senderTechnician' => $senderTechnician,
  1702.                     'senderWarehouseHeadquarter' => $senderWarehouseHeadquarter,
  1703.                     'destinationExternal' => $destinationExternal,
  1704.                     'destinationTechnician' => $destinationTechnician,
  1705.                     'destinationWarehouseHeadquarter' => $destinationWarehouseHeadquarter,
  1706.                     'useCounterForTechnicians' => $useCounterForTechnicians,
  1707.                     'arrayRows' => $arrayRows,
  1708.                     'total' => $session->get('total'),
  1709.                     'port' => $session->get('port'),
  1710.                     'ddtCausal' => $ddtCausal,
  1711.                     'appearance' => $session->get('appearance'),
  1712.                     'numberGoods' => $session->get('numberGoods'),
  1713.                     'weight' => $session->get('weight'),
  1714.                     'transport' => $session->get('transport'),
  1715.                     'courier' => $session->get('courier'),
  1716.                     'notes' => $session->get('notes')
  1717.                 )));
  1718.                 ob_end_clean();
  1719.                 
  1720.                 $fileName md5(uniqid()).'.pdf';
  1721.                 $html2pdf->Output($uploadDir.$fileName'F');
  1722.                 $transfer->setDdtPath($fileName);
  1723.                 $transfer->setPhase('waiting_receiver');
  1724.                 $transfer->setPhaseDdt('prepared');
  1725.                 
  1726.                 if($useCounterForTechnicians || ($transfer->getUserFrom() == null || $transfer->getUserFrom()->getAccountTypology() != "technician")){
  1727.                     if($transfer->getType() == "destination" && !$ddtHeader->isUseOneCounter()){
  1728.                         if($transfer->getDdt() == null){
  1729.                             $transfer->setDdt($ddtHeader->getExternalNumber());
  1730.                             $ddtHeader->setExternalNumber(intval($ddtHeader->getExternalNumber() + 1));
  1731.                         }
  1732.                     }
  1733.                     else{
  1734.                         if($transfer->getDdt() == null){
  1735.                             $transfer->setDdt($ddtHeader->getInternalNumber());
  1736.                             $ddtHeader->setInternalNumber(intval($ddtHeader->getInternalNumber() + 1));
  1737.                         }
  1738.                     }
  1739.                 }
  1740.                 $em->flush();
  1741.                 MediaService::removeDocument($fs$oldDDt$uploadDir);
  1742.                 $this->addFlash('notice_success''Trasferimento completato!');
  1743.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1744.             }
  1745.             
  1746.             /**
  1747.              * @Route("/{warehouseId}/scheda/trasferimento/invia-cerca", name="user_warehouse_transfer_send_search")
  1748.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1749.              */
  1750.             public function userWarehouseTransferSendSearch($warehouseIdRequest $request)
  1751.             {
  1752.                 $em $this->mr->getManager('slave');
  1753.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1754.                 $productCode $request->request->get('productCode');
  1755.                 $codeType $request->request->get('codeType');
  1756.                 $product null;
  1757.                 $error 'Il prodotto con il codice "'.$productCode.'" non Ã¨ stato trovato!';
  1758.                 $found false;
  1759.                 foreach($transfer->getWarehouseFrom()->getProducts() as $pr){
  1760.                     // CERCO TRA I PRODOTTI DEL MAGAZZINO DI PARTENZA
  1761.                     if($codeType == 'producer' && $productCode != null){
  1762.                         if(strtolower($pr->getCodeProducer()) == strtolower($productCode)){
  1763.                             $error $pr->canBeTransferredStatus($transfer);
  1764.                             $found true;
  1765.                             if($error == "ok")
  1766.                                 $product $pr;
  1767.                             break;
  1768.                         }
  1769.                     }
  1770.                     elseif($codeType == 'supplier' && $pr->getCodeSupplier() != null){
  1771.                         if(strtolower($pr->getCodeSupplier()) == strtolower($productCode)){
  1772.                             $error $pr->canBeTransferredStatus($transfer);
  1773.                             $found true;
  1774.                             if($error == "ok")
  1775.                                 $product $pr;
  1776.                             break;
  1777.                         }
  1778.                     }
  1779.                 }
  1780.                 if($found){
  1781.                     if($error == "ok"){
  1782.                         $json '{
  1783.                             "id":"'.$product->getId().'", 
  1784.                             "model":"'.$product->getModel()->getName().'",
  1785.                             "producer":"'.$product->getModel()->getProducer()->getName().'",
  1786.                             "condition":"'.$product->displayCondition('string-short').'",
  1787.                             "suppliers":"'.$product->displayStringSuppliers().'",
  1788.                             "codeProducer":"'.$product->getCodeProducer().'", 
  1789.                             "codeSupplier":"'.$product->getCodeSupplier().'"
  1790.                         }';
  1791.                         return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error'product' => $json)));
  1792.                     }
  1793.                 }
  1794.                 else{
  1795.                     if($productCode != null){
  1796.                         switch($codeType){
  1797.                             case 'producer'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeProducer' => $productCode]); break;
  1798.                             case 'supplier'$product $em->getRepository("App\Entity\Slave\Product")->findOneBy(['codeSupplier' => $productCode]); break;
  1799.                             default: break;
  1800.                         }
  1801.                     }
  1802.                     if($product != null)
  1803.                         $error 'Il prodotto non Ã¨ in questo magazzino! Si trova nel "'.$product->getActualWarehouse()->getNickname().'"';
  1804.                 }
  1805.                 return new Response(json_encode(array("code" => 200"success" => true"found" => $found"error" => $error'product' => null)));
  1806.             }
  1807.             
  1808.             /**
  1809.              * @Route("/{warehouseId}/scheda/trasferimento/invia-preselezionati", name="user_warehouse_transfer_send_preselected")
  1810.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1811.              */
  1812.             public function userWarehouseTransferSendPreselected($warehouseIdRequest $request)
  1813.             {
  1814.                 $em $this->mr->getManager('slave');
  1815.                 $product $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
  1816.                 $json '{
  1817.                     "id":"'.$product->getId().'", 
  1818.                     "model":'.json_encode($product->getModel()->getName()).',
  1819.                     "producer":'.json_encode($product->getModel()->getProducer()->getName()).', 
  1820.                     "condition":"'.$product->displayCondition('string-short').'",
  1821.                     "suppliers":"'.$product->displayStringSuppliers().'",
  1822.                     "codeProducer":"'.$product->getCodeProducer().'", 
  1823.                     "codeSupplier":"'.$product->getCodeSupplier().'"
  1824.                 }';
  1825.                 return new Response(json_encode(array("code" => 200"success" => true'product' => $json)));
  1826.             }
  1827.             
  1828.             /**
  1829.              * @Route("/{warehouseId}/scheda/trasferimento/invia-sposta-prodotto", name="user_warehouse_transfer_send_move_product")
  1830.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1831.              */
  1832.             public function userWarehouseTransferSendMoveProduct($warehouseIdRequest $request)
  1833.             {
  1834.                 $em $this->mr->getManager('slave');
  1835.                 $session $request->getSession();
  1836.                 $product $em->getRepository('App\Entity\Slave\Product')->findOneById($request->request->get('productId'));
  1837.                 $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  1838.                 ProductService::createProductTransferLog($em$productnull$this->getUser(), $warehouse, new \Datetime(), 'manual');                
  1839.                 $product->setActualWarehouse($warehouse);
  1840.                 $product->setDateLastTransfer(new \Datetime);
  1841.                 $em->flush();
  1842.                 return new Response(json_encode(array("code" => 200"success" => true)));
  1843.             }
  1844.             
  1845.             /**
  1846.              * @Route("/{warehouseId}/scheda/trasferimento/invia-elimina-prodotto-trasferimento", name="user_warehouse_transfer_send_delete_product")
  1847.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1848.              */
  1849.             public function userWarehouseTransferSendDeleteProduct($warehouseIdRequest $request)
  1850.             {
  1851.                 $em $this->mr->getManager('slave');
  1852.                 $transferInternalDdtActive $em->getRepository('App\Entity\Slave\Setting')->findOneBy(array('slug' => 'use_ddt'))->getValue();
  1853.                 $jtppt $em->getRepository('App\Entity\Slave\JoinTableProductProductTransfer')->findOneById($request->request->get('jtpptId'));
  1854.                 $transferId $jtppt->getTransfer()->getId();
  1855.                 $product $jtppt->getProduct();
  1856.                 $status ProductService::getStatusByCondition($em$product->getCondition());
  1857.                 ProductService::createProductLog($em$product$this->getUser(), null'status'$product->getStatus()->getValue(), $status->getValue());
  1858.                 $product->setStatus($status);
  1859.                 $em->remove($jtppt);
  1860.                 $em->flush();
  1861.                 // RESETTO LO FASE TRANSFER A CREA DDT --- SE PRESENTE
  1862.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1863.                 if($transferInternalDdtActive || $transfer->getType() == 'destination'){
  1864.                     $transfer->setPhase('inserted_editable');
  1865.                     $transfer->setPhaseDdt('create');
  1866.                 }
  1867.                 else{
  1868.                     if(sizeof($transfer->getProducts()) > 0){
  1869.                         $transfer->setPhase('waiting_receiver');
  1870.                     }
  1871.                     else
  1872.                         $transfer->setPhase('inserted');
  1873.                 }
  1874.                 $em->flush();
  1875.                 return new Response(json_encode(array("code" => 200"success" => true)));
  1876.             }
  1877.             
  1878.             /**
  1879.              * @Route("/{warehouseId}/scheda/trasferimento/invia-a-destinazione", name="user_warehouse_transfer_send_destination")
  1880.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1881.              */
  1882.             public function userWarehouseTransferSendDestination($warehouseIdRequest $request)
  1883.             {
  1884.                 $em $this->mr->getManager('slave');
  1885.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($request->request->get('transferId'));
  1886.                 $transfer->setPhase('to_download');
  1887.                 $transfer->setDatetimeSend(new \Datetime());
  1888.                 $em->flush();
  1889.                 $this->addFlash('notice_success''Trasferimento inviato correttamente!');
  1890.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1891.             }
  1892.             
  1893.             /**
  1894.              * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/torna-a-modifica-dati", name="user_warehouse_transfer_back_edit_data")
  1895.              * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1896.              */
  1897.             public function userWarehouseTransferBackEditData($warehouseId$transferIdRequest $requestFileSystem $fs)
  1898.             {
  1899.                 $em $this->mr->getManager('slave');
  1900.                 $emMaster $this->mr->getManager('master');
  1901.                 $session $request->getSession();
  1902.                 $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  1903.                 $uploadDir $this->params->get('kernel.project_dir').'/'.$this->params->get('web_path').'/companies/'.$company->getDirectoryPath().'/ddt/';
  1904.                 $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  1905.                 $oldDDt $transfer->getDDtPath();
  1906.                 $transfer->setPhase('inserted_editable');
  1907.                 $transfer->setPhaseDdt('create');
  1908.                 $transfer->setDdtPath(null);
  1909.                 MediaService::removeDocument($fs$oldDDt$uploadDir);
  1910.                 $em->flush();
  1911.                 $this->addFlash('notice_success''Trasferimento riportato alla fase precedente!');
  1912.                 return $this->redirectToRoute('user_warehouse_transfer_sheet', array('warehouseId' => $warehouseId'transferId' => $transfer->getId()));
  1913.             }
  1914.         //
  1915.     //
  1916.     // RICHIESTE TECNICI
  1917.         /**
  1918.          * @Route("/{warehouseId}/scheda/tecnico-richiedi-scorte/nuova", name="user_warehouse_product_request_new")
  1919.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1920.          */
  1921.         public function userWarehouseProductRequestNew($warehouseIdRequest $requestValidatorInterface $validatorFormFactoryInterface $formFactory)
  1922.         {    
  1923.             $em $this->mr->getManager('slave');
  1924.             $session $request->getSession();
  1925.             $warehouse $em->getRepository('App\Entity\Slave\Warehouse')->findOneById($warehouseId);
  1926.             $technician $this->getUser();
  1927.             $headquarterWarehouses $em->getRepository('App\Entity\Slave\Warehouse')->findBy(array('headquarter' => true));
  1928.             
  1929.             $productRequest = new ProductRequest();
  1930.             $form $formFactory->createNamed("form_product_request"ProductRequestType::class, $productRequest);
  1931.             $form->handleRequest($request);
  1932.             
  1933.             if($form->isSubmitted()){
  1934.                 $valid true;
  1935.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('warehouseHeadquarter'));
  1936.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('supplier'));
  1937.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('model'));
  1938.                 if($valid$valid ValidationService::validateNotBlank($validator$form->get('qty'));
  1939.                 if($valid && $form->isValid()){
  1940.                     $model $em->getRepository('App\Entity\Slave\ProductModel')->findOneById($form->get('model')->getData());
  1941.                     $supplier $em->getRepository('App\Entity\Slave\Supplier')->findOneById($form->get('supplier')->getData());
  1942.                     $qty $form->get('qty')->getData();
  1943.                     $json '{
  1944.                         "categoryId":"'.$model->getSubcategory()->getCategory()->getId().'",
  1945.                         "categoryName":"'.$model->getSubcategory()->getCategory()->getName().'",
  1946.                         "subcategoryId":"'.$model->getSubcategory()->getId().'",
  1947.                         "subcategoryName":"'.$model->getSubcategory()->getName().'",
  1948.                         "producerId":"'.$model->getProducer()->getId().'",
  1949.                         "producerName":"'.$model->getProducer()->getName().'",
  1950.                         "supplierName":"'.$supplier->getName().'",
  1951.                         "modelId":"'.$model->getId().'",
  1952.                         "modelName":"'.$model->getName().'",
  1953.                         "qty":"'.$qty.'"
  1954.                     }';
  1955.                     $productRequest->setTechnician($technician);
  1956.                     $productRequest->setWarehouse($warehouse);
  1957.                     $productRequest->setPhase('inserted');
  1958.                     $productRequest->setDatetime(new \Datetime());
  1959.                     $productRequest->setDetails($json);
  1960.                     $em->persist($productRequest);
  1961.                     $em->flush();
  1962.                     if($request->request->get('action') == 'add'){
  1963.                         $this->addFlash('notice_success''Richiesta aggiunta!');
  1964.                         return $this->redirectToRoute('user_warehouse_product_request_new', array('warehouseId' => $warehouse->getId()));
  1965.                     }
  1966.                     else{
  1967.                         $this->addFlash('notice_success''Richiesta inoltrata al magazzino centrale!');
  1968.                         return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouse->getId()));
  1969.                     }
  1970.                 }
  1971.             }
  1972.             
  1973.             return $this->render('role/user/warehouse/product_request.html.twig', array(
  1974.                 'warehouse' => $warehouse,
  1975.                 'headquarterWarehouses' => $headquarterWarehouses,
  1976.                 "form" => $form->createView()
  1977.             ));
  1978.         }
  1979.         /**
  1980.          * @Route("/{warehouseId}/scheda/richiesta-tecnico/elimina", name="user_warehouse_product_request_delete")
  1981.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1982.          */
  1983.         public function userWarehouseProductRequestDelete($warehouseIdRequest $request)
  1984.         {
  1985.             $em $this->mr->getManager('slave');
  1986.             $productRequest $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
  1987.             $em->remove($productRequest);
  1988.             $em->flush();
  1989.             $this->addFlash('notice_success''Richiesta eliminata!');
  1990.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  1991.         }
  1992.         
  1993.         /**
  1994.          * @Route("/{warehouseId}/scheda/richiesta-tecnico/prendi-in-carico", name="user_warehouse_product_request_take_charge")
  1995.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  1996.          */
  1997.         public function userWarehouseProductRequestTakeCharge($warehouseIdRequest $request)
  1998.         {
  1999.             $em $this->mr->getManager('slave');
  2000.             $productRequest $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
  2001.             $productRequest->setPhase('take_charge');
  2002.             $em->flush();
  2003.             $this->addFlash('notice_success''Richiesta presa in carico!');
  2004.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  2005.         }
  2006.         
  2007.         /**
  2008.          * @Route("/{warehouseId}/scheda/richiesta-tecnico/dichiara-gestita", name="user_warehouse_product_request_managed")
  2009.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  2010.          */
  2011.         public function userWarehouseProductRequestManaged($warehouseIdRequest $request)
  2012.         {
  2013.             $em $this->mr->getManager('slave');
  2014.             $productRequest $em->getRepository('App\Entity\Slave\ProductRequest')->findOneById($request->request->get('productRequestId'));
  2015.             $productRequest->setPhase('completed');
  2016.             $em->flush();
  2017.             $this->addFlash('notice_success''Richiesta gestita!');
  2018.             return $this->redirectToRoute('user_warehouse_sheet', array('warehouseId' => $warehouseId));
  2019.         }
  2020.     //
  2021.     // ESPORTAZIONI
  2022.         /**
  2023.          * @Route("/{warehouseId}/scorte/esporta-csv", name="user_warehouse_stocks_export_csv")
  2024.          * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  2025.          */
  2026.         public function userWarehouseStocksExportCsv($warehouseIdRequest $request)
  2027.         {    
  2028.             $em $this->mr->getManager('slave');
  2029.             $session $request->getSession();
  2030.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2031.             $products $em->getRepository('App\Entity\Slave\Product')->findByWarehouseOrdered($warehouse->getId());
  2032.             $response = new StreamedResponse();
  2033.             $response->setCallback(function() use($products) {
  2034.                 $handle fopen('php://output''w+');
  2035.                 fputcsv($handle, array('Stato','Modello','Matricola produttore','Matricola fornitore','Fornitori','Condizione','Ultimo ticket - Numero','Ultimo ticket - Termid','Ultimo ticket - Tipo intervento'), ";"'"'"\\");
  2036.                 foreach($products as $p){
  2037.             
  2038.                     $status null;
  2039.                     $model null;
  2040.                     $codeProducer '';
  2041.                     $codeSupplier '';
  2042.                     $condition null;
  2043.                     $suppliers '';
  2044.                     $lastTicket '';
  2045.                     $lastTermid '';
  2046.                     $lastOperation '';
  2047.                     if($p->getStatus() != null$status $p->getStatus()->getValue();
  2048.                     if($p->getModel() != null$model $p->getModel()->getName().' - '.$p->getModel()->getSubcategory()->getName().' - '.$p->getModel()->getSubcategory()->getCategory()->getName();
  2049.                     if($p->getCodeProducer() != null$codeProducer $p->getCodeProducer();
  2050.                     if($p->getCodeSupplier() != null$codeSupplier $p->getCodeSupplier();
  2051.                     if(sizeof($p->getSuppliers()) > 0){
  2052.                         $suppliers "";
  2053.                         $first true;
  2054.                         foreach($p->getSuppliers() as $s){
  2055.                             if($first$first false; else $suppliers.= ', ';
  2056.                             $suppliers.= $s->getName();
  2057.                         }
  2058.                     }
  2059.                     if($p->getCondition() != null$condition $p->getCondition()->getValue();
  2060.                     if($p->getLastTicket() != null && $p->getStatus()->getSlug() == "not_available"){
  2061.                         $lastTicket $p->getLastTicket()->getNumber();
  2062.                         $lastTermid $p->getLastTicket()->getTermid()->getCode();
  2063.                         $lastOperation $p->getLastOperationGroupType();
  2064.                     }
  2065.                     fputcsv($handle, array($status$model$codeProducer$codeSupplier$suppliers$condition$lastTicket$lastTermid$lastOperation), ";"'"'"\\");
  2066.                 }
  2067.                 fclose($handle);
  2068.             });
  2069.             
  2070.             $response->setStatusCode(200);
  2071.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Magazzino '.$warehouse->getNickname().' - Scorte.csv');
  2072.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2073.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2074.             return $response;
  2075.         }
  2076.         /**
  2077.          * @Route("/{warehouseId}/scorte/esporta-csv-filtrate/{status}", name="user_warehouse_stocks_export_csv_filtered")
  2078.          * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  2079.          */
  2080.         public function userWarehouseStocksExportCsvFiltered($warehouseId$statusRequest $request)
  2081.         {    
  2082.             $em $this->mr->getManager('slave');
  2083.             $session $request->getSession();
  2084.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2085.             $filters $session->get('user_warehouse_sheet_filters');
  2086.             $products $em->getRepository('App\Entity\Slave\Product')->findByWarehouseFiltered(false$warehouse->getId(), $status$filters1);
  2087.             $response = new StreamedResponse();
  2088.             $response->setCallback(function() use($products) {
  2089.                 $handle fopen('php://output''w+');
  2090.                 fputcsv($handle, array('Stato','Modello','Matricola produttore','Matricola fornitore','Fornitori','Condizione','Ultimo ticket - Numero','Ultimo ticket - Termid','Ultimo ticket - Tipo intervento'), ";"'"'"\\");
  2091.                 foreach($products as $p){
  2092.             
  2093.                     $status null;
  2094.                     $model null;
  2095.                     $codeProducer '';
  2096.                     $codeSupplier '';
  2097.                     $condition null;
  2098.                     $suppliers '';
  2099.                     $lastTicket '';
  2100.                     $lastTermid '';
  2101.                     $lastOperation '';
  2102.                     if($p->getStatus() != null$status $p->getStatus()->getValue();
  2103.                     if($p->getModel() != null$model $p->getModel()->getName().' - '.$p->getModel()->getSubcategory()->getName().' - '.$p->getModel()->getSubcategory()->getCategory()->getName();
  2104.                     if($p->getCodeProducer() != null$codeProducer $p->getCodeProducer();
  2105.                     if($p->getCodeSupplier() != null$codeSupplier $p->getCodeSupplier();
  2106.                     if(sizeof($p->getSuppliers()) > 0){
  2107.                         $suppliers "";
  2108.                         $first true;
  2109.                         foreach($p->getSuppliers() as $s){
  2110.                             if($first$first false; else $suppliers.= ', ';
  2111.                             $suppliers.= $s->getName();
  2112.                         }
  2113.                     }
  2114.                     if($p->getCondition() != null$condition $p->getCondition()->getValue();
  2115.                     if($p->getLastTicket() != null && $p->getStatus()->getSlug() == "not_available"){
  2116.                         $lastTicket $p->getLastTicket()->getNumber();
  2117.                         $lastTermid $p->getLastTicket()->getTermid()->getCode();
  2118.                         $lastOperation $p->getLastOperationGroupType();
  2119.                     }
  2120.                     fputcsv($handle, array($status$model$codeProducer$codeSupplier$suppliers$condition$lastTicket$lastTermid$lastOperation), ";"'"'"\\");
  2121.                 }
  2122.                 fclose($handle);
  2123.             });
  2124.             
  2125.             $response->setStatusCode(200);
  2126.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Magazzino '.$warehouse->getNickname().' - Scorte filtrate.csv');
  2127.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2128.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2129.             return $response;
  2130.         }
  2131.         
  2132.         /**
  2133.          * @Route("/{warehouseId}/scorte/esporta-csv-per-invio/{status}", name="user_warehouse_stocks_export_csv_for_send")
  2134.          * @Security("is_granted('view', 'warehouse') || is_granted('warehouse_view', warehouseId)")
  2135.          */
  2136.         public function userWarehouseStocksExportCsvForSend($warehouseId$statusRequest $request)
  2137.         {    
  2138.             $em $this->mr->getManager('slave');
  2139.             $session $request->getSession();
  2140.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2141.             $filters $session->get('user_warehouse_sheet_filters');
  2142.             $products $em->getRepository('App\Entity\Slave\Product')->findByWarehouseFiltered(false$warehouse->getId(), $status$filters1);
  2143.             $response = new StreamedResponse();
  2144.             $response->setCallback(function() use($products) {
  2145.                 $handle fopen('php://output''w+');
  2146.                 fputcsv($handle, array('Matricola produttore','Matricola fornitore'), ";"'"'"\\");
  2147.                 foreach($products as $p){
  2148.             
  2149.                     $codeProducer '';
  2150.                     $codeSupplier '';
  2151.                     if($p->getCodeProducer() != null$codeProducer $p->getCodeProducer();
  2152.                     if($p->getCodeSupplier() != null$codeSupplier $p->getCodeSupplier();
  2153.         
  2154.                     fputcsv($handle, array($codeProducer$codeSupplier), ";"'"'"\\");
  2155.                 }
  2156.                 fclose($handle);
  2157.             });
  2158.             
  2159.             $response->setStatusCode(200);
  2160.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Magazzino '.$warehouse->getNickname().' - Scorte per invio.csv');
  2161.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2162.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2163.             return $response;
  2164.         }
  2165.         
  2166.         /**
  2167.          * @Route("/{warehouseId}/scheda/trasferimento/{transferId}/scheda/esporta-csv", name="user_warehouse_transfer_sheet_export")
  2168.          * @Security("is_granted('edit', 'warehouse') || is_granted('warehouse_edit', warehouseId)")
  2169.          */
  2170.         public function userWarehouseTransferSheetExport($warehouseId$transferIdRequest $request)
  2171.         {    
  2172.             $em $this->mr->getManager('slave');
  2173.             $emMaster $this->mr->getManager('master');
  2174.             $session $request->getSession();
  2175.             $warehouse $em->getRepository("App\Entity\Slave\Warehouse")->findOneById($warehouseId);
  2176.             $transfer $em->getRepository('App\Entity\Slave\ProductTransfer')->findOneById($transferId);
  2177.             $jtppts $transfer->getProducts();
  2178.             $response = new StreamedResponse();
  2179.             $response->setCallback(function() use($jtppts) {
  2180.                 $handle fopen('php://output''w+');
  2181.                 fputcsv($handle, array("Fornitori""Modello""Matricola produttore",'Matricola fornitore'), ";"'"'"\\");
  2182.                 foreach($jtppts as $jtppt){
  2183.                     $suppliers $jtppt->getProduct()->displayStringSuppliers();
  2184.                     $productModel $jtppt->getProduct()->getModel()->getName();
  2185.                     $codeProducer '';
  2186.                     $codeSupplier '';
  2187.                     if($jtppt->getProduct()->getCodeProducer() != null$codeProducer $jtppt->getProduct()->getCodeProducer();
  2188.                     if($jtppt->getProduct()->getCodeSupplier() != null$codeSupplier $jtppt->getProduct()->getCodeSupplier();
  2189.                     fputcsv($handle, array($suppliers$productModel$codeProducer$codeSupplier), ";"'"'"\\");
  2190.                 }
  2191.                 fclose($handle);
  2192.             });
  2193.     
  2194.             $response->setStatusCode(200);
  2195.             $dispositionHeader $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT'Matricole trasferimento.csv');
  2196.             $response->headers->set('Content-Type''text/csv; charset=ISO-8859-15');
  2197.             $response->headers->set('Content-Disposition'$dispositionHeader);
  2198.     
  2199.             return $response;
  2200.         }
  2201.     //
  2202. }