src/Controller/RegistroController.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Area;
  4. use App\Entity\DatosUsuario;
  5. use App\Entity\Empresa;
  6. use App\Entity\Estado;
  7. use App\Entity\EstatusToken;
  8. use App\Entity\EstatusUsuario;
  9. use App\Entity\Municipio;
  10. use App\Entity\Solicitante;
  11. use App\Entity\SolicitanteTipo;
  12. use App\Entity\Usuario;
  13. use App\Entity\UsuarioConfirmacion;
  14. use App\Entity\UsuarioTipo;
  15. use App\Entity\UsuarioToken;
  16. use App\Service\Random;
  17. use Psr\Log\LoggerInterface;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  20. use Symfony\Component\HttpFoundation\JsonResponse;
  21. use Symfony\Component\HttpFoundation\RequestStack;
  22. //use Symfony\Component\HttpFoundation\Session\Session;
  23. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  24. use Symfony\Component\Mime\Address;
  25. use Symfony\Component\Notifier\Notification\Notification;
  26. use Symfony\Component\Notifier\NotifierInterface;
  27. use Symfony\Component\Notifier\Recipient\Recipient;
  28. use Symfony\Component\Routing\Annotation\Route;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  32. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  33. use Symfony\Component\Mailer\MailerInterface;
  34. use Symfony\Component\Mime\Email;
  35. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  36. use Symfony\Component\Mime\NamedAddress;
  37. /**
  38.  * @Route("/registro")
  39.  */
  40. class RegistroController extends AbstractController
  41. {
  42.     /**
  43.      * @Route("/", name="registro")
  44.      */
  45.     public function index()
  46.     {
  47.         $em $this->getDoctrine()->getManager();
  48.         $estados $em->getRepository(Estado::class)->findAll();
  49.         return $this->render('registro/index.html.twig', [
  50.             'estados' =>$estados
  51.         ]);
  52.     }
  53.     /**
  54.      * @Route("/municipios", name="registro_municipios", methods={"GET"})
  55.      */
  56.     public function municipios(Request $request)
  57.     {
  58.         $id_estado $request->get('idEstado');
  59.         $search $request->get('search');
  60.         $order =" order by m.municipio asc  ";
  61.         $condiciones ="";
  62.         if(!empty($search)){
  63.             $condiciones "  and m.municipio like :busqueda ";
  64.             $order ="";
  65.         }
  66.         if (!empty($id_estado)){
  67.             $em $this->getDoctrine()->getManager();
  68.             $dql "select "
  69.                 "       m.id, m.municipio "
  70.                 "  from App\Entity\EstadoMunicipio em "
  71.                 "  join em.municipio as m "
  72.                 "  where em.estado=:idEstado "
  73.                 $condiciones
  74.                 $order;
  75.             $query $em->createQuery($dql);
  76.             $query->setParameters([
  77.                 'idEstado'=>$id_estado,
  78.             ]);
  79.             if(!empty($search)){
  80.                 $query->setParameter('busqueda''%'.$search.'%');
  81.             }
  82.             return new JsonResponse($query->getArrayResult());
  83.         }
  84.         return new JsonResponse();
  85.     }
  86.     /**
  87.      * @Route("/nuevo", name="registro_nuevo", methods={"POST"})
  88.      */
  89.     public function nuevo(Request $requestLoggerInterface $logUserPasswordEncoderInterface $encoderRandom $randomMailerInterface $mailerParameterBagInterface $params)
  90.     {
  91.         $em $this->getDoctrine()->getManager();
  92.        
  93.         if ($request->isMethod('POST')) {
  94.             $curp $request->get('curp');
  95.             $nombre $request->get('nombre');
  96.             $apellido_paterno $request->get('apellido_paterno');
  97.             $apellido_materno $request->get('apellido_materno');
  98.             $estado $request->get('estado');
  99.             $municipio $request->get('municipio');
  100.             $colonia $request->get('colonia');
  101.             $cp $request->get('cp');
  102.             $direccion $request->get('direccion');
  103.             $celular $request->get('celular');
  104.             $telefono $request->get('telefono');
  105.             $correo $request->get('correo');
  106.             $contrasena trim($request->get('contrasena'));
  107.             $curpEntity $em->getRepository(Solicitante::class)->findOneBy(['curp'=>$curp]);
  108.             $usuarioEntity $em->getRepository(Usuario::class)->findOneBy(['email'=>$correo]);
  109.             if (!$curpEntity){
  110.                 if (!$usuarioEntity){
  111.                     $usuario = new Usuario();
  112.                     $encoded $encoder->encodePassword($usuario$contrasena);
  113.                     $usuario->setEmail($correo);
  114.                     $usuario->setRoles(['ROLE_VIRTUAL']);//rol de ventanilla virtual
  115.                     $usuario->setPassword($encoded);
  116.                     $usuario->setEstatusUsuario($em->find(EstatusUsuario::class, 3));//por confirmar
  117.                     $usuario->setUsuarioTipo($em->find(UsuarioTipo::class, 2));//virtual
  118.                     $em->persist($usuario);
  119.                     $dt2 = new \DateTime("+1 month");//vence en un mes el token
  120.                     $vence $dt2->format("Y-m-d");
  121.                     $token $random->generateToken();
  122.                     $usuarioToken = new UsuarioToken();
  123.                     $usuarioToken->setUsuario($usuario);
  124.                     $usuarioToken->setEstatusToken($em->find(EstatusToken::class, 1));//token activo
  125.                     $usuarioToken->setToken($token);
  126.                     $usuarioToken->setVence(new \DateTime($vence));
  127.                     $usuarioToken->setCreated(new \DateTime('now'));
  128.                     $em->persist($usuarioToken);
  129.                     $datosUsuario = new DatosUsuario();
  130.                     $datosUsuario->setUsuario($usuario);
  131.                     $datosUsuario->setArea(1);//area virtual
  132.                     $datosUsuario->setNombre($nombre);
  133.                     $datosUsuario->setApellidoPaterno($apellido_paterno);
  134.                     $datosUsuario->setApellidoMaterno($apellido_materno);
  135.                     $datosUsuario->setCorreo($correo);
  136.                     $em->persist($datosUsuario);
  137.                     $solicitante = new Solicitante();
  138.                     $solicitante->setNombre($nombre);
  139.                     $solicitante->setApellidoPaterno($apellido_paterno);
  140.                     $solicitante->setApellidoMaterno($apellido_materno);
  141.                     $solicitante->setCelular($celular);
  142.                     $solicitante->setTelefono($telefono);
  143.                     $solicitante->setCorreo($correo);
  144.                     $solicitante->setEstado($em->find(Estado::class, $estado));
  145.                     $solicitante->setMunicipio($em->find(Municipio::class, $municipio));
  146.                     $solicitante->setCalle($direccion);
  147.                     $solicitante->setColonia($colonia);
  148.                     $solicitante->setCp($cp);
  149.                     $solicitante->setCreated(new \DateTime('now'));
  150.                     $solicitante->setCurp($curp);
  151.                     $solicitante->setUsuario($usuario);
  152.                     $solicitante->setSolicitanteTipo($em->find(SolicitanteTipo::class, 2));//virtual
  153.                     $solicitante->setUsuarioVirtual($usuario);
  154.                     $em->persist($solicitante);
  155.                     $em->flush();
  156.                     $url $this->generateUrl(
  157.                         'registro_token',
  158.                         ['t' => $token],
  159.                         UrlGeneratorInterface::ABSOLUTE_URL
  160.                     );
  161.                     try {
  162.                         $nombre_de $params->get('sistema_empresa');
  163.                         $email = (new TemplatedEmail())
  164.                             ->from(new Address('contabilidad@iubeo.mx'$nombre_de))
  165.                             ->to(new Address($correo$nombre))
  166.                             ->subject('Confirmación de correo Ventanilla')
  167.                             ->htmlTemplate('registro/confirmacionCorreo.html.twig')
  168.                             ->context([
  169.                                 'url' => $url,
  170.                                 'url_token' => $url,
  171.                                 'usuario' => $nombre.' '.$apellido_paterno.' '.$apellido_materno
  172.                             ]);
  173.                         $mailer->send($email);
  174.                     } catch (\Exception $e){
  175.                         $log->critical($e->getMessage().' '.$e->getFile().' '.$e->getLine());
  176.                     }
  177.                 }else{
  178.                     $this->addFlash('warning''No es posible registrarse, el correo ingresado ya esta registrado en el sistema.');
  179.                     return $this->redirectToRoute('registro');
  180.                 }
  181.             }else{
  182.                 $this->addFlash('warning''El CURP ingresado ya esta registrado en el sistema, por favor verifique su curp');
  183.                 return $this->redirectToRoute('registro');
  184.             }
  185.             
  186.             return $this->redirectToRoute('registro_confirmar');
  187.         }
  188.     }
  189.     /**
  190.      * @Route("/confirmar", name="registro_confirmar", methods="GET")
  191.      */
  192.     public function confirmar(Request $request): Response
  193.     {
  194.         return $this->render('registro/confirmar.html.twig', [
  195.         ]);
  196.     }
  197.     /**
  198.      * @Route("/token", name="registro_token", methods="GET")
  199.      */
  200.     public function token(Request $requestRequestStack $requestStackNotifierInterface $notificacionesLoggerInterface $log): Response
  201.     {
  202.         $em $this->getDoctrine()->getManager();
  203.         $token trim($request->get('t'));
  204.         $usuario_token_entity $em->getRepository(UsuarioToken::class)->findOneBy(['token'=>$token'estatusToken'=>1]);
  205.         if($usuario_token_entity){
  206.             $usuario_confirmacion_entity = new UsuarioConfirmacion();
  207.             $usuario_confirmacion_entity->setUsuarioToken($usuario_token_entity);
  208.             $usuario_confirmacion_entity->setUrl($request->getUri());
  209.             $usuario_confirmacion_entity->setIp($request->getClientIp());
  210.             $usuario_confirmacion_entity->setCreated(new \DateTime('now'));
  211.             $em->persist($usuario_confirmacion_entity);
  212.             $usuario_token_entity->setEstatusToken($em->find(EstatusToken::class, 3));//confirmado
  213.             $usuario $em->find(Usuario::class, $usuario_token_entity->getUsuario()->getId());
  214.             $usuario->setEstatusUsuario($em->find(EstatusUsuario::class, 1));
  215.             $em->flush();
  216.             $session $requestStack->getSession();
  217.             // stores an attribute in the session for later reuse
  218.             $session->set('cuenta_confirmada'true);
  219.             $this->addFlash('success_confirmacion''Su correo ha sido confirmado correctamente, por favor inicie sesión.');
  220.             $solicitante $em->getRepository(Solicitante::class)->findOneBy(['usuarioVirtual'=>$usuario->getId()]);
  221.             try {
  222.                 $notification = (new Notification('Ventanilla Virtual, Gracias por registrarse, Ahora podrá realizar trámites en línea desde la comodidad de su hogar vuv.iubeo.mx'))
  223.                     ->content('')
  224.                     ->importance(Notification::IMPORTANCE_HIGH);
  225.                 $recipient = new Recipient(
  226.                     $solicitante->getCorreo(),
  227.                     '+52'.$solicitante->getCelular()
  228.                 );
  229.                 $notificaciones->send($notification$recipient);
  230.             } catch (\Exception $e){
  231.                 $log->critical($e->getMessage().' '.$e->getFile().' '.$e->getLine());
  232.             }
  233.             return $this->redirectToRoute('login');
  234.         }else{
  235.             return $this->redirect('/');
  236.         }
  237.     }
  238.     /**
  239.      * @Route("/cuenta_confirmada", name="registro_cuenta_confirmada", methods="GET")
  240.      */
  241.     public function cuenta_confirmada(Request $requestRequestStack $requestStack): Response
  242.     {
  243.         $session $requestStack->getSession();
  244.         $session->remove('cuenta_confirmada');
  245.         return new Response();
  246.     }
  247. }