src/Controller/Mantenimiento/PedidoReparacionController.php line 538

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Mantenimiento;
  3. use App\Entity\Equipos\Maquinaria;
  4. use App\Entity\Mantenimiento\Departamento;
  5. use App\Entity\Mantenimiento\PedidoReparacion;
  6. use App\Entity\Mantenimiento\SectorPlanta;
  7. use App\Entity\Mantenimiento\SolicitantePedidoReparacion;
  8. use App\Form\Mantenimiento\PedidoReparacionType;
  9. use App\Repository\Mantenimiento\PedidoReparacionRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Doctrine\ORM\EntityRepository;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Symfony\Component\HttpFoundation\Response;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  17. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  18. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  19. use Symfony\Component\Form\Extension\Core\Type\DateType;
  20. use Symfony\Component\Validator\Constraints\NotNull;
  21. use Knp\Snappy\Pdf;
  22. use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
  23. use Twig\Environment;
  24. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  25. use Symfony\Component\Form\FormError;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. /**
  28.  * @Route("/pedido/reparacion")
  29.  * @Security("is_granted('ROLE_INGRESO_ANOMALIAS') or is_granted('ROLE_CALIDAD')")
  30.  */
  31. class PedidoReparacionController extends AbstractController
  32. {
  33.     private $twig;
  34.     private $pdf;
  35.     public function __construct(Environment $twig, Pdf $pdf)
  36.     {
  37.         $this->twig = $twig;
  38.         $this->pdf = $pdf;
  39.     }
  40.     /**
  41.      * @Route("/", name="app_mantenimiento_pedido_reparacion_index", methods={"GET", "POST"})
  42.      */
  43.     public function index(Request $request, PedidoReparacionRepository $pedidoReparacionRepository): Response
  44.     {
  45.         $form = $this->formFilterTreas();
  46.         if ($request->isMethod('POST')) 
  47.         {
  48.             $form->handleRequest($request);
  49.  
  50.             $data = $form->getData();
  51.             return $this->render('mantenimiento/pedido_reparacion/index.html.twig', [
  52.                 'pedido_reparacions' => $pedidoReparacionRepository->pedidosReparacionUsuarioWithParameters($this->getUser(), $data),
  53.                 'form' => $form->createView()
  54.             ]);
  55.             
  56.         }
  57.         return $this->render('mantenimiento/pedido_reparacion/index.html.twig', [
  58.             'pedido_reparacions' => $pedidoReparacionRepository->pedidosReparacionUsuario($this->getUser()),
  59.             'form' => $form->createView()
  60.         ]);
  61.     }
  62.    /**
  63.      * @Route("/informe/tareas/from/{from}/to/{to}/sector/{sector}/depto/{dpto}/state/{state}/export", name="app_mantenimiento_pedido_reparacion_informe_tareas_export", methods={"GET", "POST"})
  64.      */
  65.     public function eportarInformeSenasa($from, $to, $sector, $dpto, $state, Request $request, PedidoReparacionRepository $pedidoReparacionRepository, \Doctrine\ORM\EntityManagerInterface $entityManager): Response
  66.     {
  67.         $data = [
  68.             'desde' => (new \DateTime())->setTimestamp($from),
  69.             'hasta' => (new \DateTime())->setTimestamp($to),
  70.             'sector' => $sector == 'all' ? null : $entityManager->getRepository(SectorPlanta::class)->find($sector),
  71.             'departamento' => $dpto == 'all' ? null : $entityManager->getRepository(Departamento::class)->find($dpto),
  72.             'estado' => $state
  73.         ];
  74.        /* $pendientes = $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAllPendiente($data);
  75.         $realizadosDiagramados =  $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAll($data);
  76.         $pedido_reparacions = array_merge($pendientes, $realizadosDiagramados);
  77.         usort($pedido_reparacions, function($a, $b) {
  78.             return $a['fechaPedido'] <=> $b['fechaPedido'];
  79.         });*/
  80.         $pedido_reparacions = $this->getPedidosFiltrados($data, $pedidoReparacionRepository);
  81.         if ($data['estado'] != 'all') 
  82.         {
  83.             $filtrados = array_filter($pedido_reparacions, function($item) use ($data) {
  84.                                                                 return $item['estado'] === $data['estado'];
  85.                                                             });
  86.         }
  87.         $html = $this->twig->render('mantenimiento/diagrama_tarea/pedidos.html.twig', [ 
  88.             'pedido_reparacions' => $filtrados ?? $pedido_reparacions,
  89.             'data' => $data
  90.         ]);
  91.         $filename = sprintf('informe_pedidos_reparacion_%s_%s', $data['desde']->format('d_m_Y'), $data['hasta']->format('d_m_Y'));
  92.         return new PdfResponse(
  93.             $this->pdf->getOutputFromHtml($html, [
  94.                 'margin-top'    => 10,
  95.                 'margin-right'  => 10,
  96.                 'margin-bottom' => 10,
  97.                 'margin-left'   => 10,
  98.                 'encoding'      => 'utf-8',
  99.                 'page-size'     => 'A4',
  100.                 'orientation'   => 'Landscape',
  101.             ]),
  102.             $filename . '.pdf'
  103.         );
  104.     }
  105.     private function getPedidosFiltrados($data, PedidoReparacionRepository $pedidoReparacionRepository)
  106.     {
  107.         $pendientes = $pedidoReparacionRepository->getAllPedidosWithParameter($data);
  108.         $detalle = array();
  109.         foreach ($pendientes as $pedido) 
  110.         {
  111.             $id = $pedido->getId();
  112.             $detalle[$id] = [
  113.                                 'detalle' => $pedido->getDetalle(),
  114.                                 'sector' => $pedido->getSector() ? $pedido->getSector()->getNombre() : '',
  115.                                 'departamento' => $pedido->getDepartamento() ? $pedido->getDepartamento()->getNombre() : '',
  116.                                 'fechaPedido' => $pedido->getFecha(),
  117.                                 'equipo' => $pedido->getEquipo() ? $pedido->getEquipo()->getNombre() : '',
  118.                                 'estado' => 'pen',
  119.                                 'diagramado' => 0,
  120.                                 'observaciones' => ''                      
  121.                             ];
  122.                 foreach ($pedido->getPedidosDiagramados() as $pedidoDiagramado) 
  123.                 {
  124.                     $diagrama = $pedidoDiagramado->getDiagrama();
  125.                     if (!isset($detalle[$id]['realizada'])) //No se ha seteado el campo de realizada 
  126.                     {
  127.                         if ($diagrama->isProcesado())
  128.                         {
  129.                             $detalle[$id]['realizada'] = $pedidoDiagramado->isRealizada();
  130.                             if (!$pedidoDiagramado->isRealizada())
  131.                             {
  132.                                 unset($detalle[$id]['realizada']);
  133.                             }
  134.                                 
  135.                             $detalle[$id]['fecha'] = $diagrama->getFecha();
  136.                             $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  137.                             $detalle[$id]['estado'] = $pedidoDiagramado->isRealizada() ? 'rea' : 'pen';
  138.                             $detalle[$id]['observaciones'] = $pedidoDiagramado->getObservacionReparacion();
  139.                         }
  140.                         else
  141.                         {
  142.                             $detalle[$id]['realizada'] = 0;
  143.                             $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  144.                             $detalle[$id]['estado'] = 'pen'; //'pro';
  145.                             $detalle[$id]['estado'] = 'pen';
  146.                             $detalle[$id]['diagramado'] = 1;
  147.                         }                       
  148.                     }
  149.                     else
  150.                     {
  151.                         if ($detalle[$id]['realizada'] == 0) //Si no se ha realizado
  152.                         {
  153.                             if ($diagrama->isProcesado())
  154.                             {
  155.                                 if ($pedidoDiagramado->isRealizada())
  156.                                 {
  157.                                     $detalle[$id]['realizada'] = $pedidoDiagramado->isRealizada();
  158.                                     $detalle[$id]['fecha'] = $diagrama->getFecha();
  159.                                     $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  160.                                     $detalle[$id]['estado'] = 'rea';
  161.                                     $detalle[$id]['observaciones'] = $pedidoDiagramado->getObservacionReparacion();
  162.                                 }
  163.                                 else
  164.                                 {
  165.                                     unset($detalle[$id]['realizada']);
  166.                                     $detalle[$id]['fecha'] = $diagrama->getFecha();
  167.                                     $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  168.                                     $detalle[$id]['estado'] = 'pen';    
  169.                                 }
  170.                             }
  171.                             else
  172.                             {
  173.                                 $detalle[$id]['realizada'] = 0;
  174.                                 $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  175.                                 $detalle[$id]['estado'] =  'pen'; //'pro';
  176.                                 $detalle[$id]['estado'] = 'pen';
  177.                                 $detalle[$id]['diagramado'] = 1;
  178.                             }
  179.                         }
  180.                         
  181.                     }
  182.                 }
  183.             
  184.         }
  185.    
  186.         return $detalle;
  187.     }
  188.    /**
  189.      * @Route("/informe/tareas", name="app_mantenimiento_pedido_reparacion_informe_tareas", methods={"GET", "POST"})
  190.      */
  191.     public function informeSenasa(Request $request, PedidoReparacionRepository $pedidoReparacionRepository): Response
  192.     {
  193.         $form = $this->formFilterInformes();
  194.         if ($request->isMethod('POST')) 
  195.         {
  196.             $form->handleRequest($request);
  197.             
  198.             if ($form->isValid()) 
  199.             {
  200.                 $data = $form->getData();
  201.                 $url = $this->generateUrl('app_mantenimiento_pedido_reparacion_informe_tareas_export', [
  202.                     'from' => $data['desde']->getTimestamp(),
  203.                     'to' => $data['hasta']->getTimestamp(),
  204.                     'sector' => $data['sector'] ? $data['sector']->getId() : 'all',
  205.                     'dpto' => $data['departamento'] ? $data['departamento']->getId() : 'all',
  206.                     'state' => $data['estado']
  207.                 ], 0);
  208.   
  209.              /*   $pendientes = $realizadosDiagramados = [];
  210.                 if ($data['estado'] == 'pen') 
  211.                 {
  212.                      //Representa todos los pedido de reparacion que no esten ni diagramados 
  213.                     $pendientes = $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAllPendiente($data);
  214.                 }
  215.                 else
  216.                 {
  217.                    $realizadosDiagramados =  $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAll($data);
  218.                    if ($data['estado'] == 'all') 
  219.                    {
  220.                         $pendientes = $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAllPendiente($data);
  221.                    }
  222.                    
  223.                 }*/
  224.                 $pedido_reparacions = $this->getPedidosFiltrados($data, $pedidoReparacionRepository);
  225.                 if ($data['estado'] != 'all') 
  226.                 {
  227.                     $filtrados = array_filter($pedido_reparacions, function($item) use ($data) {
  228.                                                                         return $item['estado'] === $data['estado'];
  229.                                                                     });
  230.                 }
  231.                 //dd($pedido_reparacions);
  232.               //  $pedido_reparacions = array_merge($pendientes, $realizadosDiagramados);
  233.                 return $this->render('mantenimiento/pedido_reparacion/informe.html.twig', [
  234.                     'pedido_reparacions' => $filtrados ?? $pedido_reparacions,
  235.                     'form' => $form->createView(),  
  236.                     'url' => $url
  237.                 ]);
  238.             }
  239.             
  240.         }
  241.         return $this->render('mantenimiento/pedido_reparacion/informe.html.twig', [
  242.             'form' => $form->createView()
  243.         ]);
  244.     }
  245.     private function formFilterInformes()
  246.     {
  247.         $user = $this->getUser();
  248.         $form = $this->createFormBuilder()
  249.                      ->add('sector', EntityType::class, [
  250.                                 'class' => SectorPlanta::class,
  251.                                 'required' => false,
  252.                                 'placeholder' => 'Todos',
  253.                                 'choices' => $user->getAllSectoresActivos(),
  254.                                                     
  255.                             ])
  256.                      ->add('estado', ChoiceType::class, [
  257.                                 'choices'  => [
  258.                                     'Todos' => 'all',
  259.                                     'Pendientes' => 'pen',
  260.                                  //   'Programados' => 'pro',
  261. //                                    'Programados' => 'pro',
  262.                                     'Realizados' => 'rea',
  263.                                 ],
  264.                                 'data' => 'all',
  265.                             ])
  266.                      ->add('departamento', EntityType::class, [
  267.                                 'class' => Departamento::class,
  268.                                 'required' => false,
  269.                                 'placeholder' => 'Todos',
  270.                                 'choices' => $user->getDepartamentos()->toArray(),
  271.                             ])
  272.                      ->add('desde', DateType::class, [
  273.                                                         'widget' => 'single_text',
  274.                                                         'constraints' => [
  275.                                                             new NotNull(['message' => 'Este campo no puede estar vacío.']),
  276.                                                         ],
  277.                             ])
  278.                      ->add('hasta', DateType::class, [
  279.                                                         'widget' => 'single_text',
  280.                                                         'constraints' => [
  281.                                                             new NotNull(['message' => 'Este campo no puede estar vacío.']),
  282.                                                         ],
  283.                             ])
  284.                      ->getForm();
  285.         return $form;
  286.     }
  287.     private function formFilterTreas()
  288.     {
  289.         $user = $this->getUser();
  290.         $form = $this->createFormBuilder()
  291.                      ->add('realizado', ChoiceType::class, [
  292.                                 'choices'  => [
  293.                                     'Todas' => 'all',
  294.                                     'Si' => true,
  295.                                     'No' => false,
  296.                                 ],
  297.                                 'data' => 'all',
  298.                             ])
  299.                      ->add('diagramado', ChoiceType::class, [
  300.                                 'choices'  => [
  301.                                     'Todas' => 'all',
  302.                                     'Si' => true,
  303.                                     'No' => false,
  304.                                 ],
  305.                                 'data' => 'all',
  306.                             ])
  307.                      ->add('equipo', EntityType::class, [
  308.                                 'class' => Maquinaria::class,
  309.                                 'required' => false,
  310.                                 'placeholder' => 'Todos',
  311.                                 'query_builder' => function (EntityRepository $er) {
  312.                                                         return $er->createQueryBuilder('d')
  313.                                                                   ->join('d.sector', 's')
  314.                                                                   ->andWhere('d.activo = true')
  315.                                                                   ->andWhere('s.active = true')
  316.                                                                   ->addOrderBy('s.nombre', 'ASC')
  317.                                                                   ->addOrderBy('d.nombre', 'ASC');
  318.                                                     },
  319.                                 'group_by' => function($choice, $key, $value) {
  320.                                                                                     if ($choice && $choice->getSector()) 
  321.                                                                                     {
  322.                                                                                         return $choice->getSector() . '';
  323.                                                                                     }
  324.                                                                                     return 'Sin sector';
  325.                                                                                 },
  326.                                                                            
  327.                             ])
  328.                      ->add('solicitante', EntityType::class, [
  329.                                 'class' => SolicitantePedidoReparacion::class,
  330.                                 'required' => false,
  331.                                 'placeholder' => 'Todos',
  332.                                 'query_builder' => function (EntityRepository $er) {
  333.                                                         return $er->createQueryBuilder('d')
  334.                                                                   ->andWhere('d.activo = true')
  335.                                                                   ->addOrderBy('d.nombre', 'ASC');
  336.                                                     },
  337.                                                                            
  338.                             ])
  339.                      ->add('sector', EntityType::class, [
  340.                                 'class' => SectorPlanta::class,
  341.                                 'required' => false,
  342.                                 'placeholder' => 'Todos',
  343.                                 'choices' => $user->getAllSectoresActivos(),
  344.                             ])
  345.                      ->add('desde', DateType::class, [
  346.                                                         'widget' => 'single_text',
  347.                                                         'data' => (new \DateTime())->modify('-1 day'),
  348.                             ])
  349.                      ->add('hasta', DateType::class, [
  350.                                                         'widget' => 'single_text',
  351.                                                         'data' => new \DateTime(),
  352.                             ])
  353.                      ->add('departamento', EntityType::class, [
  354.                                 'class' => Departamento::class,
  355.                                 'required' => false,
  356.                                 'placeholder' => 'Todos',
  357.                                 'choices' => $user->getAllDepartamentosActivos(),
  358.                             ])
  359.                      ->getForm();
  360.         return $form;
  361.     }
  362.     /**
  363.      * @Route("/new", name="app_mantenimiento_pedido_reparacion_new", methods={"GET", "POST"})
  364.      */
  365.     public function new(Request $request, PedidoReparacionRepository $pedidoReparacionRepository): Response
  366.     {
  367.         $pedidoReparacion = new PedidoReparacion();
  368.         $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion, ['user' => $this->getUser()]);
  369.         $form->handleRequest($request);
  370.         if ($form->isSubmitted() && $form->isValid()) 
  371.         {
  372.             $uploadedFile = $form->get('archivoImagen')->getData();
  373.             if ($uploadedFile) 
  374.             {
  375.                  $allowedMimeTypes = ['jpeg', 'JPG', 'JPEG', 'jpg', 'png', 'PNG','gif', 'GIF'];
  376.                  $extension = $uploadedFile->getClientOriginalExtension();
  377.                 if (!in_array($extension, $allowedMimeTypes)) 
  378.                 {
  379.                     $form->get('archivoImagen')->addError(new FormError('Tipo de archivo no permitido. Solo se aceptan JPEG, PNG y GIF.'));
  380.                     return $this->renderForm('mantenimiento/pedido_reparacion/new.html.twig', [
  381.                                                                                                 'pedido_reparacion' => $pedidoReparacion,
  382.                                                                                                 'form' => $form,
  383.                                                                                                 'dpto' => true
  384.                                                                                                 ]);
  385.                 }
  386.                 $originalFilename = pathinfo($uploadedFile->getClientOriginalName(), PATHINFO_FILENAME);
  387.                 $safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
  388.                 $extension = $uploadedFile->getClientOriginalExtension();                
  389.                 $newFilename = $safeFilename.'-'.uniqid().'.'.$extension; // Usamos $extension aquí
  390.                 try 
  391.                 {
  392.                     $uploadedFile->move(
  393.                         $this->getParameter('ruta_imagenes_pedidos'), 
  394.                         $newFilename
  395.                     );
  396.                 } catch (\Exception $e) {
  397.                     // ...
  398.                 }
  399.                 $pedidoReparacion->setNombreArchivoImagen($newFilename);
  400.             }
  401.             
  402.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  403.             return $this->redirectToRoute('app_mantenimiento_pedido_reparacion_index', [], Response::HTTP_SEE_OTHER);
  404.         }
  405.         return $this->renderForm('mantenimiento/pedido_reparacion/new.html.twig', [
  406.             'pedido_reparacion' => $pedidoReparacion,
  407.             'form' => $form,
  408.             'dpto' => true
  409.         ]);
  410.     }
  411.     /**
  412.      * @Route("/{id}/modificar/{dpto}/departamento", name="app_mantenimiento_pedido_reparacion_change_depto", methods={"GET", "POST"})
  413.      */
  414.     public function modificarDepartamento(PedidoReparacion $pedidoReparacion, Departamento $dpto, PedidoReparacionRepository $pedidoReparacionRepository): Response
  415.     {
  416.         try
  417.         {
  418.             $pedidoReparacion->setDepartamento($dpto);
  419.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  420.             return new JsonResponse(['ok' => true]);
  421.         }
  422.         catch (\Exception $e)
  423.         {
  424.             return new JsonResponse(['ok' => false, 'message' => $e->getMessage()]);
  425.         }
  426.     }
  427.     /**
  428.      * @Route("/{id}", name="app_mantenimiento_pedido_reparacion_show", methods={"GET", "POST"})
  429.      */
  430.     public function show(PedidoReparacion $pedidoReparacion): Response
  431.     {
  432.         return $this->render('mantenimiento/pedido_reparacion/show.html.twig', [
  433.             'pedido_reparacion' => $pedidoReparacion,
  434.         ]);
  435.     }
  436.     /**
  437.      * @Route("/{id}/diagramar", name="app_mantenimiento_pedido_reparacion_diagramar", methods={"GET", "POST"})
  438.      */
  439.     public function diagramar(Request $request, PedidoReparacion $pedidoReparacion, PedidoReparacionRepository $pedidoReparacionRepository): Response
  440.     {
  441.         if (in_array($this->getUser()->getId(), [1,11]))
  442.         {
  443.             $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion, ['user' => $this->getUser(), 'depto' => true ]);
  444.         }
  445.         else
  446.         {
  447.             $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion);
  448.         }
  449.      
  450.         $form->handleRequest($request);
  451.         if ($form->isSubmitted() && $form->isValid()) {
  452.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  453.             return $this->redirectToRoute('app_mantenimiento_pedido_reparacion_index', [], Response::HTTP_SEE_OTHER);
  454.         }
  455.         return $this->renderForm('mantenimiento/pedido_reparacion/edit.html.twig', [
  456.             'pedido_reparacion' => $pedidoReparacion,
  457.             'form' => $form,
  458.         ]);
  459.     }
  460.     /**
  461.      * @Route("/{id}/edit", name="app_mantenimiento_pedido_reparacion_edit", methods={"GET", "POST"})
  462.      */
  463.     public function edit(Request $request, PedidoReparacion $pedidoReparacion, PedidoReparacionRepository $pedidoReparacionRepository): Response
  464.     {
  465.         $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion, ['id' => $pedidoReparacion->getId(), 'user' => $this->getUser(), 'depto' => in_array($this->getUser()->getId(), [1,11]) ]);
  466.         $form->handleRequest($request);
  467.         if ($form->isSubmitted() && $form->isValid()) 
  468.         {
  469.             $uploadedFile = $form->get('archivoImagen')->getData();
  470.             if ($uploadedFile) 
  471.             {
  472.                  $allowedMimeTypes = ['jpeg', 'JPG', 'JPEG', 'jpg', 'png', 'PNG','gif', 'GIF'];
  473.                  $extension = $uploadedFile->getClientOriginalExtension();
  474.                 if (!in_array($extension, $allowedMimeTypes)) 
  475.                 {
  476.                     $form->get('archivoImagen')->addError(new FormError('Tipo de archivo no permitido. Solo se aceptan JPEG, PNG y GIF.'));
  477.                     return $this->renderForm('mantenimiento/pedido_reparacion/new.html.twig', [
  478.                                                                                                 'pedido_reparacion' => $pedidoReparacion,
  479.                                                                                                 'form' => $form,
  480.                                                                                                 'dpto' => true
  481.                                                                                                 ]);
  482.                 }
  483.                 $originalFilename = pathinfo($uploadedFile->getClientOriginalName(), PATHINFO_FILENAME);
  484.                 $safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
  485.                 $extension = $uploadedFile->getClientOriginalExtension();                
  486.                 $newFilename = $safeFilename.'-'.uniqid().'.'.$extension; // Usamos $extension aquí
  487.                 try 
  488.                 {
  489.                     $uploadedFile->move(
  490.                         $this->getParameter('ruta_imagenes_pedidos'), 
  491.                         $newFilename
  492.                     );
  493.                 } catch (\Exception $e) {
  494.                     // ...
  495.                 }
  496.                 $pedidoReparacion->setNombreArchivoImagen($newFilename);
  497.             }
  498.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  499.             return $this->redirectToRoute('app_mantenimiento_pedido_reparacion_index', [], Response::HTTP_SEE_OTHER);
  500.         }
  501.         return $this->renderForm('mantenimiento/pedido_reparacion/edit.html.twig', [
  502.             'pedido_reparacion' => $pedidoReparacion,
  503.             'form' => $form,
  504.             'dpto' => in_array($this->getUser()->getId(), [1,11]),
  505.         ]);
  506.     }
  507.     /** 
  508.      * @Route("/{id}/delete/pedido", name="app_mantenimiento_pedido_reparacion_delete", methods={"POST", "DELETE"})
  509.      */
  510.     public function delete(Request $request, PedidoReparacion $pedidoReparacion, EntityManagerInterface $entityManager): Response
  511.     {
  512.         
  513.         try
  514.         {
  515.             $realizada = 0;
  516.             foreach ($pedidoReparacion->getPedidosDiagramados() as $pedidoDiagramado) 
  517.             {
  518.                 if ($pedidoDiagramado->isRealizada())
  519.                 {
  520.                     $realizada++;
  521.                 }
  522.             }
  523.             if ($realizada > 0)
  524.             {
  525.                 return $this->json(['ok' => false, 'message' => 'No se puede eliminar el pedido de reparación. El mismo ya ha sido marcado como realizado.']);
  526.             }
  527.             $pedidoReparacion->setEliminada(true);
  528.             $entityManager->flush();
  529.             //$pedidoReparacionRepository->remove($pedidoReparacion, true);
  530.             
  531.             return $this->json(['ok' => true]);
  532.         }
  533.         catch (\Exception $e)
  534.         {
  535.             return $this->json(['ok' => false, 'message' => 'No se ha podido eliminar el pedido de reparación. Posiblemente esté asociado a un organigrama.']);
  536.         }
  537.     }
  538. }