src/Controller/Movimientos/OrdenCompraController.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Movimientos;
  3. use App\Entity\Movimientos\OrdenCompra;
  4. use App\Entity\Almacen\Deposito;
  5. use App\Form\Movimientos\OrdenCompraType;
  6. use App\Repository\Movimientos\OrdenCompraRepository;
  7. use Knp\Snappy\Pdf;
  8. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  9. use Twig\Environment;
  10. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  15. use Symfony\Component\Form\Extension\Core\Type\DateType;
  16. use Doctrine\ORM\EntityRepository;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. /**
  19.  * @Route("/movimientos/orden/compra")
  20.  */
  21. class OrdenCompraController extends AbstractController
  22. {
  23.     private $twig;
  24.     private $pdf;
  25.     public function __construct(Environment $twigPdf $pdf)
  26.     {
  27.         $this->twig $twig;
  28.         $this->pdf $pdf
  29.     }
  30.     /**
  31.      * @Route("/{id}/pdf", name="app_movimientos_orden_compra_pdf", methods={"GET"})
  32.      */
  33.     public function pdf(OrdenCompra $ordenCompra)
  34.     {
  35.         $html $this->twig->render('movimientos/orden_compra/pdf.html.twig', [ 'orden_compra' => $ordenCompra ]);
  36.         $this->pdf->setTimeout(600);
  37.         return new PdfResponse(
  38.             $this->pdf->getOutputFromHtml($html),
  39.             'orden_compra_' $ordenCompra->getNumero() . '.pdf'
  40.         );
  41.     }
  42.     /**
  43.      * @Route("/", name="app_movimientos_orden_compra_index", methods={"GET"})
  44.      */
  45.     public function index(OrdenCompraRepository $ordenCompraRepository): Response
  46.     {
  47.         return $this->render('movimientos/orden_compra/index.html.twig', [
  48.             'orden_compras' => $ordenCompraRepository->findAll(),
  49.         ]);
  50.     }
  51.     /**
  52.      * @Route("/informe", name="app_movimientos_orden_compra_informe", methods={"GET", "POST"})
  53.      */
  54.     public function informe(Request $requestOrdenCompraRepository $ordenCompraRepository): Response
  55.     {
  56.         $depositoUsuario $this->getUser() ? $this->getUser()->getDefault() : null;
  57.         $form $this->createFormBuilder()
  58.                     ->add('fechaDesde',
  59.                            DateType::class,
  60.                            [
  61.                                 'widget' => 'single_text',
  62.                                 'required' => false,
  63.                                 'attr' => ['class' => 'form-control'],
  64.                             ])
  65.                     ->add('fechaHasta',
  66.                            DateType::class,
  67.                            [
  68.                                 'widget' => 'single_text',
  69.                                 'required' => false,
  70.                                 'attr' => ['class' => 'form-control'],
  71.                             ])
  72.                     ->add('deposito',
  73.                            EntityType::class,
  74.                            [
  75.                                 'class' => Deposito::class,
  76.                                 'required' => true,
  77.                                 'data' => $depositoUsuario,
  78.                                 // solo se puede elegir entre los depositos asignados al usuario logeado
  79.                                 'query_builder' => function (EntityRepository $er) use ($depositoUsuario) {
  80.                                                                                         $qb $er->createQueryBuilder('d')
  81.                                                                                                  ->andWhere('d.activo = true')
  82.                                                                                                   ->orderBy('d.nombre''ASC');
  83.                                                                                         
  84.                                                                                         return $qb;
  85.                                                                                     },
  86.                             ])
  87.                      ->getForm();
  88.         $form->handleRequest($request);
  89.         if ($form->isSubmitted() && $form->isValid())
  90.         {
  91.             $data $form->getData();
  92.             $articulos $ordenCompraRepository->informeFiltrado([
  93.                 'desde' => $data['fechaDesde'],
  94.                 'hasta' => $data['fechaHasta'],
  95.                 'deposito' => $data['deposito'],
  96.             ]);
  97.             $urlExcel $this->generateUrl('app_movimientos_orden_compra_informe_excel', [
  98.                 'desde' => $data['fechaDesde'] ? $data['fechaDesde']->format('Y-m-d') : 0,
  99.                 'hasta' => $data['fechaHasta'] ? $data['fechaHasta']->format('Y-m-d') : 0,
  100.                 'deposito' => $data['deposito'] ? $data['deposito']->getId() : 0,
  101.             ]);
  102.             return $this->render('movimientos/orden_compra/informe.html.twig', [
  103.                 'form' => $form->createView(),
  104.                 'articulos' => $articulos,
  105.                 'fechaDesde' => $data['fechaDesde'],
  106.                 'fechaHasta' => $data['fechaHasta'],
  107.                 'deposito' => $data['deposito'],
  108.                 'fechaGeneracion' => new \DateTime(),
  109.                 'urlExcel' => $urlExcel,
  110.             ]);
  111.         }
  112.         return $this->render('movimientos/orden_compra/informe.html.twig', [
  113.             'form' => $form->createView(),
  114.         ]);
  115.     }
  116.     /**
  117.      * @Route("/informe/excel/desde/{desde}/hasta/{hasta}/deposito/{deposito}", name="app_movimientos_orden_compra_informe_excel", methods={"GET"})
  118.      */
  119.     public function informeExcel($desde$hasta$depositoOrdenCompraRepository $ordenCompraRepositoryEntityManagerInterface $em): Response
  120.     {
  121.         $fechaDesde $desde != ? new \DateTime($desde) : null;
  122.         $fechaHasta $hasta != ? new \DateTime($hasta) : null;
  123.         $depositoEntity $deposito != $em->getRepository(Deposito::class)->find($deposito) : null;
  124.         $articulos $ordenCompraRepository->informeFiltrado([
  125.             'desde' => $fechaDesde,
  126.             'hasta' => $fechaHasta,
  127.             'deposito' => $depositoEntity,
  128.         ]);
  129.         $html $this->twig->render('movimientos/orden_compra/informe_excel.html.twig', [
  130.             'articulos' => $articulos,
  131.             'fechaDesde' => $fechaDesde,
  132.             'fechaHasta' => $fechaHasta,
  133.             'deposito' => $depositoEntity,
  134.             'fechaGeneracion' => new \DateTime(),
  135.         ]);
  136.         $response = new Response($html);
  137.         $response->headers->set('Content-Type''application/vnd.ms-excel; charset=UTF-8');
  138.         $response->headers->set('Content-Disposition''attachment; filename="informe_ordenes_compra_' date('Y-m-d_His') . '.xls"');
  139.         return $response;
  140.     }
  141.     /**
  142.      * @Route("/new", name="app_movimientos_orden_compra_new", methods={"GET", "POST"})
  143.      */
  144.     public function new(Request $requestOrdenCompraRepository $ordenCompraRepository): Response
  145.     {
  146.         $ordenCompra = new OrdenCompra();
  147.         $proximo $ordenCompraRepository->proximoNumero();
  148.         if (!$proximo)
  149.         {
  150.             $proximo 1;
  151.         }
  152.         
  153.         $ordenCompra->setNumero($proximo);
  154.         $form $this->createForm(OrdenCompraType::class, $ordenCompra, [ 'user' => $this->getUser() ] );
  155.         $form->handleRequest($request);
  156.         if ($form->isSubmitted() && $form->isValid()) 
  157.         {
  158.             $ordenCompraRepository->add($ordenCompratrue);
  159.             return $this->redirectToRoute('app_movimientos_item_movimiento_new', ['id' => $ordenCompra->getId()], Response::HTTP_SEE_OTHER);
  160.         }
  161.         return $this->renderForm('movimientos/orden_compra/new.html.twig', [
  162.             'orden_compra' => $ordenCompra,
  163.             'form' => $form,
  164.         ]);
  165.     }
  166.     /**
  167.      * @Route("/{id}", name="app_movimientos_orden_compra_show", methods={"GET"})
  168.      */
  169.     public function show(OrdenCompra $ordenCompra): Response
  170.     {
  171.         return $this->render('movimientos/orden_compra/show.html.twig', [
  172.             'orden_compra' => $ordenCompra,
  173.         ]);
  174.     }
  175.     /**
  176.      * @Route("/{id}/edit", name="app_movimientos_orden_compra_edit", methods={"GET", "POST"})
  177.      */
  178.     public function edit(Request $requestOrdenCompra $ordenCompraOrdenCompraRepository $ordenCompraRepository): Response
  179.     {
  180.         $form $this->createForm(OrdenCompraType::class, $ordenCompra, [ 'user' => $this->getUser() ]);
  181.         $form->handleRequest($request);
  182.         if ($form->isSubmitted() && $form->isValid()) {
  183.             $ordenCompraRepository->add($ordenCompratrue);
  184.             return $this->redirectToRoute('app_movimientos_orden_compra_index', [], Response::HTTP_SEE_OTHER);
  185.         }
  186.         return $this->renderForm('movimientos/orden_compra/edit.html.twig', [
  187.             'orden_compra' => $ordenCompra,
  188.             'form' => $form,
  189.         ]);
  190.     }
  191.     /**
  192.      * @Route("/{id}", name="app_movimientos_orden_compra_delete", methods={"POST"})
  193.      */
  194.     public function delete(Request $requestOrdenCompra $ordenCompraOrdenCompraRepository $ordenCompraRepository): Response
  195.     {
  196.         if ($this->isCsrfTokenValid('delete'.$ordenCompra->getId(), $request->request->get('_token'))) {
  197.             $ordenCompraRepository->remove($ordenCompratrue);
  198.         }
  199.         return $this->redirectToRoute('app_movimientos_orden_compra_index', [], Response::HTTP_SEE_OTHER);
  200.     }
  201. }