src/Controller/Comun/FichajeDiarioController.php line 110

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Comun;
  3. use App\Entity\Comun\FichajeDiario;
  4. use App\Form\Comun\FichajeDiarioType;
  5. use App\Repository\Comun\FichajeDiarioRepository;
  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 Symfony\Component\HttpFoundation\JsonResponse;
  11. use App\Entity\Admin\Empleada;
  12. use App\Entity\Admin\Globales;
  13. use Symfony\Component\HttpFoundation\RedirectResponse;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. use App\Service\FichajeService;
  17. #[Route('/comun/fichajediario')]
  18. class FichajeDiarioController extends AbstractController {
  19.     private $fichajeService;
  20.     public function __construct(FichajeService $fichajeService) {
  21.         $this->fichajeService $fichajeService;
  22.     }
  23.     #[Route('/'name'app_comun_fichaje_diario_index'methods: ['GET'])]
  24.     public function index(RequestStack $rsFichajeDiarioRepository $fichajeDiarioRepository): Response {
  25.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  26.         $session $rs->getSession();
  27.         $filtro unserialize($session->get('filtro.fichajediario'));
  28.         $datos $this->fichajesPorEmpleada($empleada$filtro);
  29.         return $this->render('comun/fichaje_diario/fichajeEmpleada.html.twig', [
  30.                     'datos' => $datos,
  31.                     'empleada' => $empleada,
  32.         ]);
  33.     }
  34.     #[Route('/fichajes/{empleada}'name'app_comun_fichaje_diario_empleada'methods: ['GET'])]
  35.     public function fichajeEmpleada(RequestStack $rsEmpleada $empleadaFichajeDiarioRepository $fichajeDiarioRepository): Response {
  36.         $session $rs->getSession();
  37.         $filtro unserialize($session->get('filtro.fichajediario'));
  38.         return $this->render('comun/fichaje_diario/fichajeEmpleada.html.twig', [
  39.                     'datos' => $this->fichajesPorEmpleada($empleada$filtro),
  40.                     'empleada' => $empleada,
  41.         ]);
  42.     }
  43.     public function fichajesPorEmpleada(Empleada $empleada$filtro) {
  44.         $fichajeDiarioRepository $this->getDoctrine()->getRepository("App:Comun\FichajeDiario");
  45.         $datos = [];  
  46.         $fichajesFecha=$fichajeDiarioRepository->fichajePorEmpleada($empleada$filtro);
  47.         foreach ($fichajesFecha as $fichajeFecha) {
  48.             $datos[] = $this->fichajeService->calcularHorasPorFecha($empleadadate_create_from_format('Y-m-d'$fichajeFecha['fecha']));
  49.         }
  50.         return $datos;
  51.     }
  52.     #[Route('/detalles/{fecha}/{empleada}'name'app_comun_fichaje_diario_detalles_dia'methods: ['GET'])]
  53.     public function detallesDia(Empleada $empleada$fechaFichajeDiarioRepository $fichajeDiarioRepository): Response {
  54.         $fichajes $fichajeDiarioRepository->fichajePorDia($empleada$fecha);
  55.         return $this->render('comun/fichaje_diario/detallesDia.html.twig', [
  56.                     'fichaje_diarios' => $fichajes,
  57.                     'empleada' => $empleada,
  58.                     'fecha' => $fecha,
  59.         ]);
  60.     }
  61.     #[Route('/new/fichaje/'name'app_comun_fichaje_diario_new'methods: ['GET''POST'])]
  62.     public function new(Request $requestFichajeDiarioRepository $fichajeDiarioRepositoryTranslatorInterface $translator): Response {
  63.         $fichajeDiario = new FichajeDiario();
  64.         $form $this->createForm(FichajeDiarioType::class, $fichajeDiario);
  65.         $form->handleRequest($request);
  66.         $mensaje "";
  67.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  68.         $ultimoFichaje $fichajeDiarioRepository->findOneBy(['empleada' => $empleada], ['fecha' => 'DESC']);
  69.         $fichajeDiario->setEmpleada($empleada);
  70.         if (!is_null($ultimoFichaje)) {
  71.             if ($ultimoFichaje->getEntrada()) {
  72.                 $fichajeDiario->setEntrada(false);
  73.                 $mensaje "fichajeDiario.salida";
  74.             } else {
  75.                 $fichajeDiario->setEntrada(true);
  76.                 $mensaje "fichajeDiario.entrada";
  77.             }
  78.         } else {
  79.             $fichajeDiario->setEntrada(true);
  80.             $mensaje "fichajeDiario.entrada";
  81.         }
  82.         if ($this->horasFichajeActivado()) {
  83.             $fichajeDiario->setFecha(date_create('now'));
  84.             $fichajeDiarioRepository->add($fichajeDiario);
  85.         } else {
  86.             $mensaje "fichajeDiario.finalizado";
  87.         }
  88.         $mensaje $translator->trans($mensaje);
  89.         return new JsonResponse(['mensaje' => $mensaje]);
  90.     }
  91.     #[Route('/aviso'name'app_comun_fichaje_diario_aviso'methods: ['GET'])]
  92.     public function avisoFichar(FichajeDiarioRepository $fichajeDiarioRepositoryTranslatorInterface $translator): Response {
  93.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  94.         $ultimoFichaje $fichajeDiarioRepository->findOneBy(['empleada' => $empleada], ['fecha' => 'DESC']);
  95.         $aviso false;
  96.         if (!is_null($ultimoFichaje)) {
  97.             if (!$ultimoFichaje->getEntrada()) {
  98.                 $aviso true;
  99.             }
  100.         } else {
  101.             $aviso true;
  102.         }
  103.         return new JsonResponse(['aviso' => $aviso'iniciar' => $translator->trans("fichajeDiario.iniciar"), 'finalizar' => $translator->trans("fichajeDiario.finalizar"), 'recordatorio' => $translator->trans("fichajeDiario.recordatorio"), 'jornada' => $translator->trans("fichajeDiario.jornada")]);
  104.     }
  105.     public function horasFichajeActivado() {
  106.         $globalesRepository $this->getDoctrine()->getRepository("App:Admin\Globales");
  107.         $global $globalesRepository->findOneby([]);
  108.         $activado false;
  109.         $empleada $this->get('security.token_storage')->getToken()->getUser()->getEmpleada();
  110.         if (!is_null($empleada)) {
  111.             $fechaActual date_create('now');
  112.             $dia $fechaActual->format("Y-m-d");
  113.             $fechaInicio date_create_from_format('Y-m-d H:i:s'$dia " " $global->getHoraInicio()->format('H:i:s'));
  114.             $fechaFin date_create_from_format('Y-m-d H:i:s'$dia " " $global->getHoraFin()->format('H:i:s'));
  115.             if ($fechaActual >= $fechaInicio && $fechaActual <= $fechaFin) {
  116.                 $activado true;
  117.             }
  118.         }
  119.         return $activado;
  120.     }
  121.     #[Route('/horas/activado'name'app_comun_fichaje_diario_activado'methods: ['GET'])]
  122.     public function horasFichajeActivadoJson(): Response {
  123.         return new JsonResponse(['activado' => $this->horasFichajeActivado()]);
  124.     }
  125.     #[Route('/{id}'name'app_comun_fichaje_diario_show'methods: ['GET'])]
  126.     public function show(FichajeDiario $fichajeDiario): Response {
  127.         return $this->render('comun/fichaje_diario/show.html.twig', [
  128.                     'fichaje_diario' => $fichajeDiario,
  129.         ]);
  130.     }
  131.     #[Route('/{id}/edit'name'app_comun_fichaje_diario_edit'methods: ['GET''POST'])]
  132.     public function edit(Request $requestFichajeDiario $fichajeDiarioFichajeDiarioRepository $fichajeDiarioRepositoryTranslatorInterface $translator): Response {
  133.         $form $this->createForm(FichajeDiarioType::class, $fichajeDiario, array("horas" => $this->arrayHorasFichaje()));
  134.         $form->get("hora")->setData($fichajeDiario->getFecha());
  135.         $form->handleRequest($request);
  136.         $global $this->getDoctrine()->getRepository("App:Admin\Globales")->findOneby([]);
  137.         $mensaje "";
  138.         if ($form->isSubmitted() && $form->isValid()) {
  139.             $hora $form->get("hora")->getData();
  140.             if ($hora >= $global->getHoraInicio() && $hora $global->getHoraFin()) {
  141.                 $hora $hora->format("H:i:s");
  142.                 $fechaVieja $fichajeDiario->getFecha();
  143.                 $fecha date_create_from_format('Y-m-d H:i:s'$fichajeDiario->getFecha()->format("Y-m-d") . " " $hora);
  144.                 $fichajeAnterior $fichajeDiarioRepository->fichajeAnterior($fichajeDiario);
  145.                 if (!is_null($fichajeAnterior)) {
  146.                     $fichajeAnterior $fichajeAnterior->getId();
  147.                 }
  148.                 $fichajeSiguiente $fichajeDiarioRepository->fichajeSiguiente($fichajeDiario);
  149.                 if (!is_null($fichajeSiguiente)) {
  150.                     $fichajeSiguiente $fichajeSiguiente->getId();
  151.                 }
  152.                 $fichajeDiario->setFecha($fecha);
  153.                 $fichajeDiarioRepository->add($fichajeDiario);
  154.                 $fichajeAnteriorNuevo $fichajeDiarioRepository->fichajeAnterior($fichajeDiario);
  155.                 if (!is_null($fichajeAnteriorNuevo)) {
  156.                     $fichajeAnteriorNuevo $fichajeAnteriorNuevo->getId();
  157.                 }
  158.                 $fichajeSiguienteNuevo $fichajeDiarioRepository->fichajeSiguiente($fichajeDiario);
  159.                 if (!is_null($fichajeSiguienteNuevo)) {
  160.                     $fichajeSiguienteNuevo $fichajeSiguienteNuevo->getId();
  161.                 }
  162.                 $fichajeDiario->setFecha($fechaVieja);
  163.                 $fichajeDiarioRepository->add($fichajeDiario);
  164.                 if ($fichajeAnterior == $fichajeAnteriorNuevo && $fichajeSiguiente == $fichajeSiguienteNuevo) {
  165.                     $fichajeDiario->setFecha($fecha);
  166.                     $fichajeDiarioRepository->add($fichajeDiario);
  167.                 } else {
  168.                     $mensaje $translator->trans("fichajeDiario.errorModificar");
  169.                 }
  170.             }
  171.             return new JsonResponse(['mensaje' => $mensaje'actualizar' => true]);
  172.         }
  173.         return $this->renderForm('comun/fichaje_diario/form.html.twig', [
  174.                     'fichaje_diario' => $fichajeDiario,
  175.                     'form' => $form,
  176.         ]);
  177.     }
  178.     #[Route('/{id}/delete'name'app_comun_fichaje_diario_delete'methods: ['GET''POST'])]
  179.     public function delete(FichajeDiario $fichajeDiarioFichajeDiarioRepository $fichajeDiarioRepositoryTranslatorInterface $translator): Response {
  180.         // $cantidad=count( $fichajeDiarioRepository->fichajePorDia($fichajeDiario->getEmpleada(), $fichajeDiario->getFecha()->format("y-m-d")));
  181.         $fichajeDiarioRepository->remove($fichajeDiario);
  182.         $fichajeSiguiente $fichajeDiarioRepository->fichajeSiguiente($fichajeDiario);
  183.         if (!is_null($fichajeSiguiente) && !$fichajeSiguiente->getEntrada()) {
  184.             $fichajeDiarioRepository->remove($fichajeSiguiente);
  185.         }
  186.         //     return new JsonResponse(['exito' => $cantidad, 'error' => $translator->trans('fichajeDiario.mensajeError')]);
  187.         return new JsonResponse(['exito' => $translator->trans('fichajeDiario.mensajeEliminar'), 'error' => $translator->trans('fichajeDiario.mensajeError')]);
  188.     }
  189.     #[Route('/nuevo/{empleada}/{dia}'name'app_comun_fichaje_diario_nuevo'methods: ['GET''POST'])]
  190.     public function nuevo(Request $requestEmpleada $empleada$diaFichajeDiarioRepository $fichajeDiarioRepositoryTranslatorInterface $translator): Response {
  191.         $fichajeEntrada = new FichajeDiario();
  192.         $fichajeSalida = new FichajeDiario();
  193.         $form $this->createForm(FichajeDiarioType::class, $fichajeEntrada, array("horas" => $this->arrayHorasFichaje()));
  194.         $form->handleRequest($request);
  195.         $global $this->getDoctrine()->getRepository("App:Admin\Globales")->findOneby([]);
  196.         $mensaje "";
  197.         if ($form->isSubmitted() && $form->isValid()) {
  198.             if ($form->get("hora")->getData() >= $global->getHoraInicio() && $form->get("hora")->getData() < $global->getHoraFin()) {
  199.                 $hora $form->get("hora")->getData()->format("H:i");
  200.                 $fecha date_create_from_format('Y-m-d H:i'$dia " " $hora);
  201.                 $fecha2 date_create_from_format('Y-m-d H:i'$dia " " $hora);
  202.                 $fecha2->modify("+5 minute");
  203.                 $fichajeEntrada->setEmpleada($empleada);
  204.                 $fichajeEntrada->setFecha($fecha);
  205.                 $fichajeEntrada->setEntrada(true);
  206.                 $fichajeSalida->setEmpleada($empleada);
  207.                 $fichajeSalida->setFecha($fecha2);
  208.                 $fichajeSalida->setEntrada(false);
  209.                 $fichajeAnteriorEntrada $fichajeDiarioRepository->fichajeAnterior($fichajeEntrada);
  210.                 $fichajeAnteriorSalida $fichajeDiarioRepository->fichajeAnterior($fichajeSalida);
  211.                 if ($this->comprobarSiFichajeNewPosible($fichajeAnteriorEntrada$fichajeAnteriorSalida)) {
  212.                     $fichajeDiarioRepository->add($fichajeEntrada);
  213.                     $fichajeDiarioRepository->add($fichajeSalida);
  214.                 } else {
  215.                     $mensaje $translator->trans("fichajeDiario.errorModificar");
  216.                 }
  217.                 return new JsonResponse(['mensaje' => $mensaje'actualizar' => true]);
  218.             }
  219.         }
  220.         return $this->renderForm('comun/fichaje_diario/form.html.twig', [
  221.                     'form' => $form,
  222.         ]);
  223.     }
  224.     #[Route('/newfichajefecha/{empleada}'name'app_comun_fichaje_diario_nuevo_fecha'methods: ['GET''POST'])]
  225.     public function nuevoFichajeFecha(Request $requestEmpleada $empleadaFichajeDiarioRepository $fichajeDiarioRepositoryTranslatorInterface $translator): Response {
  226.         $fichajeEntrada = new FichajeDiario();
  227.         $fichajeEntrada->setFecha(date_create('now'));
  228.         $fichajeSalida = new FichajeDiario();
  229.         $form $this->createForm(\App\Form\Comun\FichajeDiarioFechaType::class, $fichajeEntrada, array("horas" => $this->arrayHorasFichaje()));
  230.         $form->handleRequest($request);
  231.         $error false;
  232.         $mensaje "";
  233.         if ($form->isSubmitted() && $form->isValid()) {
  234.             $fecha $fichajeEntrada->getFecha()->format("Y-m-d");
  235.             $horaInicio $form->get("horaInicio")->getData()->format("H:i");
  236.             $horaFin $form->get("horaFin")->getData()->format("H:i");
  237.             $fechaEntrada date_create_from_format('Y-m-d H:i'$fecha " " $horaInicio);
  238.             $fechaSalida date_create_from_format('Y-m-d H:i'$fecha " " $horaFin);
  239.             $fichajeEntrada->setEmpleada($empleada);
  240.             $fichajeEntrada->setFecha($fechaEntrada);
  241.             $fichajeEntrada->setEntrada(true);
  242.             $fichajeSalida->setEmpleada($empleada);
  243.             $fichajeSalida->setFecha($fechaSalida);
  244.             $fichajeSalida->setEntrada(false);
  245.             $fichajeAnteriorEntrada $fichajeDiarioRepository->fichajeAnterior($fichajeEntrada);
  246.             $fichajeAnteriorSalida $fichajeDiarioRepository->fichajeAnterior($fichajeSalida);
  247.             if ($this->comprobarSiFichajeNewPosible($fichajeAnteriorEntrada$fichajeAnteriorSalida)) {
  248.                 $fichajeDiarioRepository->add($fichajeEntrada);
  249.                 $fichajeDiarioRepository->add($fichajeSalida);
  250.             } else {
  251.                 $mensaje $translator->trans("fichajeDiario.errorModificar");
  252.             }
  253.             $dataLink $this->generateUrl('app_comun_fichaje_diario_detalles_dia', ['fecha' => $fichajeEntrada->getFecha()->format("Y-m-d"), 'empleada' => $fichajeEntrada->getEmpleada()->getId()]);
  254.             $dataHoras $this->generateUrl('app_comun_fichaje_diario_calcular_horas', ['fecha' => $fichajeEntrada->getFecha()->format("Y-m-d"), 'empleada' => $fichajeEntrada->getEmpleada()->getId()]);
  255.             $tiempo $this->fichajeService->calcularHorasPorFecha($fichajeEntrada->getEmpleada(), $fichajeEntrada->getFecha());
  256.             return new JsonResponse(['mensaje' => $mensaje'actualizar' => false'fecha' => $fichajeEntrada->getFecha()->format($translator->trans('comun.fechaFormato')), 'dataLink' => $dataLink'dataHoras' => $dataHoras'tiempo' => $tiempo]);
  257.         }
  258.         return $this->renderForm('comun/fichaje_diario/formFecha.html.twig', [
  259.                     'fichaje_diario' => $fichajeEntrada,
  260.                     'form' => $form,
  261.         ]);
  262.     }
  263.     public function arrayHorasFichaje() {
  264.         $globales $this->getDoctrine()->getRepository("App:Admin\Globales")->findOneby([]);
  265.         $horas = [];
  266.         $horaInicio intval($globales->getHoraInicio()->format("H"));
  267.         $horaFin intval($globales->getHoraFin()->format("H"));
  268.         for ($i $horaInicio$i $horaFin$i++) {
  269.             $horas[] = $i;
  270.         }
  271.         return $horas;
  272.     }
  273.     public function comprobarSiFichajeNewPosible($fichajeAnteriorEntrada$fichajeAnteriorSalida) {
  274.         $posible false;
  275.         if (is_null($fichajeAnteriorSalida) && is_null($fichajeAnteriorEntrada)) {
  276.             $posible true;
  277.         } else {
  278.             if (!is_null($fichajeAnteriorEntrada)) {
  279.                 if (!$fichajeAnteriorEntrada->getEntrada()) {
  280.                     if (!is_null($fichajeAnteriorSalida)) {
  281.                         if ($fichajeAnteriorEntrada->getId() == $fichajeAnteriorSalida->getId()) {
  282.                             $posible true;
  283.                         }
  284.                     }
  285.                 }
  286.             }
  287.         }
  288.         return $posible;
  289.     }
  290.     #[Route('/calcularHorasJson/{fecha}/{empleada}'name'app_comun_fichaje_diario_calcular_horas'methods: ['GET''POST'])]
  291.     public function calcularHorasJson($fechaEmpleada $empleada,): Response {
  292.         return new JsonResponse(['tiempo' => $this->fichajeService->calcularHorasPorFecha($empleadadate_create_from_format("Y-m-d"$fecha))]);
  293.     }
  294. }