src/Controller/UserController.php line 377

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\EventLog;
  4. use App\Entity\Plant;
  5. use App\Entity\Position;
  6. use App\Entity\Role;
  7. use App\Entity\SituationType;
  8. use App\Entity\Supplier;
  9. use App\Entity\SupplierStatus;
  10. use App\Entity\TypeEventLog;
  11. use App\Entity\User;
  12. use App\Service\Notifications;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  18. use Symfony\Component\Routing\Annotation\Route;
  19. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  20. use Symfony\Component\Security\Http\Authentication\UserAuthenticatorInterface;
  21. use App\Security\LoginFormAuthenticator;
  22. use Twig\Environment;
  23. /**
  24.  * @Route("/user")
  25.  */
  26. class UserController extends AbstractController
  27. {
  28.     private $entityManager;
  29.     private $passwordEncoder;
  30.     private $userAuthenticator;
  31.     private $authenticator;
  32.     private $twig;
  33.     // Constructor actualizado
  34.     public function __construct(
  35.         EntityManagerInterface $entityManager,
  36.         UserPasswordHasherInterface $passwordEncoder,
  37.         UserAuthenticatorInterface $userAuthenticator,
  38.         LoginFormAuthenticator $authenticator,
  39.         Environment $twig
  40.     ) {
  41.         $this->entityManager $entityManager;
  42.         $this->passwordEncoder $passwordEncoder;
  43.         $this->userAuthenticator $userAuthenticator;
  44.         $this->authenticator $authenticator;
  45.         $this->twig $twig;
  46.     }
  47.         /**
  48.          * @Route("/list", name="app_user")
  49.          */
  50.         public function index(): Response
  51.         {
  52.             $em $this->entityManager;
  53.             //$users = $em->getRepository(User::class)->listUsers();
  54.             $users $em->getRepository(User::class)->findAll();
  55.             $roles $em->getRepository(Role::class)->findAll();
  56.             return $this->render('user/index.html.twig', [
  57.                 'users' => $users,
  58.                 'roles' => $roles
  59.             ]);
  60.         }
  61.         /**
  62.          * @Route("/search", name="search_user")
  63.          */
  64.         public function searchUser(Request $request): Response
  65.         {
  66.             $em $this->entityManager;
  67.             $id $request->get('id');
  68.             $userExist $em->getRepository(User::class)->find($id);
  69.             $userData = [
  70.                 'nameUser' => $userExist->getNameUser(),
  71.                 'userEmail' => $userExist->getEmail(),
  72.                 'personName' => $userExist->getNamePerson(),
  73.                 'avatar' => $userExist->getAvatar(),
  74.                 'RoleName' => $userExist->getRolesString(),
  75.                 'RoleId' => $userExist->getRolesId(),
  76.                 'status' => $userExist->getActive(),
  77.             ];
  78.             $response = new Response(json_encode(['data' => $userData]));
  79.             $response->headers->set('Content-Type''application/json');
  80.             return $response;
  81.         }
  82.         /**
  83.          * @Route("/profile/{id}", name="profile_user")
  84.          */
  85.         public function profileUser($id): Response
  86.         {
  87.             $em $this->entityManager;
  88.             $userExist $em->getRepository(User::class)->find($id);
  89.             $roles $em->getRepository(Role::class)->findAll();
  90.             $userData = [
  91.                 'id' => $userExist->getId(),
  92.                 'nameUser' => $userExist->getNameUser(),
  93.                 'userEmail' => $userExist->getEmail(),
  94.                 'personName' => $userExist->getNamePerson(),
  95.                 'avatar' => $userExist->getAvatar(),
  96.                 'RoleName' => $userExist->getRolesString(),
  97.                 'RoleId' => $userExist->getRolesId(),
  98.                 'status' => $userExist->getActive(),
  99.             ];
  100.             return $this->render('user/profile.html.twig', [
  101.                 'users' => $userData,
  102.                 'roles' => $roles
  103.             ]);
  104.         }
  105.         /**
  106.          * @Route("/edit/{id}", name="load_user")
  107.          */
  108.         public function editUser($id): Response
  109.         {
  110.             $em $this->entityManager;
  111.             $userExist $em->getRepository(User::class)->find($id);
  112.             $roles $em->getRepository(Role::class)->findAll();
  113.             $userData = [
  114.                 'id' => $id,
  115.                 'nameUser' => $userExist->getName(),
  116.                 'userEmail' => $userExist->getEmail(),
  117.                 'personName' => $userExist->getNamePerson(),
  118.                 'avatar' => $userExist->getAvatar(),
  119.                 'password' => $userExist->getPassword(),
  120.                 'RoleName' => $userExist->getRolesString(),
  121.                 'RoleId' => $userExist->getRolesId(),
  122.                 'status' => $userExist->getActive(),
  123.             ];
  124.             return $this->render('user/edit.html.twig', [
  125.                 'users' => $userData,
  126.                 'roles' => $roles
  127.             ]);
  128.         }
  129.         /**
  130.          * @Route("/verify", name="verify_user")
  131.          */
  132.         public function verifyUser(Request $request): Response
  133.         {
  134.             $em $this->entityManager;
  135.             $username $request->get('userName');
  136.             $userExist $em->getRepository(User::class)->findOneBy(['email' => $username]);
  137.             if ($userExist) {
  138.                 $Active $userExist->isActive();
  139.             } else {
  140.                 $Active null;
  141.             }
  142.             $response = new Response(json_encode(['exists' => $userExist !== null'Active' => $Active]));
  143.             $response->headers->set('Content-Type''application/json');
  144.             return $response;
  145.         }
  146.         /**
  147.          * @Route("/edit/profile", name="edit_profile", methods={"POST"})
  148.          */
  149.         public function editProfile(Request $request)
  150.         {
  151.             $em $this->entityManager;
  152.             $id $this->getUser()->getId();
  153.             try {
  154.                 $userName $request->get('userNameEdit');
  155.                 $roles $request->get('rolesEdit');
  156.                 $personName $request->get('personNameEdit');
  157.                 $userEmail $request->get('userEmailEdit');
  158.                 $plant_select $request->get('plant_selectEdit');
  159.                 $avatar $request->get('imageEdit');
  160.                 $statusSwitch $request->get('statusSwitch');
  161.                 $status = ($statusSwitch === 'on') ? true false;
  162.                 $userExist $em->getRepository(User::class)->findOneBy(['nameUser' => $userName]);
  163.                 $plant $em->getRepository(Plant::class)->findOneBy(['id' => $plant_select]);
  164.                 if ($avatar) {
  165.                     $userExist->setAvatar($avatar);
  166.                 }
  167.                 if ($plant) {
  168.                     $this->removeAllRolesExceptSuperAdmin($userExist);
  169.                     $userExist->setActive($status);
  170.                     $userExist->setPlant($plant);
  171.                     foreach ($roles as $roleName) {
  172.                         $role $em->getRepository(Role::class)->findOneBy(['textName' => $roleName]);
  173.                         if ($role) {
  174.                             $userExist->addRole($role);
  175.                         }
  176.                     }
  177.                 }
  178.                 $userExist->setUpdatedAt(new \DateTime());
  179.                 $userExist->setNameUser($userName);
  180.                 $userExist->setEmail($userEmail);
  181.                 $userExist->setNamePerson($personName);
  182.                 $em->persist($userExist);
  183.                 $em->flush();
  184.                 $this->addFlash(
  185.                     'success',
  186.                     'El usuario fue actualizado exitosamente.'
  187.                 );
  188.             } catch (\Throwable $th) {
  189.                 $this->addFlash(
  190.                     'error',
  191.                     'Ocurrio un error al actualizar el usuario.'
  192.                 );
  193.             }
  194.             return $this->redirectToRoute('load_user', ['id' => $id]);
  195.         }
  196.         /**
  197.          * @Route("/edit", name="edit_user", methods={"POST"})
  198.          */
  199.         public function edit(Request $request)
  200.         {
  201.             $em $this->entityManager;
  202.             try {
  203.                 $userName $request->get('userNameEdit');
  204.                 $personName $request->get('personNameEdit');
  205.                 $userEmail $request->get('userEmailEdit');
  206.                 $avatar $request->get('imageEdit');
  207.                 $statusSwitch $request->get('statusSwitch');
  208.                 $status = ($statusSwitch === 'on') ? true false;
  209.                 $userExist $em->getRepository(User::class)->findOneBy(['nameUser' => $userName]);
  210.                 if ($avatar) {
  211.                     $userExist->setAvatar($avatar);
  212.                 }
  213.                 $userExist->setActive($status);
  214.                 $roles $request->get('rolesEdit');
  215.                 $currentRoles $userExist->getRolesName();
  216.                 foreach ($roles as $roleName) {
  217.                     $role $em->getRepository(Role::class)->findOneBy(['textName' => $roleName]);
  218.                     // Verifica si el usuario ya tiene asignado el rol
  219.                     if ($role && !in_array($role$currentRoles)) {
  220.                         $userExist->addRole($role);
  221.                     }
  222.                 }
  223.                 $userExist->setUpdateAt();
  224.                 $userExist->setNameUser($userName);
  225.                 $userExist->setEmail($userEmail);
  226.                 $userExist->setNamePerson($personName);
  227.                 $em->persist($userExist);
  228.                 $em->flush();
  229.                 $this->addFlash(
  230.                     'success',
  231.                     'El usuario fue actualizado exitosamente.'
  232.                 );
  233.             } catch (\Throwable $th) {
  234.                 $this->addFlash(
  235.                     'error',
  236.                     'Ocurrió un error al actualizar el usuario.'
  237.                 );
  238.             }
  239.             return $this->redirectToRoute('app_user');
  240.         }
  241.         /**
  242.          * @Route("/created", name="created_user", methods={"POST"})
  243.          */
  244.         public function created(Request $request): Response
  245.         {
  246.             $em $this->entityManager;
  247.             $userName $request->get('userName');
  248.             $personName $request->get('personName');
  249.             $userEmail $request->get('userEmail');
  250.             $plant_select $request->get('plant_select');
  251.             $idPosition $request->get('idPosition');
  252.             $avatar $request->get('image');
  253.             $password 1234;
  254.             $position $em->getRepository(Position::class)->findOneBy(['id' => $idPosition]);
  255.             $plant $em->getRepository(Plant::class)->findOneBy(['id' => $plant_select]);
  256.             $userExist $em->getRepository(User::class)->findOneBy(['nameUser' => $userName]);
  257.             if (!$userExist) {
  258.                 $userExist = new User();
  259.                 $userExist->setCreatedAt(new \DateTime());
  260.                 $userExist->setPassword($this->passwordEncoder->hashPassword(
  261.                     $userExist,
  262.                     $password
  263.                 ));
  264.             }
  265.             if ($avatar) {
  266.                 $userExist->setAvatar($avatar);
  267.             }
  268.             $userExist->setNameUser($userName);
  269.             $userExist->setEmail($userEmail);
  270.             $userExist->setPlant($plant);
  271.             $userExist->setPosition($position);
  272.             $userExist->setActive(1);
  273.             $userExist->setNamePerson($personName);
  274.             $roles $request->get('roles');
  275.             foreach ($roles as $roleName) {
  276.                 $role $em->getRepository(Role::class)->findOneBy(['textName' => $roleName]);
  277.                 if ($role) {
  278.                     $userExist->addRole($role);
  279.                 }
  280.             }
  281.             $em->persist($userExist);
  282.             $em->flush();
  283.             $this->addFlash(
  284.                 'success',
  285.                 'El usuario fue creado exitosamente.'
  286.             );
  287.             return $this->redirectToRoute('app_user');
  288.         }
  289.     /**
  290.      * @Route("/", name="register_provider", methods={"GET"})
  291.      */
  292.     public function showRegisterProviderForm(): Response
  293.     {
  294.         return $this->render('user/register_provider.html.twig');
  295.     }
  296.     /**
  297.      * @Route("/", name="register_provider_post", methods={"POST"})
  298.      */
  299.     public function registerProvider(Request $requestEntityManagerInterface $emNotifications $notifications): Response
  300.     {
  301.         $rut $request->get('rut');
  302.         $userName $request->get('userName');
  303.         $userEmail $request->get('userEmail');
  304.         $password $request->get('password');
  305.         $representativeDni $request->get('legalRepresentativeDni');
  306.         $fantasyName $request->get('fantasyName');
  307.         $representativeName $request->get('representativeName');
  308.         $existingSupplier $em->getRepository(Supplier::class)->findOneBy(['supplierDni' => $rut]);
  309.         if ($existingSupplier) {
  310.             $this->addFlash('error''Ya existe un proveedor registrado con este RUT.');
  311.             return $this->redirectToRoute('register_provider');
  312.         }
  313.         if (empty($userName)) {
  314.             $this->addFlash('error''El campo de nombre de usuario no puede estar vacío.');
  315.             return $this->redirectToRoute('register_provider');
  316.         }
  317.         $existingUser $em->getRepository(User::class)->findOneBy(['email' => $userEmail]);
  318.         if ($existingUser) {
  319.             $this->addFlash('error''Este correo ya se encuentra asociado a un usuario.');
  320.             return $this->redirectToRoute('register_provider');
  321.         }
  322.         $user = new User();
  323.         $user->setName($userName);
  324.         $user->setEmail($userEmail);
  325.         $user->setPassword($this->passwordEncoder->hashPassword($user$password));
  326.         $role $em->getRepository(Role::class)->find(3);
  327.         if ($role) {
  328.             $user->addRole($role);
  329.         }
  330.         $em->persist($user);
  331.         $em->flush();
  332.         $supplier = new Supplier();
  333.         $supplier->setUser($user);
  334.         $supplier->setSupplierDni($rut);
  335.         $supplier->setSupplierName($fantasyName);
  336.         $supplier->setCreatedAt();
  337.         $supplier->setContactEmailVal($userEmail);
  338.         $supplier->setActive(1);
  339.         $supplier->setEntityUser($user->getId());
  340.         $supplier->setRepresentativeDni($representativeDni);
  341.         $supplier->setRepresentativeName($representativeName);
  342.         $supplier->setBusinessName($userName);
  343.         $em->persist($supplier);
  344.         $em->flush();
  345.         $eventLog = new EventLog();
  346.         $eventLog->setCreatedAt();
  347.         $eventLog->setDescription(" se registro el usuario  N°: " $supplier->getId());
  348.         $eventLog->setTypeEntity("Supplier");
  349.         $eventLog->setUser($this->getUser());
  350.         $eventLog->setEntityId($supplier->getId());
  351.         $eventLog->setIndView(1);
  352.         $eventLog->setTypeEventLog($em->getRepository(TypeEventLog::class)->find(1));
  353.         $em->persist($eventLog);
  354.         $em->flush();
  355.         $situationType $em->getRepository(SituationType::class)->find(1);
  356.         $supplierStatus = new SupplierStatus();
  357.         $supplierStatus->setStartDate($supplier->getCreatedAt());
  358.         $supplierStatus->setSituationType($situationType);
  359.         $supplierStatus->setSupplier($supplier);
  360.         $supplierStatus->setComment('Inicial');
  361.         $supplierStatus->setEntityUser($user->getId());
  362.         $em->persist($supplierStatus);
  363.         $em->flush();
  364.         $eventLog = new EventLog();
  365.         $eventLog->setCreatedAt();
  366.         $eventLog->setDescription" se inicializo el proveedor proveedor N° " $supplier->getId() . " a " $situationType->getName());
  367.         $eventLog->setTypeEntity("SupplierStatus");
  368.         $eventLog->setUser($user);
  369.         $eventLog->setEntityId($supplierStatus->getId());
  370.         $eventLog->setIndView(1);
  371.         $eventLog->setTypeEventLog($em->getRepository(TypeEventLog::class)->find(1));
  372.         $em->persist($eventLog);
  373.         $em->flush();
  374.         $admins $em->getRepository(User::class)->getUserByRoleId(2true);
  375.         foreach ($admins as $admin) {
  376.             if (isset($admin['email'], $admin['name'])) {
  377.                 $subject 'Proveedor Ingresado en el Sistema';
  378.                 $message "
  379.                     Estimado/a " trim($admin['name']) . ",<br><br>
  380.                     Se ha ingresado un nuevo proveedor en el sistema.<br>
  381.                     Le invitamos a revisar la información del proveedor en el portal para verificar que esté completa y actualizar cualquier dato necesario.<br><br>
  382.                     Saludos cordiales.<br>
  383.                 ";
  384.                 $url $this->generateUrl('view_supplier', ['id' => $supplier->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  385.                 $htmlContents $this->twig->render('security/email.html.twig', [
  386.                     'title' => $subject,
  387.                     'messages' => $message,
  388.                     'url' => $url,
  389.                 ]);
  390.                 $notifications->newNotificationSystem($admin['email'], $subject$htmlContents);
  391.             }
  392.         }
  393.         $addressContraloria $em->getRepository(User::class)->find(97)->getEmail();
  394.         if ($addressContraloria) {
  395.             $subject 'Proveedor Registrado en Plataforma';
  396.             $message "
  397.                     Estimada Área Cumplimiento,<br><br>
  398.                     A continuacion se envian el nombre y rut de la empresa del proveedor registrado en plataforma de licitaciones. <br>
  399.                     <strong> Nombre: </strong> " $userName " <br>
  400.                     <strong> Rut: </strong> " $rut " <br><br>
  401.                     Saludos cordiales.<br>";
  402.             $url $this->generateUrl('supplier_add_document_external', ['supplierId' => $supplier->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  403.             $htmlContents $this->twig->render('security/email.html.twig', [
  404.                 'title' => $subject,
  405.                 'messages' => $message,
  406.                 'url' => $url,
  407.             ]);
  408.             $notifications->newNotificationSystem($addressContraloria$subject$htmlContents);
  409.         }
  410.         $this->addFlash('success''Usuario registrado exitosamente como Proveedor.');
  411.         $this->userAuthenticator->authenticateUser(
  412.             $user,
  413.             $this->authenticator,
  414.             $request
  415.         );
  416.         return $this->redirectToRoute('app_dash', ['rut' => $rut]);
  417.     }
  418.     /*****************************************************************************************/
  419.     }