src/Controller/User/UserController.php line 524

Open in your IDE?
  1. <?php
  2. namespace App\Controller\User;
  3. use App\Form\Model\Settings;
  4. use App\Form\Model\SearchIndex;
  5. use App\Form\Slave\SettingsType;
  6. use App\Form\Slave\SearchIndexType;
  7. use App\Service\FilterService;
  8. use App\Service\SessionService;
  9. use App\Service\TicketService;
  10. use App\Service\UtilitiesService;
  11. use App\Service\ValidationService;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use Knp\Component\Pager\PaginatorInterface;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  15. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  16. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  17. use Symfony\Component\Filesystem\Filesystem;
  18. use Symfony\Component\Form\FormFactoryInterface;
  19. use Symfony\Component\Form\FormError;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Response;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use Symfony\Component\Validator\Validator\ValidatorInterface;
  24. use Symfony\Component\Validator\Constraints as Assert;
  25. /**
  26.  * @Route("/scrivania")
  27.  * @Security("is_granted('ROLE_USER') and is_granted('active', user)")
  28.  */
  29. class UserController extends AbstractController
  30. {
  31.     private $mr;
  32.     private $params;
  33.     public function __construct(ManagerRegistry $mrParameterBagInterface $params)
  34.     {
  35.         $this->mr $mr;
  36.         $this->params $params;
  37.     }
  38.     public function calculateTicketAlarms($em$type$operationGroups$ticketStatuses$technicians)
  39.     {
  40.         $matrixTickets = array();
  41.         $matrixTechsTickets = array();
  42.         $ticketWithErrors null;
  43.         $ticketSuspensionRequest null;
  44.         $ticketAssigned null;
  45.         $ticketClosedPortal null;
  46.         
  47.         switch($type){
  48.             case 'administration':
  49.             case 'agency':
  50.             case 'commercial':
  51.             case 'warehouse':
  52.                 foreach($operationGroups as $og){
  53.                     $arrayTmp1 = array();
  54.                     $arrayTmp2 = array();
  55.                     foreach($ticketStatuses as $ts){
  56.                         $arrayTmp3 = array();
  57.                         $ticketsCount sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByStatusAndOperationGroup($ts->getId(), $og->getId()));
  58.                         array_push($arrayTmp3$ts->getId(), $ticketsCount);
  59.                         array_push($arrayTmp2$arrayTmp3);
  60.                     }
  61.                     array_push($arrayTmp1$og->getId(), $arrayTmp2);
  62.                     array_push($matrixTickets$arrayTmp1);
  63.                 }
  64.                 
  65.                 foreach($technicians as $t){
  66.                     $arrayTmp1 = array();
  67.                     $arrayTmp2 = array();
  68.                     foreach($operationGroups as $og){
  69.                         $arrayTmp3 = array();
  70.                         $ticketsCountAssigned sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByTechnicianOperationGroupAndStatus($t->getId(), $og->getId(), 'assigned'));
  71.                         $ticketsCountTakenCharge sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByTechnicianOperationGroupAndStatus($t->getId(), $og->getId(), 'taken_charge'));
  72.                         array_push($arrayTmp3$og->getId(), $ticketsCountAssigned$ticketsCountTakenCharge);
  73.                         array_push($arrayTmp2$arrayTmp3);
  74.                     }
  75.                     array_push($arrayTmp1$t->getId(), $arrayTmp2);
  76.                     array_push($matrixTechsTickets$arrayTmp1);
  77.                 }
  78.                 $ticketWithErrors $em->getRepository('App\Entity\Slave\Ticket')->findWithErrors();
  79.                 $ticketSuspensionRequest $em->getRepository('App\Entity\Slave\Ticket')->findBySuspensionRequestAndNotManaged();
  80.                 $ticketClosedPortal $em->getRepository('App\Entity\Slave\Ticket')->findClosedPortalAndNotPlatform();
  81.                 $ticketWaitingForMaterial $em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial();
  82.                 $interventionsOutcomeTypeCompleted $em->getRepository('App\Entity\Slave\Intervention')->findOutcomeTypeCompleted();
  83.                 $interventionWithoutActivities = array();
  84.                 foreach($interventionsOutcomeTypeCompleted as $int){
  85.                     if(sizeof($int->getActivities()) == 0)
  86.                         array_push($interventionWithoutActivities$int);
  87.                 }
  88.                 $interventionsZero $em->getRepository('App\Entity\Slave\Intervention')->findCompletedOrUavWithoutAmountTechnician();
  89.                 $interventionTariffOut = array();
  90.                 foreach($interventionsZero as $int){
  91.                     $hasTarOut false;
  92.                     foreach($int->getExtras() as $ext){
  93.                         if($ext->isTariffOut())
  94.                             $hasTarOut true;
  95.                     }
  96.                     if(!$hasTarOut)
  97.                         array_push($interventionTariffOut$int);
  98.                 }
  99.                 return [$matrixTickets$matrixTechsTickets$ticketWithErrors$ticketSuspensionRequest$ticketClosedPortal$ticketWaitingForMaterial$interventionTariffOut$interventionWithoutActivities];
  100.                 break;
  101.             case 'technician':
  102.                 foreach($operationGroups as $og){
  103.                     $arrayTmp1 = array();
  104.                     $arrayTmp2 = array();
  105.                     foreach($ticketStatuses as $ts){
  106.                         $arrayTmp3 = array();
  107.                         $ticketsCount sizeof($em->getRepository('App\Entity\Slave\Ticket')->findByUserStatusAndOperationGroup($this->getUser()->getId(), $ts->getId(), $og->getId()));
  108.                         array_push($arrayTmp3$ts->getId(), $ticketsCount);
  109.                         array_push($arrayTmp2$arrayTmp3);
  110.                     }
  111.                     array_push($arrayTmp1$og->getId(), $arrayTmp2);
  112.                     array_push($matrixTickets$arrayTmp1);
  113.                 }
  114.                 $ticketAssigned $em->getRepository('App\Entity\Slave\Ticket')->findByUserAndStatus($this->getUser()->getId(), 'assigned');
  115.                 return [$matrixTickets$ticketAssigned];
  116.                 break;
  117.             default: break;
  118.         }
  119.     }
  120.     public function calculateWarehouseAlarms($em$type)
  121.     {
  122.         switch($type){
  123.             case 'administration':
  124.             case 'agency':
  125.             case 'commercial':
  126.             case 'warehouse':
  127.                 $productModels $em->getRepository('App\Entity\Slave\ProductModel')->findAll();
  128.                 $headquarterWarehouses $em->getRepository('App\Entity\Slave\Warehouse')->findBy(array('headquarter' => true));
  129.                 $warehouseAlarms = array();
  130.                 foreach($headquarterWarehouses as $w){
  131.                     $tmp = array();
  132.                     $warehouseProductsToManage sizeof($em->getRepository('App\Entity\Slave\Product')->findByWarehouseToManage($w->getId()));
  133.                     $warehouseTransferIncoming $em->getRepository('App\Entity\Slave\ProductTransfer')->findIncomingByWarehouseAndNotCompleted($w->getId());
  134.                     $warehouseTransferOutput $em->getRepository('App\Entity\Slave\ProductTransfer')->findOutputByWarehouseAndNotCompleted($w->getId());
  135.                     $warehouseTransferWithoutDdtSigned $em->getRepository('App\Entity\Slave\ProductTransfer')->findWithoutDdtSignedByWarehouse($w->getId());
  136.                     $warehouseRequestTechnicians $em->getRepository('App\Entity\Slave\ProductRequest')->findByWarehouseAndNotCompleted($w->getId());
  137.                     $warehouseProductStocksRed = array();
  138.                     $warehouseProductStocksYellow = array();
  139.                     foreach($productModels as $pm){
  140.                         if(sizeof($pm->getSuppliers()) > 0){
  141.                             foreach($pm->getSuppliers() as $jtpms){
  142.                                 $tmpRed = array();
  143.                                 $tmpYellow = array();
  144.                                 $qty sizeof($em->getRepository('App\Entity\Slave\Product')->countByWarehouseAndModelAndSupplierAndStatus($w->getId(), $pm->getId(), $jtpms->getSupplier()->getId(), 'available'));
  145.                                 if($jtpms->isAlarmStockActive()){
  146.                                     if($qty <= $jtpms->getAlarmStockRed()){
  147.                                         array_push($tmpRed$qty$jtpms->getAlarmStockRed(), $pm->getName(), $jtpms->getSupplier()->getName());
  148.                                         array_push($warehouseProductStocksRed$tmpRed);
  149.                                     }
  150.                                     elseif($qty <= $jtpms->getAlarmStockYellow()){
  151.                                         array_push($tmpYellow$qty$jtpms->getAlarmStockYellow(), $jtpms->getAlarmStockRed(), $pm->getName(), $jtpms->getSupplier()->getName());
  152.                                         array_push($warehouseProductStocksYellow$tmpYellow);
  153.                                     }
  154.                                 }
  155.                             }
  156.                         }
  157.                     }
  158.                     array_push($tmp$w->getId(), $w->getNickname(), $warehouseProductsToManage$warehouseTransferIncoming$warehouseTransferOutput$warehouseTransferWithoutDdtSigned$warehouseRequestTechnicians$warehouseProductStocksRed$warehouseProductStocksYellow);
  159.                     array_push($warehouseAlarms$tmp);
  160.                 }
  161.                 return $warehouseAlarms;
  162.                 break;
  163.             case 'technician':
  164.                 $warehousesTransfers = array();
  165.                 foreach($this->getUser()->getWarehouses() as $jtuw){
  166.                     $transfersIncoming $em->getRepository('App\Entity\Slave\ProductTransfer')->findIncomingByWarehouseAndNotCompleted($jtuw->getWarehouse()->getId());
  167.                     $transfersOutput $em->getRepository('App\Entity\Slave\ProductTransfer')->findOutputByWarehouseAndNotCompleted($jtuw->getWarehouse()->getId());
  168.                     $transfersWithoutDdtSigned $em->getRepository('App\Entity\Slave\ProductTransfer')->findWithoutDdtSignedByWarehouse($jtuw->getWarehouse()->getId());
  169.                     $tmp = array();
  170.                     array_push($tmp$jtuw->getWarehouse()->getId(), $jtuw->getWarehouse()->getNickname(), $transfersIncoming$transfersOutput$transfersWithoutDdtSigned);
  171.                     array_push($warehousesTransfers$tmp);
  172.                 }
  173.                 return $warehousesTransfers;
  174.                 break;
  175.             default: break;
  176.         }
  177.     }
  178.     public function calculateProductsAlarms($em)
  179.     {
  180.         $productModels $em->getRepository('App\Entity\Slave\ProductModel')->findAll();
  181.         $productModelsSuppliers = array();
  182.         foreach($productModels as $pm){
  183.             if(sizeof($pm->getSuppliers()) == 0)
  184.                 array_push($productModelsSuppliers$pm);
  185.         }
  186.         $doubleProducts = array();
  187.         $codesProducerDouble $em->getRepository('App\Entity\Slave\Product')->findWithSameCodeByType('codeProducer');
  188.         $codesSupplierDouble $em->getRepository('App\Entity\Slave\Product')->findWithSameCodeByType('codeSupplier');
  189.         foreach($codesProducerDouble as $cpd){
  190.             $tmp = array();
  191.             $prs $em->getRepository('App\Entity\Slave\Product')->findBy(array('codeProducer' => $cpd->getCodeProducer()));
  192.             switch(sizeof($prs)){
  193.                 case 2$tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier()); break;
  194.                 case 3$tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier(), $prs[2]->getId(), $prs[2]->getCodeProducer(), $prs[2]->getCodeSupplier()); break;
  195.                 default: break;
  196.             }
  197.             if(sizeof($tmp) > 0)
  198.                 array_push($doubleProducts$tmp);
  199.         }
  200.         
  201.         foreach($codesSupplierDouble as $csd){
  202.             $tmp = array();
  203.             $prs $em->getRepository('App\Entity\Slave\Product')->findBy(array('codeSupplier' => $csd->getCodeSupplier()));
  204.             switch(sizeof($prs)){
  205.                 case 2$tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier()); break;
  206.                 case 3$tmp = array($prs[0]->getId(), $prs[0]->getCodeProducer(), $prs[0]->getCodeSupplier(), $prs[1]->getId(), $prs[1]->getCodeProducer(), $prs[1]->getCodeSupplier(), $prs[2]->getId(), $prs[2]->getCodeProducer(), $prs[2]->getCodeSupplier()); break;
  207.                 default: break;
  208.             }
  209.             if(sizeof($tmp) > 0)
  210.                 array_push($doubleProducts$tmp);
  211.         }
  212.         return [$productModelsSuppliers$doubleProducts];
  213.     }
  214.     public function searchValues($request$formFactory$validator$em$session)
  215.     {
  216.         $results = array();
  217.         $type '';
  218.         $like '';
  219.         $value '';
  220.         $subjects = array();
  221.         $subjectTicket = array('TermID' => 'termid''N° Ticket' => 'n_ticket');
  222.         $subjectProduct = array('Matricola produttore' => 'code_producer''Matricola fornitore' => 'code_supplier');
  223.         $subjectTransfer = array('N° DDT' => 'ddt');
  224.         $subjectClient = array('Cliente insegna' => 'client_nickname''Cliente telefono' => 'client_phone');
  225.         
  226.         if($this->getUser()->canRead('ticket')) array_push($subjects$subjectTicket);
  227.         if($this->getUser()->canRead('product')) array_push($subjects$subjectProduct);
  228.         if($this->getUser()->canRead('transfer')) array_push($subjects$subjectTransfer);
  229.         if($this->getUser()->canRead('anagraphic_client')) array_push($subjects$subjectClient);
  230.         $searchIndex = new SearchIndex();
  231.         $formSearch $formFactory->createNamed("form_settings"SearchIndexType::class, $searchIndex, array('types' => $subjects));
  232.         $formSearch->handleRequest($request);
  233.         if($formSearch->isSubmitted()){
  234.             $valid true;
  235.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSearch->get('type'));
  236.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSearch->get('like'));
  237.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSearch->get('value'));
  238.             
  239.             if($valid && $formSearch->isValid()){
  240.                 $type $formSearch->get('type')->getData();
  241.                 $like $formSearch->get('like')->getData();
  242.                 $value $formSearch->get('value')->getData();
  243.                 switch($like){
  244.                     case 'like'$value '%'.$value.'%'; break;
  245.                     case 'from_left'$value $value.'%'; break;
  246.                     case 'from_right'$value '%'.$value; break;
  247.                     default: break;
  248.                 }
  249.                 switch($type){
  250.                     case 'termid'
  251.                     case 'n_ticket':
  252.                         $results $em->getRepository('App\Entity\Slave\Ticket')->searchByValue($type$value);
  253.                         break;
  254.                     case 'code_supplier'
  255.                     case 'code_producer':
  256.                         $results $em->getRepository('App\Entity\Slave\Product')->searchByValue($type$value);
  257.                         break;
  258.                     case 'ddt':
  259.                         $results $em->getRepository('App\Entity\Slave\ProductTransfer')->searchByValue($type$value);
  260.                         break;
  261.                     case 'client_nickname':
  262.                         $results $em->getRepository('App\Entity\Slave\Client')->searchByValue($type$value);
  263.                         break;
  264.                     case 'client_phone':
  265.                         $results $em->getRepository('App\Entity\Slave\ClientPhone')->searchByValue($type$value);
  266.                         break;
  267.                     default: break;
  268.                 }
  269.             }
  270.         }
  271.         return [$formSearch$results$type$like$value];
  272.     }
  273.     /**
  274.      * @Route("/", name="user_index")
  275.      */
  276.     public function userIndex(Request $requestPaginatorInterface $paginatorFormFactoryInterface $formFactoryValidatorInterface $validator)
  277.     {    
  278.         $em $this->mr->getManager('slave');
  279.         $emMaster $this->mr->getManager('master');
  280.         $session $request->getSession();
  281.         $session->remove('ticketId');
  282.         // In base al tipo di account mostro nella home differenti schermate
  283.         switch($this->getUser()->getAccountTypology()){
  284.             case 'administration'// Amministrazione
  285.             case 'agency'// Agenzia
  286.             case 'commercial'// Commerciale
  287.             case 'warehouse'// Magazzino
  288.                 $operationGroups $em->getRepository('App\Entity\Slave\OperationGroup')->findAll();
  289.                 $ticketStatuses $em->getRepository('App\Entity\Slave\TicketStatus')->findAll();
  290.                 $technicians $em->getRepository('App\Entity\Slave\User')->findTechniciansActive();
  291.                 [$matrixTickets$matrixTechsTickets$ticketWithErrors$ticketSuspensionRequest$ticketClosedPortal$ticketWaitingForMaterial$interventionTariffOut$interventionWithoutActivities] = $this->calculateTicketAlarms($em'agency'$operationGroups$ticketStatuses$technicians);
  292.                 $interventionExtras $em->getRepository('App\Entity\Slave\InterventionExtra')->findBy(array('managed' => false));
  293.                 $ticketReminders $em->getRepository('App\Entity\Slave\TicketReminder')->findDashboardReminders();
  294.                 $operationsWithoutTariffs $em->getRepository('App\Entity\Slave\Operation')->findWithoutTariffs();
  295.                 $operationsWithoutKeyMappings $em->getRepository('App\Entity\Slave\Operation')->findWithoutKeyMappings();
  296.                 $warehouseAlarms $this->calculateWarehouseAlarms($em'agency');
  297.                 [$productModelsSuppliers$doubleProducts] = $this->calculateProductsAlarms($em);
  298.                 [$formSearch$results$type$like$value] = $this->searchValues($request$formFactory$validator$em$session);
  299.                 return $this->render('role/user/index.html.twig', array(
  300.                     'operationGroups' => $operationGroups,
  301.                     'technicians' => $technicians,
  302.                     'ticketStatuses' => $ticketStatuses,
  303.                     'matrixTickets' => $matrixTickets,
  304.                     'matrixTechsTickets' => $matrixTechsTickets,
  305.                     'ticketWithErrors' => $ticketWithErrors,
  306.                     'ticketSuspensionRequest' => $ticketSuspensionRequest,
  307.                     'ticketClosedPortal' => $ticketClosedPortal,
  308.                     'ticketWaitingForMaterial' => $ticketWaitingForMaterial,
  309.                     'interventionWithoutActivities' => $interventionWithoutActivities,
  310.                     'interventionTariffOut' => $interventionTariffOut,
  311.                     'interventionExtras' => $interventionExtras,
  312.                     'operationsWithoutTariffs' => $operationsWithoutTariffs,
  313.                     'operationsWithoutKeyMappings' => $operationsWithoutKeyMappings,
  314.                     'warehouseAlarms' => $warehouseAlarms,
  315.                     'productModelsSuppliers' => $productModelsSuppliers,
  316.                     'doubleProducts' => $doubleProducts,
  317.                     'ticketReminders' => $ticketReminders,
  318.                     'formSearch' => $formSearch->createView(),
  319.                     'searchResults' => $results,
  320.                     'searchType' => $type,
  321.                     'searchLike' => $like,
  322.                     'searchValue' => $value
  323.                 ));
  324.                 break;
  325.             case 'technician'// Tecnici
  326.                 $operationGroups $em->getRepository('App\Entity\Slave\OperationGroup')->findAll();
  327.                 $ticketStatuses $em->getRepository('App\Entity\Slave\TicketStatus')->findWithoutToAssignAndWrong();
  328.                 [$matrixTickets$ticketAssigned] = $this->calculateTicketAlarms($em'technician'$operationGroups$ticketStatusesnull);
  329.                 $ticketReminders $em->getRepository('App\Entity\Slave\TicketReminder')->findDashboardRemindersByTechnician($this->getUser()->getId());
  330.                 $warehousesTransfers $this->calculateWarehouseAlarms($em'technician');
  331.                 return $this->render('role/user/index.html.twig', array(
  332.                     'operationGroups' => $operationGroups,
  333.                     'ticketStatuses' => $ticketStatuses,
  334.                     'matrixTickets' => $matrixTickets,
  335.                     'ticketAssigned' => $ticketAssigned,
  336.                     'warehousesTransfers' => $warehousesTransfers,
  337.                     'ticketReminders' => $ticketReminders
  338.                 ));
  339.                 break;
  340.             case 'administration'// Amministrazione
  341.                 return $this->render('role/user/index.html.twig');
  342.                 break;
  343.             case 'commercial'// Commerciale
  344.                 return $this->render('role/user/index.html.twig');
  345.                 break;
  346.             default: break;
  347.         }
  348.     }
  349.     /**
  350.      * @Route("/ticket-tab-ricarica/{tab}", name="user_index_ticket_tab_refresh")
  351.      */
  352.     public function userIndexTicketTabRefresh(Request $request$tab)
  353.     {    
  354.         $em $this->mr->getManager('slave');
  355.         switch($tab){
  356.             case 'waiting_for_material':
  357.                 $icon 'icon-truck-loading';
  358.                 $text 'In attesa di materiale ('.sizeof($em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial()).')';
  359.                 break;
  360.             default: break;
  361.         }
  362.         return $this->render('components/twig/index/tab_label.html.twig', ['icon' => $icon'text' => $text]);
  363.     }
  364.     /**
  365.      * @Route("/materiale-mancante-ricarica", name="user_index_ticket_unlock_refresh")
  366.      */
  367.     public function userIndexTicketUnlockRefresh(Request $request)
  368.     {    
  369.         $em $this->mr->getManager('slave');
  370.         $ticketWaitingForMaterial $em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial();
  371.         return $this->render('components/twig/index/ticket_waiting.html.twig', ['ticketWaitingForMaterial' => $ticketWaitingForMaterial]);
  372.     }
  373.         
  374.     /**
  375.      * @Route("/tecnico-ricerca-reindirizza", name="user_search_redirect")
  376.      */
  377.     public function userSearchRedirect(Request $request)
  378.     {    
  379.         $em $this->mr->getManager('slave');
  380.         $session $request->getSession();
  381.         $type $request->request->get('type');
  382.         switch($type){
  383.             case 'ticket':
  384.                 $session->set('numberOrTermid'$request->request->get('number'));
  385.                 return $this->redirectToRoute('user_ticket_list');
  386.                 break;
  387.             case 'product'
  388.                 $session->set('codeProducer'$request->request->get('codeProducer'));
  389.                 $session->set('codeSupplier'$request->request->get('codeSupplier'));                
  390.                 return $this->redirectToRoute('user_product_search');
  391.                 break;
  392.             case 'client'
  393.                 $session->set('clientNickname'$request->request->get('clientNickname'));
  394.                 $session->set('clientPhone'$request->request->get('clientPhone'));                
  395.                 return $this->redirectToRoute('user_anagraphic_clients');
  396.                 break;
  397.             default: break;
  398.         }
  399.     }
  400.     
  401.     /**
  402.      * @Route("/impostazioni", name="user_settings")
  403.      */
  404.     public function userSettings(Request $requestFormFactoryInterface $formFactoryValidatorInterface $validator)
  405.     {    
  406.         $em $this->mr->getManager('slave');
  407.         $settings $em->getRepository('App\Entity\Slave\Setting')->findAll();
  408.         $settingsModel = new Settings();
  409.         $formSettings $formFactory->createNamed("form_settings"SettingsType::class, $settingsModel);
  410.         $formSettings->handleRequest($request);
  411.         if($formSettings->isSubmitted()){
  412.             $valid ValidationService::ValidateNotBlank($validator$formSettings->get('daysStationary'));
  413.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSettings->get('ticketTechnicianMinutesTakeCharge'));
  414.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSettings->get('ticketSuspensionAgencyEmail'));
  415.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSettings->get('ticketUAVAgencyEmail'));
  416.             if($valid$valid ValidationService::validateMultipleEmailString($validator$formSettings->get('ticketSuspensionAgencyEmail'), '/\,/');
  417.             if($valid$valid ValidationService::validateMultipleEmailString($validator$formSettings->get('ticketUAVAgencyEmail'), '/\,/');
  418.             
  419.             if($valid && $formSettings->isValid()){
  420.                 foreach($settings as $s){
  421.                     switch($s->getSlug()){
  422.                         case 'warehouse_register_stock'$s->setValue($formSettings->get('warehouseRegisterStock')->getData()); break;
  423.                         case 'warehouse_recover_stock'$s->setValue($formSettings->get('warehouseRecoverStock')->getData()); break;
  424.                         case 'warehouse_technician_product_conditions'
  425.                             $first true;
  426.                             $stringConditions '';
  427.                             foreach($formSettings->get('warehouseTechnicianProductConditions')->getData() as $pc){
  428.                                 if($first$first false; else $stringConditions.= ',';
  429.                                 $stringConditions.= $pc->getId();
  430.                             }
  431.                             $s->setValue($stringConditions);
  432.                             break;
  433.                         case 'use_ddt'$s->setValue($formSettings->get('useDdt')->getData()); break;
  434.                         case 'ddt_internal_mandatory'$s->setValue($formSettings->get('ddtInternalMandatory')->getData()); break;
  435.                         case 'days_stationary'$s->setValue($formSettings->get('daysStationary')->getData()); break;
  436.                         case 'ticket_suspension_agency_email'$s->setValue($formSettings->get('ticketSuspensionAgencyEmail')->getData()); break;
  437.                         case 'ticket_uav_agency_email'$s->setValue($formSettings->get('ticketUAVAgencyEmail')->getData()); break;
  438.                         case 'ticket_auto_assign'$s->setValue($formSettings->get('ticketAutoAssign')->getData());  break;
  439.                         case 'ticket_auto_operation_tariff_amount'$s->setValue($formSettings->get('ticketAutoOperationTariffAmount')->getData()); break;
  440.                         case 'ticket_backoffice_manage'$s->setValue($formSettings->get('ticketBackofficeManage')->getData()); break;
  441.                         case 'ticket_technician_send_cancel_email'$s->setValue($formSettings->get('ticketTechnicianSendCancelEmail')->getData()); break;
  442.                         case 'ticket_technician_minutes_take_charge'$s->setValue($formSettings->get('ticketTechnicianMinutesTakeCharge')->getData()); break;
  443.                         case 'ticket_suspension_unlock_same_technician'$s->setValue($formSettings->get('ticketSuspensionUnlockSameTechnician')->getData()); break;
  444.                         case 'ticket_suspension_unlock_by_technician'$s->setValue($formSettings->get('ticketSuspensionUnlockByTechnician')->getData()); break;
  445.                         case 'product_model_default_stock_active'$s->setValue($formSettings->get('productModelDefaultStockActive')->getData()); break;
  446.                         case 'product_model_default_stock_yellow'$s->setValue($formSettings->get('productModelDefaultStockYellow')->getData()); break;
  447.                         case 'product_model_default_stock_red'$s->setValue($formSettings->get('productModelDefaultStockRed')->getData()); break;
  448.                         case 'use_ddt_number_for_technicians'$s->setValue($formSettings->get('useDdtNumberForTechnicians')->getData()); break;
  449.                         case 'script_sunday_active'$s->setValue($formSettings->get('scriptSundayActive')->getData()); break;
  450.                         case 'outcome_completed_default'$s->setValue($formSettings->get('outcomeCompletedDefault')->getData()->getId()); break;
  451.                         default: break;
  452.                     }
  453.                 }
  454.                 $em->flush();
  455.                 $this->addFlash('notice_success'"Impostazioni aggiornate");
  456.                 return $this->redirectToRoute('user_settings');
  457.             }
  458.         }
  459.         return $this->render('role/user/settings.html.twig', array(
  460.             'settings' => $settings,
  461.             'formSettings' => $formSettings->createView()
  462.         ));
  463.     }
  464.     
  465.     /**
  466.      * @Route("/utility", name="user_utility")
  467.      */
  468.     public function userUtility(Request $request)
  469.     {    
  470.         return $this->render('role/user/utility.html.twig');
  471.     }
  472.     
  473.     /**
  474.      * @Route("/utility/esegui-comando", name="user_utility_execute_command")
  475.      */
  476.     public function userUtilityExecuteCommand(Request $request)
  477.     {    
  478.         switch($request->request->get('command')){
  479.             case 'clear_session':
  480.                 SessionService::resetUserSession($request->getSession());
  481.                 $this->addFlash('notice_success''Sessione resettata correttamente!');
  482.                 break;
  483.             default: break;
  484.         }
  485.         return $this->redirectToRoute('user_utility');
  486.     }
  487.     // POST DI AGGIORNAMENTO
  488.         /**
  489.         * @Route("/economico-carica-tab", name="user_economic_tab")
  490.         */
  491.         public function userEconomicTab(Request $request)
  492.         {
  493.             $em $this->mr->getManager('slave');
  494.             $emMaster $this->mr->getManager('master');
  495.             $session $request->getSession();
  496.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  497.             $month $request->request->get('month');
  498.             $year $request->request->get('year');
  499.             $operationGroupsNotUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
  500.             $operationGroupUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
  501.             // Se UserId = 0 --> Significa che è l'aziendale
  502.             if($request->request->get('userId') != 0){
  503.                 $user $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
  504.                 $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findByTechnicianToPayByYearAndMonth($user->getId(), $year$month);
  505.             }
  506.             else{                
  507.                 $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year$month);
  508.             }
  509.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  510.             $interventions = array();
  511.             foreach($allInterventions as $int){
  512.                 $toCalculate true;
  513.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  514.                     $toCalculate false;
  515.                 if($toCalculate)
  516.                     array_push($interventions$int);
  517.             }
  518.             $arrayProvincesIds = array();
  519.             $arrayProvinces = array();
  520.             foreach($interventions as $int){
  521.                 if(!in_array($int->getTicket()->getIdProvince(), $arrayProvincesIds)){
  522.                     array_push($arrayProvincesIds$int->getTicket()->getIdProvince());
  523.                     array_push($arrayProvinces$emMaster->getRepository('App\Entity\Master\Province')->findOneById($int->getTicket()->getIdProvince()));
  524.                 }
  525.             }
  526.             $matrixResults = array();
  527.             foreach($arrayProvinces as $province){
  528.                 $arrayRow = array();
  529.                 array_push($arrayRow$province->getSign());
  530.                 $arrayCells = array();
  531.                 $rowAmount 0;
  532.                 $rowCount 0;
  533.                 $cellUavAmount 0;
  534.                 $cellUavCount 0;
  535.                 foreach($operationGroupsNotUav as $og){
  536.                     $arrayCell = array();
  537.                     $cellAmount 0;
  538.                     $cellCount 0;
  539.                     foreach($interventions as $int){
  540.                         # SE --- gruppo operazione intervento == gruppo operazione ciclo AND id provincia cliente == id provincia ciclo AND provincia ciclo comprende tutti i CAP o se CAP cliente compreso nei CAPS del tecnico
  541.                         if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTicket()->getIdProvince() == $province->getId()){
  542.                             # SE completato -> aggiungo
  543.                             if($int->getOutcomeType()->getSlug() == 'completed'){
  544.                                 $cellAmount += $int->calculateTotalTechnicianAmount();
  545.                                 $cellCount++;
  546.                             }
  547.                             # SE uav -> aggiungo alla colonna finale
  548.                             if($int->getOutcomeType()->getSlug() == 'empty'){
  549.                                 $cellUavAmount += $int->calculateTotalTechnicianAmount();
  550.                                 $cellUavCount++;
  551.                             }
  552.                         }
  553.                     }
  554.                     $rowAmount += $cellAmount;
  555.                     $rowCount += $cellCount;
  556.                     array_push($arrayCell'[<span class="count_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellCount.'</span>] <span class="amount_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellAmount2'.''').'</span> €'$og->getId(), $og->getValue());
  557.                     array_push($arrayCells$arrayCell);
  558.                 }
  559.                 $test null;
  560.                 foreach($operationGroupUav as $og){
  561.                     $arrayCell = array();
  562.                     array_push($arrayCell'[<span class="count_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellUavCount.'</span>] <span class="amount_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellUavAmount2'.''').'</span> €'$og->getId(), $og->getValue());
  563.                     array_push($arrayCells$arrayCell);
  564.                 }
  565.                 $rowAmount += $cellUavAmount;
  566.                 $rowCount += $cellUavCount;
  567.                 array_push($arrayRow$arrayCells'['.$rowCount.'] '.number_format($rowAmount2'.''').' €');
  568.                 array_push($matrixResults$arrayRow);
  569.             }
  570.             $response = array("code" => 200"success" => true"matrixResults" => $matrixResults);
  571.             return new Response(json_encode($response));
  572.         }
  573.         /**
  574.          * @Route("/economico-aggiorna", name="user_economic_update")
  575.          */
  576.         public function userEconomicUpdate(Request $request)
  577.         {    
  578.             $em $this->mr->getManager('slave');
  579.             $emMaster $this->mr->getManager('master');
  580.             $session $request->getSession();
  581.             $province $emMaster->getRepository('App\Entity\Master\Province')->findOneBySign($request->request->get('taProvince'));
  582.             $year $request->request->get('year');
  583.             $month $request->request->get('month');
  584.             $operationGroupId $request->request->get("operationGroupId");
  585.             $operationGroup $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
  586.             // Se UserId = 0 --> Significa che è l'aziendale
  587.             if($request->request->get('userId') != 0){
  588.                 $user $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
  589.                 if($operationGroup->isUav())
  590.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianProvinceToPayByYearAndMonthUav($user->getId(), $province->getId(), $year$month);
  591.                 else
  592.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianProvinceAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$user->getId(), $province->getId(), $year$month);
  593.             }
  594.             else{
  595.                 if($operationGroup->isUav())
  596.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByProvinceToPayByYearAndMonthUav($province->getId(), $year$month);
  597.                 else
  598.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByProvinceAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$province->getId(), $year$month);
  599.             }
  600.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  601.             $interventions = array();
  602.             foreach($allInterventions as $int){
  603.                 $toCalculate true;
  604.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  605.                     $toCalculate false;
  606.                 if($toCalculate)
  607.                     array_push($interventions$int);
  608.             }
  609.             # Creo JSON
  610.             $first true;
  611.             $json '[';
  612.             foreach($interventions as $int){
  613.                 if($first$first false; else $json.= ',';
  614.                 $tableActivities '---';
  615.                 if(sizeof($int->getActivities()) > 0){
  616.                     $tableActivities '<table class=\'table table_no_padding b_none m_b_none\'>';
  617.                     foreach($int->getActivities() as $act){
  618.                         if($act->getProductWithdraw() != null
  619.                             $tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
  620.                         else{
  621.                             if($act->getProducerWithdraw() != null)
  622.                                 $tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
  623.                         }
  624.                         if($act->getProductActual() != null
  625.                             $tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
  626.                         else{
  627.                             if($act->getProducerActual() != null)
  628.                                 $tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
  629.                         }
  630.                         if($act->getProductInstallation() != null
  631.                             $tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
  632.                         else{
  633.                             if($act->getProducerInstallation() != null)
  634.                                 $tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
  635.                         }
  636.                     }
  637.                     $tableActivities.= '</table>';
  638.                 }
  639.                 $tableAmounts '<table class=\'table table_no_padding b_none m_b_none\'><tr><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateTechnicianAmount(), 2'.''').'</td><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateExtraAmount(), 2'.''').'</td></tr></table>';
  640.                 $termid '';
  641.                 if($int->getTicket()->getTermid() != null)
  642.                     $termid $int->getTicket()->getTermid()->getCode();
  643.                 $json.= '{
  644.                     "id":"'.$int->getId().'", 
  645.                     "datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'", 
  646.                     "client":"'.$int->getTicket()->getClient()->__toString().'", 
  647.                     "termid":"'.$termid.'", 
  648.                     "ticket":"'.$int->getTicket()->getNumber().'",
  649.                     "outcome":"'.$int->getOutcome()->getValue().'", 
  650.                     "activities":"'.$tableActivities.'",
  651.                     "amounts":"'.$tableAmounts.'"
  652.                 }';
  653.             }
  654.             $json .= ']';
  655.             return new Response(json_encode(array("code" => 200"success" => true"interventions" => $json"provinceId" => $province->getId()))); 
  656.         }
  657.         
  658.         /**
  659.         * @Route("/economico-aziendale-carica-tab", name="user_company_economic_tab")
  660.         */
  661.         public function userCompanyEconomicTab(Request $request)
  662.         {
  663.             $em $this->mr->getManager('slave');
  664.             $emMaster $this->mr->getManager('master');
  665.             $session $request->getSession();
  666.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  667.             $month $request->request->get('month');
  668.             $year $request->request->get('year');
  669.             $operationGroupsNotUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
  670.             $operationGroupUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
  671.             $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year$month);
  672.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  673.             $interventions = array();
  674.             foreach($allInterventions as $int){
  675.                 $toCalculate true;
  676.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  677.                     $toCalculate false;
  678.                 if($toCalculate)
  679.                     array_push($interventions$int);
  680.             }
  681.             $arrayTechniciansIds = array();
  682.             $arrayTechnicians = array();
  683.             foreach($interventions as $int){
  684.                 if(!in_array($int->getTechnician()->getId(), $arrayTechniciansIds)){
  685.                     array_push($arrayTechniciansIds$int->getTechnician()->getId());
  686.                     array_push($arrayTechnicians$em->getRepository('App\Entity\Slave\User')->findOneById($int->getTechnician()->getId()));
  687.                 }
  688.             }
  689.             $matrixResults = array();
  690.             foreach($arrayTechnicians as $technician){
  691.                 $arrayRow = array();
  692.                 array_push($arrayRow, [$technician->getId(), $technician->getNameShort()]);
  693.                 $arrayCells = array();
  694.                 $rowAmount 0;
  695.                 $rowCount 0;
  696.                 $cellUavAmount 0;
  697.                 $cellUavCount 0;
  698.                 foreach($operationGroupsNotUav as $og){
  699.                     $arrayCell = array();
  700.                     $cellAmount 0;
  701.                     $cellCount 0;
  702.                     foreach($interventions as $int){
  703.                         # SE --- gruppo operazione intervento == gruppo operazione ciclo AND id provincia cliente == id provincia ciclo AND tecnico ciclo
  704.                         if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTechnician()->getId() == $technician->getId()){
  705.                             # SE completato -> aggiungo
  706.                             if($int->getOutcomeType()->getSlug() == 'completed'){
  707.                                 $cellAmount += $int->calculateTotalTechnicianAmount();
  708.                                 $cellCount++;
  709.                             }
  710.                             # SE uav -> aggiungo alla colonna finale
  711.                             if($int->getOutcomeType()->getSlug() == 'empty'){
  712.                                 $cellUavAmount += $int->calculateTotalTechnicianAmount();
  713.                                 $cellUavCount++;
  714.                             }
  715.                         }
  716.                     }
  717.                     $rowAmount += $cellAmount;
  718.                     $rowCount += $cellCount;
  719.                     array_push($arrayCell'[<span class="count_c_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellCount.'</span>] <span class="amount_c_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellAmount2'.''').'</span> €'$og->getId(), $og->getValue());
  720.                     array_push($arrayCells$arrayCell);
  721.                 }
  722.                 $test null;
  723.                 foreach($operationGroupUav as $og){
  724.                     $arrayCell = array();
  725.                     array_push($arrayCell'[<span class="count_c_'.$year.'_'.$month.'_'.$og->getId().'">'.$cellUavCount.'</span>] <span class="amount_c_'.$year.'_'.$month.'_'.$og->getId().'">'.number_format($cellUavAmount2'.''').'</span> €'$og->getId(), $og->getValue());
  726.                     array_push($arrayCells$arrayCell);
  727.                 }
  728.                 $rowAmount += $cellUavAmount;
  729.                 $rowCount += $cellUavCount;
  730.                 array_push($arrayRow$arrayCells'['.$rowCount.'] '.number_format($rowAmount2'.''').' €');
  731.                 array_push($matrixResults$arrayRow);
  732.             }
  733.             $response = array("code" => 200"success" => true"matrixResults" => $matrixResults);
  734.             return new Response(json_encode($response));
  735.         }
  736.         /**
  737.          * @Route("/economico-aziendale-aggiorna", name="user_company_economic_update")
  738.          */
  739.         public function userCompanyEconomicUpdate(Request $request)
  740.         {    
  741.             $em $this->mr->getManager('slave');
  742.             $emMaster $this->mr->getManager('master');
  743.             $session $request->getSession();
  744.             $user $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
  745.             $year $request->request->get('year');
  746.             $month $request->request->get('month');
  747.             $operationGroupId $request->request->get("operationGroupId");
  748.             $operationGroup $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
  749.             if($operationGroup->isUav())
  750.                 $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianToPayByYearAndMonthUav($user->getId(), $year$month);
  751.             else
  752.                 $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$user->getId(), $year$month);
  753.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  754.             $interventions = array();
  755.             foreach($allInterventions as $int){
  756.                 $toCalculate true;
  757.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  758.                     $toCalculate false;
  759.                 if($toCalculate)
  760.                     array_push($interventions$int);
  761.             }
  762.             # Creo JSON
  763.             $first true;
  764.             $json '[';
  765.             foreach($interventions as $int){
  766.                 if($first$first false; else $json.= ',';
  767.                 $tableActivities '---';
  768.                 if(sizeof($int->getActivities()) > 0){
  769.                     $tableActivities '<table class=\'table table_no_padding b_none m_b_none\'>';
  770.                     foreach($int->getActivities() as $act){
  771.                         if($act->getProductWithdraw() != null
  772.                             $tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
  773.                         else{
  774.                             if($act->getProducerWithdraw() != null)
  775.                                 $tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
  776.                         }
  777.                         if($act->getProductActual() != null
  778.                             $tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
  779.                         else{
  780.                             if($act->getProducerActual() != null)
  781.                                 $tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
  782.                         }
  783.                         if($act->getProductInstallation() != null
  784.                             $tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
  785.                         else{
  786.                             if($act->getProducerInstallation() != null)
  787.                                 $tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
  788.                         }
  789.                     }
  790.                     $tableActivities.= '</table>';
  791.                 }
  792.                 $tableAmounts '<table class=\'table table_no_padding b_none m_b_none\'><tr><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateTechnicianAmount(), 2'.''').'</td><td class=\'td_w_30p txt_a_c\'>'.number_format($int->calculateExtraAmount(), 2'.''').'</td></tr></table>';
  793.                 $termid '';
  794.                 if($int->getTicket()->getTermid() != null)
  795.                     $termid $int->getTicket()->getTermid()->getCode();
  796.                 $json.= '{
  797.                     "id":"'.$int->getId().'", 
  798.                     "datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'", 
  799.                     "client":"'.$int->getTicket()->getClient()->__toString().'", 
  800.                     "termid":"'.$termid.'", 
  801.                     "ticket":"'.$int->getTicket()->getNumber().'",
  802.                     "outcome":"'.$int->getOutcome()->getValue().'", 
  803.                     "activities":"'.$tableActivities.'",
  804.                     "amounts":"'.$tableAmounts.'"
  805.                 }';
  806.             }
  807.             $json .= ']';
  808.             return new Response(json_encode(array("code" => 200"success" => true"interventions" => $json))); 
  809.         }
  810.         /**
  811.          * @Route("/provincia-cap", name="user_province_zips")
  812.          */
  813.         public function userProvinceZips(Request $request)
  814.         {    
  815.             $em $this->mr->getManager('slave');
  816.             $emMaster $this->mr->getManager('master');
  817.             $province $emMaster->getRepository('App\Entity\Master\Province')->findOneById($request->request->get("provinceId"));
  818.             $zips $emMaster->getRepository('App\Entity\Master\Zip')->findAllByProvince($province->getId());
  819.             $operationTariffs $em->getRepository('App\Entity\Slave\OperationTariff')->findByIdProvince($province->getId());
  820.             $first true;
  821.             $json "[";
  822.             foreach($zips as $zip){
  823.                 if($first$first false; else $json.= ',';
  824.                 $enabled 0;
  825.                 foreach($operationTariffs as $ot){
  826.                     // SE TUTTI I CAP DELLA PROVINCIA --> ENABLED = 1
  827.                     if($ot->isAllZip())
  828.                         $enabled 1;
  829.                     else{
  830.                         // SE TUTTI IL CAP E TRA QUELLI DELLA TARIFFA --> ENABLED = 1
  831.                         foreach($ot->getZips() as $otZip)
  832.                             if($otZip[1] == $zip->getCode())
  833.                                 $enabled 1;
  834.                     }
  835.                 }
  836.                 $json.= '{"id":'.$zip->getId().', "value":"'.$zip->displayCodeAndCities().'", "enabled":'.$enabled.'}';
  837.             }
  838.             $json.= "]";
  839.         
  840.             return new Response(json_encode(array("code" => 200"success" => true"zips" => $json))); 
  841.         }
  842.         /**
  843.          * @Route("/aggiorna-produttore-modelli", name="user_update_producer_models")
  844.          */
  845.         public function userUpdateProducerModels(Request $request)
  846.         {    
  847.             $em $this->mr->getManager('slave');
  848.             $producer $em->getRepository('App\Entity\Slave\Producer')->findOneById($request->request->get("producerId"));
  849.             $models $em->getRepository('App\Entity\Slave\ProductModel')->findByProducerOrdered($producer->getId());
  850.             $first true;
  851.             $json "[";
  852.             foreach($models as $model){
  853.                 if($first$first false; else $json.= ',';
  854.                 $json.= '{"id":'.$model->getId().', "name":"'.$model->getName().'"}';
  855.             }
  856.             $json.= "]";
  857.         
  858.             return new Response(json_encode(array("code" => 200"success" => true"models" => $json))); 
  859.         }
  860.         
  861.         /**
  862.          * @Route("/aggiorna-modello-fornitori", name="user_update_model_suppliers")
  863.          */
  864.         public function userUpdateModelSuppliers(Request $request)
  865.         {    
  866.             $em $this->mr->getManager('slave');
  867.             $model $em->getRepository('App\Entity\Slave\ProductModel')->findOneById($request->request->get("modelId"));
  868.             $suppliers $em->getRepository('App\Entity\Slave\Supplier')->findByModelOrdered($model->getId());
  869.             $first true;
  870.             $json "[";
  871.             foreach($suppliers as $supplier){
  872.                 if($first$first false; else $json.= ',';
  873.                 $json.= '{"id":'.$supplier->getId().', "name":"'.$supplier->getName().'"}';
  874.             }
  875.             $json.= "]";
  876.         
  877.             return new Response(json_encode(array("code" => 200"success" => true"suppliers" => $json))); 
  878.         }
  879.         
  880.         /**
  881.          * @Route("/aggiorna-modelli-sottocategorie", name="user_product_model_update_subcategory")
  882.          */
  883.         public function userProductModelUpdateSubcategories(Request $request)
  884.         {
  885.             $em $this->mr->getManager('slave');
  886.             if($request->request->get('categoryId') != null){
  887.                 $category $em->getRepository("App\Entity\Slave\ProductCategory")->findOneById($request->request->get('categoryId'));
  888.                 $subcategories $category->getSubcategories();
  889.             }
  890.             else{
  891.                 $subcategories $em->getRepository("App\Entity\Slave\ProductSubcategory")->findAll();
  892.             }
  893.             $first true;
  894.             $json '[';
  895.             foreach($subcategories as $s){
  896.                 if($first$first false; else $json.= ',';
  897.                 $json.= '{"id":"'.$s->getId().'", "name":'.json_encode($s->getName()).'}';
  898.             }
  899.             $json .= ']';
  900.             $response = array("code" => 200"success" => true"subcategories" => $json'isPos' => $category->isPos());
  901.             return new Response(json_encode($response));
  902.         }
  903.         
  904.         /**
  905.          * @Route("/controlla-prodotto-matricole", name="user_check_product_codes")
  906.          */
  907.         public function userCheckProductCodes(Request $request)
  908.         {    
  909.             $em $this->mr->getManager('slave');
  910.             $code $request->request->get("code");
  911.             $type $request->request->get("type");
  912.             $msg null;
  913.             $product null;
  914.             switch($type){
  915.                 case 'producer'$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $code)); break;
  916.                 case 'supplier'$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $code)); break;
  917.                 default: break;
  918.             }
  919.             $found false;
  920.             if($product != null){
  921.                 $found true;
  922.                 $msg "Il prodotto risulta già registrato nella piattaforma ecco i dettagli<br>".$product->getDisplayConflict()."<strong>Magazzino</strong>: ".$product->getActualWarehouse().".";
  923.             }
  924.         
  925.             return new Response(json_encode(array("code" => 200"success" => true"found" => $found'msg' => $msg))); 
  926.         }
  927.         /**
  928.          * @Route("/aggiorna-codici-interni-modelli", name="user_update_internal_code_models")
  929.          */
  930.         public function userUpdateInternalCodeModels(Request $request)
  931.         {    
  932.             $em $this->mr->getManager('slave');
  933.             $models $em->getRepository('App\Entity\Slave\ProductModel')->findByInternalCodeNullOrEmpty();
  934.             foreach($models as $m){
  935.                 $m->setInternalCode(UtilitiesService::generateModelInternalCode($m->getId()));
  936.             }
  937.             $em->flush();
  938.             $this->addFlash('notice_success''Codici aggiornati');
  939.             return $this->redirectToRoute('user_index');
  940.         }      
  941.         
  942.         /**
  943.          * @Route("/aggiorna-modelli-consentiti-per-fornitore", name="user_available_product_models_by_supplier_updates")
  944.          */
  945.         public function userAvailableProductModelsBySupplierUpdates(Request $request)
  946.         {
  947.             $em $this->mr->getManager('slave');
  948.             $supplierId $request->request->get('supplierId');
  949.             $values $em->getRepository('App\Entity\Slave\ProductModel')->findAllowedModelsBySupplier($supplierId);
  950.             $first true;
  951.             $json "[";
  952.             foreach($values as $v){
  953.                 if($first$first false; else $json.= ',';
  954.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  955.             }
  956.             $json.= "]";
  957.         
  958.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  959.         }       
  960.         
  961.         /**
  962.          * @Route("/aggiorna-valori-modello-fornitore", name="user_product_model_name_by_supplier_updates")
  963.          */
  964.         public function userProductModelNameBySupplierUpdates(Request $request)
  965.         {
  966.             $em $this->mr->getManager('slave');
  967.             $name $request->request->get('modelName');
  968.             $supplierId $request->request->get('supplierId');
  969.             $values $em->getRepository('App\Entity\Slave\ProductModel')->findByNameOrInternalCodeBySupplier($name$supplierId);
  970.             $first true;
  971.             $json "[";
  972.             foreach($values as $v){
  973.                 if($first$first false; else $json.= ',';
  974.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  975.             }
  976.             $json.= "]";
  977.         
  978.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  979.         }
  980.         
  981.         /**
  982.          * @Route("/aggiorna-valori-modello", name="user_product_model_name_updates")
  983.          */
  984.         public function userProductModelNameUpdates(Request $request)
  985.         {
  986.             $em $this->mr->getManager('slave');
  987.             $name $request->request->get('modelName');
  988.             $values $em->getRepository('App\Entity\Slave\ProductModel')->findByNameOrInternalCode($name);
  989.             $first true;
  990.             $json "[";
  991.             foreach($values as $v){
  992.                 if($first$first false; else $json.= ',';
  993.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  994.             }
  995.             $json.= "]";
  996.         
  997.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  998.         }
  999.         
  1000.         /**
  1001.          * @Route("/aggiorna-valori-magazzini", name="user_product_warehouse_nickname_updates")
  1002.          */
  1003.         public function userProductWarehouseNicknameUpdates(Request $request)
  1004.         {
  1005.             $em $this->mr->getManager('slave');
  1006.             $nickname $request->request->get('nickname');
  1007.             $termid $request->request->get('termid');
  1008.             $values $em->getRepository('App\Entity\Slave\Warehouse')->findLikeNicknameAndTermid($nickname$termid);
  1009.             $first true;
  1010.             $json "[";
  1011.             foreach($values as $v){
  1012.                 if($first$first false; else $json.= ',';
  1013.                 $termids '';
  1014.                 if($v->getClient() != null)
  1015.                     $termids $v->getClient()->displayTermids('string');
  1016.                 $json.= '{"id":'.$v->getId().', "nickname":'.json_encode($v->getNickname()).', "termids":'.json_encode($termids).'}';
  1017.             }
  1018.             $json.= "]";
  1019.         
  1020.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1021.         }
  1022.         /**
  1023.          * @Route("/aggiorna-valori-prodotto", name="user_product_value_updates")
  1024.          */
  1025.         public function userProductValuesUpdate(Request $request)
  1026.         {    
  1027.             $em $this->mr->getManager('slave');
  1028.             $id $request->request->get('id');
  1029.             $id2 $request->request->get('id2');
  1030.             switch($request->request->get('type')){
  1031.                 case 'subcategories'$values $em->getRepository('App\Entity\Slave\ProductSubcategory')->findByCategoryOrdered($id); break;
  1032.                 case 'producers'$values $em->getRepository('App\Entity\Slave\Producer')->findBySubcategoryOrdered($id); break;
  1033.                 case 'models'$values $em->getRepository('App\Entity\Slave\ProductModel')->findByProducerAndSubcategoryOrdered($id$id2); break;
  1034.                 case 'suppliers'$values $em->getRepository('App\Entity\Slave\Supplier')->findByModelOrdered($id); break;
  1035.                 default: break;
  1036.             }
  1037.             $first true;
  1038.             $json "[";
  1039.             foreach($values as $v){
  1040.                 if($first$first false; else $json.= ',';
  1041.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  1042.             }
  1043.             $json.= "]";
  1044.         
  1045.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1046.         }
  1047.         /**
  1048.          * @Route("/aggiorna-rigenerati-fornitori", name="user_product_regenerate_suppliers_update")
  1049.          */
  1050.         public function userProductRegenerateSuppliersUpdate(Request $request)
  1051.         {    
  1052.             $em $this->mr->getManager('slave');
  1053.             $productRegenerated $em->getRepository('App\Entity\Slave\ProductRegenerated')->findOneById($request->request->get('productRegeneratedId'));
  1054.             $first true;
  1055.             $json "[";
  1056.             foreach($productRegenerated->getProduct()->getSuppliers() as $supplier){
  1057.                 if($first$first false; else $json.= ',';
  1058.                 $name $supplier->getName().' ('.$supplier->getAmountRegenerate().' €)';
  1059.                 $json.= '{"id":'.$supplier->getId().', "name":'.json_encode($name).'}';
  1060.             }
  1061.             $json.= "]";
  1062.             return new Response(json_encode(array("code" => 200"success" => true"suppliers" => $json"startDate" => $productRegenerated->getDatetime()->format("d-m-Y")))); 
  1063.         }
  1064.         
  1065.         /**
  1066.          * @Route("/aggiorna-ticket-termid", name="user_ticket_termid_search")
  1067.          */
  1068.         public function userTicketTermidSearch(Request $request)
  1069.         {
  1070.             $em $this->mr->getManager('slave');
  1071.             $termidCode $request->request->get('termidCode');
  1072.             $termid $em->getRepository('App\Entity\Slave\Termid')->findOneBy(array('code' => $termidCode));
  1073.             $json '{}';
  1074.             $found false;
  1075.             if($termid != null){
  1076.                 $found true;
  1077.                 $client $termid->getClient();
  1078.                 $json '{"termidId":'.json_encode($termid->getId()).',"clientId":'.json_encode($client->getId()).',"clientCode":'.json_encode($client->getCode()).',"clientName":'.json_encode($client->getName()).',"clientNickname":'.json_encode($client->getNickname()).'}';
  1079.             }
  1080.         
  1081.             return new Response(json_encode(array("code" => 200"success" => true"found" => $found"json" => $json)));
  1082.         }
  1083.         
  1084.         /**
  1085.          * @Route("/aggiorna-ticket-fornitore-operazioni", name="user_ticket_supplier_operations")
  1086.          */
  1087.         public function userTicketSupplierOperations(Request $request)
  1088.         {
  1089.             $em $this->mr->getManager('slave');
  1090.             if($request->request->get('supplierId') != null){
  1091.                 $supplier $em->getRepository('App\Entity\Slave\Supplier')->findOneById($request->request->get('supplierId'));
  1092.                 $operations $supplier->getOperations();
  1093.             }
  1094.             else{
  1095.                 $operations $em->getRepository('App\Entity\Slave\Operation')->findAll();
  1096.             }
  1097.             $first true;
  1098.             $json '[';
  1099.             foreach($operations as $operation){
  1100.                 if($first$first false; else $json.= ',';
  1101.                 $json.= '{"id":'.json_encode($operation->getId()).', "name":'.json_encode($operation->__toString()).'}';
  1102.             }
  1103.             $json.= ']';
  1104.         
  1105.             return new Response(json_encode(array("code" => 200"success" => true"operations" => $json)));
  1106.         }
  1107.     //
  1108. }