src/Controller/publico/Orden/OrdenController.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Controller\publico\Orden;
  3. use App\Entity\CentroTrabajo;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Form\Orden\OrdenIniciarType;
  11. use App\Form\Orden\OrdenFinalizarType;
  12. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  13. use App\Repository\UsuarioRepository;
  14. use App\Repository\ProcesoBloqFasesRepository;
  15. use App\Repository\OrdenRepository;
  16. use App\Entity\Orden;
  17. use App\Entity\Usuario;
  18. use App\Entity\ProcesoBloqFases;
  19. use DateInterval;
  20. /**
  21.  * @Route("/taller/orden", name="orden_")
  22.  */
  23. class OrdenController extends AbstractController
  24. {
  25.     private $br;
  26.     private $em;
  27.     private $procesoBloqFasesRepository;
  28.     private $usuarioRepository;
  29.     private $ordenRepository;
  30.     public function __construct(Breadcrumbs $brEntityManagerInterface $emProcesoBloqFasesRepository $procesoBloqFasesRepositoryUsuarioRepository $usuarioRepositoryOrdenRepository $ordenRepository)
  31.     {
  32.         $this->bread    $br;
  33.         $this->em       $em;
  34.         $this->procesoBloqFasesRepository $procesoBloqFasesRepository;
  35.         $this->usuarioRepository $usuarioRepository;
  36.         $this->ordenRepository $ordenRepository;
  37.     }
  38.     /**
  39.      * @Route("/nuevo", 
  40.      * name="new", 
  41.      * options={"expose"=true},
  42.      * methods = {"GET", "POST"},
  43.      * )
  44.      */
  45.     public function new(Request $request): Response
  46.     {
  47.         $orden = new Orden();
  48.         $form $this->createForm(OrdenIniciarType::class, $orden);
  49.         $form->handleRequest($request);
  50.         if ($form->isSubmitted()) {
  51.             if ($form->isValid()) {
  52.                 $operario $this->usuarioRepository->getUserByCodigo($form->get("operario")->getData());
  53.                 $fase $this->procesoBloqFasesRepository->getFaseByCodigo($form->get("fase")->getData());
  54.                 if (!$operario) {
  55.                     $this->addFlash('danger''No se encontro al operario.');
  56.                     return $this->redirectToRoute('publico_orden_new');
  57.                 }
  58.                 if (!$fase) {
  59.                     $this->addFlash('danger''No se encontro el fichaje.');
  60.                     return $this->redirectToRoute('publico_orden_new');
  61.                 }
  62.                 $encontrada $this->ordenRepository->getOrdenByUsuarioFase($operario->getId(), $fase->getId());
  63.                 if ($encontrada) {
  64.                     return $this->redirectToRoute('publico_orden_edit', ['id' => $encontrada->getId()]);
  65.                 }
  66.                 $orden->setOrdenOperario($operario);
  67.                 $orden->setOrdenFase($fase);
  68.                 $orden->setOrdenIniciada(new \DateTime());
  69.                 $centro $orden->getOrdenCentro();
  70.                 if ($centro && !$centro->getEstado()) {
  71.                     $centro->setEstado(CentroTrabajo::ESTADOS['EN MARCHA']);
  72.                 }
  73.                 $this->em->persist($orden);
  74.                 $this->em->flush();
  75.                 $this->addFlash('success''Fichaje iniciado con éxito');
  76.                 return $this->redirectToRoute('publico_orden_menu');
  77.             } else {
  78.                 $this->addFlash('danger''Se han encontrado errores en el formulario enviado.');
  79.             }
  80.         }
  81.         return $this->render(Orden::TallerDir '/new_edit.html.twig', [
  82.             'text' => 'Fichajes',
  83.             'form'  => $form->createView()
  84.         ]);
  85.     }
  86.     /**
  87.      * @Route("/{id}/editar", 
  88.      * name="edit", 
  89.      * options={"expose"=true},
  90.      * methods = {"GET", "POST"},
  91.      * requirements={"id"="\d+"}
  92.      * )
  93.      */
  94.     public function edit(Request $requestOrden $orden): Response
  95.     {
  96.         if ($orden->getOrdenFinalizada()) {
  97.             $this->addFlash('danger''EL fichaje ya esta finalizado.');
  98.             return $this->redirectToRoute('publico_orden_new');
  99.         }
  100.         $form $this->createForm(OrdenFinalizarType::class, $orden);
  101.         $form->handleRequest($request);
  102.         if ($form->isSubmitted()) {
  103.             if ($form->isValid()) {
  104.                 $pararCentro $form->get('pararCentroTrabajo')->getData();
  105.                 $orden->setOrdenFinalizada(new \DateTime());
  106.                 $diff date_diff($orden->getOrdenIniciada(), $orden->getOrdenFinalizada());
  107.                 $minutosUtilizadas = (((int)$orden->getOrdenFase()->getProcesoHorasUtilizadas()) * 60) + ($orden->getOrdenFase()->getProcesoHorasUtilizadas() - (int)$orden->getOrdenFase()->getProcesoHorasUtilizadas()) * 100;
  108.                 $minutosFinalizada = ($diff->60) + $diff->i;
  109.                 $this->em->persist($orden);
  110.                 $orden->getOrdenFase()->setProcesoHorasUtilizadas($this->convertToHoursMins($minutosUtilizadas $minutosFinalizada));
  111.                 $centro $orden->getOrdenCentro();
  112.                 if ($centro && $centro->getEstado() && $pararCentro) {
  113.                     $centro->setEstado(CentroTrabajo::ESTADOS['PARADO']);
  114.                 }
  115.                 $this->em->flush();
  116.                 $this->addFlash('success''Fichaje finalizado correctamente');
  117.                 return $this->redirectToRoute('publico_orden_menu');
  118.             } else {
  119.                 $this->addFlash('danger''Se han encontrado errores en el formulario enviado.');
  120.             }
  121.         }
  122.         $this->bread->addRouteItem("Finalizar fichaje"'publico_orden_edit', ['id' => $orden->getId()]);
  123.         return $this->render(Orden::TallerDir '/finalizar.html.twig', [
  124.             'text' => 'Finalizar fichaje',
  125.             'form'  => $form->createView(),
  126.             'orden' => $orden
  127.         ]);
  128.     }
  129.     /**
  130.      * @Route("/menu", name="menu", options={"expose"=true})
  131.      */
  132.     public function menu(Request $request): Response
  133.     {
  134.         $this->bread->addRouteItem("Menu"'publico_orden_menu');
  135.         return $this->render(Orden::TallerDir '/menu.html.twig', [
  136.             'text' => 'Fichajes',
  137.         ]);
  138.     }
  139.     function convertToHoursMins($time)
  140.     {
  141.         if ($time 1) {
  142.             return;
  143.         }
  144.         $hours floor($time 60);
  145.         $minutes = ($time 60) / 100;
  146.         return $hours $minutes;
  147.     }
  148. }