src/Controller/CoreController.php line 35

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  8. use Symfony\Component\Form\FormError;
  9. use Vich\UploaderBundle\Handler\DownloadHandler;
  10. use App\Entity\Usuario;
  11. use App\Entity\CambiarPass;
  12. use App\Entity\ImageFile;
  13. use App\Entity\RegistroHorario;
  14. use App\Form\UsuarioType;
  15. use App\Form\ImageFileType;
  16. use App\Form\CambiarPassType;
  17. use App\Form\OpcionesType;
  18. use App\Repository\RegistroHorarioRepository;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  20. class CoreController extends AbstractController
  21. {
  22.     /**
  23.      * @Route("/", name="index")
  24.      */
  25.     public function index()
  26.     {
  27.       return $this->render('index.html.twig',[]);
  28.     }
  29.     /**
  30.      * @IsGranted("ROLE_USER")
  31.      * @Route("/escritorio", name="escritorio")
  32.      */
  33.     public function escritorio(RegistroHorarioRepository $registroHorarioRepository): Response
  34.     {
  35.         $today = new \DateTime();
  36.         $today_ini = clone $today;
  37.         $today_ini->setTime(0,0,0);
  38.         $registros_hoy $registroHorarioRepository->findByUserAndDateBeforeTime($this->getUser(),$today);
  39.         $ultimo_registro $registroHorarioRepository->findLastByUser($this->getUser());
  40.         $calendario $this->getUser()->getCalendarioLaboral();
  41.         if($calendario!=null){
  42.           //Check dias festivos
  43.           foreach($calendario->getDiasFestivos() as $df){
  44.             if($today_ini == $df->getFecha()){
  45.               $this->addFlash('danger','Atención, hoy es festivo' ) ;
  46.               break;
  47.             }
  48.           }
  49.           //Dia semana
  50.           if($today->format('w')<$calendario->getDiaInicioSemana()){
  51.             $this->addFlash('danger','Atención, aún no empezó tu semana laborable' ) ;
  52.           }else if($calendario->getDiaFinSemana() != && $today->format('w')>$calendario->getDiaFinSemana()){
  53.             $this->addFlash('danger','Atención, tu semana laboral ya terminó');
  54.           }
  55.         }
  56.         if(($ultimo_registro && $ultimo_registro->getFechaInicio() < $today_ini) && $ultimo_registro->getFechaFin()==null){
  57.           //Primero tenemos que cerrar el día de ayer
  58.           $this->addFlash("warning","Error, no se ha marcado una hora del último día (" $ultimo_registro->getFechaInicio()->format('d/m/Y') . "). Tienes que cerrar el día antes registrar una nueva entrada.");
  59.           return $this->redirectToRoute('cierreManual',['id'=>$ultimo_registro->getId()]);
  60.         }else{
  61.           //Escritorio
  62.           return $this->render('core/escritorio.html.twig', [
  63.               'registros_hoy' => $registros_hoy,
  64.               'calendario'=>$calendario
  65.           ]);
  66.         }
  67.     }
  68.     /**
  69.      * @IsGranted("ROLE_USER")
  70.      * @Route("/fichar", name="fichar")
  71.      */
  72.      public function fichar(RegistroHorarioRepository $registroHorarioRepository): Response
  73.      {
  74.        $today = new \DateTime();
  75.        $today_ini = new \DateTime();
  76.        $today_ini->setTime(0,0,0);
  77.        //Ultimo registro
  78.        $ur $registroHorarioRepository->findLastByUser($this->getUser());
  79.        //Si es de hoy comprobamos
  80.        if($ur>$today_ini){
  81.         if($ur->getFechaFin()==null){
  82.           //TODO: Error
  83.           die("Error, tienes que salir para volver a fichar hoy");
  84.         }
  85.        }
  86.        $registro = new RegistroHorario();
  87.        $registro->setFechaInicio($today);
  88.        $registro->setUsuario($this->getUser());
  89.        $em $this->getDoctrine()->getManager();
  90.        $em->persist($registro);
  91.        $em->flush();
  92.        $this->addFlash('success','Se ha registrado el inicio del día');
  93.        return $this->redirectToRoute('escritorio');
  94.      }
  95.      /**
  96.       * @IsGranted("ROLE_USER")
  97.       * @Route("/desfichar", name="desfichar")
  98.       */
  99.       public function desfichar(RegistroHorarioRepository $registroHorarioRepository): Response
  100.       {
  101.         $today = new \DateTime();
  102.         $today_ini = new \DateTime();
  103.         $today_ini->setTime(0,0,0);
  104.         //Ultimo registro
  105.         $registro $registroHorarioRepository->findLastByUser($this->getUser());
  106.         //Si es de hoy comprobamos
  107.         if($registro>$today_ini){
  108.          if($registro->getFechaFin()!=null){
  109.            //TODO: Error
  110.            die("Error, tienes que fichar primero");
  111.          }
  112.         }
  113.         $registro->setFechaFin($today);
  114.         $em $this->getDoctrine()->getManager();
  115.         $em->persist($registro);
  116.         $em->flush();
  117.         $this->addFlash('success','Se ha registrado el fin del día');
  118.         return $this->redirectToRoute('escritorio');
  119.       }
  120.     /**
  121.      * @IsGranted("ROLE_USER")
  122.      * @Route("/miperfil", name="miperfil")
  123.      */
  124.     public function miPerfil(Request $request): Response
  125.     {
  126.       if(!$this->getUser())return $this->redirectToRoute('login');
  127.       $usuario $this->getUser();
  128.       $form_user $this->createForm(UsuarioType::class, $usuario,['can_edit'=>true]);
  129.       $form_user->handleRequest($request);
  130.       if ($form_user->isSubmitted() && $form_user->isValid()) {
  131.         $em $this->getDoctrine()->getManager();
  132.         $usuario $form_user->getData();
  133.         $em->persist($usuario);
  134.         $em->flush();
  135.         $this->addFlash('success','Datos actualizados correctamente!');
  136.       }
  137.       return $this->render('core/miperfil.html.twig', [
  138.         'form_user'=>$form_user->createView()
  139.       ]);
  140.     }
  141.     /**
  142.      * @IsGranted("ROLE_USER")
  143.      * @Route("/cambiarpass", name="cambiarpass")
  144.      */
  145.      public function cambiarPass(Request $requestUserPasswordEncoderInterface $passwordEncoder): Response
  146.      {
  147.        $cambiarPass = new CambiarPass();
  148.        $usuario $this->getUser();
  149.        $form $this->createForm(CambiarPassType::class, $cambiarPass);
  150.        $form->handleRequest($request);
  151.        //Validada pass antigua mediante Assert\UserPassword
  152.        if ($form->isSubmitted() && $form->isValid()) {
  153.          $em $this->getDoctrine()->getManager();
  154.          $cambiarPass $form->getData();
  155.          $encodedPass $passwordEncoder->encodePassword($usuario,$cambiarPass->getNewPassword());
  156.          $usuario->setPassword($encodedPass);
  157.          $em->persist($usuario);
  158.          $em->flush($usuario);
  159.          $this->addFlash('success','Contraseña cambiada correctamente!');
  160.        }
  161.        return $this->render('core/cambiarpass.html.twig',[
  162.          'form'=>$form->createView()
  163.        ]);
  164.      }
  165.     /**
  166.      * @IsGranted("ROLE_USER")
  167.      * @Route("/opciones", name="opciones")
  168.      */
  169.      public function opciones(Request $request): Response
  170.      {
  171.         $usuario $this->getUser();
  172.         $form $this->createForm(OpcionesType::class, $usuario);
  173.         $form->handleRequest($request);
  174.         if ($form->isSubmitted() && $form->isValid()) {
  175.           $em $this->getDoctrine()->getManager();
  176.           $em->persist($usuario);
  177.           $em->flush();
  178.           $this->addFlash('success','Cambios guardados correctamente');
  179.         }
  180.         return $this->render('core/opciones.html.twig', [
  181.           'form'=>$form->createView()
  182.         ]);
  183.      }
  184.      /**
  185.       * @IsGranted("ROLE_USER")
  186.       * @Route("/img/{uniqueName}", name="imageHandler")
  187.       */
  188.      public function imageHandler(string $uniqueNameDownloadHandler $downloadHandler)
  189.      {
  190.        $ifrepository $this->getDoctrine()->getRepository(ImageFile::class);
  191.        $image $ifrepository->findOneByImageName($uniqueName);
  192.        if($image==null){
  193.          throw $this->createNotFoundException('No se pudo encontrar la imagen');
  194.        }
  195.        return $this->downloadImageAction($image$downloadHandler);
  196.      }
  197.      public function downloadImageAction(ImageFile $imageDownloadHandler $downloadHandler): Response
  198.      {
  199.         return $downloadHandler->downloadObject($image$fileField 'imageFile'$objectClass null$fileName null$forceDownload false);
  200.      }
  201. }