src/Controller/Mantenimiento/PedidoReparacionController.php line 394

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.                                 'id' => $id,
  115.                                 'sector' => $pedido->getSector() ? $pedido->getSector()->getNombre() : '',
  116.                                 'departamento' => $pedido->getDepartamento() ? $pedido->getDepartamento()->getNombre() : '',
  117.                                 'fechaPedido' => $pedido->getFecha(),
  118.                                 'equipo' => $pedido->getEquipo() ? $pedido->getEquipo()->getNombre() : '',
  119.                                 'estado' => 'pen',
  120.                                 'diagramado' => 0,
  121.                                 'observaciones' => ''                      
  122.                             ];
  123.                 foreach ($pedido->getPedidosDiagramados() as $pedidoDiagramado) 
  124.                 {
  125.                     $diagrama = $pedidoDiagramado->getDiagrama();
  126.                     if (!isset($detalle[$id]['realizada'])) //No se ha seteado el campo de realizada 
  127.                     {
  128.                         if ($diagrama->isProcesado())
  129.                         {
  130.                             $detalle[$id]['realizada'] = $pedidoDiagramado->isRealizada();
  131.                             if (!$pedidoDiagramado->isRealizada())
  132.                             {
  133.                                 unset($detalle[$id]['realizada']);
  134.                             }
  135.                                 
  136.                             $detalle[$id]['fecha'] = $diagrama->getFecha();
  137.                             $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  138.                             $detalle[$id]['estado'] = $pedidoDiagramado->isRealizada() ? 'rea' : 'pen';
  139.                             $detalle[$id]['observaciones'] = $pedidoDiagramado->getObservacionReparacion();
  140.                         }
  141.                         else
  142.                         {
  143.                             $detalle[$id]['realizada'] = 0;
  144.                             $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  145.                             $detalle[$id]['estado'] = 'pen'; //'pro';
  146.                             $detalle[$id]['estado'] = 'pen';
  147.                             $detalle[$id]['diagramado'] = 1;
  148.                         }                       
  149.                     }
  150.                     else
  151.                     {
  152.                         if ($detalle[$id]['realizada'] == 0) //Si no se ha realizado
  153.                         {
  154.                             if ($diagrama->isProcesado())
  155.                             {
  156.                                 if ($pedidoDiagramado->isRealizada())
  157.                                 {
  158.                                     $detalle[$id]['realizada'] = $pedidoDiagramado->isRealizada();
  159.                                     $detalle[$id]['fecha'] = $diagrama->getFecha();
  160.                                     $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  161.                                     $detalle[$id]['estado'] = 'rea';
  162.                                     $detalle[$id]['observaciones'] = $pedidoDiagramado->getObservacionReparacion();
  163.                                 }
  164.                                 else
  165.                                 {
  166.                                     unset($detalle[$id]['realizada']);
  167.                                     $detalle[$id]['fecha'] = $diagrama->getFecha();
  168.                                     $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  169.                                     $detalle[$id]['estado'] = 'pen';    
  170.                                 }
  171.                             }
  172.                             else
  173.                             {
  174.                                 $detalle[$id]['realizada'] = 0;
  175.                                 $detalle[$id]['fechaDiagrama'] = $diagrama->getFecha();
  176.                                 $detalle[$id]['estado'] =  'pen'; //'pro';
  177.                                 $detalle[$id]['estado'] = 'pen';
  178.                                 $detalle[$id]['diagramado'] = 1;
  179.                             }
  180.                         }
  181.                         
  182.                     }
  183.                 }
  184.             
  185.         }
  186.    
  187.         return $detalle;
  188.     }
  189.    /**
  190.      * @Route("/informe/tareas", name="app_mantenimiento_pedido_reparacion_informe_tareas", methods={"GET", "POST"})
  191.      */
  192.     public function informeSenasa(Request $request, PedidoReparacionRepository $pedidoReparacionRepository): Response
  193.     {
  194.         $form = $this->formFilterInformes();
  195.         if ($request->isMethod('POST')) 
  196.         {
  197.             $form->handleRequest($request);
  198.             
  199.             if ($form->isValid()) 
  200.             {
  201.                 $data = $form->getData();
  202.                 $url = $this->generateUrl('app_mantenimiento_pedido_reparacion_informe_tareas_export', [
  203.                     'from' => $data['desde']->getTimestamp(),
  204.                     'to' => $data['hasta']->getTimestamp(),
  205.                     'sector' => $data['sector'] ? $data['sector']->getId() : 'all',
  206.                     'dpto' => $data['departamento'] ? $data['departamento']->getId() : 'all',
  207.                     'state' => $data['estado']
  208.                 ], 0);
  209.   
  210.              /*   $pendientes = $realizadosDiagramados = [];
  211.                 if ($data['estado'] == 'pen') 
  212.                 {
  213.                      //Representa todos los pedido de reparacion que no esten ni diagramados 
  214.                     $pendientes = $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAllPendiente($data);
  215.                 }
  216.                 else
  217.                 {
  218.                    $realizadosDiagramados =  $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAll($data);
  219.                    if ($data['estado'] == 'all') 
  220.                    {
  221.                         $pendientes = $pedidoReparacionRepository->pedidosReparacionUsuarioWithParametersAllPendiente($data);
  222.                    }
  223.                    
  224.                 }*/
  225.                 $pedido_reparacions = $this->getPedidosFiltrados($data, $pedidoReparacionRepository);
  226.                 if ($data['estado'] != 'all') 
  227.                 {
  228.                     $filtrados = array_filter($pedido_reparacions, function($item) use ($data) {
  229.                                                                         return $item['estado'] === $data['estado'];
  230.                                                                     });
  231.                 }
  232.                 //dd($pedido_reparacions);
  233.               //  $pedido_reparacions = array_merge($pendientes, $realizadosDiagramados);
  234.                 return $this->render('mantenimiento/pedido_reparacion/informe.html.twig', [
  235.                     'pedido_reparacions' => $filtrados ?? $pedido_reparacions,
  236.                     'form' => $form->createView(),  
  237.                     'url' => $url
  238.                 ]);
  239.             }
  240.             
  241.         }
  242.         return $this->render('mantenimiento/pedido_reparacion/informe.html.twig', [
  243.             'form' => $form->createView()
  244.         ]);
  245.     }
  246.     private function formFilterInformes()
  247.     {
  248.         $user = $this->getUser();
  249.         $form = $this->createFormBuilder()
  250.                      ->add('sector', EntityType::class, [
  251.                                 'class' => SectorPlanta::class,
  252.                                 'required' => false,
  253.                                 'placeholder' => 'Todos',
  254.                                 'choices' => $user->getAllSectoresActivos(),
  255.                                                     
  256.                             ])
  257.                      ->add('estado', ChoiceType::class, [
  258.                                 'choices'  => [
  259.                                     'Todos' => 'all',
  260.                                     'Pendientes' => 'pen',
  261.                                  //   'Programados' => 'pro',
  262. //                                    'Programados' => 'pro',
  263.                                     'Realizados' => 'rea',
  264.                                 ],
  265.                                 'data' => 'all',
  266.                             ])
  267.                      ->add('departamento', EntityType::class, [
  268.                                 'class' => Departamento::class,
  269.                                 'required' => false,
  270.                                 'placeholder' => 'Todos',
  271.                                 'choices' => $user->getDepartamentos()->toArray(),
  272.                             ])
  273.                      ->add('desde', DateType::class, [
  274.                                                         'widget' => 'single_text',
  275.                                                         'constraints' => [
  276.                                                             new NotNull(['message' => 'Este campo no puede estar vacío.']),
  277.                                                         ],
  278.                             ])
  279.                      ->add('hasta', DateType::class, [
  280.                                                         'widget' => 'single_text',
  281.                                                         'constraints' => [
  282.                                                             new NotNull(['message' => 'Este campo no puede estar vacío.']),
  283.                                                         ],
  284.                             ])
  285.                      ->getForm();
  286.         return $form;
  287.     }
  288.     private function formFilterTreas()
  289.     {
  290.         $user = $this->getUser();
  291.         $form = $this->createFormBuilder()
  292.                      ->add('realizado', ChoiceType::class, [
  293.                                 'choices'  => [
  294.                                     'Todas' => 'all',
  295.                                     'Si' => true,
  296.                                     'No' => false,
  297.                                 ],
  298.                                 'data' => 'all',
  299.                             ])
  300.                      ->add('diagramado', ChoiceType::class, [
  301.                                 'choices'  => [
  302.                                     'Todas' => 'all',
  303.                                     'Si' => true,
  304.                                     'No' => false,
  305.                                 ],
  306.                                 'data' => 'all',
  307.                             ])
  308.                      ->add('equipo', EntityType::class, [
  309.                                 'class' => Maquinaria::class,
  310.                                 'required' => false,
  311.                                 'placeholder' => 'Todos',
  312.                                 'query_builder' => function (EntityRepository $er) {
  313.                                                         return $er->createQueryBuilder('d')
  314.                                                                   ->join('d.sector', 's')
  315.                                                                   ->andWhere('d.activo = true')
  316.                                                                   ->andWhere('s.active = true')
  317.                                                                   ->addOrderBy('s.nombre', 'ASC')
  318.                                                                   ->addOrderBy('d.nombre', 'ASC');
  319.                                                     },
  320.                                 'group_by' => function($choice, $key, $value) {
  321.                                                                                     if ($choice && $choice->getSector()) 
  322.                                                                                     {
  323.                                                                                         return $choice->getSector() . '';
  324.                                                                                     }
  325.                                                                                     return 'Sin sector';
  326.                                                                                 },
  327.                                                                            
  328.                             ])
  329.                      ->add('solicitante', EntityType::class, [
  330.                                 'class' => SolicitantePedidoReparacion::class,
  331.                                 'required' => false,
  332.                                 'placeholder' => 'Todos',
  333.                                 'query_builder' => function (EntityRepository $er) {
  334.                                                         return $er->createQueryBuilder('d')
  335.                                                                   ->andWhere('d.activo = true')
  336.                                                                   ->addOrderBy('d.nombre', 'ASC');
  337.                                                     },
  338.                                                                            
  339.                             ])
  340.                      ->add('sector', EntityType::class, [
  341.                                 'class' => SectorPlanta::class,
  342.                                 'required' => false,
  343.                                 'placeholder' => 'Todos',
  344.                                 'choices' => $user->getAllSectoresActivos(),
  345.                             ])
  346.                      ->add('desde', DateType::class, [
  347.                                                         'widget' => 'single_text',
  348.                                                         'data' => (new \DateTime())->modify('-1 day'),
  349.                             ])
  350.                      ->add('hasta', DateType::class, [
  351.                                                         'widget' => 'single_text',
  352.                                                         'data' => new \DateTime(),
  353.                             ])
  354.                      ->add('departamento', EntityType::class, [
  355.                                 'class' => Departamento::class,
  356.                                 'required' => false,
  357.                                 'placeholder' => 'Todos',
  358.                                 'choices' => $user->getAllDepartamentosActivos(),
  359.                             ])
  360.                      ->getForm();
  361.         return $form;
  362.     }
  363.     /**
  364.      * @Route("/new", name="app_mantenimiento_pedido_reparacion_new", methods={"GET", "POST"})
  365.      */
  366.     public function new(Request $request, PedidoReparacionRepository $pedidoReparacionRepository): Response
  367.     {
  368.         $pedidoReparacion = new PedidoReparacion();
  369.         $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion, ['user' => $this->getUser()]);
  370.         $form->handleRequest($request);
  371.         if ($form->isSubmitted() && $form->isValid()) 
  372.         {
  373.             $uploadedFile = $form->get('archivoImagen')->getData();
  374.             if ($uploadedFile) 
  375.             {
  376.                  $allowedMimeTypes = ['jpeg', 'JPG', 'JPEG', 'jpg', 'png', 'PNG','gif', 'GIF'];
  377.                  $extension = $uploadedFile->getClientOriginalExtension();
  378.                 if (!in_array($extension, $allowedMimeTypes)) 
  379.                 {
  380.                     $form->get('archivoImagen')->addError(new FormError('Tipo de archivo no permitido. Solo se aceptan JPEG, PNG y GIF.'));
  381.                     return $this->renderForm('mantenimiento/pedido_reparacion/new.html.twig', [
  382.                                                                                                 'pedido_reparacion' => $pedidoReparacion,
  383.                                                                                                 'form' => $form,
  384.                                                                                                 'dpto' => true
  385.                                                                                                 ]);
  386.                 }
  387.                 $originalFilename = pathinfo($uploadedFile->getClientOriginalName(), PATHINFO_FILENAME);
  388.                 $safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
  389.                 $extension = $uploadedFile->getClientOriginalExtension();                
  390.                 $newFilename = $safeFilename.'-'.uniqid().'.'.$extension; // Usamos $extension aquí
  391.                 try 
  392.                 {
  393.                     $uploadedFile->move(
  394.                         $this->getParameter('ruta_imagenes_pedidos'), 
  395.                         $newFilename
  396.                     );
  397.                 } catch (\Exception $e) {
  398.                     // ...
  399.                 }
  400.                 $pedidoReparacion->setNombreArchivoImagen($newFilename);
  401.             }
  402.             
  403.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  404.             return $this->redirectToRoute('app_mantenimiento_pedido_reparacion_index', [], Response::HTTP_SEE_OTHER);
  405.         }
  406.         return $this->renderForm('mantenimiento/pedido_reparacion/new.html.twig', [
  407.             'pedido_reparacion' => $pedidoReparacion,
  408.             'form' => $form,
  409.             'dpto' => true
  410.         ]);
  411.     }
  412.     /**
  413.      * @Route("/{id}/modificar/{dpto}/departamento", name="app_mantenimiento_pedido_reparacion_change_depto", methods={"GET", "POST"})
  414.      */
  415.     public function modificarDepartamento(PedidoReparacion $pedidoReparacion, Departamento $dpto, PedidoReparacionRepository $pedidoReparacionRepository): Response
  416.     {
  417.         try
  418.         {
  419.             $pedidoReparacion->setDepartamento($dpto);
  420.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  421.             return new JsonResponse(['ok' => true]);
  422.         }
  423.         catch (\Exception $e)
  424.         {
  425.             return new JsonResponse(['ok' => false, 'message' => $e->getMessage()]);
  426.         }
  427.     }
  428.     /**
  429.      * @Route("/{id}", name="app_mantenimiento_pedido_reparacion_show", methods={"GET", "POST"})
  430.      */
  431.     public function show(PedidoReparacion $pedidoReparacion): Response
  432.     {
  433.         return $this->render('mantenimiento/pedido_reparacion/show.html.twig', [
  434.             'pedido_reparacion' => $pedidoReparacion,
  435.         ]);
  436.     }
  437.     /**
  438.      * @Route("/{id}/diagramar", name="app_mantenimiento_pedido_reparacion_diagramar", methods={"GET", "POST"})
  439.      */
  440.     public function diagramar(Request $request, PedidoReparacion $pedidoReparacion, PedidoReparacionRepository $pedidoReparacionRepository): Response
  441.     {
  442.         if (in_array($this->getUser()->getId(), [1,11]))
  443.         {
  444.             $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion, ['user' => $this->getUser(), 'depto' => true ]);
  445.         }
  446.         else
  447.         {
  448.             $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion);
  449.         }
  450.      
  451.         $form->handleRequest($request);
  452.         if ($form->isSubmitted() && $form->isValid()) {
  453.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  454.             return $this->redirectToRoute('app_mantenimiento_pedido_reparacion_index', [], Response::HTTP_SEE_OTHER);
  455.         }
  456.         return $this->renderForm('mantenimiento/pedido_reparacion/edit.html.twig', [
  457.             'pedido_reparacion' => $pedidoReparacion,
  458.             'form' => $form,
  459.         ]);
  460.     }
  461.     /**
  462.      * @Route("/{id}/edit", name="app_mantenimiento_pedido_reparacion_edit", methods={"GET", "POST"})
  463.      */
  464.     public function edit(Request $request, PedidoReparacion $pedidoReparacion, PedidoReparacionRepository $pedidoReparacionRepository): Response
  465.     {
  466.         $form = $this->createForm(PedidoReparacionType::class, $pedidoReparacion, ['id' => $pedidoReparacion->getId(), 'user' => $this->getUser(), 'depto' => in_array($this->getUser()->getId(), [1,11]) ]);
  467.         $form->handleRequest($request);
  468.         if ($form->isSubmitted() && $form->isValid()) 
  469.         {
  470.             $uploadedFile = $form->get('archivoImagen')->getData();
  471.             if ($uploadedFile) 
  472.             {
  473.                  $allowedMimeTypes = ['jpeg', 'JPG', 'JPEG', 'jpg', 'png', 'PNG','gif', 'GIF'];
  474.                  $extension = $uploadedFile->getClientOriginalExtension();
  475.                 if (!in_array($extension, $allowedMimeTypes)) 
  476.                 {
  477.                     $form->get('archivoImagen')->addError(new FormError('Tipo de archivo no permitido. Solo se aceptan JPEG, PNG y GIF.'));
  478.                     return $this->renderForm('mantenimiento/pedido_reparacion/new.html.twig', [
  479.                                                                                                 'pedido_reparacion' => $pedidoReparacion,
  480.                                                                                                 'form' => $form,
  481.                                                                                                 'dpto' => true
  482.                                                                                                 ]);
  483.                 }
  484.                 $originalFilename = pathinfo($uploadedFile->getClientOriginalName(), PATHINFO_FILENAME);
  485.                 $safeFilename = transliterator_transliterate('Any-Latin; Latin-ASCII; [^A-Za-z0-9_] remove; Lower()', $originalFilename);
  486.                 $extension = $uploadedFile->getClientOriginalExtension();                
  487.                 $newFilename = $safeFilename.'-'.uniqid().'.'.$extension; // Usamos $extension aquí
  488.                 try 
  489.                 {
  490.                     $uploadedFile->move(
  491.                         $this->getParameter('ruta_imagenes_pedidos'), 
  492.                         $newFilename
  493.                     );
  494.                 } catch (\Exception $e) {
  495.                     // ...
  496.                 }
  497.                 $pedidoReparacion->setNombreArchivoImagen($newFilename);
  498.             }
  499.             $pedidoReparacionRepository->add($pedidoReparacion, true);
  500.             return $this->redirectToRoute('app_mantenimiento_pedido_reparacion_index', [], Response::HTTP_SEE_OTHER);
  501.         }
  502.         return $this->renderForm('mantenimiento/pedido_reparacion/edit.html.twig', [
  503.             'pedido_reparacion' => $pedidoReparacion,
  504.             'form' => $form,
  505.             'dpto' => in_array($this->getUser()->getId(), [1,11]),
  506.         ]);
  507.     }
  508.     /** 
  509.      * @Route("/{id}/delete/pedido", name="app_mantenimiento_pedido_reparacion_delete", methods={"POST", "DELETE"})
  510.      */
  511.     public function delete(Request $request, PedidoReparacion $pedidoReparacion, EntityManagerInterface $entityManager): Response
  512.     {
  513.         
  514.         try
  515.         {
  516.             $realizada = 0;
  517.             foreach ($pedidoReparacion->getPedidosDiagramados() as $pedidoDiagramado) 
  518.             {
  519.                 if ($pedidoDiagramado->isRealizada())
  520.                 {
  521.                     $realizada++;
  522.                 }
  523.             }
  524.             if ($realizada > 0)
  525.             {
  526.                 return $this->json(['ok' => false, 'message' => 'No se puede eliminar el pedido de reparación. El mismo ya ha sido marcado como realizado.']);
  527.             }
  528.             $pedidoReparacion->setEliminada(true);
  529.             $entityManager->flush();
  530.             //$pedidoReparacionRepository->remove($pedidoReparacion, true);
  531.             
  532.             return $this->json(['ok' => true]);
  533.         }
  534.         catch (\Exception $e)
  535.         {
  536.             return $this->json(['ok' => false, 'message' => 'No se ha podido eliminar el pedido de reparación. Posiblemente esté asociado a un organigrama.']);
  537.         }
  538.     }
  539. }