src/Controller/User/UserController.php line 559

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.         // In base al tipo di account mostro nella home differenti schermate
  308.         switch($this->getUser()->getAccountTypology()){
  309.             case 'administration'// Amministrazione
  310.             case 'agency'// Agenzia
  311.             case 'commercial'// Commerciale
  312.             case 'warehouse'// Magazzino
  313.                 $operationGroups $em->getRepository('App\Entity\Slave\OperationGroup')->findAll();
  314.                 $ticketStatuses $em->getRepository('App\Entity\Slave\TicketStatus')->findAll();
  315.                 $technicians $em->getRepository('App\Entity\Slave\User')->findTechniciansActive();
  316.                 [$matrixTickets$matrixTechsTickets$ticketWithErrors$ticketSuspensionRequest$ticketClosedPortal$ticketWaitingForMaterial$interventionTariffOut$interventionWithoutActivities] = $this->calculateTicketAlarms($em'agency'$operationGroups$ticketStatuses$technicians);
  317.                 $interventionExtras $em->getRepository('App\Entity\Slave\InterventionExtra')->findBy(array('managed' => false));
  318.                 $ticketReminders $em->getRepository('App\Entity\Slave\TicketReminder')->findDashboardReminders();
  319.                 $operationsWithoutTariffs $em->getRepository('App\Entity\Slave\Operation')->findWithoutTariffs();
  320.                 $operationsWithoutKeyMappings $em->getRepository('App\Entity\Slave\Operation')->findWithoutKeyMappings();
  321.                 $warehouseAlarms $this->calculateWarehouseAlarms($em'agency');
  322.                 [$productModelsSuppliers$doubleProducts] = $this->calculateProductsAlarms($em);
  323.                 [$formSearch$results$type$like$value] = $this->searchValues($request$formFactory$validator$em$session);
  324.                 return $this->render('role/user/index.html.twig', array(
  325.                     'operationGroups' => $operationGroups,
  326.                     'technicians' => $technicians,
  327.                     'ticketStatuses' => $ticketStatuses,
  328.                     'matrixTickets' => $matrixTickets,
  329.                     'matrixTechsTickets' => $matrixTechsTickets,
  330.                     'ticketWithErrors' => $ticketWithErrors,
  331.                     'ticketSuspensionRequest' => $ticketSuspensionRequest,
  332.                     'ticketClosedPortal' => $ticketClosedPortal,
  333.                     'ticketWaitingForMaterial' => $ticketWaitingForMaterial,
  334.                     'interventionWithoutActivities' => $interventionWithoutActivities,
  335.                     'interventionTariffOut' => $interventionTariffOut,
  336.                     'interventionExtras' => $interventionExtras,
  337.                     'operationsWithoutTariffs' => $operationsWithoutTariffs,
  338.                     'operationsWithoutKeyMappings' => $operationsWithoutKeyMappings,
  339.                     'warehouseAlarms' => $warehouseAlarms,
  340.                     'productModelsSuppliers' => $productModelsSuppliers,
  341.                     'doubleProducts' => $doubleProducts,
  342.                     'ticketReminders' => $ticketReminders,
  343.                     'formSearch' => $formSearch->createView(),
  344.                     'searchResults' => $results,
  345.                     'searchType' => $type,
  346.                     'searchLike' => $like,
  347.                     'searchValue' => $value
  348.                 ));
  349.                 break;
  350.             case 'technician'// Tecnici
  351.                 $operationGroups $em->getRepository('App\Entity\Slave\OperationGroup')->findAll();
  352.                 $ticketStatuses $em->getRepository('App\Entity\Slave\TicketStatus')->findWithoutToAssignAndWrong();
  353.                 [$matrixTickets$ticketAssigned] = $this->calculateTicketAlarms($em'technician'$operationGroups$ticketStatusesnull);
  354.                 $ticketReminders $em->getRepository('App\Entity\Slave\TicketReminder')->findDashboardRemindersByTechnician($this->getUser()->getId());
  355.                 $warehousesTransfers $this->calculateWarehouseAlarms($em'technician');
  356.                 return $this->render('role/user/index.html.twig', array(
  357.                     'operationGroups' => $operationGroups,
  358.                     'ticketStatuses' => $ticketStatuses,
  359.                     'matrixTickets' => $matrixTickets,
  360.                     'ticketAssigned' => $ticketAssigned,
  361.                     'warehousesTransfers' => $warehousesTransfers,
  362.                     'ticketReminders' => $ticketReminders
  363.                 ));
  364.                 break;
  365.             case 'administration'// Amministrazione
  366.                 return $this->render('role/user/index.html.twig');
  367.                 break;
  368.             case 'commercial'// Commerciale
  369.                 return $this->render('role/user/index.html.twig');
  370.                 break;
  371.             default: break;
  372.         }
  373.     }
  374.     /**
  375.      * @Route("/ticket-tab-ricarica/{tab}", name="user_index_ticket_tab_refresh")
  376.      */
  377.     public function userIndexTicketTabRefresh(Request $request$tab)
  378.     {    
  379.         $em $this->mr->getManager('slave');
  380.         switch($tab){
  381.             case 'waiting_for_material':
  382.                 $icon 'icon-truck-loading';
  383.                 $text 'In attesa di materiale ('.sizeof($em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial()).')';
  384.                 break;
  385.             default: break;
  386.         }
  387.         return $this->render('components/twig/index/tab_label.html.twig', ['icon' => $icon'text' => $text]);
  388.     }
  389.     /**
  390.      * @Route("/materiale-mancante-ricarica", name="user_index_ticket_unlock_refresh")
  391.      */
  392.     public function userIndexTicketUnlockRefresh(Request $request)
  393.     {    
  394.         $em $this->mr->getManager('slave');
  395.         $ticketWaitingForMaterial $em->getRepository('App\Entity\Slave\Ticket')->findWaitingForMaterial();
  396.         return $this->render('components/twig/index/ticket_waiting.html.twig', ['ticketWaitingForMaterial' => $ticketWaitingForMaterial]);
  397.     }
  398.         
  399.     /**
  400.      * @Route("/tecnico-ricerca-reindirizza", name="user_search_redirect")
  401.      */
  402.     public function userSearchRedirect(Request $request)
  403.     {    
  404.         $em $this->mr->getManager('slave');
  405.         $session $request->getSession();
  406.         $type $request->request->get('type');
  407.         switch($type){
  408.             case 'ticket':
  409.                 $session->set('numberOrTermid'$request->request->get('number'));
  410.                 return $this->redirectToRoute('user_ticket_list');
  411.                 break;
  412.             case 'product'
  413.                 $session->set('codeProducer'$request->request->get('codeProducer'));
  414.                 $session->set('codeSupplier'$request->request->get('codeSupplier'));                
  415.                 return $this->redirectToRoute('user_product_search');
  416.                 break;
  417.             case 'client'
  418.                 $session->set('clientNickname'$request->request->get('clientNickname'));
  419.                 $session->set('clientPhone'$request->request->get('clientPhone'));                
  420.                 return $this->redirectToRoute('user_anagraphic_clients');
  421.                 break;
  422.             default: break;
  423.         }
  424.     }
  425.     
  426.     /**
  427.      * @Route("/impostazioni", name="user_settings")
  428.      */
  429.     public function userSettings(Request $requestFormFactoryInterface $formFactoryValidatorInterface $validator)
  430.     {    
  431.         $em $this->mr->getManager('slave');
  432.         $settings $em->getRepository('App\Entity\Slave\Setting')->findAll();
  433.         $settingsModel = new Settings();
  434.         $formSettings $formFactory->createNamed("form_settings"SettingsType::class, $settingsModel);
  435.         $formSettings->handleRequest($request);
  436.         if($formSettings->isSubmitted()){
  437.             $valid ValidationService::ValidateNotBlank($validator$formSettings->get('daysStationary'));
  438.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSettings->get('ticketTechnicianMinutesTakeCharge'));
  439.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSettings->get('ticketSuspensionAgencyEmail'));
  440.             if($valid$valid ValidationService::ValidateNotBlank($validator$formSettings->get('ticketUAVAgencyEmail'));
  441.             if($valid$valid ValidationService::validateMultipleEmailString($validator$formSettings->get('ticketSuspensionAgencyEmail'), '/\,/');
  442.             if($valid$valid ValidationService::validateMultipleEmailString($validator$formSettings->get('ticketUAVAgencyEmail'), '/\,/');
  443.             
  444.             if($valid && $formSettings->isValid()){
  445.                 foreach($settings as $s){
  446.                     switch($s->getSlug()){
  447.                         case 'warehouse_register_stock'$s->setValue($formSettings->get('warehouseRegisterStock')->getData()); break;
  448.                         case 'warehouse_recover_stock'$s->setValue($formSettings->get('warehouseRecoverStock')->getData()); break;
  449.                         case 'warehouse_technician_product_conditions'
  450.                             $first true;
  451.                             $stringConditions '';
  452.                             foreach($formSettings->get('warehouseTechnicianProductConditions')->getData() as $pc){
  453.                                 if($first$first false; else $stringConditions.= ',';
  454.                                 $stringConditions.= $pc->getId();
  455.                             }
  456.                             $s->setValue($stringConditions);
  457.                             break;
  458.                         case 'use_ddt'$s->setValue($formSettings->get('useDdt')->getData()); break;
  459.                         case 'ddt_internal_mandatory'$s->setValue($formSettings->get('ddtInternalMandatory')->getData()); break;
  460.                         case 'days_stationary'$s->setValue($formSettings->get('daysStationary')->getData()); break;
  461.                         case 'ticket_suspension_agency_email'$s->setValue($formSettings->get('ticketSuspensionAgencyEmail')->getData()); break;
  462.                         case 'ticket_uav_agency_email'$s->setValue($formSettings->get('ticketUAVAgencyEmail')->getData()); break;
  463.                         case 'ticket_auto_assign'$s->setValue($formSettings->get('ticketAutoAssign')->getData());  break;
  464.                         case 'ticket_auto_operation_tariff_amount'$s->setValue($formSettings->get('ticketAutoOperationTariffAmount')->getData()); break;
  465.                         case 'ticket_backoffice_manage'$s->setValue($formSettings->get('ticketBackofficeManage')->getData()); break;
  466.                         case 'ticket_technician_send_cancel_email'$s->setValue($formSettings->get('ticketTechnicianSendCancelEmail')->getData()); break;
  467.                         case 'ticket_technician_minutes_take_charge'$s->setValue($formSettings->get('ticketTechnicianMinutesTakeCharge')->getData()); break;
  468.                         case 'ticket_suspension_unlock_same_technician'$s->setValue($formSettings->get('ticketSuspensionUnlockSameTechnician')->getData()); break;
  469.                         case 'ticket_suspension_unlock_by_technician'$s->setValue($formSettings->get('ticketSuspensionUnlockByTechnician')->getData()); break;
  470.                         case 'product_model_default_stock_active'$s->setValue($formSettings->get('productModelDefaultStockActive')->getData()); break;
  471.                         case 'product_model_default_stock_yellow'$s->setValue($formSettings->get('productModelDefaultStockYellow')->getData()); break;
  472.                         case 'product_model_default_stock_red'$s->setValue($formSettings->get('productModelDefaultStockRed')->getData()); break;
  473.                         case 'use_ddt_number_for_technicians'$s->setValue($formSettings->get('useDdtNumberForTechnicians')->getData()); break;
  474.                         case 'script_sunday_active'$s->setValue($formSettings->get('scriptSundayActive')->getData()); break;
  475.                         case 'outcome_completed_default'$s->setValue($formSettings->get('outcomeCompletedDefault')->getData()->getId()); break;
  476.                         default: break;
  477.                     }
  478.                 }
  479.                 $em->flush();
  480.                 $this->addFlash('notice_success'"Impostazioni aggiornate");
  481.                 return $this->redirectToRoute('user_settings');
  482.             }
  483.         }
  484.         return $this->render('role/user/settings.html.twig', array(
  485.             'settings' => $settings,
  486.             'formSettings' => $formSettings->createView()
  487.         ));
  488.     }
  489.     
  490.     /**
  491.      * @Route("/utility", name="user_utility")
  492.      */
  493.     public function userUtility(Request $request)
  494.     {    
  495.         return $this->render('role/user/utility.html.twig');
  496.     }
  497.     
  498.     /**
  499.      * @Route("/utility/esegui-comando", name="user_utility_execute_command")
  500.      */
  501.     public function userUtilityExecuteCommand(Request $request)
  502.     {    
  503.         switch($request->request->get('command')){
  504.             case 'clear_session':
  505.                 SessionService::resetUserSession($request->getSession());
  506.                 $this->addFlash('notice_success''Sessione resettata correttamente!');
  507.                 break;
  508.             default: break;
  509.         }
  510.         return $this->redirectToRoute('user_utility');
  511.     }
  512.     // POST DI AGGIORNAMENTO
  513.         /**
  514.         * @Route("/economico-carica-tab", name="user_economic_tab")
  515.         */
  516.         public function userEconomicTab(Request $request)
  517.         {
  518.             $em $this->mr->getManager('slave');
  519.             $emMaster $this->mr->getManager('master');
  520.             $session $request->getSession();
  521.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  522.             $month $request->request->get('month');
  523.             $year $request->request->get('year');
  524.             $operationGroupsNotUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
  525.             $operationGroupUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
  526.             // Se UserId = 0 --> Significa che è l'aziendale
  527.             if($request->request->get('userId') != 0){
  528.                 $user $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
  529.                 $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findByTechnicianToPayByYearAndMonth($user->getId(), $year$month);
  530.             }
  531.             else{                
  532.                 $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year$month);
  533.             }
  534.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  535.             $interventions = array();
  536.             foreach($allInterventions as $int){
  537.                 $toCalculate true;
  538.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  539.                     $toCalculate false;
  540.                 if($toCalculate)
  541.                     array_push($interventions$int);
  542.             }
  543.             $arrayProvincesIds = array();
  544.             $arrayProvinces = array();
  545.             foreach($interventions as $int){
  546.                 if(!in_array($int->getTicket()->getIdProvince(), $arrayProvincesIds)){
  547.                     array_push($arrayProvincesIds$int->getTicket()->getIdProvince());
  548.                     array_push($arrayProvinces$emMaster->getRepository('App\Entity\Master\Province')->findOneById($int->getTicket()->getIdProvince()));
  549.                 }
  550.             }
  551.             $matrixResults = array();
  552.             foreach($arrayProvinces as $province){
  553.                 $arrayRow = array();
  554.                 array_push($arrayRow$province->getSign());
  555.                 $arrayCells = array();
  556.                 $rowAmount 0;
  557.                 $rowCount 0;
  558.                 $cellUavAmount 0;
  559.                 $cellUavCount 0;
  560.                 foreach($operationGroupsNotUav as $og){
  561.                     $arrayCell = array();
  562.                     $cellAmount 0;
  563.                     $cellCount 0;
  564.                     foreach($interventions as $int){
  565.                         # 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
  566.                         if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTicket()->getIdProvince() == $province->getId()){
  567.                             # SE completato -> aggiungo
  568.                             if($int->getOutcomeType()->getSlug() == 'completed'){
  569.                                 if($request->request->get('userId') != 0)
  570.                                     $cellAmount += $int->calculateTotalTechnicianAmount();
  571.                                 else
  572.                                     $cellAmount += $int->getAmount();
  573.                                 $cellCount++;
  574.                             }
  575.                             # SE uav -> aggiungo alla colonna finale
  576.                             if($int->getOutcomeType()->getSlug() == 'empty'){
  577.                                 if($request->request->get('userId') != 0)
  578.                                     $cellUavAmount += $int->calculateTotalTechnicianAmount();
  579.                                 else
  580.                                     $cellUavAmount += $int->getAmount();
  581.                                 $cellUavCount++;
  582.                             }
  583.                         }
  584.                     }
  585.                     $rowAmount += $cellAmount;
  586.                     $rowCount += $cellCount;
  587.                     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());
  588.                     array_push($arrayCells$arrayCell);
  589.                 }
  590.                 $test null;
  591.                 foreach($operationGroupUav as $og){
  592.                     $arrayCell = array();
  593.                     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());
  594.                     array_push($arrayCells$arrayCell);
  595.                 }
  596.                 $rowAmount += $cellUavAmount;
  597.                 $rowCount += $cellUavCount;
  598.                 array_push($arrayRow$arrayCells'['.$rowCount.'] '.number_format($rowAmount2'.''').' €');
  599.                 array_push($matrixResults$arrayRow);
  600.             }
  601.             $response = array("code" => 200"success" => true"matrixResults" => $matrixResults);
  602.             return new Response(json_encode($response));
  603.         }
  604.         /**
  605.          * @Route("/economico-aggiorna", name="user_economic_update")
  606.          */
  607.         public function userEconomicUpdate(Request $request)
  608.         {    
  609.             $em $this->mr->getManager('slave');
  610.             $emMaster $this->mr->getManager('master');
  611.             $session $request->getSession();
  612.             $province $emMaster->getRepository('App\Entity\Master\Province')->findOneBySign($request->request->get('taProvince'));
  613.             $year $request->request->get('year');
  614.             $month $request->request->get('month');
  615.             $operationGroupId $request->request->get("operationGroupId");
  616.             $operationGroup $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
  617.             // Se UserId = 0 --> Significa che è l'aziendale
  618.             if($request->request->get('userId') != 0){
  619.                 $user $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
  620.                 if($operationGroup->isUav())
  621.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianProvinceToPayByYearAndMonthUav($user->getId(), $province->getId(), $year$month);
  622.                 else
  623.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianProvinceAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$user->getId(), $province->getId(), $year$month);
  624.             }
  625.             else{
  626.                 if($operationGroup->isUav())
  627.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByProvinceToPayByYearAndMonthUav($province->getId(), $year$month);
  628.                 else
  629.                     $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByProvinceAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$province->getId(), $year$month);
  630.             }
  631.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  632.             $interventions = array();
  633.             foreach($allInterventions as $int){
  634.                 $toCalculate true;
  635.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  636.                     $toCalculate false;
  637.                 if($toCalculate)
  638.                     array_push($interventions$int);
  639.             }
  640.             # Creo JSON
  641.             $first true;
  642.             $json '[';
  643.             foreach($interventions as $int){
  644.                 if($first$first false; else $json.= ',';
  645.                 $tableActivities '---';
  646.                 if(sizeof($int->getActivities()) > 0){
  647.                     $tableActivities '<table class=\'table table_no_padding b_none m_b_none\'>';
  648.                     foreach($int->getActivities() as $act){
  649.                         if($act->getProductWithdraw() != null
  650.                             $tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
  651.                         else{
  652.                             if($act->getProducerWithdraw() != null)
  653.                                 $tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
  654.                         }
  655.                         if($act->getProductActual() != null
  656.                             $tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
  657.                         else{
  658.                             if($act->getProducerActual() != null)
  659.                                 $tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
  660.                         }
  661.                         if($act->getProductInstallation() != null
  662.                             $tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
  663.                         else{
  664.                             if($act->getProducerInstallation() != null)
  665.                                 $tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
  666.                         }
  667.                     }
  668.                     $tableActivities.= '</table>';
  669.                 }
  670.                 if($request->request->get('userId') != 0)
  671.                     $tot $int->calculateTechnicianAmount();
  672.                 else
  673.                     $tot $int->getAmount();
  674.                 $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>';
  675.                 $termid '';
  676.                 if($int->getTicket()->getTermid() != null)
  677.                     $termid $int->getTicket()->getTermid()->getCode();
  678.                 $json.= '{
  679.                     "id":"'.$int->getId().'", 
  680.                     "datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'", 
  681.                     "client":"'.$int->getTicket()->getClient()->__toString().'", 
  682.                     "termid":"'.$termid.'", 
  683.                     "ticket":"'.$int->getTicket()->getNumber().'",
  684.                     "outcome":"'.$int->getOutcome()->getValue().'", 
  685.                     "activities":"'.$tableActivities.'",
  686.                     "amounts":"'.$tableAmounts.'"
  687.                 }';
  688.             }
  689.             $json .= ']';
  690.             return new Response(json_encode(array("code" => 200"success" => true"interventions" => $json"provinceId" => $province->getId()))); 
  691.         }
  692.         
  693.         /**
  694.         * @Route("/economico-aziendale-carica-tab", name="user_company_economic_tab")
  695.         */
  696.         public function userCompanyEconomicTab(Request $request)
  697.         {
  698.             $em $this->mr->getManager('slave');
  699.             $emMaster $this->mr->getManager('master');
  700.             $session $request->getSession();
  701.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  702.             $month $request->request->get('month');
  703.             $year $request->request->get('year');
  704.             $operationGroupsNotUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
  705.             $operationGroupUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
  706.             $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year$month);
  707.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  708.             $interventions = array();
  709.             foreach($allInterventions as $int){
  710.                 $toCalculate true;
  711.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  712.                     $toCalculate false;
  713.                 if($toCalculate)
  714.                     array_push($interventions$int);
  715.             }
  716.             $arrayTechniciansIds = array();
  717.             $arrayTechnicians = array();
  718.             foreach($interventions as $int){
  719.                 if(!in_array($int->getTechnician()->getId(), $arrayTechniciansIds)){
  720.                     array_push($arrayTechniciansIds$int->getTechnician()->getId());
  721.                     array_push($arrayTechnicians$em->getRepository('App\Entity\Slave\User')->findOneById($int->getTechnician()->getId()));
  722.                 }
  723.             }
  724.             $matrixResults = array();
  725.             foreach($arrayTechnicians as $technician){
  726.                 $arrayRow = array();
  727.                 array_push($arrayRow, [$technician->getId(), $technician->getNameShort()]);
  728.                 $arrayCells = array();
  729.                 $rowAmount 0;
  730.                 $rowCount 0;
  731.                 $cellUavAmount 0;
  732.                 $cellUavCount 0;
  733.                 foreach($operationGroupsNotUav as $og){
  734.                     $arrayCell = array();
  735.                     $cellAmount 0;
  736.                     $cellCount 0;
  737.                     foreach($interventions as $int){
  738.                         # SE --- gruppo operazione intervento == gruppo operazione ciclo AND id provincia cliente == id provincia ciclo AND tecnico ciclo
  739.                         if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTechnician()->getId() == $technician->getId()){
  740.                             # SE completato -> aggiungo
  741.                             if($int->getOutcomeType()->getSlug() == 'completed'){
  742.                                 $cellAmount += $int->getAmount();
  743.                                 $cellCount++;
  744.                             }
  745.                             # SE uav -> aggiungo alla colonna finale
  746.                             if($int->getOutcomeType()->getSlug() == 'empty'){
  747.                                 $cellUavAmount += $int->getAmount();
  748.                                 $cellUavCount++;
  749.                             }
  750.                         }
  751.                     }
  752.                     $rowAmount += $cellAmount;
  753.                     $rowCount += $cellCount;
  754.                     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());
  755.                     array_push($arrayCells$arrayCell);
  756.                 }
  757.                 $test null;
  758.                 foreach($operationGroupUav as $og){
  759.                     $arrayCell = array();
  760.                     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());
  761.                     array_push($arrayCells$arrayCell);
  762.                 }
  763.                 $rowAmount += $cellUavAmount;
  764.                 $rowCount += $cellUavCount;
  765.                 array_push($arrayRow$arrayCells'['.$rowCount.'] '.number_format($rowAmount2'.''').' €');
  766.                 array_push($matrixResults$arrayRow);
  767.             }
  768.             $response = array("code" => 200"success" => true"matrixResults" => $matrixResults);
  769.             return new Response(json_encode($response));
  770.         }
  771.         /**
  772.          * @Route("/economico-aziendale-aggiorna", name="user_company_economic_update")
  773.          */
  774.         public function userCompanyEconomicUpdate(Request $request)
  775.         {    
  776.             $em $this->mr->getManager('slave');
  777.             $emMaster $this->mr->getManager('master');
  778.             $session $request->getSession();
  779.             $user $em->getRepository('App\Entity\Slave\User')->findOneById($request->request->get('userId'));
  780.             $year $request->request->get('year');
  781.             $month $request->request->get('month');
  782.             $operationGroupId $request->request->get("operationGroupId");
  783.             $operationGroup $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
  784.             if($operationGroup->isUav())
  785.                 $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianToPayByYearAndMonthUav($user->getId(), $year$month);
  786.             else
  787.                 $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findByTechnicianAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$user->getId(), $year$month);
  788.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  789.             $interventions = array();
  790.             foreach($allInterventions as $int){
  791.                 $toCalculate true;
  792.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  793.                     $toCalculate false;
  794.                 if($toCalculate)
  795.                     array_push($interventions$int);
  796.             }
  797.             # Creo JSON
  798.             $first true;
  799.             $json '[';
  800.             foreach($interventions as $int){
  801.                 if($first$first false; else $json.= ',';
  802.                 $tableActivities '---';
  803.                 if(sizeof($int->getActivities()) > 0){
  804.                     $tableActivities '<table class=\'table table_no_padding b_none m_b_none\'>';
  805.                     foreach($int->getActivities() as $act){
  806.                         if($act->getProductWithdraw() != null
  807.                             $tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
  808.                         else{
  809.                             if($act->getProducerWithdraw() != null)
  810.                                 $tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
  811.                         }
  812.                         if($act->getProductActual() != null
  813.                             $tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
  814.                         else{
  815.                             if($act->getProducerActual() != null)
  816.                                 $tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
  817.                         }
  818.                         if($act->getProductInstallation() != null
  819.                             $tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
  820.                         else{
  821.                             if($act->getProducerInstallation() != null)
  822.                                 $tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
  823.                         }
  824.                     }
  825.                     $tableActivities.= '</table>';
  826.                 }
  827.                 $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>';
  828.                 $termid '';
  829.                 if($int->getTicket()->getTermid() != null)
  830.                     $termid $int->getTicket()->getTermid()->getCode();
  831.                 $json.= '{
  832.                     "id":"'.$int->getId().'", 
  833.                     "datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'", 
  834.                     "client":"'.$int->getTicket()->getClient()->__toString().'", 
  835.                     "termid":"'.$termid.'", 
  836.                     "ticket":"'.$int->getTicket()->getNumber().'",
  837.                     "outcome":"'.$int->getOutcome()->getValue().'", 
  838.                     "activities":"'.$tableActivities.'",
  839.                     "amounts":"'.$tableAmounts.'"
  840.                 }';
  841.             }
  842.             $json .= ']';
  843.             return new Response(json_encode(array("code" => 200"success" => true"interventions" => $json))); 
  844.         }
  845.         
  846.         /**
  847.         * @Route("/economico-fornitori-carica-tab", name="user_supplier_economic_tab")
  848.         */
  849.         public function userSupplierEconomicTab(Request $request)
  850.         {
  851.             $em $this->mr->getManager('slave');
  852.             $emMaster $this->mr->getManager('master');
  853.             $session $request->getSession();
  854.             $company $emMaster->getRepository("App\Entity\Master\Company")->findOneById($session->get("companyId"));
  855.             $month $request->request->get('month');
  856.             $year $request->request->get('year');
  857.             $operationGroupsNotUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 0]);
  858.             $operationGroupUav $em->getRepository('App\Entity\Slave\OperationGroup')->findBy(['uav' => 1]);
  859.             $allInterventions $em->getRepository("App\Entity\Slave\Intervention")->findToPayByYearAndMonth($year$month);
  860.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  861.             $interventions = array();
  862.             foreach($allInterventions as $int){
  863.                 $toCalculate true;
  864.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  865.                     $toCalculate false;
  866.                 if($toCalculate)
  867.                     array_push($interventions$int);
  868.             }
  869.             $arraySuppliersIds = array();
  870.             $arraySuppliers = array();
  871.             foreach($interventions as $int){
  872.                 if(!in_array($int->getTicket()->getSupplier()->getId(), $arraySuppliersIds)){
  873.                     array_push($arraySuppliersIds$int->getTicket()->getSupplier()->getId());
  874.                     array_push($arraySuppliers$em->getRepository('App\Entity\Slave\Supplier')->findOneById($int->getTicket()->getSupplier()->getId()));
  875.                 }
  876.             }
  877.             $matrixResults = array();
  878.             foreach($arraySuppliers as $supplier){
  879.                 $arrayRow = array();
  880.                 array_push($arrayRow, [$supplier->getId(), $supplier->getName()]);
  881.                 $arrayCells = array();
  882.                 $rowAmount 0;
  883.                 $rowCount 0;
  884.                 $cellUavAmount 0;
  885.                 $cellUavCount 0;
  886.                 foreach($operationGroupsNotUav as $og){
  887.                     $arrayCell = array();
  888.                     $cellAmount 0;
  889.                     $cellCount 0;
  890.                     foreach($interventions as $int){
  891.                         # SE --- gruppo operazione intervento == gruppo operazione ciclo AND id provincia cliente == id provincia ciclo AND tecnico ciclo
  892.                         if($int->getTicket()->getOperation()->getGroup()->getId() == $og->getId() && $int->getTicket()->getSupplier()->getId() == $supplier->getId()){
  893.                             # SE completato -> aggiungo
  894.                             if($int->getOutcomeType()->getSlug() == 'completed'){
  895.                                 $cellAmount += $int->getAmount();
  896.                                 $cellCount++;
  897.                             }
  898.                             # SE uav -> aggiungo alla colonna finale
  899.                             if($int->getOutcomeType()->getSlug() == 'empty'){
  900.                                 $cellUavAmount += $int->getAmount();
  901.                                 $cellUavCount++;
  902.                             }
  903.                         }
  904.                     }
  905.                     $rowAmount += $cellAmount;
  906.                     $rowCount += $cellCount;
  907.                     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());
  908.                     array_push($arrayCells$arrayCell);
  909.                 }
  910.                 $test null;
  911.                 foreach($operationGroupUav as $og){
  912.                     $arrayCell = array();
  913.                     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());
  914.                     array_push($arrayCells$arrayCell);
  915.                 }
  916.                 $rowAmount += $cellUavAmount;
  917.                 $rowCount += $cellUavCount;
  918.                 array_push($arrayRow$arrayCells'['.$rowCount.'] '.number_format($rowAmount2'.''').' €');
  919.                 array_push($matrixResults$arrayRow);
  920.             }
  921.             $response = array("code" => 200"success" => true"matrixResults" => $matrixResults);
  922.             return new Response(json_encode($response));
  923.         }
  924.         /**
  925.          * @Route("/economico-fornitori-aggiorna", name="user_supplier_economic_update")
  926.          */
  927.         public function userSupplierEconomicUpdate(Request $request)
  928.         {    
  929.             $em $this->mr->getManager('slave');
  930.             $emMaster $this->mr->getManager('master');
  931.             $session $request->getSession();
  932.             $supplier $em->getRepository('App\Entity\Slave\Supplier')->findOneById($request->request->get('supplierId'));
  933.             $year $request->request->get('year');
  934.             $month $request->request->get('month');
  935.             $operationGroupId $request->request->get("operationGroupId");
  936.             $operationGroup $em->getRepository('App\Entity\Slave\OperationGroup')->findOneById($operationGroupId);
  937.             if($operationGroup->isUav())
  938.                 $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findBySupplierToPayByYearAndMonthUav($supplier->getId(), $year$month);
  939.             else
  940.                 $allInterventions $em->getRepository('App\Entity\Slave\Intervention')->findBySupplierAndOperationGroupToPayByYearAndMonthNotUav($operationGroupId$supplier->getId(), $year$month);
  941.             // Rimuovo gli interventi che hanno una sospensione -> Gestita e non approvata / Non gestita
  942.             $interventions = array();
  943.             foreach($allInterventions as $int){
  944.                 $toCalculate true;
  945.                 if($int->getSuspension() != null && ($int->getSuspension()->isManaged() == false || $int->getSuspension()->isApproved() == false))
  946.                     $toCalculate false;
  947.                 if($toCalculate)
  948.                     array_push($interventions$int);
  949.             }
  950.             # Creo JSON
  951.             $first true;
  952.             $json '[';
  953.             foreach($interventions as $int){
  954.                 if($first$first false; else $json.= ',';
  955.                 $tableActivities '---';
  956.                 if(sizeof($int->getActivities()) > 0){
  957.                     $tableActivities '<table class=\'table table_no_padding b_none m_b_none\'>';
  958.                     foreach($int->getActivities() as $act){
  959.                         if($act->getProductWithdraw() != null
  960.                             $tableActivities .= '<tr><th>Ritiro: '.$act->getType().'</th></tr><tr><td>'.$act->getProductWithdraw()->toStringShort().'</td></tr>';
  961.                         else{
  962.                             if($act->getProducerWithdraw() != null)
  963.                                 $tableActivities .= '<tr><th>Ritiro: </th></tr><tr><td>'.$act->getProducerWithdraw().'</td></tr>';
  964.                         }
  965.                         if($act->getProductActual() != null
  966.                             $tableActivities .= '<tr><th>Attuale: '.$act->getType().'</th></tr><tr><td>'.$act->getProductActual()->toStringShort().'</td></tr>';
  967.                         else{
  968.                             if($act->getProducerActual() != null)
  969.                                 $tableActivities .= '<tr><th>Attuale: </th></tr><tr><td>'.$act->getProducerActual().'</td></tr>';
  970.                         }
  971.                         if($act->getProductInstallation() != null
  972.                             $tableActivities .= '<tr><th>Installato: '.$act->getType().'</th></tr><tr><td>'.$act->getProductInstallation()->toStringShort().'</td></tr>';
  973.                         else{
  974.                             if($act->getProducerInstallation() != null)
  975.                                 $tableActivities .= '<tr><th>Installato: </th></tr><tr><td>'.$act->getProducerInstallation().'</td></tr>';
  976.                         }
  977.                     }
  978.                     $tableActivities.= '</table>';
  979.                 }
  980.                 $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>';
  981.                 $termid '';
  982.                 if($int->getTicket()->getTermid() != null)
  983.                     $termid $int->getTicket()->getTermid()->getCode();
  984.                 $json.= '{
  985.                     "id":"'.$int->getId().'", 
  986.                     "datetime":"'.$int->getDatetime()->format('d-m-Y H:i').'", 
  987.                     "client":"'.$int->getTicket()->getClient()->__toString().'", 
  988.                     "termid":"'.$termid.'", 
  989.                     "ticket":"'.$int->getTicket()->getNumber().'",
  990.                     "outcome":"'.$int->getOutcome()->getValue().'", 
  991.                     "activities":"'.$tableActivities.'",
  992.                     "amounts":"'.$tableAmounts.'"
  993.                 }';
  994.             }
  995.             $json .= ']';
  996.             return new Response(json_encode(array("code" => 200"success" => true"interventions" => $json))); 
  997.         }
  998.         /**
  999.          * @Route("/provincia-cap", name="user_province_zips")
  1000.          */
  1001.         public function userProvinceZips(Request $request)
  1002.         {    
  1003.             $em $this->mr->getManager('slave');
  1004.             $emMaster $this->mr->getManager('master');
  1005.             $province $emMaster->getRepository('App\Entity\Master\Province')->findOneById($request->request->get("provinceId"));
  1006.             $zips $emMaster->getRepository('App\Entity\Master\Zip')->findAllByProvince($province->getId());
  1007.             $operationTariffs $em->getRepository('App\Entity\Slave\OperationTariff')->findByIdProvince($province->getId());
  1008.             $first true;
  1009.             $json "[";
  1010.             foreach($zips as $zip){
  1011.                 if($first$first false; else $json.= ',';
  1012.                 $enabled 0;
  1013.                 foreach($operationTariffs as $ot){
  1014.                     // SE TUTTI I CAP DELLA PROVINCIA --> ENABLED = 1
  1015.                     if($ot->isAllZip())
  1016.                         $enabled 1;
  1017.                     else{
  1018.                         // SE TUTTI IL CAP E TRA QUELLI DELLA TARIFFA --> ENABLED = 1
  1019.                         foreach($ot->getZips() as $otZip)
  1020.                             if($otZip[1] == $zip->getCode())
  1021.                                 $enabled 1;
  1022.                     }
  1023.                 }
  1024.                 $json.= '{"id":'.$zip->getId().', "value":"'.$zip->displayCodeAndCities().'", "enabled":'.$enabled.'}';
  1025.             }
  1026.             $json.= "]";
  1027.         
  1028.             return new Response(json_encode(array("code" => 200"success" => true"zips" => $json))); 
  1029.         }
  1030.         /**
  1031.          * @Route("/aggiorna-produttore-modelli", name="user_update_producer_models")
  1032.          */
  1033.         public function userUpdateProducerModels(Request $request)
  1034.         {    
  1035.             $em $this->mr->getManager('slave');
  1036.             $producer $em->getRepository('App\Entity\Slave\Producer')->findOneById($request->request->get("producerId"));
  1037.             $models $em->getRepository('App\Entity\Slave\ProductModel')->findByProducerOrdered($producer->getId());
  1038.             $first true;
  1039.             $json "[";
  1040.             foreach($models as $model){
  1041.                 if($first$first false; else $json.= ',';
  1042.                 $json.= '{"id":'.$model->getId().', "name":"'.$model->getName().'"}';
  1043.             }
  1044.             $json.= "]";
  1045.         
  1046.             return new Response(json_encode(array("code" => 200"success" => true"models" => $json))); 
  1047.         }
  1048.         
  1049.         /**
  1050.          * @Route("/aggiorna-modello-fornitori", name="user_update_model_suppliers")
  1051.          */
  1052.         public function userUpdateModelSuppliers(Request $request)
  1053.         {    
  1054.             $em $this->mr->getManager('slave');
  1055.             $model $em->getRepository('App\Entity\Slave\ProductModel')->findOneById($request->request->get("modelId"));
  1056.             $suppliers $em->getRepository('App\Entity\Slave\Supplier')->findByModelOrdered($model->getId());
  1057.             $first true;
  1058.             $json "[";
  1059.             foreach($suppliers as $supplier){
  1060.                 if($first$first false; else $json.= ',';
  1061.                 $json.= '{"id":'.$supplier->getId().', "name":"'.$supplier->getName().'"}';
  1062.             }
  1063.             $json.= "]";
  1064.         
  1065.             return new Response(json_encode(array("code" => 200"success" => true"suppliers" => $json))); 
  1066.         }
  1067.         
  1068.         /**
  1069.          * @Route("/aggiorna-modelli-sottocategorie", name="user_product_model_update_subcategory")
  1070.          */
  1071.         public function userProductModelUpdateSubcategories(Request $request)
  1072.         {
  1073.             $em $this->mr->getManager('slave');
  1074.             if($request->request->get('categoryId') != null){
  1075.                 $category $em->getRepository("App\Entity\Slave\ProductCategory")->findOneById($request->request->get('categoryId'));
  1076.                 $subcategories $category->getSubcategories();
  1077.             }
  1078.             else{
  1079.                 $subcategories $em->getRepository("App\Entity\Slave\ProductSubcategory")->findAll();
  1080.             }
  1081.             $first true;
  1082.             $json '[';
  1083.             foreach($subcategories as $s){
  1084.                 if($first$first false; else $json.= ',';
  1085.                 $json.= '{"id":"'.$s->getId().'", "name":'.json_encode($s->getName()).'}';
  1086.             }
  1087.             $json .= ']';
  1088.             $response = array("code" => 200"success" => true"subcategories" => $json'isPos' => $category->isPos());
  1089.             return new Response(json_encode($response));
  1090.         }
  1091.         
  1092.         /**
  1093.          * @Route("/controlla-prodotto-matricole", name="user_check_product_codes")
  1094.          */
  1095.         public function userCheckProductCodes(Request $request)
  1096.         {    
  1097.             $em $this->mr->getManager('slave');
  1098.             $code $request->request->get("code");
  1099.             $type $request->request->get("type");
  1100.             $msg null;
  1101.             $product null;
  1102.             switch($type){
  1103.                 case 'producer'$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeProducer' => $code)); break;
  1104.                 case 'supplier'$product $em->getRepository('App\Entity\Slave\Product')->findOneBy(array('codeSupplier' => $code)); break;
  1105.                 default: break;
  1106.             }
  1107.             $found false;
  1108.             if($product != null){
  1109.                 $found true;
  1110.                 $msg "Il prodotto risulta già registrato nella piattaforma ecco i dettagli<br>".$product->getDisplayConflict()."<strong>Magazzino</strong>: ".$product->getActualWarehouse().".";
  1111.             }
  1112.         
  1113.             return new Response(json_encode(array("code" => 200"success" => true"found" => $found'msg' => $msg))); 
  1114.         }
  1115.         /**
  1116.          * @Route("/aggiorna-codici-interni-modelli", name="user_update_internal_code_models")
  1117.          */
  1118.         public function userUpdateInternalCodeModels(Request $request)
  1119.         {    
  1120.             $em $this->mr->getManager('slave');
  1121.             $models $em->getRepository('App\Entity\Slave\ProductModel')->findByInternalCodeNullOrEmpty();
  1122.             foreach($models as $m){
  1123.                 $m->setInternalCode(UtilitiesService::generateModelInternalCode($m->getId()));
  1124.             }
  1125.             $em->flush();
  1126.             $this->addFlash('notice_success''Codici aggiornati');
  1127.             return $this->redirectToRoute('user_index');
  1128.         }      
  1129.         
  1130.         /**
  1131.          * @Route("/aggiorna-modelli-consentiti-per-fornitore", name="user_available_product_models_by_supplier_updates")
  1132.          */
  1133.         public function userAvailableProductModelsBySupplierUpdates(Request $request)
  1134.         {
  1135.             $em $this->mr->getManager('slave');
  1136.             $supplierId $request->request->get('supplierId');
  1137.             $values $em->getRepository('App\Entity\Slave\ProductModel')->findAllowedModelsBySupplier($supplierId);
  1138.             $first true;
  1139.             $json "[";
  1140.             foreach($values as $v){
  1141.                 if($first$first false; else $json.= ',';
  1142.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  1143.             }
  1144.             $json.= "]";
  1145.         
  1146.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1147.         }       
  1148.         
  1149.         /**
  1150.          * @Route("/aggiorna-valori-modello-fornitore", name="user_product_model_name_by_supplier_updates")
  1151.          */
  1152.         public function userProductModelNameBySupplierUpdates(Request $request)
  1153.         {
  1154.             $em $this->mr->getManager('slave');
  1155.             $name $request->request->get('modelName');
  1156.             $supplierId $request->request->get('supplierId');
  1157.             $values $em->getRepository('App\Entity\Slave\ProductModel')->findByNameOrInternalCodeBySupplier($name$supplierId);
  1158.             $first true;
  1159.             $json "[";
  1160.             foreach($values as $v){
  1161.                 if($first$first false; else $json.= ',';
  1162.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  1163.             }
  1164.             $json.= "]";
  1165.         
  1166.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1167.         }
  1168.         
  1169.         /**
  1170.          * @Route("/aggiorna-valori-modello", name="user_product_model_name_updates")
  1171.          */
  1172.         public function userProductModelNameUpdates(Request $request)
  1173.         {
  1174.             $em $this->mr->getManager('slave');
  1175.             $name $request->request->get('modelName');
  1176.             $values $em->getRepository('App\Entity\Slave\ProductModel')->findByNameOrInternalCode($name);
  1177.             $first true;
  1178.             $json "[";
  1179.             foreach($values as $v){
  1180.                 if($first$first false; else $json.= ',';
  1181.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  1182.             }
  1183.             $json.= "]";
  1184.         
  1185.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1186.         }
  1187.         
  1188.         /**
  1189.          * @Route("/aggiorna-valori-magazzini", name="user_product_warehouse_nickname_updates")
  1190.          */
  1191.         public function userProductWarehouseNicknameUpdates(Request $request)
  1192.         {
  1193.             $em $this->mr->getManager('slave');
  1194.             $nickname $request->request->get('nickname');
  1195.             $termid $request->request->get('termid');
  1196.             $values $em->getRepository('App\Entity\Slave\Warehouse')->findLikeNicknameAndTermid($nickname$termid);
  1197.             $first true;
  1198.             $json "[";
  1199.             foreach($values as $v){
  1200.                 if($first$first false; else $json.= ',';
  1201.                 $termids '';
  1202.                 if($v->getClient() != null)
  1203.                     $termids $v->getClient()->displayTermids('string');
  1204.                 $json.= '{"id":'.$v->getId().', "nickname":'.json_encode($v->getNickname()).', "termids":'.json_encode($termids).'}';
  1205.             }
  1206.             $json.= "]";
  1207.         
  1208.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1209.         }
  1210.         /**
  1211.          * @Route("/aggiorna-valori-prodotto", name="user_product_value_updates")
  1212.          */
  1213.         public function userProductValuesUpdate(Request $request)
  1214.         {    
  1215.             $em $this->mr->getManager('slave');
  1216.             $id $request->request->get('id');
  1217.             $id2 $request->request->get('id2');
  1218.             switch($request->request->get('type')){
  1219.                 case 'subcategories'$values $em->getRepository('App\Entity\Slave\ProductSubcategory')->findByCategoryOrdered($id); break;
  1220.                 case 'producers'$values $em->getRepository('App\Entity\Slave\Producer')->findBySubcategoryOrdered($id); break;
  1221.                 case 'models'$values $em->getRepository('App\Entity\Slave\ProductModel')->findByProducerAndSubcategoryOrdered($id$id2); break;
  1222.                 case 'suppliers'$values $em->getRepository('App\Entity\Slave\Supplier')->findByModelOrdered($id); break;
  1223.                 default: break;
  1224.             }
  1225.             $first true;
  1226.             $json "[";
  1227.             foreach($values as $v){
  1228.                 if($first$first false; else $json.= ',';
  1229.                 $json.= '{"id":'.$v->getId().', "name":'.json_encode($v->getName()).'}';
  1230.             }
  1231.             $json.= "]";
  1232.         
  1233.             return new Response(json_encode(array("code" => 200"success" => true"values" => $json))); 
  1234.         }
  1235.         /**
  1236.          * @Route("/aggiorna-rigenerati-fornitori", name="user_product_regenerate_suppliers_update")
  1237.          */
  1238.         public function userProductRegenerateSuppliersUpdate(Request $request)
  1239.         {    
  1240.             $em $this->mr->getManager('slave');
  1241.             $productRegenerated $em->getRepository('App\Entity\Slave\ProductRegenerated')->findOneById($request->request->get('productRegeneratedId'));
  1242.             $first true;
  1243.             $json "[";
  1244.             foreach($productRegenerated->getProduct()->getSuppliers() as $supplier){
  1245.                 if($first$first false; else $json.= ',';
  1246.                 $name $supplier->getName().' ('.$supplier->getAmountRegenerate().' €)';
  1247.                 $json.= '{"id":'.$supplier->getId().', "name":'.json_encode($name).'}';
  1248.             }
  1249.             $json.= "]";
  1250.             return new Response(json_encode(array("code" => 200"success" => true"suppliers" => $json"startDate" => $productRegenerated->getDatetime()->format("d-m-Y")))); 
  1251.         }
  1252.         
  1253.         /**
  1254.          * @Route("/aggiorna-ticket-termid", name="user_ticket_termid_search")
  1255.          */
  1256.         public function userTicketTermidSearch(Request $request)
  1257.         {
  1258.             $em $this->mr->getManager('slave');
  1259.             $termidCode $request->request->get('termidCode');
  1260.             $termid $em->getRepository('App\Entity\Slave\Termid')->findOneBy(array('code' => $termidCode));
  1261.             $json '{}';
  1262.             $found false;
  1263.             if($termid != null){
  1264.                 $found true;
  1265.                 $client $termid->getClient();
  1266.                 $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()).'}';
  1267.             }
  1268.         
  1269.             return new Response(json_encode(array("code" => 200"success" => true"found" => $found"json" => $json)));
  1270.         }
  1271.         
  1272.         /**
  1273.          * @Route("/aggiorna-ticket-fornitore-operazioni", name="user_ticket_supplier_operations")
  1274.          */
  1275.         public function userTicketSupplierOperations(Request $request)
  1276.         {
  1277.             $em $this->mr->getManager('slave');
  1278.             if($request->request->get('supplierId') != null){
  1279.                 $supplier $em->getRepository('App\Entity\Slave\Supplier')->findOneById($request->request->get('supplierId'));
  1280.                 $operations $supplier->getOperations();
  1281.             }
  1282.             else{
  1283.                 $operations $em->getRepository('App\Entity\Slave\Operation')->findAll();
  1284.             }
  1285.             $first true;
  1286.             $json '[';
  1287.             foreach($operations as $operation){
  1288.                 if($first$first false; else $json.= ',';
  1289.                 $json.= '{"id":'.json_encode($operation->getId()).', "name":'.json_encode($operation->__toString()).'}';
  1290.             }
  1291.             $json.= ']';
  1292.         
  1293.             return new Response(json_encode(array("code" => 200"success" => true"operations" => $json)));
  1294.         }
  1295.     //
  1296. }