src/Controller/FirmaController.php line 35

  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  7. use App\Form\FormularioFirmaType;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use App\Repository\EmpresasRepository;
  10. use App\Repository\OficinasRepository;
  11. use App\Repository\CargosRepository;
  12. use App\Repository\LocalizacionRepository;
  13. use Symfony\Component\Mailer\MailerInterface;
  14. use Symfony\Component\Mime\Email;
  15. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  16. use App\Services\EmailService;
  17. use App\Entity\FirmasGeneradas;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Psr\Log\LoggerInterface;
  20. class FirmaController extends AbstractController
  21. {
  22.     private $emailService;
  23.     private $logger;
  24.     public function __construct(EmailService $emailServiceLoggerInterface $logger)
  25.     {
  26.         $this->emailService $emailService;
  27.         $this->logger $logger;
  28.     }
  29.     #[Route('/firma'name'app_firma')]
  30.     public function index(Request $requestSessionInterface $sessionEmpresasRepository $empresasRepositoryLocalizacionRepository $localizacionRepository OficinasRepository $oficinasRepositoryCargosRepository $cargosRepositoryEntityManagerInterface $entityManager): Response
  31.     {
  32.         $userInfo $session->get('user_info');
  33.         $accessToken $session->get('access_token');
  34.         if (!$accessToken) {
  35.             return $this->redirectToRoute('app_home');
  36.         }
  37.         if (!$userInfo) {
  38.             return $this->redirectToRoute('login');
  39.         }
  40.         $empresas $empresasRepository->findAll();
  41.         $oficinas $oficinasRepository->findAll();
  42.         $cargos $cargosRepository->findAll();
  43.         $localizacion $localizacionRepository->findAll();
  44.         $form $this->createForm(FormularioFirmaType::class, null, [
  45.             'empresas' => $empresas,
  46.             'localizacion' => $localizacion,
  47.             'oficinas' => $oficinas,
  48.             'cargos' => $cargos
  49.         ]);
  50.         $form->handleRequest($request);
  51.         $formDataArray = [];
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             $formData $form->getData();
  54.             // var_dump($formData);
  55.             // exit();
  56.             // Recojo los valores de los checkboxes
  57.             $idioma_es $formData['idioma_es'];
  58.             $idioma_ca $formData['idioma_ca'];
  59.             $idioma_en $formData['idioma_en'];
  60.             $localizacion $formData['localizacion'];
  61.             
  62.             $movil $formData['movil'];
  63.             // Eliminar todos los caracteres no numéricos
  64.             $movil preg_replace("/[^0-9]/"""$movil);
  65.             // Crear un array para guardar cada grupo de números
  66.             $movilFormatted = [];
  67.             // Agrupar los tres primeros caracteres
  68.             $movilFormatted[] = substr($movil03);
  69.             // Eliminar los primeros tres caracteres de la cadena original
  70.             $movil substr($movil3);
  71.             // Dividir el resto de los caracteres en grupos de dos
  72.             while (strlen($movil) > 0) {
  73.                 $movilFormatted[] = substr($movil02);
  74.                 $movil substr($movil2);
  75.             }
  76.             // Convertir el array en una cadena, separando cada grupo con un espacio
  77.             $movil implode(" "$movilFormatted);
  78.             $formDataArray = [
  79.                 'nombre' => utf8_encode($formData['nombre']),
  80.                 'empresa' => $formData['empresa']->getNombre(),
  81.                 'empresa_id' => $formData['empresa']->getId(),
  82.                 //URL WEB
  83.                 'url_web' => $formData['empresa']->getUrlWeb(),
  84.                 //URL FACEBOOK
  85.                 'url_facebook' => $formData['empresa']->getUrlFacebook(),
  86.                 //URL INSTAGRAM
  87.                 'url_instagram' => $formData['empresa']->getUrlInstagram(),
  88.                 //URL TWITTER
  89.                 'url_twitter' => $formData['empresa']->getUrlTwitter(),
  90.                 //URL WECHAT
  91.                 'url_wechat' => $formData['empresa']->getUrlWechat(),
  92.                                 
  93.                 'oficina' => $formData['oficina']->getNombre(),
  94.                 'oficina_id' => $formData['oficina']->getId(),
  95.                 'oficina_direccion' => $formData['oficina']->getDireccion(),
  96.                 'cargo' => $formData['cargo']->getNombre(),
  97.                 'cargo_id' => $formData['cargo']->getId(),
  98.                 // 'movil' => $formData['movil'],
  99.                 'movil' => $movil,
  100.                 'prefijo_movil' => $formData['prefijo_movil'],
  101.                 'tipo_firma' => $formData['tipo_firma'],
  102.                 'enviar_por_email' => $formData['enviar_por_email'],
  103.                 'correo_electronico' => $formData['correo_electronico'],
  104.                 // Agrego los idiomas al array de datos del formulario
  105.                 'idioma_es' => $idioma_es,
  106.                 'idioma_ca' => $idioma_ca,
  107.                 'idioma_en' => $idioma_en,
  108.             ];
  109.             ///###
  110.             // Recupera los datos del formulario de la sesión
  111.             $storedFormData $session->get('form_data');
  112.             // Si los datos del formulario que se están enviando son los mismos que los almacenados en la sesión,
  113.             // redirige al usuario a la página /generador
  114.             if ($storedFormData == $formDataArray) {
  115.                 return $this->redirectToRoute('app_generador_de_firmas');
  116.             }
  117.             // Almacena los datos del formulario en la sesión
  118.             $session->set('form_data'$formDataArray);
  119.             ///###
  120.             $oficinaId $formDataArray['oficina_id'];
  121.             $oficina $oficinasRepository->find($oficinaId);
  122.             $telefono $oficina->getTelefono();
  123.             $telefono2 $oficina->getTelefono2();
  124.             $codigo_postal $oficina->getCodigoPostal();
  125.             $formDataArray['codigo_postal'] = $codigo_postal;
  126.             $ciudad $oficina->getCiudad();
  127.             $formDataArray['ciudad'] = $ciudad;
  128.             $formDataArray['telefono'] = $telefono;
  129.             $formDataArray['telefono2'] = $telefono2;
  130.             $empresaId $formDataArray['empresa_id'];
  131.             $empresa $empresasRepository->find($empresaId);
  132.             
  133.             // Recojo el texto legal dependiendo de los idiomas seleccionados
  134.             $formDataArray['texto_legal_es'] = null;
  135.             if ($idioma_es) {
  136.                 $texto_legal $empresa->getTextoLegalEs();
  137.                 $formDataArray['texto_legal_es'] = $texto_legal;
  138.             }
  139.             $formDataArray['texto_legal_ca'] = null;
  140.             if ($idioma_ca) {
  141.                 $texto_legal $empresa->getTextoLegalCa();
  142.                 $formDataArray['texto_legal_ca'] = $texto_legal;
  143.             }
  144.             $formDataArray['texto_legal_en'] = null;
  145.             if ($idioma_en) {
  146.                 $texto_legal $empresa->getTextoLegalEn();
  147.                 $formDataArray['texto_legal_en'] = $texto_legal;
  148.             }
  149.             $enviarPorCorreo $formDataArray['enviar_por_email'];
  150.             $correo $formDataArray['correo_electronico'];
  151.             $tipo_firma $formDataArray['tipo_firma'];
  152.             $firmaGenerada = new FirmasGeneradas();
  153.             $firmaGenerada->setNombre($formDataArray['nombre']);
  154.             $firmaGenerada->setEmpresa($formDataArray['empresa']);
  155.             $firmaGenerada->setOficina($formDataArray['oficina']);
  156.             $firmaGenerada->setCargo($formDataArray['cargo']);
  157.             $firmaGenerada->setMovil($formDataArray['movil']);
  158.             $firmaGenerada->setTipoFirma($formDataArray['tipo_firma']);
  159.             $firmaGenerada->setEnviarPorEmail($formDataArray['enviar_por_email']);
  160.             $firmaGenerada->setCorreoElectronico($formDataArray['correo_electronico']);
  161.             $firmaGenerada->setIpUsuario($request->getClientIp());
  162.             $firmaGenerada->setFecha(new \DateTime());
  163.             $entityManager->persist($firmaGenerada);
  164.             $entityManager->flush();
  165.             if ($enviarPorCorreo == 1) {
  166.                 if ($tipo_firma == 0) {
  167.                     $emailBody $this->renderView('email/firma.html.twig', [
  168.                         'form_data' => $formDataArray,
  169.                     ]);
  170.                 }
  171.                 if ($tipo_firma == 1) {
  172.                     $emailBody $this->renderView('email/firma.html.twig', [
  173.                         'form_data' => $formDataArray,
  174.                     ]);
  175.                 }
  176.         $recipient $formDataArray['correo_electronico'];
  177.         
  178.         $this->logger->info('Enviando correo a: ' $recipient);
  179.         try {
  180.             $result $this->emailService->sendMail($recipient'Firma Vilaviniteca'$emailBody);
  181.             $this->logger->info('Correo enviado con éxito', ['result' => $result]);
  182.         } catch (\Exception $e) {
  183.             $this->logger->error('Error al enviar el correo: ' $e->getMessage());
  184.         }
  185.                 // echo $result;
  186.                 // exit();
  187.                 $this->addFlash('notice'$result);
  188.             }
  189.             if ($tipo_firma == 0) {
  190.                 return $this->render('firma/web/index.html.twig', [
  191.                     'controller_name' => 'FirmaController',
  192.                     'user_name' => $userInfo->getDisplayName(),
  193.                     'formulario_firma' => $form->createView(),
  194.                     'form_data' => $formDataArray
  195.                 ]);
  196.             }
  197.             if ($tipo_firma == 1) {
  198.                 return $this->render('firma/movil/index.html.twig', [
  199.                     'controller_name' => 'FirmaController',
  200.                     'user_name' => $userInfo->getDisplayName(),
  201.                     'formulario_firma' => $form->createView(),
  202.                     'form_data' => $formDataArray
  203.                 ]);
  204.             }
  205.         }
  206.         else{
  207.             echo "Error en el formulario";
  208.             foreach ($form->getErrors(true) as $error) {
  209.             echo $error->getMessage();
  210.             }
  211.             exit();
  212.             // return $this->redirectToRoute('app_home');
  213.             // exit();
  214.             // header('Location: https://firma.vilaviniteca.es');
  215.             // exit();
  216.         }
  217.     }
  218. }