src/Controller/Frontend/NuevoIngreso/AspirantePreregistroController.php line 240

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend\NuevoIngreso;
  3. use App\Entity\NuevoIngreso\Aspirante;
  4. use App\Entity\NuevoIngreso\AspRegistro;
  5. use App\Entity\NuevoIngreso\PlanesOfertados;
  6. use App\Entity\User;
  7. use App\Form\Backend\NuevoIngreso\AspiranteEditarType;
  8. use App\Form\NuevoIngreso\AspiranteType;
  9. use App\Form\NuevoIngreso\BuscaPreregistroCurpType;
  10. use App\Form\NuevoIngreso\BuscaPreregistroType;
  11. use App\Repository\NuevoIngreso\AspiranteRepository;
  12. use App\Repository\NuevoIngreso\AspRegistroRepository;
  13. use App\Repository\NuevoIngreso\PlanesOfertadosRepository;
  14. use App\Service\Mailer\Mailer;
  15. use App\Service\NuevoIngreso\AspiranteService;
  16. use App\Utils\FormErrorsSerializer;
  17. use Doctrine\Persistence\ManagerRegistry;
  18. use Qipsius\TCPDFBundle\Controller\TCPDFController;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  25. use App\Service\Aspirantes\Multiculturalidad as AspirateService;
  26. /**
  27.  * @Route("/public/aspirante")
  28.  */
  29. class AspirantePreregistroController extends AbstractController
  30. {
  31.     private $passwordHasher;
  32.     //STATUS 1, es para PREREGISTRO, para tomar en cuenta en fechas, etc.
  33.     private const STATUS 1;
  34.     /**
  35.      * @var ManagerRegistry
  36.      */
  37.     private $doctrine;
  38.     public function __construct(ManagerRegistry $doctrineUserPasswordHasherInterface $passwordHasher)
  39.     {
  40.         $this->doctrine $doctrine;
  41.         $this->passwordHasher $passwordHasher;
  42.     }
  43.     /**
  44.      * @Route("/new/{id}", name="frontend_aspirante_new", methods={"GET","POST"})
  45.      */
  46.     public function new(Request $requestPlanesOfertados $planMailer $mailerAspirateService $aspiranteServicePlanesOfertadosRepository $planesOfertadosRepository): Response
  47.     {
  48.         //Checamos si el plan en realidad se encuentra en las fechas de inicio y fin de preregistro, de acuerdo ala fecha/hora actual
  49.         if(!$planesOfertadosRepository->findPlanPorFecha($planself::STATUS)) {
  50.             $this->addFlash('error''El plan no se encuentra activo. No lo intente de nuevo.');
  51.             return $this->redirectToRoute('frontend_aspirante_nivel',  [ 'nivel' => $plan->getNivelPlanEstudios() ]);
  52.         }
  53.         $aspirante = new Aspirante();
  54.         $form $this->createForm(AspiranteType::class, $aspirante, [
  55.             'nivelPlan' => $plan->getNivelPlanEstudios()
  56.         ]);
  57.         $form->handleRequest($request);
  58.         if ($form->isSubmitted() && $form->isValid()) {
  59.             //Access to array collection form to aspRegistro to generate some fields
  60.             $data $form->getData();
  61.             //dd($plan->getPeriodoInicioPlan());
  62.             foreach ($data->getAspRegistros() as $formAspRegsitro)
  63.             {
  64.                 $formAspRegsitro->setNivelIngresar($plan->getNivelPlanEstudios());
  65.                 $formAspRegsitro->setPlanOfertado($plan);
  66.                 $formAspRegsitro->setClaveUnicaRegistro($aspiranteService->getRandomString(8$plan->getNivelPlanEstudios()));
  67.                 $formAspRegsitro->setPeriodoIngreso('2023B');
  68.             }
  69.             $entityManager $this->doctrine->getManager();
  70.             $entityManager->persist($aspirante);
  71.             $entityManager->flush();
  72.             //$mailer->enviarEmailAspirante($aspirante);
  73.             $this->addFlash('success''El Registro se guardó correctamente.');
  74.             return $this->redirectToRoute('frontend_aspirante_registro_finalizado',  [ "id" => $aspirante->getId() ]);
  75.         }
  76.         return $this->renderForm('frontend/aspirante/new.html.twig', [
  77.             'form' => $form,
  78.             'planOfertado' => $plan,
  79.             'accion' => 'new'
  80.         ]);
  81.     }
  82.     /**
  83.      * @Route("/registration-finished/{id}", name="frontend_aspirante_registro_finalizado")
  84.      */
  85.     public function registroFinalizado(Aspirante $aspirante)
  86.     {
  87.         return $this->render('frontend/aspirante/registro_finalizado.html.twig', [
  88.             'aspirante' => $aspirante
  89.         ]);
  90.     }
  91.     /**
  92.      * @Route("/edit/{id}/{plan}", name="frontend_aspirante_edit", methods={"GET","POST"})
  93.      */
  94.     public function edit(Request $requestAspirante $aspirantePlanesOfertados $planMailer $mailerAspRegistroRepository $aspRegistroRepository): Response
  95.     {
  96.         $existe $request->query->get('existe');
  97.         $form $this->createForm(AspiranteType::class, $aspirante, [
  98.             'nivelPlan' => $plan->getNivelPlanEstudios(), 'status' => self::STATUS
  99.         ]);
  100.         $form->handleRequest($request);
  101.         if ($form->isSubmitted() && $form->isValid()) {
  102.             //TODO Aqui antualizamos el Registro
  103.             $aspRegistro $aspRegistroRepository->findBy(['aspirante' =>$aspirante->getId()]);
  104.             $entityManager $this->doctrine->getManager();
  105.             //Validamos que ya exista un usuario para el aspirante, si no existe, lo creamos
  106.             if(!$aspirante->getUsuario()){
  107.                 $user = new User();
  108.                 $user->setEmail($aspirante->getCorreoElectronico());
  109.                 $user->setNombre($aspirante->getNombre());
  110.                 $user->setApellidos($aspirante->getApellidoPaterno() . ' ' $aspirante->getApellidoMaterno());
  111.                 $user->setRoles(["ROLE_VIOLETA""ROLE_BACKEND"]);
  112.                 $user->setActivo(true);
  113.                 $user->setFechaCreacion(new \DateTime());
  114.                 $user->setFechaActualizacion(new \DateTime());
  115.                 $user->setPassword('1234567890');
  116.                 $entityManager->persist($user);
  117.                 $aspirante->setUsuario($user);
  118.                 $aspirante->setFechaActualizacion(new \DateTime());
  119.                 $entityManager->persist($aspirante);
  120.                 $entityManager->flush();
  121.             }
  122.             // Actualizamos estado, fechaCreacion, fechaActualizacion en Multiculturalidad
  123.             // Actualizamos en AspRegistro
  124.             $aspRegistro[0]->setFechaCreacion(new \DateTime());
  125.             $aspRegistro[0]->setFechaActualizacion(new \DateTime());
  126.             $aspRegistro[0]->setEstado(1);
  127.             //$aspRegistro[0]->setCiclo(null);
  128.             $aspRegistro[0]->setFolioCeneval(null);
  129.             $aspRegistro[0]->setConsecutivoPlesxures(null);
  130.             $aspRegistro[0]->setGrupo('');
  131.             $aspRegistro[0]->setTurno(0);
  132.             $aspRegistro[0]->setReferencia('');
  133.             $aspRegistro[0]->setPeriodoIngreso('2024B');
  134.             $entityManager->flush();
  135.              $mailer->enviarEmailAspirante($aspirante);
  136.             $this->addFlash('success''El Registro se editó correctamente.');
  137.             return $this->redirectToRoute('frontend_aspirante_registro_finalizado',  [ "id" => $aspirante->getId() ]);
  138.         }
  139.         return $this->renderForm('frontend/aspirante/edit.html.twig', [
  140.             'form' => $form,
  141.             'planOfertado' => $plan,
  142.             'accion' => 'edit',
  143.             'existe' => $existe
  144.         ]);
  145.     }
  146.     /**
  147.      * @Route("/{id}/enviar-email", name="frontend_aspirante_enviar_email")
  148.      */
  149.     public function enviaEmail(Aspirante $aspiranteMailer $mailer)
  150.     {
  151.         if($aspirante)
  152.         {
  153.             $mailer->enviarEmailAspirante($aspirante);
  154.             $this->addFlash('success''Se ha enviado el correo satisfactoriamente.');
  155.         } else {
  156.             $this->addFlash('error''No se ha encontrado email.');
  157.         }
  158.         return $this->redirectToRoute('frontend_aspirante_registro_finalizado', [  'id'=> $aspirante->getId() ]);
  159.     }
  160.     /**
  161.      * @Route("/{id}/pdf", name="frontend_aspirante_pdf")
  162.      */
  163.     public function generaPDF(Aspirante $aspiranteAspRegistroRepository $aspRegistroRepository,TCPDFController $tcpdfAspiranteService $aspiranteService$projectDir)
  164.     {
  165.         $datosRegistro $aspRegistroRepository->findByAspirante($aspirante->getId());
  166.         if($datosRegistro)
  167.         {
  168.             $pdf $aspiranteService->generaRegistroPDF($tcpdf$aspirante$datosRegistro$projectDir);
  169.             //$pdf = $aspiranteService->generarPreregistroPDF($aspirante, $datosRegistro);
  170.             $pdf->Output('registroUAGro.pdf''D');
  171.         } else {
  172.             $this->addFlash('error''No se ha encontrado Preregistro con los datos proporcionados.');
  173.             return $this->redirectToRoute('frontend_aspirante_buscar_preregistro_curp');
  174.         }
  175.     }
  176.     /**
  177.      * @Route("/search-preregistration-curp", name="frontend_aspirante_buscar_preregistro_curp")
  178.      */
  179.     public function buscarPreregistroCurp(Request $requestAspiranteRepository $aspiranteRepositoryAspRegistroRepository $aspRegistroRepository): Response
  180.     {
  181.         $form $this->createForm(BuscaPreregistroCurpType::class, null);
  182.         $form->handleRequest($request);
  183.         if ($form->isSubmitted() && $form->isValid()) {
  184.             $formData $form->getData();
  185.             $aspirante $aspiranteRepository->findOneBy([
  186.                 'curp' => $formData['curp']
  187.             ]);
  188.             if ($aspirante) {
  189.                 $this->addFlash('success''Preregistro encontrado.');
  190.                 return $this->redirectToRoute('frontend_aspirante_registro_finalizado',  [ "id" => $aspirante->getId() ]);
  191.             } else {
  192.                 $this->addFlash('error''No se ha encontrado Preregistro con la CURP proporcionada.');
  193.                 return $this->redirectToRoute('frontend_aspirante_buscar_preregistro_curp');
  194.             }
  195.         }
  196.         return $this->renderForm('frontend/aspirante/buscar_preregistro_curp.html.twig', [
  197.             'form' => $form
  198.         ]);
  199.     }
  200.     /**
  201.      * @Route("/search-preregistration", name="frontend_aspirante_buscar_preregistro")
  202.      */
  203.     public function buscarPreregistro(Request $requestAspiranteRepository $aspiranteRepositoryAspRegistroRepository $aspRegistroRepository): Response
  204.     {
  205.         $form $this->createForm(BuscaPreregistroType::class, null);
  206.         // Obtenemos los valores enviados en el $request
  207.        // dd($request->request->all());
  208.        // dd($request->request->get('busca_preregistro')['curp']);
  209.         $curp $request->request->get('busca_preregistro')['curp'] ?? null;
  210.         if(isset($curp)){
  211.             // Buscamos datospor la CURP
  212.             $aspirante $aspiranteRepository->findOneBy([
  213.                 'curp' => $curp
  214.             ]);
  215.             $aspRegistro $aspRegistroRepository->findOneBy([
  216.                 'aspirante' => $aspirante,
  217.                 //'claveUnicaRegistro' => '3-4MM929E3'
  218.             ]);
  219.             return $this->renderForm('frontend/aspirante/resultado_preregistro_curp.html.twig', [
  220.                 'registro' => $aspRegistro,
  221.             ]);
  222.         /*    if ($aspRegistro) {
  223.                 $this->addFlash('success', 'Preregistro encontrado.');
  224.                 return $this->redirectToRoute('frontend_aspirante_edit',  [ 'id' => $aspirante->getId(), 'plan' => $aspRegistro->getPlanOfertado()->getId(),  'existe' => true ]);
  225.             }*/
  226.         }
  227.         $form->handleRequest($request);
  228.         if ($form->isSubmitted() && $form->isValid()) {
  229.             $formData $form->getData();
  230.             $aspirante $aspiranteRepository->findOneBy([
  231.                 'curp' => $formData['curp']
  232.             ]);
  233.             $aspRegistro $aspRegistroRepository->findOneBy([
  234.                 'aspirante' => $aspirante,
  235.                 'claveUnicaRegistro' => $formData['clur']
  236.             ]);
  237.             if ($aspRegistro) {
  238.                 $this->addFlash('success''Preregistro encontrado.');
  239.                 return $this->renderForm('frontend/aspirante/resultado_preregistro_curp.html.twig', [
  240.                     'registro' => $aspRegistro,
  241.                 ]);
  242.                // return $this->redirectToRoute('frontend_aspirante_edit',  [ 'id' => $aspirante->getId(), 'plan' => $aspRegistro->getPlanOfertado()->getId() ]);
  243.                 //return $this->redirectToRoute('frontend_aspirante_edit',  [ 'id' => $aspirante->getId(), 'plan' => $aspRegistro->getPlanOfertado()->getId() ]);
  244.             } else {
  245.                 $this->addFlash('error''No se ha encontrado Preregistro con los datos proporcionados.');
  246.                 return $this->redirectToRoute('frontend_aspirante_buscar_preregistro');
  247.             }
  248.         }
  249.         return $this->renderForm('frontend/aspirante/buscar_preregistro.html.twig', [
  250.             'form' => $form
  251.         ]);
  252.     }
  253.     /**
  254.      * @Route("/search-exist-preregistration/{curp}", name="frontend_aspirante_buscar_curp_preregistro")
  255.      */
  256.     public function buscarExistPreregistro(Request $request$curpAspiranteRepository $aspiranteRepositoryAspRegistroRepository $aspRegistroRepository): Response
  257.     {
  258.         $form $this->createForm(BuscaPreregistroType::class, null);
  259.         $form->handleRequest($request);
  260.         if ($form->isSubmitted() && $form->isValid()) {
  261.             $formData $form->getData();
  262.             $aspirante $aspiranteRepository->findOneBy([
  263.                 'curp' => $formData['curp']
  264.             ]);
  265.             $aspRegistro $aspRegistroRepository->findOneBy([
  266.                 'aspirante' => $aspirante,
  267.                 'claveUnicaRegistro' => $formData['clur']
  268.             ]);
  269.             if ($aspRegistro) {
  270.                 $this->addFlash('success''Preregistro encontrado.');
  271.                 return $this->redirectToRoute('frontend_aspirante_edit',  [ 'id' => $aspirante->getId(), 'plan' => $aspRegistro->getPlanOfertado()->getId() ]);
  272.             } else {
  273.                 $this->addFlash('error''No se ha encontrado Preregistro con los datos proporcionados.');
  274.                 return $this->redirectToRoute('frontend_aspirante_buscar_preregistro');
  275.             }
  276.         }
  277.         return $this->renderForm('frontend/aspirante/buscar_preregistro.html.twig', [
  278.             'form' => $form
  279.         ]);
  280.     }
  281.     // Creamos una accion para validar el correo electronico en la entidad Use
  282.     /**
  283.      * @Route("/validate-email", name="frontend_aspirante_validate_email", methods={"GET"})
  284.      */
  285.     public function validateEmail(Request $request): JsonResponse
  286.     {
  287.         $email $request->query->All();
  288.         $user $this->getDoctrine()->getRepository(User::class)->findOneBy(['email' => $email['correo']]);
  289.         if ($user) {
  290.             return new JsonResponse(['status' => 'success''message' => 'El correo electrónico ya se encuentra registrado, favor de ingresar otro correo'], 200);
  291.         }
  292.         return new JsonResponse(['status' => 'error''message' => 'El correo electrónico es válido'], 404);
  293.     }
  294. }