src/Controller/User/UserController.php line 454

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