src/Controller/Comun/FichajeController.php line 101

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Comun;
  3. use App\Entity\Comun\Fichaje;
  4. use App\Form\Comun\FichajeType;
  5. use App\Repository\Comun\FichajeRepository;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. use App\Entity\Admin\Empleada;
  11. use App\Entity\Comun\Proyecto;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use App\Service\FichajeService;
  16. use Symfony\Component\HttpFoundation\RedirectResponse;
  17. #[Route('/comun/fichaje')]
  18. class FichajeController extends AbstractController {
  19.     private $fichajeService;
  20.     public function __construct(FichajeService $fichajeService) {
  21.         $this->fichajeService $fichajeService;
  22.     }
  23.     #[Route('/'name'app_comun_fichaje_index'methods: ['GET'])]
  24.     public function index(RequestStack $rsFichajeRepository $fichajeRepository): Response {
  25.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  26.         $session $rs->getSession();
  27.         $filtro unserialize($session->get('filtro.fichajeEmpleada'));
  28.         if (!$filtro) {
  29.             $fichajes $fichajeRepository->findBy(['empleada' => $empleada]);
  30.         } else {
  31.             $filtro->setEmpleada($empleada);
  32.             $fichajes $fichajeRepository->findByFiltro($filtro);
  33.         }
  34.         $tiempoTrabajado 0;
  35.         foreach ($fichajes as $fichaje) {
  36.             $tiempoTrabajado += $fichaje->getCantidadHoras();
  37.         }
  38.         return $this->render('comun/fichaje/index.html.twig', [
  39.                     'fichajes' => $fichajes,
  40.                     'empleada' => $empleada,
  41.                     'admin' => false,
  42.                     'tiempoTrabajado' => $this->fichajeService->convertirMinutos($tiempoTrabajado 60),
  43.         ]);
  44.     }
  45.     #[Route('/todos'name'app_comun_fichaje_todos'methods: ['GET'])]
  46.     public function todos(RequestStack $rsFichajeRepository $fichajeRepository): Response {
  47.         $session $rs->getSession();
  48.         $filtro unserialize($session->get('filtro.fichaje'));
  49.         $fichajes $fichajeRepository->findByFiltro($filtro);
  50.         $tiempoTrabajado 0;
  51.         foreach ($fichajes as $fichaje) {
  52.             $tiempoTrabajado += $fichaje->getCantidadHoras();
  53.         }
  54.         return $this->render('comun/fichaje/todos.html.twig', [
  55.                     'fichajes' => $fichajes,
  56.                     'tiempoTrabajado' => $this->fichajeService->convertirMinutos($tiempoTrabajado 60),
  57.         ]);
  58.     }
  59.     #[Route('/empleada/{empleada}'name'app_comun_fichaje_empleada'methods: ['GET'])]
  60.     public function fichajesEmpleada(RequestStack $rsFichajeRepository $fichajeRepositoryEmpleada $empleada): Response {
  61.         $session $rs->getSession();
  62.         $filtro unserialize($session->get('filtro.fichajeEmpleada'));
  63.         if (!$filtro) {
  64.             $fichajes $fichajeRepository->findBy(['empleada' => $empleada]);
  65.         } else {
  66.             $filtro->setEmpleada($empleada);
  67.             $fichajes $fichajeRepository->findByFiltro($filtro);
  68.         }
  69.         $tiempoTrabajado 0;
  70.         foreach ($fichajes as $fichaje) {
  71.             $tiempoTrabajado += $fichaje->getCantidadHoras();
  72.         }
  73.         return $this->render('comun/fichaje/index.html.twig', [
  74.                     'fichajes' => $fichajes,
  75.                     'empleada' => $empleada,
  76.                     'admin' => true,
  77.                     'tiempoTrabajado' => $this->fichajeService->convertirMinutos($tiempoTrabajado 60),
  78.         ]);
  79.     }
  80.     #[Route('/new'name'app_comun_fichaje_new'methods: ['GET''POST'])]
  81.     public function new(Request $request): Response {
  82.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  83.         return $this->nuevoFichaje($request$empleada);
  84.     }
  85.     #[Route('/newAdmin/{empleada}'name'app_comun_fichaje_new_admin'methods: ['GET''POST'])]
  86.     public function newFichajeAdmin(Request $requestEmpleada $empleada): Response {
  87.         return $this->nuevoFichaje($request$empleada);
  88.     }
  89.     #[Route('/{id}/edit'name'app_comun_fichaje_edit'methods: ['GET''POST'])]
  90.     public function edit(Request $requestFichaje $fichajeFichajeRepository $fichajeRepository): Response {
  91.         $empleada $fichaje->getEmpleada();
  92.         $form $this->createForm(FichajeType::class, $fichaje, ['empleada' => $empleada]);
  93.         $form->get("cantidadHoras")->setData(date_create_from_format("H:i"$this->fichajeService->convertirHorasaTiempo($fichaje->getCantidadHoras())));
  94.         $form->handleRequest($request);
  95.         if ($form->isSubmitted() && $form->isValid()) {
  96.             $cantidadHoras $this->fichajeService->convertirTiempoValorNumerico($form->get("cantidadHoras")->getData()->format("H:i"));
  97.             $fichaje->setCantidadHoras($cantidadHoras);
  98.             $tarea $this->getDoctrine()->getRepository("App:Comun\Tarea")->find($request->request->get('fichaje_proyecto_tarea')['tarea']);
  99.             $fichaje->setTarea($tarea);
  100.             $fichajeRepository->add($fichaje);
  101.             if ($empleada->getId() == $this->get('security.token_storage')->getToken()->getUser()->getEmpleada()->getId()) {
  102.                 return $this->redirect($this->generateUrl('app_comun_fichaje_index', []));
  103.             } else {
  104.                 return $this->redirect($this->generateUrl('app_comun_fichaje_empleada', ['empleada' => $empleada->getId()]));
  105.             }
  106.         }
  107.         return $this->renderForm('comun/fichaje/edit.html.twig', [
  108.                     'fichaje' => $fichaje,
  109.                     'form' => $form,
  110.                     'empleada' => $empleada
  111.         ]);
  112.     }
  113.     public function nuevoFichaje(Request $requestEmpleada $empleada) {
  114.         $fichajeRepository $this->getDoctrine()->getRepository("App:Comun\Fichaje");
  115.         $fichaje = new Fichaje();
  116.         $fichaje->setFecha(date_create('now'));
  117.         $form $this->createForm(FichajeType::class, $fichaje, ['empleada' => $empleada]);
  118.         $form->handleRequest($request);
  119.         $tareaRepository $this->getDoctrine()->getRepository("App:Comun\Tarea");
  120.         $fichaje->setEmpleada($empleada);
  121.         if ($form->isSubmitted() && $form->isValid()) {
  122.             $cantidadHoras $this->fichajeService->convertirTiempoValorNumerico($form->get("cantidadHoras")->getData()->format("H:i"));
  123.             $fichaje->setCantidadHoras($cantidadHoras);
  124.             $tarea $tareaRepository->find($request->request->get('fichaje_proyecto_tarea')['tarea']);
  125.             $fichaje->setTarea($tarea);
  126.             $fichajeRepository->add($fichaje);
  127.             if ($empleada->getId() == $this->get('security.token_storage')->getToken()->getUser()->getEmpleada()->getId()) {
  128.                 return $this->redirect($this->generateUrl('app_comun_fichaje_index', []));
  129.             } else {
  130.                 return $this->redirect($this->generateUrl('app_comun_fichaje_empleada', ['empleada' => $empleada->getId()]));
  131.             }
  132.         }
  133.         return $this->renderForm('comun/fichaje/new.html.twig', [
  134.                     'fichaje' => $fichaje,
  135.                     'form' => $form,
  136.                     'empleada' => $empleada
  137.         ]);
  138.     }
  139.     #[Route('/{id}'name'app_comun_fichaje_show'methods: ['GET'])]
  140.     public function show(Fichaje $fichaje): Response {
  141.         return $this->render('comun/fichaje/show.html.twig', [
  142.                     'fichaje' => $fichaje,
  143.         ]);
  144.     }
  145.     #[Route('/form/{proyecto}/{empleada}'name'app_comun_fichaje_form_tarea'methods: ['GET''POST'])]
  146.     public function formTareaByProyecto(Proyecto $proyecto nullEmpleada $empleada null): Response {
  147.         $form $this->createForm(\App\Form\Comun\FichajeProyectoTareaType::class, null, array("empleada" => $empleada'proyecto' => $proyecto));
  148.         return $this->render('comun/fichaje/formTareas.html.twig', [
  149.                     'form' => $form->createView(),
  150.         ]);
  151.     }
  152.     #[Route('/delete/{id}'name'app_comun_fichaje_delete'methods: ['GET'])]
  153.     public function delete(Request $requestFichaje $fichajeFichajeRepository $fichajeRepository): Response {
  154.         $fichajeRepository->remove($fichaje);
  155.         $redireccion = new RedirectResponse('/');
  156.         $redireccion->setTargetUrl($_SERVER['HTTP_REFERER']);
  157.         return $redireccion;
  158.     }
  159.     #[Route('/comprobarHoras/{empleada}/{fecha}/{horas}'name'app_comun_fichaje_comprobar_horas'methods: ['GET''POST'])]
  160.     public function comprobarHoras(TranslatorInterface $translatorEmpleada $empleada$fecha null$horas null): Response //comprueba si las horas introducidas en un fichaje son posibles
  161.         $fichajeRepository $this->getDoctrine()->getRepository("App:Comun\Fichaje");
  162.         $tiempo $this->fichajeService->calcularHorasPorFecha($empleadadate_create_from_format("Y-m-d"$fecha));
  163.         $minutosTrabajados = ($tiempo['horas'] * 60) + $tiempo['minutos'];
  164.         $horas $this->fichajeService->convertirTiempoValorNumerico($horas);
  165.         $minutosTarea $horas 60;
  166.         $fichajes $fichajeRepository->fichajePorDia($empleada$fecha);
  167.         $totalTareasDia 0;
  168.         $posible false;
  169.         $mensaje "";
  170.         if (count($fichajes) != 0) {
  171.             foreach ($fichajes as $fichaje) {
  172.                 $totalTareasDia += $fichaje->getCantidadHoras();
  173.             }
  174.         }
  175.         $totalTareasDia *= 60;
  176.         $restante $minutosTrabajados $totalTareasDia;
  177.         if ($minutosTarea $restante) {
  178.             if ($restante 0)
  179.                 $restante 0;
  180.             $mensaje $translator->trans('fichaje.horasTareaAviso', ['%tiempo%' => $this->fichajeService->convertirMinutos($restante)]);
  181.             $posible false;
  182.         } else {
  183.             $posible true;
  184.         }
  185.         if (in_array('ROLE_ADMIN'$empleada->getUsuario()->getRoles(), true)) {
  186.             $admin true;
  187.         } else {
  188.             $admin false;
  189.         }
  190.         return new JsonResponse(['posible' => $posible'mensaje' => $mensaje'admin' => $admin]);
  191.     }
  192. }