<?php
namespace App\Controller;
use App\Entity\AdUser;
use App\Utils\Breadcrumbs;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use FilesystemIterator;
use RecursiveIteratorIterator;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Path;
use Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\File\Stream;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\CooPfPistolettate;
use App\Entity\CooPfColli;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use PHPJasper\PHPJasper;
use Nelmio\ApiDocBundle\Annotation\Model;
use Symfony\Component\HttpFoundation\RequestStack;
use OpenApi\Annotations as OA;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use ZipArchive;
class PistolettateController extends AbstractController
{
private $em;
private $requestStack;
private $jsonResponse;
public function __construct(EntityManagerInterface $entityManager, RequestStack $requestStack)
{
$this->requestStack = $requestStack;
$this->em = $entityManager;
}
/**
* Elenco postazioni.
*
* Ritorna la lista delle postazioni
*
* @IsGranted("ROLE_USER")
* @Route("/api/postazioni", methods="GET", options={"expose"=true})
* @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
* @OA\Response(response=200, description="Ritorna l'elenco delle postazioni.")
*
*/
public function postazioniList(Request $request, ManagerRegistry $doctrine)
{
$elenco = [];
$db = $this->getDatabase($request);
$stabilimento = $this->getStabilimento($request);
$this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
if ($db === false) {
return $this->jsonResponse;
}
$postazioni = $doctrine->getRepository('App:CooPfPostazioni', $db)->findBy(['isactive' => 'Y', 'cooStabilimentoId' => $stabilimento], ['line' => 'asc']);
//$postazioni = $doctrine->getRepository('App:CooPfPostazioni', $db)->findBy(['isactive' => 'Y'], ['line' => 'asc']);
if ($postazioni) {
foreach ($postazioni as $postazione) {
$data = $postazione->serialize();
$elenco[] = $data;
}
}
return new JsonResponse(['totale' => count($elenco), 'elenco' => $elenco]);
}
/**
* Elenco non conformità.
*
* Ritorna la lista delle non conformità
*
* @IsGranted("ROLE_USER")
* @Route("/api/non-conformita", methods="GET", options={"expose"=true})
* @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
* @OA\Response(response=200, description="Ritorna l'elenco delle non conformità.")
*
*/
public function ncList(Request $request, ManagerRegistry $doctrine)
{
$elenco = [];
$db = $this->getDatabase($request);
$stabilimento = $this->getStabilimento($request);
$this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
if ($db === false) {
return $this->jsonResponse;
}
$ncs = $doctrine->getRepository('App:CooPfNctypetab', $db)->findBy(['isactive' => 'Y'], ['name' => 'asc']);
if ($ncs) {
foreach ($ncs as $nc) {
$data = [
'id' => $nc->getCooPfNctypetabId(),
'name' => $nc->getName()
];
$elenco[] = $data;
}
}
return new JsonResponse(['totale' => count($elenco), 'elenco' => $elenco]);
}
/**
* Elenco lavorazioni.
*
* Ritorna la lista delle lavorazioni
*
* @IsGranted("ROLE_USER")
* @Route("/api/lavorazioni/{postazione_id}", methods="GET", options={"expose"=true})
* @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
* @OA\Response(response=200, description="Ritorna l'elenco delle lavorazioni.")
*
*/
public function lavorazioniList(int $postazione_id, Request $request, ManagerRegistry $doctrine)
{
set_time_limit(60);
ini_set( 'memory_limit', '2048M' );
$db = $this->getDatabase($request);
$this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
if ($db === false) {
return $this->jsonResponse;
}
$postazione = $doctrine->getRepository('App:CooPfPostazioni', $db)->find($postazione_id);
$pistolettate = $doctrine->getRepository('App:CooPfPistolettate', $db)->pistolettateLineaStato($postazione);
$elenco = [];
$elenco_nomi = [];
$elenco_postazioni_attuali = [];
if (isset($pistolettate)) {
$vecchiaData = null;
foreach ($pistolettate as $pistolettata) {
//$pistolettata = $doctrine->getRepository('App:CooPfPistolettate', $db)->find($pistolettata_id['coo_pf_pistolettate_id']);
$name = $pistolettata->getName();
if (!in_array($name, array_keys($elenco_postazioni_attuali))) {
$elenco_postazioni_attuali[$name] = $pistolettata;
}
if (isset($elenco_postazioni_attuali[$name]) && $pistolettata->getPostazione() && $postazione && ($pistolettata->getPostazione()->getCooPfPostazioniId() == $postazione->getCooPfPostazioniId())) {
$data = $pistolettata->serialize();
$et = $pistolettata->getCooPfEventType();
$p_att = $pistolettata->getPostazione()->getCooPfPostazioniId();
if (($elenco_postazioni_attuali[$name])->getPostazione()->getCooPfPostazioniId() == $p_att) {
if (!in_array($name, array_keys($elenco_nomi)) && !isset($elenco[$et][$name])) {
if (!isset($elenco[$et])) {
$elenco[$et] = [];
}
$elenco[$et][$name] = [];
$elenco_nomi[$name] = $et;
$minutes = 0;
} else {
$attualeData = $pistolettata->getDataLettura();
$interval = $attualeData->diff($vecchiaData);
$minutes = $interval->format('%i');
}
$vecchiaData = $pistolettata->getDataLettura();
$data['duration'] = $minutes;
$elenco[$elenco_nomi[$name]][$name][] = $data;
}
}
}
}
return new JsonResponse(['elenco' => $elenco]);
}
/**
* Dettaglio lavorazione.
*
* Ritorna i dati della lavorazione
*
* @IsGranted("ROLE_USER")
* @Route("/api/lavorazione/{coo_pf_pistolettate_id}", methods="GET", options={"expose"=true})
* @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
* @OA\Response(response=200, description="Ritorna la lavorazione.")
*
*/
public function lavorazioneDetails(int $coo_pf_pistolettate_id, Request $request, ManagerRegistry $doctrine)
{
$db = $this->getDatabase($request);
$this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
if ($db === false) {
return $this->jsonResponse;
}
$pistolettata = $doctrine->getRepository('App:CooPfPistolettate', $db)->find($coo_pf_pistolettate_id);
return new JsonResponse($pistolettata->serialize(true));
}
/**
* Stop lavorazione.
*
* Ferma la lavorazione
*
* @IsGranted("ROLE_USER")
* @Route("/api/stop-lavorazione", methods="POST", options={"expose"=true})
* @OA\Parameter(name="connection", in="query", description="Connessione", @OA\Schema(type="integer"))
* @OA\RequestBody(@OA\JsonContent(type="object", example={"coo_pf_pistolettate_id":""}))
* @OA\Response(response=200, description="Ritorna la lavorazione.")
*
*/
public function lavorazioneStop(Request $request, ManagerRegistry $doctrine)
{
$data = json_decode($request->getContent(), true);
$coo_pf_pistolettate_id = isset($data['coo_pf_pistolettate_id']) ? $data['coo_pf_pistolettate_id'] : null;
$db = $this->getDatabase($request);
$this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
if ($db === false) {
return $this->jsonResponse;
}
$pistolettataOld = $doctrine->getRepository('App:CooPfPistolettate', $db)->find($coo_pf_pistolettate_id);
$utenteloggato = $doctrine->getRepository('App:AdUser', $db)->find(100);
$pistolettata = new CooPfPistolettate();
$pistolettata->setDataLettura(new DateTime());
$pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate', $db, $doctrine));
$pistolettata->setAdUser($utenteloggato);
$pistolettata->setCProject($pistolettataOld->getCProject());
$pistolettata->setCProjectline($pistolettataOld->getCProjectline());
$pistolettata->setCreated(new DateTime());
$pistolettata->setCreatedby($utenteloggato->getAdUserId());
$pistolettata->setPostazione($pistolettataOld->getPostazione());
$pistolettata->setUpdated(new DateTime());
$pistolettata->setUpdatedby($utenteloggato->getAdUserId());
$pistolettata->setStatus('stop');
$pistolettata->setCooPfEventType('stop');
$pistolettata->setName($pistolettataOld->getName());
try {
$doctrine->getManager($db)->persist($pistolettata);
$doctrine->getManager($db)->flush($pistolettata);
$return = new JsonResponse(['message' => "Lavorazione conclusa correttamente", 'pdf' => '', 'next_id' => $pistolettata->getCooPfPistolettateId()], 200);
} catch (Exception $e) {
$return = new JsonResponse(['message' => "Errore durante lo stop della lavorazione. Riprova."], 400);
}
return $return;
}
/**
* Registra azione da barcode
*
* Una volta letto il barcode inviare ID della postazione di lavoro e il valore del barcode letto
*
* @IsGranted("ROLE_USER")
* @OA\Response(response=200, description="Inserimaento andato a buon fine")
* @OA\RequestBody(@OA\JsonContent(type="object", example={"postazione_id":"", "valore":"", "evento":"", "nc_id":"", "connection": "0"}))
* @Route("/api/pistolettata", methods="POST", options={"expose"=true})
*/
public function registra_azione_post(Request $request, ManagerRegistry $doctrine)
{
$db = $this->getDatabase($request);
$this->jsonResponse = new JsonResponse(['error' => 'NO_CONNECTION'], 400);
if ($db === false) {
return $this->jsonResponse;
}
$data = json_decode($request->getContent(), true);
$postazione_id = isset($data['postazione_id']) ? $data['postazione_id'] : null;
$valoreScan = isset($data['valore']) ? $data['valore'] : '';
$evento = isset($data['evento']) ? $data['evento'] : '';
$ncId = isset($data['nc_id']) ? $data['nc_id'] : '';
$valore = trim($valoreScan);
if (!$valoreScan) {
return new JsonResponse(['message' => "Inserire il codice o usare il lettore di codice a barre"], 400);
}
if (strlen($valoreScan) != 12) {
return new JsonResponse(['message' => "Inserire il codice a barre (solo 12 cifre)"], 400);
}
$utenteloggato = $doctrine->getRepository('App:AdUser', $db)->find(100);
$postazione = $doctrine->getRepository('App:CooPfPostazioni', $db)->find($postazione_id);
$valConfronto = $postazione->fullbarcode() ? $valore : substr($valore, 0, 6);
$cooPfDistaglio = $doctrine->getRepository('App:CooPfDistaglio', $db)->distTaglio($valConfronto);
if (!$cooPfDistaglio && !count($cooPfDistaglio)) {
$cooPfDistaglio = $doctrine->getRepository('App:CooPfScansionecomm', $db)->distTaglio($valConfronto);
}
$cProjectlineId = $cooPfDistaglio ? $cooPfDistaglio->getCProjectlineId() : 0;
if ($cProjectlineId) {
$pistolettataAttuale = $doctrine->getRepository('App:CooPfPistolettate', $db)->pistolettataAttuale($valConfronto, $postazione_id);
$events = [];
if ($pistolettataAttuale && $postazione) {
if ($pistolettataAttuale->getCooPfEventType() == 'start') {
if ($evento == 'start') {
$events = [/*0 => 'stop', 1 => */
'start'];
}
if (in_array($evento, ['stop', 'nc', 'pause'])) {
$events = [$evento];
}
} else if ($pistolettataAttuale->getCooPfEventType() == 'stop') {
if (in_array($evento, ['start'])) {
$events = ['start'];
}
} else if ($pistolettataAttuale->getCooPfEventType() == 'pause') {
if (in_array($evento, ['start', 'stop'])) {
$events = [$evento];
}
}
} else {
if ($evento == 'start') {
$events = [$evento];
}
}
if (!$events) {
return new JsonResponse(['message' => "Errore non è possibile proseguire. Riprova."], 400);
}
$projectLine = $doctrine->getRepository('App:CProjectline', $db)->find($cProjectlineId);
foreach ($events as $event) {
//Inizio una nuova lavorazione
if ($event == 'start') {
if ($projectLine && $projectLine->getCProjectlineId() > 0) {
$pistolettata = new CooPfPistolettate();
$pistolettata->setDataLettura(new DateTime());
$pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate', $db, $doctrine));
$pistolettata->setAdUser($utenteloggato);
$pistolettata->setCProject($projectLine->getCProject());
$pistolettata->setCProjectline($projectLine);
$pistolettata->setCreated(new DateTime());
$pistolettata->setCreatedby($utenteloggato->getAdUserId());
$pistolettata->setPostazione($postazione);
$pistolettata->setUpdated(new DateTime());
$pistolettata->setUpdatedby($utenteloggato->getAdUserId());
$pistolettata->setStatus('start');
$pistolettata->setCooPfEventType('start');
$pistolettata->setName($valoreScan);
try {
$doctrine->getManager($db)->persist($pistolettata);
$doctrine->getManager($db)->flush($pistolettata);
$return = new JsonResponse(['message' => "Lavorazione iniziata correttamente"], 200);
} catch (Exception $e) {
$return = new JsonResponse(['message' => "Errore durante lo start della lavorazione. Riprova."], 400);
}
} else {
$return = new JsonResponse(['message' => "Stai tentando di iniziare una lavorazione che non esiste. Riprova."], 400);
}
}
if ($event == 'nc') {
if ($projectLine && $projectLine->getCProjectlineId() > 0) {
$pistolettata = new CooPfPistolettate();
$pistolettata->setDataLettura(new DateTime());
$pisId = $this->nextId('coo_pf_pistolettate', $db, $doctrine);
$pistolettata->setCooPfPistolettateId($pisId);
$pistolettata->setAdUser($utenteloggato);
$pistolettata->setCProject($projectLine->getCProject());
$pistolettata->setCProjectline($projectLine);
$pistolettata->setCreated(new DateTime());
$pistolettata->setCreatedby($utenteloggato->getAdUserId());
$pistolettata->setPostazione($postazione);
$pistolettata->setUpdated(new DateTime());
$pistolettata->setUpdatedby($utenteloggato->getAdUserId());
$pistolettata->setStatus('stop');
$pistolettata->setCooPfEventType('nc');
$pistolettata->setName($valoreScan);
$pistolettata->setDescription($ncId);
//$pistolettata->setAdRefListId($ncId);
try {
$doctrine->getManager($db)->persist($pistolettata);
$doctrine->getManager($db)->flush($pistolettata);
$return = new JsonResponse(['coo_pf_pistolettate_id' => $pisId, 'message' => "Lavorazione non conforme"], 200);
} catch (Exception $e) {
$return = new JsonResponse(['message' => "Errore durante il salvataggio della non conformità della lavorazione. Riprova."], 400);
}
} else {
$return = new JsonResponse(['message' => "Stai tentando di salvare una lavorazione che non esiste. Riprova."], 400);
}
}
if ($event == 'pause') {
if ($projectLine && $projectLine->getCProjectlineId() > 0) {
$pistolettata = new CooPfPistolettate();
$pistolettata->setDataLettura(new DateTime());
$pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate', $db, $doctrine));
$pistolettata->setAdUser($utenteloggato);
$pistolettata->setCProject($projectLine->getCProject());
$pistolettata->setCProjectline($projectLine);
$pistolettata->setCreated(new DateTime());
$pistolettata->setCreatedby($utenteloggato->getAdUserId());
$pistolettata->setPostazione($postazione);
$pistolettata->setUpdated(new DateTime());
$pistolettata->setUpdatedby($utenteloggato->getAdUserId());
$pistolettata->setStatus('stop');
$pistolettata->setCooPfEventType('pause');
$pistolettata->setName($valoreScan);
try {
$doctrine->getManager($db)->persist($pistolettata);
$doctrine->getManager($db)->flush($pistolettata);
$return = new JsonResponse(['message' => "Lavorazione in pausa"], 200);
} catch (Exception $e) {
$return = new JsonResponse(['message' => "Errore durante la messa in pausa della lavorazione. Riprova."], 400);
}
} else {
$return = new JsonResponse(['message' => "Stai tentando di mettere in pausa una lavorazione che non esiste. Riprova."], 400);
}
}
$labelPdf = '';
//Effettuo lo stop di una lavorazione
if ($event == 'stop') {
if ($projectLine && $projectLine->getCProjectlineId() > 0) {
$pistolettata = new CooPfPistolettate();
$pistolettata->setDataLettura(new DateTime());
$pistolettata->setCooPfPistolettateId($this->nextId('coo_pf_pistolettate', $db, $doctrine));
$pistolettata->setAdUser($utenteloggato);
$pistolettata->setCProject($projectLine->getCProject());
$pistolettata->setCProjectline($projectLine);
$pistolettata->setCreated(new DateTime());
$pistolettata->setCreatedby($utenteloggato->getAdUserId());
$pistolettata->setPostazione($pistolettataAttuale->getPostazione());
$pistolettata->setUpdated(new DateTime());
$pistolettata->setUpdatedby($utenteloggato->getAdUserId());
$pistolettata->setStatus('stop');
$pistolettata->setCooPfEventType('stop');
$pistolettata->setName($valoreScan);
if ($postazione->getLine() == 3) {
$colli = $doctrine->getRepository('App:CooPfColli', $db)->findBy(['cProjectline' => $pistolettata->getCProjectline()]);
$numeroCollo = count($colli) + 1;
$collo = new CooPfColli();
$collo->setCooPfColliId($this->nextId('coo_pf_colli', $db, $doctrine));
//$this->addFlash("cooPfColliId", $collo->getCooPfColliId());
$collo->setCProject($pistolettata->getCProjectline()->getCProject());
$collo->setCreated(new DateTime());
$collo->setCreatedby($utenteloggato->getAdUserId());
$collo->setDescription('');
$collo->setName($numeroCollo);
$collo->setCProjectline($pistolettata->getCProjectline());
$collo->setUpdated(new DateTime());
$collo->setUpdatedby($utenteloggato->getAdUserId());
$doctrine->getManager($db)->persist($collo);
try {
$doctrine->getManager($db)->flush($collo);
$REPORT_FOLDER = $db == 'default' ? '' : 'industrie/';
$input = __DIR__ . '/../../../../punto-finestre/public/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane.jasper';
$output = __DIR__ . '/../../../../punto-finestre/public/reports/' . $REPORT_FOLDER;
/* $input = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane' . ($DB == 'DATABASE_PUGLIA_URL' ? '2' : '') . '.jasper';
$output = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER; */
$options = [
'format' => ['pdf'],
'params' => ['RECORD_ID' => $collo->getCooPfColliId()],
'db_connection' => [
'driver' => 'postgres',
'username' => 'adempiere',
'password' => 'adempiere',
'host' => '192.168.1.3',
'database' => ($db == 'default' ? 'adempiere' : 'industrie'),
'port' => '5432'
]
];
$jasper = new PHPJasper;
$jasper->process(
$input,
$output,
$options
)->execute();
$labelPdf = 'https://adw.puntopersiane.it/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane.pdf';
} catch (\Exception $e) {
$return = new JsonResponse(['message' => "Errore durante lo stop della lavorazione. Non posso stampare. Riprova."], 400);
}
}
try {
$doctrine->getManager($db)->persist($pistolettata);
$doctrine->getManager($db)->flush($pistolettata);
$return = new JsonResponse(['message' => "Lavorazione conclusa correttamente", 'pdf' => $labelPdf, 'next_id' => $pistolettata->getCooPfPistolettateId()], 200);
} catch (Exception $e) {
$return = new JsonResponse(['message' => "Errore durante lo stop della lavorazione. Riprova."], 400);
}
}
}
}
if ($return) {
return $return;
}
} else {
return new JsonResponse(['message' => "Il codice a barre non è associato a nessuna lavorazione"], 400);
}
return new JsonResponse(['message' => "Errore generico"], 400);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/postazione/taglio", name="pistolettate0")
* @Route("/postazione/assemblaggio", name="pistolettate1")
* @Route("/postazione/controllo-qualita", name="pistolettate2")
* @Route("/postazione/imballaggio", name="pistolettate3")
*/
public function index(Request $request)
{
$line = str_replace('pistolettate', '', $request->attributes->get('_route'));
$postazione = $this->em->getRepository('App:CooPfPostazioni')->findOneBy(['line' => $line]);
$pistolettata = $this->em->getRepository('App:CooPfPistolettate')->findOneBy(['postazione' => $postazione], ['dataLettura' => 'DESC']);
$collo = null;
/* if ($status == 'stop' && $pistolettata && $pistolettata->getCProjectLine()) {
$collo = $this->em->getRepository('App:CooPfColli')->findOneBy(['cProjectline' => $pistolettata->getCProjectLine()], ['cooPfColliId' => 'DESC']);
} */
return $this->render('pistolettate/index.html.twig', [
'ultimoCollo' => $collo ?: null,
'pistolettata' => $pistolettata,
'project' => ($pistolettata && $pistolettata->getCProject()) ? $pistolettata->getCProject() : null,
'projectLine' => ($pistolettata && $pistolettata->getCProjectLine()) ? $pistolettata->getCProjectLine() : null,
'postazione' => $postazione,
'controller_name' => 'PistolettateController',
]);
}
/**
* @IsGranted("ROLE_USER")
* @Route("/postazione/registra_azione", name="registra_azione")
*/
public function registra_azione(Request $request)
{
$line = $request->request->get('line', -1);
$valoreScan = $request->request->get('valore', '') ?: '';
//$valore = str_pad($valore, 12, '0', STR_PAD_LEFT);
$valoreRomania = $valoreScan;
$valore = '0' . substr($valoreScan, 0, -1);
$utenteloggato = $this->getUser();
$postazione = $this->em->getRepository('App:CooPfPostazioni')->findOneBy(['line' => $line]);
$pistolettataAttuale = $this->em->getRepository('App:CooPfPistolettate')->findOneBy(['postazione' => $postazione], ['dataLettura' => 'DESC']);
if (trim($valore)) {
$cooPfDistaglio = $this->em->getRepository('App:CooPfDistaglio')->createQueryBuilder('cpd')
->where('cpd.cooCompressedid LIKE :value')
->setParameter('value', $valore . '.%')
->getQuery();
$cooPfDistaglio = count($cooPfDistaglio->getResult()) ? $cooPfDistaglio->getSingleResult() : null;
if (!$cooPfDistaglio) {
$cooPfDistaglio = $this->em->getRepository('App:CooPfDistaglio')->createQueryBuilder('cpd')
->where('cpd.cooCompressedid LIKE :value')
->setParameter('value', $valoreRomania . '.%')
->getQuery();
$cooPfDistaglio = count($cooPfDistaglio->getResult()) ? $cooPfDistaglio->getSingleResult() : null;
}
$terzoCaso = false;
if (!$cooPfDistaglio) {
$terzoCaso = true;
$terzoVal = substr($valore, 2, 5);
$cooPfDistaglio = $this->em->getRepository('App:CooPfScansionecomm')->createQueryBuilder('csc');
$cooPfDistaglio
->where($cooPfDistaglio->expr()->eq($cooPfDistaglio->expr()->substring("csc.cooCompressedid", 3, 5), "'" . $terzoVal . "'"))
->addOrderBy('csc.cProjectlineId', 'DESC');
$cooPfDistaglio = $cooPfDistaglio->getQuery()->setMaxResults(1);
$cooPfDistaglio = count($cooPfDistaglio->execute()) ? $cooPfDistaglio->getSingleResult() : null;
if (!$cooPfDistaglio) {
$terzoVal = substr($valoreRomania, 2, 5);
$cooPfDistaglio = $this->em->getRepository('App:CooPfScansionecomm')->createQueryBuilder('csc');
$cooPfDistaglio
->where($cooPfDistaglio->expr()->eq($cooPfDistaglio->expr()->substring("csc.cooCompressedid", 3, 5), "'" . $terzoVal . "'"))
->addOrderBy('csc.cProjectlineId', 'DESC');
$cooPfDistaglio = $cooPfDistaglio->getQuery()->setMaxResults(1);
$cooPfDistaglio = count($cooPfDistaglio->execute()) ? $cooPfDistaglio->getSingleResult() : null;
}
}
$cProjectlineId = $cooPfDistaglio ? $cooPfDistaglio->getCProjectlineId() : 0;
if ($cProjectlineId) {
//Inizio una nuova lavorazione
if (!$pistolettataAttuale || ($pistolettataAttuale && $pistolettataAttuale->getStatus() == 'stop')) {
$projectLine = $this->em->getRepository('App:CProjectline')->find($cProjectlineId);
if ($projectLine && $projectLine->getCProjectlineId() > 0) {
$pistolettata = new CooPfPistolettate();
$pistolettata->setDataLettura(new DateTime());
$pistolettata->setStatus('start');
$pistolettata->setCooPfEventType('start');
$pistolettata->setName($valoreScan);
$pistolettata->setCooPfPistolettateId($this->nextIdOld('coo_pf_pistolettate'));
$pistolettata->setAdUser($utenteloggato);
$pistolettata->setCProject($projectLine->getCProject());
$pistolettata->setCProjectline($projectLine);
$pistolettata->setCreated(new DateTime());
$pistolettata->setCreatedby($utenteloggato->getAdUserId());
$pistolettata->setPostazione($postazione);
$pistolettata->setUpdated(new DateTime());
$pistolettata->setUpdatedby($utenteloggato->getAdUserId());
try {
$this->em->persist($pistolettata);
$this->em->flush();
$this->addFlash("success", "Lavorazione iniziata correttamente");
} catch (Exception $e) {
$this->addFlash("error", "Errore durante lo start della lavorazione. Riprova.");
}
} else {
$this->addFlash("error", "Stai tentando di iniziare una lavorazione che non esiste. Riprova.");
}
} //Effettuo lo stop di una lavorazione
else if ($pistolettataAttuale && $pistolettataAttuale->getStatus() == 'start' && $pistolettataAttuale->getCProjectline()->getCProjectlineId() == $cProjectlineId) {
$pistolettata = clone $pistolettataAttuale;
$pistolettata->setStatus('stop');
$pistolettata->setCooPfEventType('stop');
$pistolettata->setName($valoreScan);
$pistolettata->setDataLettura(new DateTime());
$pistolettata->setCooPfPistolettateId($this->nextIdOld('coo_pf_pistolettate'));
if ($postazione->getLine() == 3) {
$colli = $this->em->getRepository('App:CooPfColli')->findBy(['cProjectline' => $pistolettata->getCProjectline()]);
$numeroCollo = count($colli) + 1;
$collo = new CooPfColli();
$collo->setCooPfColliId($this->nextIdOld('coo_pf_colli'));
$this->addFlash("cooPfColliId", $collo->getCooPfColliId());
$collo->setCProject($pistolettata->getCProjectline()->getCProject());
$collo->setCreated(new DateTime());
$collo->setCreatedby($utenteloggato->getAdUserId());
$collo->setDescription('');
$collo->setName($numeroCollo);
$collo->setCProjectline($pistolettata->getCProjectline());
$collo->setUpdated(new DateTime());
$collo->setUpdatedby($utenteloggato->getAdUserId());
$this->em->persist($collo);
}
try {
$this->em->persist($pistolettata);
$this->em->flush();
$this->addFlash("success", "Lavorazione conclusa correttamente");
} catch (Exception $e) {
$this->addFlash("error", "Errore durante lo stop della lavorazione. Riprova.");
}
} else {
$this->addFlash("error", "Stai tentando di interrompere una lavorazione che non è attualmente in questa postazione. Riprova.");
}
} else {
$this->addFlash("warning", "Il codece a barre non è associato a nessuna lavorazione");
}
} else {
$this->addFlash("warning", "Inserire il codice o usare il lettore di codice a barre");
}
return $this->redirectToRoute('pistolettate' . $line);
}
private function nextIdOld($name)
{
$next = $this->em->getRepository('App:AdSequence')->findOneBy(['name' => $name]);
if ($next) {
$prossimo = $next->getCurrentnext();
$next->setCurrentnext($next->getCurrentnext() + 1);
try {
$this->em->persist($next);
$this->em->flush($next);
} catch (Exception $e) {
$this->addFlash("error", "Errore nel calcolo ID. Riprova.");
return null;
}
return $prossimo;
}
return null;
}
private function nextId($name, $db, $doctrine)
{
$next = $doctrine->getRepository('App:AdSequence', $db)->findOneBy(['name' => $name]);
if ($next) {
$prossimo = $next->getCurrentnext();
$next->setCurrentnext($next->getCurrentnext() + 1);
try {
$doctrine->getManager($db)->persist($next);
$doctrine->getManager($db)->flush($next);
} catch (Exception $e) {
return null;
}
return $prossimo;
}
return null;
}
/**
* @IsGranted("ROLE_USER")
* @Route("/postazione/print_label/{id}/{stabilimento}", name="print_label", methods="GET", options={"expose"=true})
* @param int $id
*/
public function print_label($id, $stabilimento = 'DATABASE_URL')
{
$REPORT_FOLDER = $stabilimento == 'DATABASE_URL' ? '' : 'industrie/';
$input = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane.jasper';
$output = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER;
/* $input = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER . 'item_label_punto_persiane' . ($DB == 'DATABASE_PUGLIA_URL' ? '2' : '') . '.jasper';
$output = __DIR__ . '/../../public/reports/' . $REPORT_FOLDER; */
$options = [
'format' => ['pdf'],
'params' => ['RECORD_ID' => $id],
'db_connection' => [
'driver' => 'postgres',
'username' => 'adempiere',
'password' => 'adempiere',
'host' => 'localhost',
'database' => ($stabilimento == 'DATABASE_URL' ? 'adempiere' : 'industrie'),
'port' => '5432'
]
];
$jasper = new PHPJasper;
$jasper->process(
$input,
$output,
$options
)->execute();
$filename = 'label-' . $id . '.pdf';
$response = new Response(file_get_contents($output . 'item_label_punto_persiane.pdf'));
$response->setCharset('UTF-8');
$response->headers->set('Content-Type', 'application/pdf');
$response->headers->set('Content-Disposition', "attachement; filename=\"{$filename}\"");
return $response;
}
private function baseImagePath($stabilimento = '')
{
return "/mnt/allegatiadempiere/nc-images" . ($_SERVER["APP_IMGURL"] == 'dev' ? '-test' : '') . "/" . ($stabilimento ? $stabilimento . "/" : "");
}
/**
* @IsGranted("ROLE_USER")
* @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
* @Route("/api/nc-photo/{id}", name="zip-nc", methods="POST", options={"expose"=true})
* @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"0"}))
* @param int $id
*/
public function ncPhoto(Request $request, int $id = null): JsonResponse
{
$stabilimento = $this->getStabilimento($request);
$filesystem = new Filesystem();
$photoDir = Path::normalize($this->baseImagePath($stabilimento) . $id . "/");
if (!$filesystem->exists($photoDir)) {
try {
$filesystem->mkdir($photoDir);
} catch (IOExceptionInterface $exception) {
echo "An error occurred while creating your directory at " . $exception->getPath();
}
}
$data = json_decode($request->getContent(), true);
$status = 200;
if (isset($data['files']) && $data['files']) {
foreach ($data['files'] as $file) {
$b64 = $file['b64'];
$fd = explode(',', $b64);
$filedata = $fd[1] ?? $fd[0];
$filedata = $filedata ? base64_decode($filedata) : null;
if ($filedata) {
$filename = $file['fileName'];
$filetype = $file['fileType'];
$filesize = $file['fileSize'];
$pos = strrpos($filename, '.');
$estensione = substr($filename, $pos + 1, strlen($filename));
$filesystem->dumpFile($photoDir . $filename, $filedata);
}
}
}
return new JsonResponse(['id' => $id], $status);
}
/**
* @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
* @Route("/api/nc-photo/{id}", name="zip-nc-list", methods="GET", options={"expose"=true})
* @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"0"}))
* @param int $id
*/
public function ncPhotoList(Request $request, int $id = null): JsonResponse
{
$filesystem = new Filesystem();
$stabilimento = $this->getStabilimento($request);
$photoDir = Path::normalize($this->baseImagePath($stabilimento) . $id . "/");
$filesArray = [];
if ($filesystem->exists($photoDir)) {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($photoDir, FilesystemIterator::CURRENT_AS_FILEINFO), RecursiveIteratorIterator::LEAVES_ONLY);
if ($files) {
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($photoDir));
$filesArray[] = [
'filename' => $relativePath,
'filepath' => $filePath,
'url' => "https://" . $_SERVER['SERVER_NAME'] . "/api/nc-photo-file/" . $id . "/" . $stabilimento . "/" . $relativePath
];
}
}
}
return new JsonResponse(['files' => $filesArray], 200);
}
return new JsonResponse(null, 400);
}
/**
* @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
* @OA\Parameter(name="filename", in="path", description="Il nome del file", @OA\Schema(type="string"))
* @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"0"}))
* @Route("/api/nc-photo-file/{id}/{stabilimento}/{filename}", name="zip-nc-file", methods="GET", options={"expose"=true})
* @param Request $request
* @param int|null $id
* @param string $filename
* @return JsonResponse
*/
public function ncPhotoFile(Request $request, int $id = null, string $stabilimento = '', string $filename = ''): BinaryFileResponse
{
$filesystem = new Filesystem();
$photoDir = Path::normalize($this->baseImagePath($stabilimento) . $id . "/");
$filesArray = [];
if ($filesystem->exists($photoDir)) {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($photoDir, FilesystemIterator::CURRENT_AS_FILEINFO), RecursiveIteratorIterator::LEAVES_ONLY);
if ($files) {
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($photoDir));
if ($relativePath == $filename) {
$stream = new Stream($photoDir . $filename);
$response = new BinaryFileResponse($stream);
$response->headers->set('Content-Type', $file->getType());
return $response;
}
}
}
}
}
return new BinaryFileResponse(null, 400);
}
/**
* @IsGranted("ROLE_USER")
* @OA\Parameter(name="id", in="path", description="L'ID della pistolettata non conformità", @OA\Schema(type="integer"))
* @Route("/api/zip-nc-photo/{id}", name="zip-nc-photo", methods="GET", options={"expose"=true})
* @param int $id
*/
public function zipNcPhoto(Request $request, int $id = null)
{
$filesystem = new Filesystem();
$stabilimento = $this->getStabilimento($request);
$photoDir = Path::normalize($this->baseImagePath($stabilimento) . $id . "/");
if ($filesystem->exists($photoDir)) {
$data = json_decode($request->getContent(), true);
$status = 200;
//$zip = new \ZipArchive();
$nomeFile = tempnam(sys_get_temp_dir(), 'photo');
exec('cd ' . $photoDir . ' ; zip -r ' . $nomeFile . ' .');
//$zip->open($nomeFile, \ZipArchive::CREATE);
/* $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($photoDir, FilesystemIterator::CURRENT_AS_FILEINFO), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($files as $file) {
if (!$file->isDir()) {
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($photoDir) + 1);
$zip->addFile($filePath, $relativePath);
}
}*/
$stream = new Stream($nomeFile . '.zip');
$response = new BinaryFileResponse($stream);
$response->headers->set('Content-Type', 'application/zip');
return $response;
} else {
return new Response(null, 400);
}
}
/**
*
* Cambio sede
*
* Cambia la sede
*
* @IsGranted("ROLE_USER")
* @OA\Response(response=200, description="Tutto ok")
* @OA\RequestBody(description="0 Sede, 1 Romania, 2 Puglia", @OA\JsonContent(type="object", example={"connection":"2"}))
* @Route("/api/change-location", name="change_location", methods={"PUT", "POST"}, options={"expose"=true})
*/
public
function change_location(Request $request)
{
if ($request->isMethod('POST')) {
$connection = $request->request->get('connection');
} else {
$data = json_decode($request->getContent(), true);
$connection = $data['connection'];
}
$session = $this->requestStack->getSession();
return $session->set('DB', $connection);
return new JsonResponse(['connection' => $connection], 200);
}
public
function getDatabase($request)
{
$data = json_decode($request->getContent(), true);
$connection = isset($data['connection']) ? $data['connection'] : -1;
if ($connection < 0) {
$connection = $request->request->get('connection', -1);
if ($connection < 0) {
$connection = $request->query->get('connection', -1);
}
}
if ($connection < 0) {
return false;
}
$db = $connection == 2 ? 'puglia' : 'default';
return $db;
}
public
function getStabilimento($request)
{
$data = json_decode($request->getContent(), true);
$connection = isset($data['connection']) ? $data['connection'] : -1;
if ($connection < 0) {
if ($request->isMethod('POST')) {
$connection = $request->request->get('connection', -1);
} else if ($request->isMethod('GET')) {
$connection = $request->query->get('connection', -1);
}
}
if ($connection < 0) {
return false;
}
$stabilimenti = [0 => '1000000', 1 => '1000001', 2 => '2000001'];
return $stabilimenti[$connection];
}
}