src/Controller/PistolettateController.php line 131

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\AdUser;
  4. use App\Utils\Breadcrumbs;
  5. use DateTime;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use FilesystemIterator;
  9. use RecursiveIteratorIterator;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
  12. use Symfony\Component\Filesystem\Filesystem;
  13. use Symfony\Component\Filesystem\Path;
  14. use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
  15. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  16. use Symfony\Component\HttpFoundation\File\Stream;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use App\Entity\CooPfPistolettate;
  21. use App\Entity\CooPfColli;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  26. use PHPJasper\PHPJasper;
  27. use Nelmio\ApiDocBundle\Annotation\Model;
  28. use Symfony\Component\HttpFoundation\RequestStack;
  29. use OpenApi\Annotations as OA;
  30. use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
  31. use ZipArchive;
  32. class PistolettateController extends AbstractController
  33. {
  34.     private $em;
  35.     private $requestStack;
  36.     private $jsonResponse;
  37.     public function __construct(EntityManagerInterface $entityManagerRequestStack $requestStack)
  38.     {
  39.         $this->requestStack $requestStack;
  40.         $this->em $entityManager;
  41.     }
  42.     /**
  43.      * Elenco postazioni.
  44.      *
  45.      * Ritorna la lista delle postazioni
  46.      *
  47.      * @IsGranted("ROLE_USER")
  48.      * @Route("/api/postazioni", methods="GET", options={"expose"=true})
  49.      * @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
  50.      * @OA\Response(response=200, description="Ritorna l'elenco delle postazioni.")
  51.      *
  52.      */
  53.     public function postazioniList(Request $requestManagerRegistry $doctrine)
  54.     {
  55.         $elenco = [];
  56.         $db $this->getDatabase($request);
  57.         $stabilimento $this->getStabilimento($request);
  58.         $this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
  59.         if ($db === false) {
  60.             return $this->jsonResponse;
  61.         }
  62.         $postazioni $doctrine->getRepository('App:CooPfPostazioni'$db)->findBy(['isactive' => 'Y''cooStabilimentoId' => $stabilimento], ['line' => 'asc']);
  63.         //$postazioni = $doctrine->getRepository('App:CooPfPostazioni', $db)->findBy(['isactive' => 'Y'], ['line' => 'asc']);
  64.         if ($postazioni) {
  65.             foreach ($postazioni as $postazione) {
  66.                 $data $postazione->serialize();
  67.                 $elenco[] = $data;
  68.             }
  69.         }
  70.         return new JsonResponse(['totale' => count($elenco), 'elenco' => $elenco]);
  71.     }
  72.     /**
  73.      * Elenco non conformità.
  74.      *
  75.      * Ritorna la lista delle non conformità
  76.      *
  77.      * @IsGranted("ROLE_USER")
  78.      * @Route("/api/non-conformita", methods="GET", options={"expose"=true})
  79.      * @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
  80.      * @OA\Response(response=200, description="Ritorna l'elenco delle non conformità.")
  81.      *
  82.      */
  83.     public function ncList(Request $requestManagerRegistry $doctrine)
  84.     {
  85.         $elenco = [];
  86.         $db $this->getDatabase($request);
  87.         $stabilimento $this->getStabilimento($request);
  88.         $this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
  89.         if ($db === false) {
  90.             return $this->jsonResponse;
  91.         }
  92.         $ncs $doctrine->getRepository('App:CooPfNctypetab'$db)->findBy(['isactive' => 'Y'], ['name' => 'asc']);
  93.         if ($ncs) {
  94.             foreach ($ncs as $nc) {
  95.                 $data = [
  96.                     'id' => $nc->getCooPfNctypetabId(),
  97.                     'name' => $nc->getName()
  98.                 ];
  99.                 $elenco[] = $data;
  100.             }
  101.         }
  102.         return new JsonResponse(['totale' => count($elenco), 'elenco' => $elenco]);
  103.     }
  104.     /**
  105.      * Elenco lavorazioni.
  106.      *
  107.      * Ritorna la lista delle lavorazioni
  108.      *
  109.      * @IsGranted("ROLE_USER")
  110.      * @Route("/api/lavorazioni/{postazione_id}", methods="GET", options={"expose"=true})
  111.      * @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
  112.      * @OA\Response(response=200, description="Ritorna l'elenco delle lavorazioni.")
  113.      *
  114.      */
  115.     public function lavorazioniList(int $postazione_idRequest $requestManagerRegistry $doctrine)
  116.     {
  117.     set_time_limit(60);
  118.     ini_set'memory_limit''2048M' );
  119.     $db $this->getDatabase($request);
  120.         $this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
  121.         if ($db === false) {
  122.             return $this->jsonResponse;
  123.         }
  124.         $postazione $doctrine->getRepository('App:CooPfPostazioni'$db)->find($postazione_id);
  125.         $pistolettate $doctrine->getRepository('App:CooPfPistolettate'$db)->pistolettateLineaStato($postazione);
  126.         $elenco = [];
  127.         $elenco_nomi = [];
  128.         $elenco_postazioni_attuali = [];
  129.         if (isset($pistolettate)) {
  130.             $vecchiaData null;
  131.             foreach ($pistolettate as $pistolettata) {
  132.                 //$pistolettata = $doctrine->getRepository('App:CooPfPistolettate', $db)->find($pistolettata_id['coo_pf_pistolettate_id']);
  133.                 $name $pistolettata->getName();
  134.                 if (!in_array($namearray_keys($elenco_postazioni_attuali))) {
  135.                     $elenco_postazioni_attuali[$name] = $pistolettata;
  136.                 }
  137.                 if (isset($elenco_postazioni_attuali[$name]) && $pistolettata->getPostazione() && $postazione && ($pistolettata->getPostazione()->getCooPfPostazioniId() == $postazione->getCooPfPostazioniId())) {
  138.                     $data $pistolettata->serialize();
  139.                     $et $pistolettata->getCooPfEventType();
  140.                     $p_att $pistolettata->getPostazione()->getCooPfPostazioniId();
  141.                     if (($elenco_postazioni_attuali[$name])->getPostazione()->getCooPfPostazioniId() == $p_att) {
  142.                         if (!in_array($namearray_keys($elenco_nomi)) && !isset($elenco[$et][$name])) {
  143.                             if (!isset($elenco[$et])) {
  144.                                 $elenco[$et] = [];
  145.                             }
  146.                             $elenco[$et][$name] = [];
  147.                             $elenco_nomi[$name] = $et;
  148.                             $minutes 0;
  149.                         } else {
  150.                             $attualeData $pistolettata->getDataLettura();
  151.                             $interval $attualeData->diff($vecchiaData);
  152.                             $minutes $interval->format('%i');
  153.                         }
  154.                         $vecchiaData $pistolettata->getDataLettura();
  155.                         $data['duration'] = $minutes;
  156.                         $elenco[$elenco_nomi[$name]][$name][] = $data;
  157.                     }
  158.                 }
  159.             }
  160.         }
  161.         return new JsonResponse(['elenco' => $elenco]);
  162.     }
  163.     /**
  164.      * Dettaglio lavorazione.
  165.      *
  166.      * Ritorna i dati della lavorazione
  167.      *
  168.      * @IsGranted("ROLE_USER")
  169.      * @Route("/api/lavorazione/{coo_pf_pistolettate_id}", methods="GET", options={"expose"=true})
  170.      * @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
  171.      * @OA\Response(response=200, description="Ritorna la lavorazione.")
  172.      *
  173.      */
  174.     public function lavorazioneDetails(int $coo_pf_pistolettate_idRequest $requestManagerRegistry $doctrine)
  175.     {
  176.         $db $this->getDatabase($request);
  177.         $this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
  178.         if ($db === false) {
  179.             return $this->jsonResponse;
  180.         }
  181.         $pistolettata $doctrine->getRepository('App:CooPfPistolettate'$db)->find($coo_pf_pistolettate_id);
  182.         return new JsonResponse($pistolettata->serialize(true));
  183.     }
  184.     /**
  185.      * Stop lavorazione.
  186.      *
  187.      * Ferma la lavorazione
  188.      *
  189.      * @IsGranted("ROLE_USER")
  190.      * @Route("/api/stop-lavorazione", methods="POST", options={"expose"=true})
  191.      * @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
  192.      * @OA\RequestBody(@OA\JsonContent(type="object", example={"coo_pf_pistolettate_id":""}))
  193.      * @OA\Response(response=200, description="Ritorna la lavorazione.")
  194.      *
  195.      */
  196.     public function lavorazioneStop(Request $requestManagerRegistry $doctrine)
  197.     {
  198.         $data json_decode($request->getContent(), true);
  199.         $coo_pf_pistolettate_id = isset($data['coo_pf_pistolettate_id']) ? $data['coo_pf_pistolettate_id'] : null;
  200.         $db $this->getDatabase($request);
  201.         $this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
  202.         if ($db === false) {
  203.             return $this->jsonResponse;
  204.         }
  205.         $pistolettataOld $doctrine->getRepository('App:CooPfPistolettate'$db)->find($coo_pf_pistolettate_id);
  206.         $utenteloggato $doctrine->getRepository('App:AdUser'$db)->find(100);
  207.         $pistolettata = new CooPfPistolettate();
  208.         $pistolettata->setDataLettura(new DateTime());
  209.         $pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate'$db$doctrine));
  210.         $pistolettata->setAdUser($utenteloggato);
  211.         $pistolettata->setCProject($pistolettataOld->getCProject());
  212.         $pistolettata->setCProjectline($pistolettataOld->getCProjectline());
  213.         $pistolettata->setCreated(new DateTime());
  214.         $pistolettata->setCreatedby($utenteloggato->getAdUserId());
  215.         $pistolettata->setPostazione($pistolettataOld->getPostazione());
  216.         $pistolettata->setUpdated(new DateTime());
  217.         $pistolettata->setUpdatedby($utenteloggato->getAdUserId());
  218.         $pistolettata->setStatus('stop');
  219.         $pistolettata->setCooPfEventType('stop');
  220.         $pistolettata->setName($pistolettataOld->getName());
  221.         try {
  222.             $doctrine->getManager($db)->persist($pistolettata);
  223.             $doctrine->getManager($db)->flush($pistolettata);
  224.             $return = new JsonResponse(['message' => "Lavorazione conclusa correttamente"'pdf' => '''next_id' => $pistolettata->getCooPfPistolettateId()], 200);
  225.         } catch (Exception $e) {
  226.             $return = new JsonResponse(['message' => "Errore durante lo stop della lavorazione. Riprova."], 400);
  227.         }
  228.         return $return;
  229.     }
  230.     /**
  231.      * Registra azione da barcode
  232.      *
  233.      * Una volta letto il barcode inviare ID della postazione di lavoro e il valore del barcode letto
  234.      *
  235.      * @IsGranted("ROLE_USER")
  236.      * @OA\Response(response=200, description="Inserimaento andato a buon fine")
  237.      * @OA\RequestBody(@OA\JsonContent(type="object", example={"postazione_id":"", "valore":"", "evento":"", "nc_id":"", "connection": "0"}))
  238.      * @Route("/api/pistolettata", methods="POST", options={"expose"=true})
  239.      */
  240.     public function registra_azione_post(Request $requestManagerRegistry $doctrine)
  241.     {
  242.         $db $this->getDatabase($request);
  243.         $this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
  244.         if ($db === false) {
  245.             return $this->jsonResponse;
  246.         }
  247.         $data json_decode($request->getContent(), true);
  248.         $postazione_id = isset($data['postazione_id']) ? $data['postazione_id'] : null;
  249.         $valoreScan = isset($data['valore']) ? $data['valore'] : '';
  250.         $evento = isset($data['evento']) ? $data['evento'] : '';
  251.         $ncId = isset($data['nc_id']) ? $data['nc_id'] : '';
  252.         $valore trim($valoreScan);
  253.         if (!$valoreScan) {
  254.             return new JsonResponse(['message' => "Inserire il codice o usare il lettore di codice a barre"], 400);
  255.         }
  256.         if (strlen($valoreScan) != 12) {
  257.             return new JsonResponse(['message' => "Inserire il codice a barre (solo 12 cifre)"], 400);
  258.         }
  259.         $utenteloggato $doctrine->getRepository('App:AdUser'$db)->find(100);
  260.         $postazione $doctrine->getRepository('App:CooPfPostazioni'$db)->find($postazione_id);
  261.         $valConfronto $postazione->fullbarcode() ? $valore substr($valore06);
  262.         $cooPfDistaglio $doctrine->getRepository('App:CooPfDistaglio'$db)->distTaglio($valConfronto);
  263.         if (!$cooPfDistaglio && !count($cooPfDistaglio)) {
  264.             $cooPfDistaglio $doctrine->getRepository('App:CooPfScansionecomm'$db)->distTaglio($valConfronto);
  265.         }
  266.         $cProjectlineId $cooPfDistaglio $cooPfDistaglio->getCProjectlineId() : 0;
  267.         if ($cProjectlineId) {
  268.             $pistolettataAttuale $doctrine->getRepository('App:CooPfPistolettate'$db)->pistolettataAttuale($valConfronto$postazione_id);
  269.             $events = [];
  270.             if ($pistolettataAttuale && $postazione) {
  271.                 if ($pistolettataAttuale->getCooPfEventType() == 'start') {
  272.                     if ($evento == 'start') {
  273.                         $events = [/*0 => 'stop', 1 => */
  274.                             'start'];
  275.                     }
  276.                     if (in_array($evento, ['stop''nc''pause'])) {
  277.                         $events = [$evento];
  278.                     }
  279.                 } else if ($pistolettataAttuale->getCooPfEventType() == 'stop') {
  280.                     if (in_array($evento, ['start'])) {
  281.                         $events = ['start'];
  282.                     }
  283.                 } else if ($pistolettataAttuale->getCooPfEventType() == 'pause') {
  284.                     if (in_array($evento, ['start''stop'])) {
  285.                         $events = [$evento];
  286.                     }
  287.                 }
  288.             } else {
  289.                 if ($evento == 'start') {
  290.                     $events = [$evento];
  291.                 }
  292.             }
  293.             if (!$events) {
  294.                 return new JsonResponse(['message' => "Errore non è possibile proseguire. Riprova."], 400);
  295.             }
  296.             $projectLine $doctrine->getRepository('App:CProjectline'$db)->find($cProjectlineId);
  297.             foreach ($events as $event) {
  298.                 //Inizio una nuova lavorazione
  299.                 if ($event == 'start') {
  300.                     if ($projectLine && $projectLine->getCProjectlineId() > 0) {
  301.                         $pistolettata = new CooPfPistolettate();
  302.                         $pistolettata->setDataLettura(new DateTime());
  303.                         $pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate'$db$doctrine));
  304.                         $pistolettata->setAdUser($utenteloggato);
  305.                         $pistolettata->setCProject($projectLine->getCProject());
  306.                         $pistolettata->setCProjectline($projectLine);
  307.                         $pistolettata->setCreated(new DateTime());
  308.                         $pistolettata->setCreatedby($utenteloggato->getAdUserId());
  309.                         $pistolettata->setPostazione($postazione);
  310.                         $pistolettata->setUpdated(new DateTime());
  311.                         $pistolettata->setUpdatedby($utenteloggato->getAdUserId());
  312.                         $pistolettata->setStatus('start');
  313.                         $pistolettata->setCooPfEventType('start');
  314.                         $pistolettata->setName($valoreScan);
  315.                         try {
  316.                             $doctrine->getManager($db)->persist($pistolettata);
  317.                             $doctrine->getManager($db)->flush($pistolettata);
  318.                             $return = new JsonResponse(['message' => "Lavorazione iniziata correttamente"], 200);
  319.                         } catch (Exception $e) {
  320.                             $return = new JsonResponse(['message' => "Errore durante lo start della lavorazione. Riprova."], 400);
  321.                         }
  322.                     } else {
  323.                         $return = new JsonResponse(['message' => "Stai tentando di iniziare una lavorazione che non esiste. Riprova."], 400);
  324.                     }
  325.                 }
  326.                 if ($event == 'nc') {
  327.                     if ($projectLine && $projectLine->getCProjectlineId() > 0) {
  328.                         $pistolettata = new CooPfPistolettate();
  329.                         $pistolettata->setDataLettura(new DateTime());
  330.                         $pisId $this->nextId('coo_pf_pistolettate'$db$doctrine);
  331.                         $pistolettata->setCooPfPistolettateId($pisId);
  332.                         $pistolettata->setAdUser($utenteloggato);
  333.                         $pistolettata->setCProject($projectLine->getCProject());
  334.                         $pistolettata->setCProjectline($projectLine);
  335.                         $pistolettata->setCreated(new DateTime());
  336.                         $pistolettata->setCreatedby($utenteloggato->getAdUserId());
  337.                         $pistolettata->setPostazione($postazione);
  338.                         $pistolettata->setUpdated(new DateTime());
  339.                         $pistolettata->setUpdatedby($utenteloggato->getAdUserId());
  340.                         $pistolettata->setStatus('stop');
  341.                         $pistolettata->setCooPfEventType('nc');
  342.                         $pistolettata->setName($valoreScan);
  343.                         $pistolettata->setDescription($ncId);
  344.                         //$pistolettata->setAdRefListId($ncId);
  345.                         try {
  346.                             $doctrine->getManager($db)->persist($pistolettata);
  347.                             $doctrine->getManager($db)->flush($pistolettata);
  348.                             $return = new JsonResponse(['coo_pf_pistolettate_id' => $pisId'message' => "Lavorazione non conforme"], 200);
  349.                         } catch (Exception $e) {
  350.                             $return = new JsonResponse(['message' => "Errore durante il salvataggio della non conformità della lavorazione. Riprova."], 400);
  351.                         }
  352.                     } else {
  353.                         $return = new JsonResponse(['message' => "Stai tentando di salvare una lavorazione che non esiste. Riprova."], 400);
  354.                     }
  355.                 }
  356.                 if ($event == 'pause') {
  357.                     if ($projectLine && $projectLine->getCProjectlineId() > 0) {
  358.                         $pistolettata = new CooPfPistolettate();
  359.                         $pistolettata->setDataLettura(new DateTime());
  360.                         $pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate'$db$doctrine));
  361.                         $pistolettata->setAdUser($utenteloggato);
  362.                         $pistolettata->setCProject($projectLine->getCProject());
  363.                         $pistolettata->setCProjectline($projectLine);
  364.                         $pistolettata->setCreated(new DateTime());
  365.                         $pistolettata->setCreatedby($utenteloggato->getAdUserId());
  366.                         $pistolettata->setPostazione($postazione);
  367.                         $pistolettata->setUpdated(new DateTime());
  368.                         $pistolettata->setUpdatedby($utenteloggato->getAdUserId());
  369.                         $pistolettata->setStatus('stop');
  370.                         $pistolettata->setCooPfEventType('pause');
  371.                         $pistolettata->setName($valoreScan);
  372.                         try {
  373.                             $doctrine->getManager($db)->persist($pistolettata);
  374.                             $doctrine->getManager($db)->flush($pistolettata);
  375.                             $return = new JsonResponse(['message' => "Lavorazione in pausa"], 200);
  376.                         } catch (Exception $e) {
  377.                             $return = new JsonResponse(['message' => "Errore durante la messa in pausa della lavorazione. Riprova."], 400);
  378.                         }
  379.                     } else {
  380.                         $return = new JsonResponse(['message' => "Stai tentando di mettere in pausa una lavorazione che non esiste. Riprova."], 400);
  381.                     }
  382.                 }
  383.                 $labelPdf '';
  384.                 //Effettuo lo stop di una lavorazione
  385.                 if ($event == 'stop') {
  386.                     if ($projectLine && $projectLine->getCProjectlineId() > 0) {
  387.                         $pistolettata = new CooPfPistolettate();
  388.                         $pistolettata->setDataLettura(new DateTime());
  389.                         $pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate'$db$doctrine));
  390.                         $pistolettata->setAdUser($utenteloggato);
  391.                         $pistolettata->setCProject($projectLine->getCProject());
  392.                         $pistolettata->setCProjectline($projectLine);
  393.                         $pistolettata->setCreated(new DateTime());
  394.                         $pistolettata->setCreatedby($utenteloggato->getAdUserId());
  395.                         $pistolettata->setPostazione($pistolettataAttuale->getPostazione());
  396.                         $pistolettata->setUpdated(new DateTime());
  397.                         $pistolettata->setUpdatedby($utenteloggato->getAdUserId());
  398.                         $pistolettata->setStatus('stop');
  399.                         $pistolettata->setCooPfEventType('stop');
  400.                         $pistolettata->setName($valoreScan);
  401.                         if ($postazione->getLine() == 3) {
  402.                             $colli $doctrine->getRepository('App:CooPfColli'$db)->findBy(['cProjectline' => $pistolettata->getCProjectline()]);
  403.                             $numeroCollo count($colli) + 1;
  404.                             $collo = new CooPfColli();
  405.                             $collo->setCooPfColliId($this->nextId('coo_pf_colli'$db$doctrine));
  406.                             //$this->addFlash("cooPfColliId", $collo->getCooPfColliId());
  407.                             $collo->setCProject($pistolettata->getCProjectline()->getCProject());
  408.                             $collo->setCreated(new DateTime());
  409.                             $collo->setCreatedby($utenteloggato->getAdUserId());
  410.                             $collo->setDescription('');
  411.                             $collo->setName($numeroCollo);
  412.                             $collo->setCProjectline($pistolettata->getCProjectline());
  413.                             $collo->setUpdated(new DateTime());
  414.                             $collo->setUpdatedby($utenteloggato->getAdUserId());
  415.                             $doctrine->getManager($db)->persist($collo);
  416.                             try {
  417.                                 $doctrine->getManager($db)->flush($collo);
  418.                                 $REPORT_FOLDER $db == 'default' '' 'industrie/';
  419.                                 $input __DIR__ '/../../../../punto-finestre/public/reports/' $REPORT_FOLDER 'item_label_punto_persiane.jasper';
  420.                                 $output __DIR__ '/../../../../punto-finestre/public/reports/' $REPORT_FOLDER;
  421.                                 /* $input = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane' . ($DB == 'DATABASE_PUGLIA_URL' ? '2' : '') . '.jasper';
  422.                                   $output = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER; */
  423.                                 $options = [
  424.                                     'format' => ['pdf'],
  425.                                     'params' => ['RECORD_ID' => $collo->getCooPfColliId()],
  426.                                     'db_connection' => [
  427.                                         'driver' => 'postgres',
  428.                                         'username' => 'adempiere',
  429.                                         'password' => 'adempiere',
  430.                                         'host' => '192.168.1.3',
  431.                                         'database' => ($db == 'default' 'adempiere' 'industrie'),
  432.                                         'port' => '5432'
  433.                                     ]
  434.                                 ];
  435.                                 $jasper = new PHPJasper;
  436.                                 $jasper->process(
  437.                                     $input,
  438.                                     $output,
  439.                                     $options
  440.                                 )->execute();
  441.                                 $labelPdf 'https://adw.puntopersiane.it/reports/' $REPORT_FOLDER 'item_label_punto_persiane.pdf';
  442.                             } catch (\Exception $e) {
  443.                                 $return = new JsonResponse(['message' => "Errore durante lo stop della lavorazione. Non posso stampare. Riprova."], 400);
  444.                             }
  445.                         }
  446.                         try {
  447.                             $doctrine->getManager($db)->persist($pistolettata);
  448.                             $doctrine->getManager($db)->flush($pistolettata);
  449.                             $return = new JsonResponse(['message' => "Lavorazione conclusa correttamente"'pdf' => $labelPdf'next_id' => $pistolettata->getCooPfPistolettateId()], 200);
  450.                         } catch (Exception $e) {
  451.                             $return = new JsonResponse(['message' => "Errore durante lo stop della lavorazione. Riprova."], 400);
  452.                         }
  453.                     }
  454.                 }
  455.             }
  456.             if ($return) {
  457.                 return $return;
  458.             }
  459.         } else {
  460.             return new JsonResponse(['message' => "Il codice a barre non è associato a nessuna lavorazione"], 400);
  461.         }
  462.         return new JsonResponse(['message' => "Errore generico"], 400);
  463.     }
  464.     /**
  465.      * @IsGranted("ROLE_USER")
  466.      * @Route("/postazione/taglio", name="pistolettate0")
  467.      * @Route("/postazione/assemblaggio", name="pistolettate1")
  468.      * @Route("/postazione/controllo-qualita", name="pistolettate2")
  469.      * @Route("/postazione/imballaggio", name="pistolettate3")
  470.      */
  471.     public function index(Request $request)
  472.     {
  473.         $line str_replace('pistolettate'''$request->attributes->get('_route'));
  474.         $postazione $this->em->getRepository('App:CooPfPostazioni')->findOneBy(['line' => $line]);
  475.         $pistolettata $this->em->getRepository('App:CooPfPistolettate')->findOneBy(['postazione' => $postazione], ['dataLettura' => 'DESC']);
  476.         $collo null;
  477.         /* if ($status == 'stop' && $pistolettata && $pistolettata->getCProjectLine()) {
  478.           $collo = $this->em->getRepository('App:CooPfColli')->findOneBy(['cProjectline' => $pistolettata->getCProjectLine()], ['cooPfColliId' => 'DESC']);
  479.           } */
  480.         return $this->render('pistolettate/index.html.twig', [
  481.             'ultimoCollo' => $collo ?: null,
  482.             'pistolettata' => $pistolettata,
  483.             'project' => ($pistolettata && $pistolettata->getCProject()) ? $pistolettata->getCProject() : null,
  484.             'projectLine' => ($pistolettata && $pistolettata->getCProjectLine()) ? $pistolettata->getCProjectLine() : null,
  485.             'postazione' => $postazione,
  486.             'controller_name' => 'PistolettateController',
  487.         ]);
  488.     }
  489.     /**
  490.      * @IsGranted("ROLE_USER")
  491.      * @Route("/postazione/registra_azione", name="registra_azione")
  492.      */
  493.     public function registra_azione(Request $request)
  494.     {
  495.         $line $request->request->get('line', -1);
  496.         $valoreScan $request->request->get('valore''') ?: '';
  497.         //$valore = str_pad($valore, 12, '0', STR_PAD_LEFT);
  498.         $valoreRomania $valoreScan;
  499.         $valore '0' substr($valoreScan0, -1);
  500.         $utenteloggato $this->getUser();
  501.         $postazione $this->em->getRepository('App:CooPfPostazioni')->findOneBy(['line' => $line]);
  502.         $pistolettataAttuale $this->em->getRepository('App:CooPfPistolettate')->findOneBy(['postazione' => $postazione], ['dataLettura' => 'DESC']);
  503.         if (trim($valore)) {
  504.             $cooPfDistaglio $this->em->getRepository('App:CooPfDistaglio')->createQueryBuilder('cpd')
  505.                 ->where('cpd.cooCompressedid LIKE :value')
  506.                 ->setParameter('value'$valore '.%')
  507.                 ->getQuery();
  508.             $cooPfDistaglio count($cooPfDistaglio->getResult()) ? $cooPfDistaglio->getSingleResult() : null;
  509.             if (!$cooPfDistaglio) {
  510.                 $cooPfDistaglio $this->em->getRepository('App:CooPfDistaglio')->createQueryBuilder('cpd')
  511.                     ->where('cpd.cooCompressedid LIKE :value')
  512.                     ->setParameter('value'$valoreRomania '.%')
  513.                     ->getQuery();
  514.                 $cooPfDistaglio count($cooPfDistaglio->getResult()) ? $cooPfDistaglio->getSingleResult() : null;
  515.             }
  516.             $terzoCaso false;
  517.             if (!$cooPfDistaglio) {
  518.                 $terzoCaso true;
  519.                 $terzoVal substr($valore25);
  520.                 $cooPfDistaglio $this->em->getRepository('App:CooPfScansionecomm')->createQueryBuilder('csc');
  521.                 $cooPfDistaglio
  522.                     ->where($cooPfDistaglio->expr()->eq($cooPfDistaglio->expr()->substring("csc.cooCompressedid"35), "'" $terzoVal "'"))
  523.                     ->addOrderBy('csc.cProjectlineId''DESC');
  524.                 $cooPfDistaglio $cooPfDistaglio->getQuery()->setMaxResults(1);
  525.                 $cooPfDistaglio count($cooPfDistaglio->execute()) ? $cooPfDistaglio->getSingleResult() : null;
  526.                 if (!$cooPfDistaglio) {
  527.                     $terzoVal substr($valoreRomania25);
  528.                     $cooPfDistaglio $this->em->getRepository('App:CooPfScansionecomm')->createQueryBuilder('csc');
  529.                     $cooPfDistaglio
  530.                         ->where($cooPfDistaglio->expr()->eq($cooPfDistaglio->expr()->substring("csc.cooCompressedid"35), "'" $terzoVal "'"))
  531.                         ->addOrderBy('csc.cProjectlineId''DESC');
  532.                     $cooPfDistaglio $cooPfDistaglio->getQuery()->setMaxResults(1);
  533.                     $cooPfDistaglio count($cooPfDistaglio->execute()) ? $cooPfDistaglio->getSingleResult() : null;
  534.                 }
  535.             }
  536.             $cProjectlineId $cooPfDistaglio $cooPfDistaglio->getCProjectlineId() : 0;
  537.             if ($cProjectlineId) {
  538.                 //Inizio una nuova lavorazione
  539.                 if (!$pistolettataAttuale || ($pistolettataAttuale && $pistolettataAttuale->getStatus() == 'stop')) {
  540.                     $projectLine $this->em->getRepository('App:CProjectline')->find($cProjectlineId);
  541.                     if ($projectLine && $projectLine->getCProjectlineId() > 0) {
  542.                         $pistolettata = new CooPfPistolettate();
  543.                         $pistolettata->setDataLettura(new DateTime());
  544.                         $pistolettata->setStatus('start');
  545.                         $pistolettata->setCooPfEventType('start');
  546.                         $pistolettata->setName($valoreScan);
  547.                         $pistolettata->setCooPfPistolettateId($this->nextIdOld('coo_pf_pistolettate'));
  548.                         $pistolettata->setAdUser($utenteloggato);
  549.                         $pistolettata->setCProject($projectLine->getCProject());
  550.                         $pistolettata->setCProjectline($projectLine);
  551.                         $pistolettata->setCreated(new DateTime());
  552.                         $pistolettata->setCreatedby($utenteloggato->getAdUserId());
  553.                         $pistolettata->setPostazione($postazione);
  554.                         $pistolettata->setUpdated(new DateTime());
  555.                         $pistolettata->setUpdatedby($utenteloggato->getAdUserId());
  556.                         try {
  557.                             $this->em->persist($pistolettata);
  558.                             $this->em->flush();
  559.                             $this->addFlash("success""Lavorazione iniziata correttamente");
  560.                         } catch (Exception $e) {
  561.                             $this->addFlash("error""Errore durante lo start della lavorazione. Riprova.");
  562.                         }
  563.                     } else {
  564.                         $this->addFlash("error""Stai tentando di iniziare una lavorazione che non esiste. Riprova.");
  565.                     }
  566.                 } //Effettuo lo stop di una lavorazione
  567.                 else if ($pistolettataAttuale && $pistolettataAttuale->getStatus() == 'start' && $pistolettataAttuale->getCProjectline()->getCProjectlineId() == $cProjectlineId) {
  568.                     $pistolettata = clone $pistolettataAttuale;
  569.                     $pistolettata->setStatus('stop');
  570.                     $pistolettata->setCooPfEventType('stop');
  571.                     $pistolettata->setName($valoreScan);
  572.                     $pistolettata->setDataLettura(new DateTime());
  573.                     $pistolettata->setCooPfPistolettateId($this->nextIdOld('coo_pf_pistolettate'));
  574.                     if ($postazione->getLine() == 3) {
  575.                         $colli $this->em->getRepository('App:CooPfColli')->findBy(['cProjectline' => $pistolettata->getCProjectline()]);
  576.                         $numeroCollo count($colli) + 1;
  577.                         $collo = new CooPfColli();
  578.                         $collo->setCooPfColliId($this->nextIdOld('coo_pf_colli'));
  579.                         $this->addFlash("cooPfColliId"$collo->getCooPfColliId());
  580.                         $collo->setCProject($pistolettata->getCProjectline()->getCProject());
  581.                         $collo->setCreated(new DateTime());
  582.                         $collo->setCreatedby($utenteloggato->getAdUserId());
  583.                         $collo->setDescription('');
  584.                         $collo->setName($numeroCollo);
  585.                         $collo->setCProjectline($pistolettata->getCProjectline());
  586.                         $collo->setUpdated(new DateTime());
  587.                         $collo->setUpdatedby($utenteloggato->getAdUserId());
  588.                         $this->em->persist($collo);
  589.                     }
  590.                     try {
  591.                         $this->em->persist($pistolettata);
  592.                         $this->em->flush();
  593.                         $this->addFlash("success""Lavorazione conclusa correttamente");
  594.                     } catch (Exception $e) {
  595.                         $this->addFlash("error""Errore durante lo stop della lavorazione. Riprova.");
  596.                     }
  597.                 } else {
  598.                     $this->addFlash("error""Stai tentando di interrompere una lavorazione che non è attualmente in questa postazione. Riprova.");
  599.                 }
  600.             } else {
  601.                 $this->addFlash("warning""Il codece a barre non è associato a nessuna lavorazione");
  602.             }
  603.         } else {
  604.             $this->addFlash("warning""Inserire il codice o usare il lettore di codice a barre");
  605.         }
  606.         return $this->redirectToRoute('pistolettate' $line);
  607.     }
  608.     private function nextIdOld($name)
  609.     {
  610.         $next $this->em->getRepository('App:AdSequence')->findOneBy(['name' => $name]);
  611.         if ($next) {
  612.             $prossimo $next->getCurrentnext();
  613.             $next->setCurrentnext($next->getCurrentnext() + 1);
  614.             try {
  615.                 $this->em->persist($next);
  616.                 $this->em->flush($next);
  617.             } catch (Exception $e) {
  618.                 $this->addFlash("error""Errore nel calcolo ID. Riprova.");
  619.                 return null;
  620.             }
  621.             return $prossimo;
  622.         }
  623.         return null;
  624.     }
  625.     private function nextId($name$db$doctrine)
  626.     {
  627.         $next $doctrine->getRepository('App:AdSequence'$db)->findOneBy(['name' => $name]);
  628.         if ($next) {
  629.             $prossimo $next->getCurrentnext();
  630.             $next->setCurrentnext($next->getCurrentnext() + 1);
  631.             try {
  632.                 $doctrine->getManager($db)->persist($next);
  633.                 $doctrine->getManager($db)->flush($next);
  634.             } catch (Exception $e) {
  635.                 return null;
  636.             }
  637.             return $prossimo;
  638.         }
  639.         return null;
  640.     }
  641.     /**
  642.      * @IsGranted("ROLE_USER")
  643.      * @Route("/postazione/print_label/{id}/{stabilimento}", name="print_label", methods="GET", options={"expose"=true})
  644.      * @param int $id
  645.      */
  646.     public function print_label($id$stabilimento 'DATABASE_URL')
  647.     {
  648.         $REPORT_FOLDER $stabilimento == 'DATABASE_URL' '' 'industrie/';
  649.         $input __DIR__ '/../../public/reports/' $REPORT_FOLDER 'item_label_punto_persiane.jasper';
  650.         $output __DIR__ '/../../public/reports/' $REPORT_FOLDER;
  651.         /* $input = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane' . ($DB == 'DATABASE_PUGLIA_URL' ? '2' : '') . '.jasper';
  652.           $output = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER; */
  653.         $options = [
  654.             'format' => ['pdf'],
  655.             'params' => ['RECORD_ID' => $id],
  656.             'db_connection' => [
  657.                 'driver' => 'postgres',
  658.                 'username' => 'adempiere',
  659.                 'password' => 'adempiere',
  660.                 'host' => 'localhost',
  661.                 'database' => ($stabilimento == 'DATABASE_URL' 'adempiere' 'industrie'),
  662.                 'port' => '5432'
  663.             ]
  664.         ];
  665.         $jasper = new PHPJasper;
  666.         $jasper->process(
  667.             $input,
  668.             $output,
  669.             $options
  670.         )->execute();
  671.         $filename 'label-' $id '.pdf';
  672.         $response = new Response(file_get_contents($output 'item_label_punto_persiane.pdf'));
  673.         $response->setCharset('UTF-8');
  674.         $response->headers->set('Content-Type''application/pdf');
  675.         $response->headers->set('Content-Disposition'"attachement; filename=\"{$filename}\"");
  676.         return $response;
  677.     }
  678.     private function baseImagePath($stabilimento '')
  679.     {
  680.         return "/mnt/allegatiadempiere/nc-images" . ($_SERVER["APP_IMGURL"] == 'dev' '-test' '') . "/" . ($stabilimento $stabilimento "/" "");
  681.     }
  682.     /**
  683.      * @IsGranted("ROLE_USER")
  684.      * @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
  685.      * @Route("/api/nc-photo/{id}", name="zip-nc", methods="POST", options={"expose"=true})
  686.      * @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"0"}))
  687.      * @param int $id
  688.      */
  689.     public function ncPhoto(Request $requestint $id null): JsonResponse
  690.     {
  691.         $stabilimento $this->getStabilimento($request);
  692.         $filesystem = new Filesystem();
  693.         $photoDir Path::normalize($this->baseImagePath($stabilimento) . $id "/");
  694.         if (!$filesystem->exists($photoDir)) {
  695.             try {
  696.                 $filesystem->mkdir($photoDir);
  697.             } catch (IOExceptionInterface $exception) {
  698.                 echo "An error occurred while creating your directory at " $exception->getPath();
  699.             }
  700.         }
  701.         $data json_decode($request->getContent(), true);
  702.         $status 200;
  703.         if (isset($data['files']) && $data['files']) {
  704.             foreach ($data['files'] as $file) {
  705.                 $b64 $file['b64'];
  706.                 $fd explode(','$b64);
  707.                 $filedata $fd[1] ?? $fd[0];
  708.                 $filedata $filedata base64_decode($filedata) : null;
  709.                 if ($filedata) {
  710.                     $filename $file['fileName'];
  711.                     $filetype $file['fileType'];
  712.                     $filesize $file['fileSize'];
  713.                     $pos strrpos($filename'.');
  714.                     $estensione substr($filename$pos 1strlen($filename));
  715.                     $filesystem->dumpFile($photoDir $filename$filedata);
  716.                 }
  717.             }
  718.         }
  719.         return new JsonResponse(['id' => $id], $status);
  720.     }
  721.     /**
  722.      * @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
  723.      * @Route("/api/nc-photo/{id}", name="zip-nc-list", methods="GET", options={"expose"=true})
  724.      * @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"0"}))
  725.      * @param int $id
  726.      */
  727.     public function ncPhotoList(Request $requestint $id null): JsonResponse
  728.     {
  729.         $filesystem = new Filesystem();
  730.         $stabilimento $this->getStabilimento($request);
  731.         $photoDir Path::normalize($this->baseImagePath($stabilimento) . $id "/");
  732.         $filesArray = [];
  733.         if ($filesystem->exists($photoDir)) {
  734.             $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($photoDirFilesystemIterator::CURRENT_AS_FILEINFO), RecursiveIteratorIterator::LEAVES_ONLY);
  735.             if ($files) {
  736.                 foreach ($files as $file) {
  737.                     if (!$file->isDir()) {
  738.                         $filePath $file->getRealPath();
  739.                         $relativePath substr($filePathstrlen($photoDir));
  740.                         $filesArray[] = [
  741.                             'filename' => $relativePath,
  742.                             'filepath' => $filePath,
  743.                             'url' => "https://" $_SERVER['SERVER_NAME'] . "/api/nc-photo-file/" $id "/" $stabilimento "/" $relativePath
  744.                         ];
  745.                     }
  746.                 }
  747.             }
  748.             return new JsonResponse(['files' => $filesArray], 200);
  749.         }
  750.         return new JsonResponse(null400);
  751.     }
  752.     /**
  753.      * @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
  754.      * @OA\Parameter(name="filename", in="path", description="Il nome del file", @OA\Schema(type="string"))
  755.      * @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"0"}))
  756.      * @Route("/api/nc-photo-file/{id}/{stabilimento}/{filename}", name="zip-nc-file", methods="GET", options={"expose"=true})
  757.      * @param Request $request
  758.      * @param int|null $id
  759.      * @param string $filename
  760.      * @return JsonResponse
  761.      */
  762.     public function ncPhotoFile(Request $requestint $id nullstring $stabilimento ''string $filename ''): BinaryFileResponse
  763.     {
  764.         $filesystem = new Filesystem();
  765.         $photoDir Path::normalize($this->baseImagePath($stabilimento) . $id "/");
  766.         $filesArray = [];
  767.         if ($filesystem->exists($photoDir)) {
  768.             $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($photoDirFilesystemIterator::CURRENT_AS_FILEINFO), RecursiveIteratorIterator::LEAVES_ONLY);
  769.             if ($files) {
  770.                 foreach ($files as $file) {
  771.                     if (!$file->isDir()) {
  772.                         $filePath $file->getRealPath();
  773.                         $relativePath substr($filePathstrlen($photoDir));
  774.                         if ($relativePath == $filename) {
  775.                             $stream = new Stream($photoDir $filename);
  776.                             $response = new BinaryFileResponse($stream);
  777.                             $response->headers->set('Content-Type'$file->getType());
  778.                             return $response;
  779.                         }
  780.                     }
  781.                 }
  782.             }
  783.         }
  784.         return new BinaryFileResponse(null400);
  785.     }
  786.     /**
  787.      * @IsGranted("ROLE_USER")
  788.      * @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
  789.      * @Route("/api/zip-nc-photo/{id}", name="zip-nc-photo", methods="GET", options={"expose"=true})
  790.      * @param int $id
  791.      */
  792.     public function zipNcPhoto(Request $requestint $id null)
  793.     {
  794.         $filesystem = new Filesystem();
  795.         $stabilimento $this->getStabilimento($request);
  796.         $photoDir Path::normalize($this->baseImagePath($stabilimento) . $id "/");
  797.         if ($filesystem->exists($photoDir)) {
  798.             $data json_decode($request->getContent(), true);
  799.             $status 200;
  800.             //$zip = new \ZipArchive();
  801.             $nomeFile tempnam(sys_get_temp_dir(), 'photo');
  802.             exec('cd ' $photoDir ' ; zip -r ' $nomeFile ' .');
  803.             //$zip->open($nomeFile, \ZipArchive::CREATE);
  804.             /* $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($photoDir, FilesystemIterator::CURRENT_AS_FILEINFO), RecursiveIteratorIterator::LEAVES_ONLY);
  805.              foreach ($files as $file) {
  806.                  if (!$file->isDir()) {
  807.                      $filePath = $file->getRealPath();
  808.                      $relativePath = substr($filePath, strlen($photoDir) + 1);
  809.                      $zip->addFile($filePath, $relativePath);
  810.                  }
  811.              }*/
  812.             $stream = new Stream($nomeFile '.zip');
  813.             $response = new BinaryFileResponse($stream);
  814.             $response->headers->set('Content-Type''application/zip');
  815.             return $response;
  816.         } else {
  817.             return new Response(null400);
  818.         }
  819.     }
  820.     /**
  821.      *
  822.      * Cambio sede
  823.      *
  824.      * Cambia la sede
  825.      *
  826.      * @IsGranted("ROLE_USER")
  827.      * @OA\Response(response=200, description="Tutto ok")
  828.      * @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"2"}))
  829.      * @Route("/api/change-location", name="change_location", methods={"PUT", "POST"}, options={"expose"=true})
  830.      */
  831.     public
  832.     function change_location(Request $request)
  833.     {
  834.         if ($request->isMethod('POST')) {
  835.             $connection $request->request->get('connection');
  836.         } else {
  837.             $data json_decode($request->getContent(), true);
  838.             $connection $data['connection'];
  839.         }
  840.         $session $this->requestStack->getSession();
  841.         return $session->set('DB'$connection);
  842.         return new JsonResponse(['connection' => $connection], 200);
  843.     }
  844.     public
  845.     function getDatabase($request)
  846.     {
  847.         $data json_decode($request->getContent(), true);
  848.         $connection = isset($data['connection']) ? $data['connection'] : -1;
  849.         if ($connection 0) {
  850.             $connection $request->request->get('connection', -1);
  851.             if ($connection 0) {
  852.                 $connection $request->query->get('connection', -1);
  853.             }
  854.         }
  855.         if ($connection 0) {
  856.             return false;
  857.         }
  858.         $db $connection == 'puglia' 'default';
  859.         return $db;
  860.     }
  861.     public
  862.     function getStabilimento($request)
  863.     {
  864.         $data json_decode($request->getContent(), true);
  865.         $connection = isset($data['connection']) ? $data['connection'] : -1;
  866.         if ($connection 0) {
  867.             if ($request->isMethod('POST')) {
  868.                 $connection $request->request->get('connection', -1);
  869.             } else if ($request->isMethod('GET')) {
  870.                 $connection $request->query->get('connection', -1);
  871.             }
  872.         }
  873.         if ($connection 0) {
  874.             return false;
  875.         }
  876.         $stabilimenti = [=> '1000000'=> '1000001'=> '2000001'];
  877.         return $stabilimenti[$connection];
  878.     }
  879. }