src/Controller/User/UserController.php line 524

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