src/Controller/TransfersController.php line 287

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Transfers;
  4. use App\Form\TransfersType;
  5. use App\Repository\DestinationsRepository;
  6. use App\Repository\TransfersRepository;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. use Doctrine\Persistence\ManagerRegistry;
  12. use Endroid\QrCode\Builder\Builder;
  13. use Endroid\QrCode\Encoding\Encoding;
  14. use Endroid\QrCode\Writer\PngWriter;
  15. use Endroid\QrCodeBundle\Response\QrCodeResponse;
  16. use Dompdf\Dompdf;
  17. use Dompdf\Options;
  18. #[Route('/transfers')]
  19. class TransfersController extends AbstractController
  20. {
  21.     /**
  22.      * @Route("/indexJson", name="app_transfers_index_json", methods={"GET","POST"})
  23.      */
  24.     public function indexJson(Request $requestTransfersRepository $repo): Response
  25.     {
  26.         $search    trim((string) $request->get('searchPhrase'''));
  27.         $current   max(1, (int) $request->get('current'1));
  28.         $rowCount  max(1, (int) $request->get('rowCount'10));
  29.         $offset    = ($current 1) * $rowCount;
  30.         $qb $repo->createQueryBuilder('t')
  31.             ->leftJoin('t.car''c')
  32.             ->leftJoin('t.destination''d')
  33.             ->addSelect('c''d')
  34.             ->where('t.id > :id')
  35.             ->setParameter('id'0);
  36.         if ($search !== '') {
  37.             $s mb_strtolower($search);
  38.             $qb->andWhere(
  39.                 "LOWER(COALESCE(c.name, '')) LIKE :s
  40.                  OR LOWER(COALESCE(c.patent, '')) LIKE :s
  41.                  OR LOWER(COALESCE(d.name, '')) LIKE :s
  42.                  OR LOWER(COALESCE(t.description, '')) LIKE :s"
  43.             )->setParameter('s''%'.$s.'%');
  44.         }
  45.         // total (sin paginar)
  46.         $qbTotal = clone $qb;
  47.         $total = (int) $qbTotal->select('COUNT(t.id)')->getQuery()->getSingleScalarResult();
  48.         // datos paginados
  49.         $rows $qb
  50.             ->setFirstResult($offset)
  51.             ->setMaxResults($rowCount)
  52.             ->getQuery()
  53.             ->getArrayResult();
  54.         return $this->json([
  55.             'current'  => $current,
  56.             'rowCount' => $rowCount,
  57.             'total'    => $total,
  58.             'rows'     => $rows,
  59.         ]);
  60.     }
  61.     #[Route('/'name'app_transfers_index'methods: ['GET'])]
  62.     public function index(ManagerRegistry $doctrine): Response
  63.     {
  64.         $query "
  65.             SELECT id, name
  66.             FROM destinations
  67.             ORDER BY name ASC
  68.         ";
  69.         $conn $doctrine->getConnection();
  70.         $result $conn->executeQuery($query);
  71.         $destinations  $result->fetchAllKeyValue();
  72.         return $this->render('transfers/index.html.twig', [
  73.             //'transfers' => $transfersRepository->findAll(),
  74.             'destinations' => $destinations,
  75.             'currentMenu' => 'transfers',
  76.         ]);
  77.     }
  78.     #[Route('/new'name'app_transfers_new'methods: ['GET''POST'])]
  79.     public function new(ManagerRegistry $doctrineRequest $requestTransfersRepository $transfersRepository): Response
  80.     {
  81.         $error '';
  82.         $transfer = new Transfers();
  83.         $form $this->createForm(TransfersType::class, $transfer);
  84.         $form->handleRequest($request);
  85.         if ($form->isSubmitted() && $form->isValid()) {
  86.             $query "
  87.                 SELECT *
  88.                 FROM transfers
  89.                 WHERE reception_date IS NULL
  90.                     AND car_id = :carId
  91.                 ORDER BY id DESC
  92.             "//exit($query.$transfer->getCar()->getId());
  93.             $conn $doctrine->getConnection();
  94.             $result $conn->executeQuery($query, ['carId' => $transfer->getCar()->getId()]);
  95.             $checkTransfer  $result->fetchAll();
  96.             if ($checkTransfer) {
  97.                 $error 'Error. Ya existe un traslado pendiente de recepción para el vehículo '.$transfer->getCar()->getName().'.';
  98.             } else {
  99.                 $transfersRepository->add($transfer);
  100.                 return $this->redirectToRoute('app_transfers_index', [], Response::HTTP_SEE_OTHER);
  101.             }
  102.         }
  103.         return $this->renderForm('transfers/new.html.twig', [
  104.             'transfer' => $transfer,
  105.             'form' => $form,
  106.             'error' => $error,
  107.             'currentMenu' => 'transfers',
  108.         ]);
  109.     }
  110.     #[Route('/received'name'app_transfers_received'methods: ['GET'])]
  111.     public function received(ManagerRegistry $doctrineRequest $requestTransfersRepository $transfersRepository): Response
  112.     {
  113.         if ($request->get('t')) {
  114.             $id str_replace('|d232r$'''base64_decode($request->get('t')));
  115.             $transfer $transfersRepository->findOneBy(['id' => $id]);
  116.             if (!$transfer) {
  117.                 return $this->redirect('https://dgautomotores.com.ar');
  118.             }
  119.             $transferReceived false;
  120.             if ($transfer->getReceptionDate() == null) {
  121.                 $query "
  122.                     UPDATE transfers
  123.                     SET reception_date = now()
  124.                     WHERE id = :id
  125.                 ";
  126.                 $conn $doctrine->getConnection();
  127.                 $result $conn->executeQuery($query, ['id' => $id]);
  128.                 $query "
  129.                     UPDATE car
  130.                     SET destination_id = :destination
  131.                     WHERE id = :id
  132.                 ";
  133.                 $conn $doctrine->getConnection();
  134.                 $result $conn->executeQuery($query, ['id' => $transfer->getCar()->getId(), 'destination' => $transfer->getDestination()->getId()]);
  135.             } else {
  136.                 $transferReceived true;
  137.             }
  138.             // Configure Dompdf according to your needs
  139.             $pdfOptions = new Options();
  140.             $pdfOptions->setIsHtml5ParserEnabled(true);
  141.             $pdfOptions->setIsRemoteEnabled(true);
  142.             // Instantiate Dompdf with our options
  143.             $dompdf = new Dompdf($pdfOptions);
  144.             $dompdf->getOptions()->setChroot$this->getParameter('kernel.project_dir').'\public' );
  145.             // Retrieve the HTML generated in our twig file
  146.             $html $this->renderView('pdf/received.html.twig', [
  147.                 'transfer' => $transfer,
  148.                 'transferReceived' => $transferReceived,
  149.                 'server_root' => $_SERVER["DOCUMENT_ROOT"],
  150.             ]);
  151.             //echo($html); exit();
  152.             // Load HTML to Dompdf
  153.             $dompdf->loadHtml($html);
  154.             // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  155.             $dompdf->setPaper('A4''portrait');
  156.             // Render the HTML as PDF
  157.             $dompdf->render();
  158.             ob_get_clean();
  159.             // Output the generated PDF to Browser (inline view)
  160.             $dompdf->stream("/Error.pdf", [
  161.                 "Attachment" => false,
  162.             ]);
  163.         } else {
  164.             // Configure Dompdf according to your needs
  165.             $pdfOptions = new Options();
  166.             $pdfOptions->setIsHtml5ParserEnabled(true);
  167.             $pdfOptions->setIsRemoteEnabled(true);
  168.             // Instantiate Dompdf with our options
  169.             $dompdf = new Dompdf($pdfOptions);
  170.             $dompdf->getOptions()->setChroot$this->getParameter('kernel.project_dir').'\public' );
  171.             // Retrieve the HTML generated in our twig file
  172.             $html $this->renderView('pdf/received_error.html.twig', [
  173.                 'server_root' => $_SERVER["DOCUMENT_ROOT"],
  174.             ]);
  175.             //echo($html); exit();
  176.             // Load HTML to Dompdf
  177.             $dompdf->loadHtml($html);
  178.             // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  179.             $dompdf->setPaper('A4''portrait');
  180.             // Render the HTML as PDF
  181.             $dompdf->render();
  182.             ob_get_clean();
  183.             // Output the generated PDF to Browser (inline view)
  184.             $dompdf->stream("/Error.pdf", [
  185.                 "Attachment" => false,
  186.             ]);
  187.         }
  188.     }
  189.     #[Route('/{id}'name'app_transfers_show'methods: ['GET'])]
  190.     public function show(Transfers $transfer): Response
  191.     {
  192.         return $this->render('transfers/show.html.twig', [
  193.             'transfer' => $transfer,
  194.         ]);
  195.     }
  196.     #[Route('/{id}/edit'name'app_transfers_edit'methods: ['GET''POST'])]
  197.     public function edit(Request $requestTransfers $transferTransfersRepository $transfersRepository): Response
  198.     {
  199.         if ($transfer->getReceptionDate() != null) {
  200.             return $this->redirectToRoute('app_transfers_index', [], Response::HTTP_SEE_OTHER);
  201.         }
  202.         $form $this->createForm(TransfersType::class, $transfer);
  203.         $form->handleRequest($request);
  204.         if ($form->isSubmitted() && $form->isValid()) {
  205.             $transfersRepository->add($transfer);
  206.             return $this->redirectToRoute('app_transfers_index', [], Response::HTTP_SEE_OTHER);
  207.         }
  208.         return $this->renderForm('transfers/edit.html.twig', [
  209.             'transfer' => $transfer,
  210.             'form' => $form,
  211.             'currentMenu' => 'transfers',
  212.         ]);
  213.     }
  214.     #[Route('/{id}'name'app_transfers_delete'methods: ['POST'])]
  215.     public function delete(Request $requestTransfers $transferTransfersRepository $transfersRepository): Response
  216.     {
  217.         if ($this->isCsrfTokenValid('delete'.$transfer->getId(), $request->request->get('_token'))) {
  218.             $transfersRepository->remove($transfer);
  219.         }
  220.         return $this->redirectToRoute('app_transfers_index', [], Response::HTTP_SEE_OTHER);
  221.     }
  222.     /**
  223.      * @Route("/{id}/delete", name="transfers_delete_ra", methods={"GET"})
  224.      */
  225.     public function deleteRa(Request $request): Response
  226.     {
  227.         $entityManager $this->getDoctrine()->getManager();
  228.         $transfer $entityManager->getReference(\App\Entity\Transfers::class, $request->get('id'));
  229.         $entityManager->remove($transfer);
  230.         $entityManager->flush();
  231.         return $this->redirectToRoute('app_transfers_index', [], Response::HTTP_SEE_OTHER);
  232.     }
  233.     /**
  234.      * @Route("/{id}/qr", name="transfers_qr_ra", methods={"GET"})
  235.      */
  236.     public function qr(Request $requestTransfers $transferTransfersRepository $transfersRepository)
  237.     {
  238.         if ($transfer->getReceptionDate() != null) {
  239.             return $this->redirectToRoute('app_transfers_index', [], Response::HTTP_SEE_OTHER);
  240.         }
  241.         $link $this->getParameter('app.domain_qr').'transfers/received?t='.base64_encode($transfer->getId().'|d232r$');
  242.         $result Builder::create()
  243.             ->writer(new PngWriter())
  244.             ->data($link)
  245.             ->encoding(new Encoding('UTF-8'))
  246.             ->size(300)
  247.             ->margin(10)
  248.             ->build();
  249.         $dataUri $result->getDataUri();
  250.         // Configure Dompdf according to your needs
  251.         $pdfOptions = new Options();
  252.         $pdfOptions->setIsHtml5ParserEnabled(true);
  253.         $pdfOptions->setIsRemoteEnabled(true);
  254.         // Instantiate Dompdf with our options
  255.         $dompdf = new Dompdf($pdfOptions);
  256.         $dompdf->getOptions()->setChroot$this->getParameter('kernel.project_dir').'\public' );
  257.         // Retrieve the HTML generated in our twig file
  258.         $html $this->renderView('pdf/qr.html.twig', [
  259.             'qr' => $dataUri,
  260.             'transfer' => $transfer,
  261.             'server_root' => $_SERVER["DOCUMENT_ROOT"],
  262.         ]);
  263.         //echo($html); exit();
  264.         // Load HTML to Dompdf
  265.         $dompdf->loadHtml($html);
  266.         // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  267.         $dompdf->setPaper('A4''portrait');
  268.         // Render the HTML as PDF
  269.         $dompdf->render();
  270.         ob_get_clean();
  271.         // Output the generated PDF to Browser (inline view)
  272.         $dompdf->stream("/Traslados.pdf", [
  273.             "Attachment" => false,
  274.         ]);
  275.     }
  276. }