src/Controller/PreInscripcionExpoController.php line 162

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Inscripcionexpo;
  4. use App\Entity\Colegio;
  5. use App\Entity\PreInscripcionExpo;
  6. use App\Form\PreInscripcionExpoType;
  7. use App\Form\PreInscripcionExpoEditType;
  8. use App\Form\BotonType;
  9. use App\Repository\PreInscripcionExpoRepository;
  10. use App\Service\ExcelHelper;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\String\Slugger\SluggerInterface;
  16. use App\Repository\InscripcionexpoRepository;
  17. use App\Service\Mensajes;
  18. use Symfony\Component\Form\FormError;
  19. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  20. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  21. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  22. use Symfony\Component\Validator\Validation;
  23. use Symfony\Component\Validator\Constraints\Email;
  24. /**
  25.  * @Route("/pre/inscripcion/expo")
  26.  */
  27. class PreInscripcionExpoController extends AbstractController
  28. {
  29.     /**
  30.      * @Route("/", name="app_pre_inscripcion_expo_index", methods={"GET", "POST"})
  31.      */
  32.     public function index(PreInscripcionExpoRepository $preInscripcionExpoRepositoryExcelHelper $excelHelperRequest $request): Response
  33.     {
  34.         $versión '2025';
  35.         $pre_incripcion_expos $preInscripcionExpoRepository->findBy(array('version'=>$versión'eliminado'=>0));
  36.         $form $this->createForm(BotonType::class);
  37.         
  38.         $form->handleRequest($request);
  39.         if ($form->isSubmitted() && $form->isValid()) {
  40.             $spreadsheet = new Spreadsheet();
  41.             $sheet $spreadsheet->getActiveSheet();
  42.             $sheet->setCellValue('A1''Id');
  43.             $sheet->setCellValue('B1''Colegio');
  44.             $sheet->setCellValue('C1''Nombre Solicitante');
  45.             $sheet->setCellValue('D1''Apellido Solicitante');
  46.             $sheet->setCellValue('E1''Rut Solicitante');
  47.             $sheet->setCellValue('F1''Email Solicitante');
  48.             $sheet->setCellValue('G1''Teléfono Solicitante');  
  49.             $sheet->setCellValue('H1''Cargo Solicitante');  
  50.             $sheet->setCellValue('I1''Día - Horario');
  51.             $sheet->setCellValue('J1''Medio transporte');
  52.             $sheet->setCellValue('K1''Cursos');
  53.             $sheet->setCellValue('L1''Número de asistentes');
  54.             $sheet->setCellValue('M1''Archivo adjunto');
  55.             $sheet->setCellValue('N1''Fecha');
  56.              $sheet->setCellValue('O1''rbd');
  57.             $sheet->setCellValue('P1''dependencia');
  58.             $i 2;
  59.             foreach ($pre_incripcion_expos as $pre_inscp_exp){
  60.                 $sheet->setCellValue('A' $i$pre_inscp_exp->getId());
  61.                 if ($pre_inscp_exp->getColegio()){
  62.                     $sheet->setCellValue('B' $i$pre_inscp_exp->getColegio()->getNombre());
  63.                     $sheet->setCellValue('O' $i$pre_inscp_exp->getColegio()->getId());
  64.                     if($pre_inscp_exp->getColegio()->getDependencia()){
  65.                         $sheet->setCellValue('P' $i$pre_inscp_exp->getColegio()->getDependencia()->getGrupo());
  66.                     }
  67.                 }else{
  68.                     $sheet->setCellValue('B' $i'--');
  69.                 }
  70.                 if ($pre_inscp_exp->getNombreSolicitante()){
  71.                     $sheet->setCellValue('C' $i$pre_inscp_exp->getNombreSolicitante());
  72.                 }else{
  73.                     $sheet->setCellValue('C' $i'--');
  74.                 }
  75.                 if ($pre_inscp_exp->getApellidoSolicitante()){
  76.                     $sheet->setCellValue('D' $i$pre_inscp_exp->getApellidoSolicitante());
  77.                 }else{
  78.                     $sheet->setCellValue('D' $i'--');
  79.                 }
  80.                 if ($pre_inscp_exp->getRutSolicitante()){
  81.                     $sheet->setCellValue('E' $i$pre_inscp_exp->getRutSolicitante());
  82.                 }else{
  83.                     $sheet->setCellValue('E' $i'--');
  84.                 }
  85.                 if ($pre_inscp_exp->getEmailSolicitante()){
  86.                     $sheet->setCellValue('F' $i$pre_inscp_exp->getEmailSolicitante());
  87.                 }else{
  88.                     $sheet->setCellValue('F' $i'--');
  89.                 }
  90.                 if ($pre_inscp_exp->getTelefonoSolicitante()){
  91.                     $sheet->setCellValue('G' $i$pre_inscp_exp->getTelefonoSolicitante());
  92.                 }else{
  93.                     $sheet->setCellValue('G' $i'--');
  94.                 }
  95.                 if ($pre_inscp_exp->getCargoSolicitante()){
  96.                     $sheet->setCellValue('H' $i$pre_inscp_exp->getCargoSolicitante());
  97.                 }else{
  98.                     $sheet->setCellValue('H' $i'--');
  99.                 }
  100.                 if ($pre_inscp_exp->getDiaHorario()){
  101.                     $sheet->setCellValue('I' $i$pre_inscp_exp->getDiaHorario());
  102.                 }else{
  103.                     $sheet->setCellValue('I' $i'--');
  104.                 }
  105.                 if ($pre_inscp_exp->getMedioTransporte()){
  106.                     $sheet->setCellValue('J' $i$pre_inscp_exp->getMedioTransporte());
  107.                 }else{
  108.                     $sheet->setCellValue('J' $i'--');
  109.                 }
  110.                 if ($pre_inscp_exp->getCursos()){
  111.                     $sheet->setCellValue('K' $i$pre_inscp_exp->getCursos());
  112.                 }else{
  113.                     $sheet->setCellValue('K' $i'--');
  114.                 }
  115.                 if ($pre_inscp_exp->getNumeroAsistentes()){
  116.                     $sheet->setCellValue('L' $i$pre_inscp_exp->getNumeroAsistentes());
  117.                 }else{
  118.                     $sheet->setCellValue('L' $i'--');
  119.                 }
  120.                 if ($pre_inscp_exp->getFile() != NULL){
  121.                     $sheet->setCellValue('M' $i'Sí');
  122.                 }else{
  123.                     $sheet->setCellValue('M' $i'No');
  124.                 }
  125.                 if ($pre_inscp_exp->getFecha()){
  126.                     $sheet->setCellValue('N' $i$pre_inscp_exp->getFecha());
  127.                 }else{
  128.                     $sheet->setCellValue('N' $i'--');
  129.                 }
  130.                 $i++;
  131.             }
  132.             $writer = new Xlsx($spreadsheet);
  133.             $fileName 'preinscripciones_expo.xlsx';
  134.             $temp_file tempnam(sys_get_temp_dir(), $fileName);
  135.             $writer->save($temp_file);
  136.             return $this->file($temp_file$fileNameResponseHeaderBag::DISPOSITION_INLINE);
  137.         }  
  138.         return $this->render('pre_inscripcion_expo/index.html.twig', [
  139.             'pre_inscripcion_expos' => $pre_incripcion_expos,
  140.             'form' => $form->createView(),
  141.         ]);
  142.     }
  143.     /**
  144.      * @Route("/new", name="app_pre_inscripcion_expo_new", methods={"GET", "POST"})
  145.      */
  146.     public function new(InscripcionexpoRepository $inscripcionexpoRepositoryExcelHelper $excelHelperRequest $requestPreInscripcionExpoRepository $preInscripcionExpoRepositorySluggerInterface $sluggerMensajes $mensajes): Response
  147.     {
  148.         $preInscripcionExpo = new PreInscripcionExpo();
  149.         $entityManager $this->getDoctrine()->getManager();
  150.         $form $this->createForm(PreInscripcionExpoType::class);
  151.         $version '2025';
  152.         $form->handleRequest($request);
  153.         if ($form->isSubmitted() && $form->isValid() && !$form->getErrors(true)->count()) {
  154.             $nombre_solicitante $form->get('nombreSolicitante')->getData();
  155.             $apellido_solicitante $form->get('apellidoSolicitante')->getData();
  156.             $rutSolicitante $form->get('rutSolicitante')->getData();
  157.             $correoSolicitante $form->get('correoSolicitante')->getData();
  158.             $telefonoSolicitante $form->get('telefonoSolicitante')->getData();
  159.             $cargoSolicitante $form->get('cargoSolicitante')->getData();
  160.             $colegio $form->get('colegio')->getData();
  161.             $otro_colegio json_decode($form->get('otroColegio')->getData());
  162.             $region $form->get('region')->getData();
  163.             $comuna $form->get('comuna')->getData();
  164.             $bloque $form->get('bloque')->getData();
  165.             $metodoTransporte $form->get('metodoTransporte')->getData();
  166.             $cantidadAsistentes $form->get('cantidadAsistentes')->getData();
  167.             $cursos $form->get('cursos')->getData();
  168.             $condiciones $form->get('condiciones')->getData();
  169.             if ($condiciones){
  170.                 $preInscripcionExpo = new PreInscripcionExpo();
  171.                 $preInscripcionExpo->setVersion($version);
  172.                 $preInscripcionExpo->setEliminado(0);
  173.                 $archivoFile $form->get('archivoAdjunto')->getData();
  174.                 if ($archivoFile) {
  175.                     $file $archivoFile;
  176.                     $filename $file->getPathname();
  177.                     if (!file_exists($filename)) {
  178.                         throw new \Exception('File does not exist');
  179.                     }
  180.                     $spreadsheet $excelHelper->readFile($filename);
  181.                     $data $excelHelper->createDataFromSpreadsheet($spreadsheet);
  182.                     $asistentes= array();
  183.                     $errores= array();
  184.                     foreach ($data as $hoja) {
  185.                         if(strtolower($hoja["columnNames"][0]) == "rut"
  186.                             && strtolower($hoja["columnNames"][1]) == "dv"
  187.                             && strtolower($hoja["columnNames"][2]) == "nombres"
  188.                             && strtolower($hoja["columnNames"][3]) == "primer apellido"
  189.                             && strtolower($hoja["columnNames"][4]) == "segundo apellido"
  190.                             && strtolower($hoja["columnNames"][5]) == "correo"
  191.                         ){
  192.                             //correcto
  193.                             foreach ($hoja["columnValues"] as $fila) {
  194.                                 if($fila[0] > ) {
  195.                                     //que el correo no está registrado
  196.                                     $inscripcion $entityManager->getRepository(Inscripcionexpo::class)->findOneBy(array('correo'=>$fila[5], 'version'=>$version));
  197.                                     if($inscripcion ){
  198.                                     } else {
  199.                                         $inscripcionexpo = new Inscripcionexpo();
  200.                                         $inscripcionexpo ->setRut($fila[0]."-".$fila[1]);
  201.                                         $inscripcionexpo ->setDv($fila[1]);
  202.                                         $inscripcionexpo ->setNombres($fila[2]);
  203.                                         $inscripcionexpo ->setPaterno($fila[3]);
  204.                                         $inscripcionexpo ->setMaterno($fila[4]);
  205.                                         $inscripcionexpo ->setCorreo($fila[5]);
  206.                                         $inscripcionexpo ->setVersion($version);
  207.                                         $inscripcionexpo ->setEnsayo(0);
  208.                                         $nombrecolegio '';
  209.                                         if ($colegio){
  210.                                             $inscripcionexpo->setColegio($colegio);
  211.                                             $nombrecolegio $colegio->getNombrecorto();
  212.                                         }
  213.                                         $inscripcionexpoRepository->add($inscripcionexpotrue);
  214.                                         $validator Validation::createValidator();
  215.                                         $constraints = new Email();
  216.                                         $violations $validator->validate($fila[5], $constraints);
  217.                                         if (count($violations) == 0) {
  218.                                         //PREINSCRIPCIÓN:
  219.                                             $mensaje '<!DOCTYPE html>
  220.                                         <html lang="es">
  221.                                         <head>
  222.                                             <meta charset="UTF-8">
  223.                                             <title>Expo Futuro Novato y Novata UC</title>
  224.                                         </head>
  225.                                         <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
  226.                                             <p>Te informamos que tu colegio o liceo ha confirmado su participación en la Expo Futuro Novato y Novata UC, que se desarrollará el 7, 8 y 9 de octubre en el Campus San Joaquín de la Pontificia Universidad Católica de Chile, y nos ha comentado que tú serás parte de su delegación.</p>
  227.                                             
  228.                                             <p>Esta es la feria de carreras universitarias más grande Chile, donde podrás conocer más de 80 stands de todas las carreras UC. También podrás descubrir sobre todas las oportunidades de acceso y financiamiento de tus estudios para la Admisión 2026, e informarte sobre los servicios que existen para quienes ingresan a nuestra casa de estudios. Además, tendrás la oportunidad de participar de cientos de charlas, recorridos guiados, talleres y otras actividades que se ofrecerán durante los tres días en que se realizará el evento.</p>
  229.                                             
  230.                                             <p>Tu colegio ya ha proporcionado algunos de tus datos, pero necesitamos que completes tu inscripción para que puedas recibir más información sobre el evento, y participar de los sorteos que haremos durante los días de la Expo. Además, al confirmar tus datos <strong>tendrás acceso a la plataforma donde podrás rendir un Test de Intereses Vocacionales<strong>, ofrecido in conjunto con el Preuniversitario UC. Esta es una herramienta que podrá ayudarte a reflexionar e informarte sobre las áreas de estudio en las que presentas mayor afinidad. Esperamos que te sea útil y luego puedas acercarte a conocer esas carreras en la Expo Futuro Novato y Novata UC, para tomar una decisión informada al momento de elegir una carrera de Educación Superior. Completa tus datos aquí. <a href="https://admision.uc.cl/informacion-para/futuro-estudiante-de-pregrado/expo-futuro-novato-y-novata/inscripcion-estudiantes/" style="color: #1a73e8;">https://admision.uc.cl/informacion-para/futuro-estudiante-de-pregrado/expo-futuro-novato-y-novata/inscripcion-estudiantes/</a>.</p>
  231.                                             
  232.                                             
  233.                                             <p>¡Te esperamos en la Expo!</p>
  234.                                             
  235.                                             <p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
  236.                                             Pontificia Universidad Católica de Chile</p>
  237.                                         </body>
  238.                                         </html>';
  239.                                         if($inscripcionexpo->getCorreo()){
  240.                                             $mensajes->enviar6Mensaje($fila[5], "¡Completa tus datos y ven a la Expo Futuro Novato y Novata UC!"$mensaje);
  241.                                         }
  242.                                         }
  243.                                     }
  244.                                     //agregar dato
  245.                                 }
  246.                             }
  247.                         }
  248.                         else {
  249.                             //error de archivo
  250.                             $form->addError(new FormError('el formato del archivo no coincide'));
  251.                             $preInscripcionExpo->setEstado('formato no coincide');
  252.                         }
  253.                     }
  254.                     $erroresColumnas = [];
  255.                     $columnasEsperadas = ['rut''dv''nombres''primer apellido''segundo apellido''correo'];
  256.                     $columnasArchivo array_map('strtolower'$hoja['columnNames']);
  257.                     foreach ($columnasEsperadas as $columna) {
  258.                         if (!in_array($columna$columnasArchivo)) {
  259.                             $erroresColumnas[] = "Falta la columna: $columna";
  260.                         }
  261.                     }
  262.                     if (!empty($erroresColumnas)) {
  263.                         $preInscripcionExpo->setEstado('formato no coincide');
  264.                         return $this->render('pre_inscripcion_expo/finalizar.html.twig', [
  265.                             'preInscripcionExpo' => $preInscripcionExpo,
  266.                             'erroresColumnas' => $erroresColumnas,
  267.                         ]);
  268.                     }
  269.                     //guardar archivo
  270.                     $originalFilename pathinfo($archivoFile->getClientOriginalName(), PATHINFO_FILENAME);
  271.                     $safeFilename $slugger->slug($originalFilename);
  272.                     $newFilename $safeFilename.'-'.uniqid().'.'.$archivoFile->guessExtension();
  273.                     try {
  274.                         $archivoFile->move(
  275.                             $this->getParameter('archivo_expoexcel_directory'),
  276.                             $newFilename
  277.                         );
  278.                     } catch (FileException $e) {
  279.                     }
  280.                     $preInscripcionExpo->setFile($newFilename);
  281.                 }
  282.                 $preInscripcionExpo->setRutSolicitante($rutSolicitante);
  283.                 $preInscripcionExpo->setNombreSolicitante($nombre_solicitante);
  284.                 $preInscripcionExpo->setApellidoSolicitante($apellido_solicitante);
  285.                 $preInscripcionExpo->setTelefonoSolicitante($telefonoSolicitante);
  286.                 $preInscripcionExpo->setCargoSolicitante($cargoSolicitante);
  287.                 $preInscripcionExpo->setEmailSolicitante($correoSolicitante);
  288.                 if ($otro_colegio == null){
  289.                     $preInscripcionExpo->setColegio($colegio);
  290.                 }else{
  291.                     $colegio_nuevo = new Colegio();
  292.                     $colegio_nuevo->setNombre($otro_colegio[0]);
  293.                     $colegio_nuevo->setRbd($otro_colegio[1]);
  294.                     $colegio_nuevo->setRegion($region);
  295.                     $colegio_nuevo->setComuna($comuna);
  296.                     $entityManager->persist($colegio_nuevo);
  297.                     $entityManager->flush();
  298.                     $preInscripcionExpo->setColegio($colegio_nuevo);
  299.                 }
  300.                 $preInscripcionExpo->setDiaHorario($bloque);
  301.                 $preInscripcionExpo->setMedioTransporte($metodoTransporte);
  302.                 $preInscripcionExpo->setNumeroAsistentes($cantidadAsistentes);
  303.                 $string_cursos '';
  304.                 foreach ($cursos as $curso){
  305.                     $string_cursos $string_cursos "-" $curso;
  306.                 }
  307.                 $preInscripcionExpo->setCursos($string_cursos);
  308.                 $fecha = new \DateTime('now');
  309.                 $preInscripcionExpo->setFecha($fecha);
  310.                 $entityManager->persist($preInscripcionExpo);
  311.                 $entityManager->flush();
  312.                 
  313.                 if ($form->get('archivoAdjunto')->getData()){
  314.                     //Inscripción colegio con nómina
  315.                     $mensaje '
  316. <!DOCTYPE html>
  317. <html lang="es">
  318. <head>
  319.     <meta charset="UTF-8">
  320.     <title>Invitación a la Expo Futuro Novato y Novata UC</title>
  321. </head>
  322. <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
  323.     <p>Hola ' $nombre_solicitante ' ' .  $apellido_solicitante ',</p>
  324.     <p>Gracias por inscribir la participación de tu establecimiento en la Expo Futuro Novato y Novata</p>
  325.     <p>Te recordamos que es importante que invites a tus estudiantes a registrarse de manera personal en el siguiente enlace: <a target="_blank" href="https://admision.uc.cl/informacion-para/futuro-estudiante-de-pregrado/expo-futuro-novato-y-novata/inscripcion-estudiantes/" style="color: #1a73e8;">Formulario de inscripción.</a>.</p>
  326.     
  327.     <p>Al completar este formulario, cada estudiante podrá recibir información directamente en su correo para registrarse y acceder a la plataforma donde encontrará el Test de Intereses Vocacionales, ofrecido en conjunto con Preuniversitario UC. Esta es una herramienta que podría serle útil para luego acercarse a conocer esas carreras en la Expo Futuro Novato y Novata UC, para tomar una decisión informada al momento de elegir una carrera de Educación Superior. Además, podrá participar en los sorteos que realizaremos durante su visita.</p>
  328.     
  329.     <p>Te recordamos que en la Expo tú y tus estudiantes podrán conocer todas nuestras carreras, servicios y oportunidades de acceso y financiamiento para la Admisión 2026. Además, tendrán la oportunidad de participar en cientos de charlas, recorridos guiados, talleres y otras actividades que se ofrecerán durante los tres días en que se realizará el evento.</p>
  330.     
  331.     <p>Un par de semanas antes del evento, podrás revisar el programa de actividades y enterarte de todas las novedades de la Expo en nuestro sitio web <a target="_blank" href="https://admision.uc.cl" style="color: #1a73e8;">admision.uc.cl</a>.</p>
  332.     
  333.     <p>¡Los y las esperamos!</p>
  334.     <p>Saludos,</p>
  335.     
  336.     <p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
  337.     Pontificia Universidad Católica de Chile</p>
  338. </body>
  339. </html>';
  340.                     $mensajes->enviar6Mensaje($correoSolicitante"Confirmación Inscripción Colegio - ¡Nos vemos en la Expo Futuro Novato y Novata UC!"$mensaje);
  341.                 }else{
  342.                     //Inscripción colegio SIN nómina
  343.                     
  344.                    $mensaje '
  345. <!DOCTYPE html>
  346. <html lang="es">
  347. <head>
  348.     <meta charset="UTF-8">
  349.     <title>Invitación a la Expo Futuro Novato y Novata UC</title>
  350. </head>
  351. <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
  352.     <p>Hola ' $nombre_solicitante ' ' .  $apellido_solicitante ',</p>
  353.     <p>Gracias por inscribir la participación de tu establecimiento en la Expo Futuro Novato y Novata</p>
  354.     <p>Te recordamos que es importante que invites a tus estudiantes a registrarse de manera personal en el siguiente enlace: <a target="_blank" href="https://admision.uc.cl/informacion-para/futuro-estudiante-de-pregrado/expo-futuro-novato-y-novata/inscripcion-estudiantes/" style="color: #1a73e8;">Formulario de inscripción.</a>.</p>
  355.     
  356.     <p>Al completar este formulario, cada estudiante podrá recibir información directamente en su correo para registrarse y acceder a la plataforma donde encontrará el Test de Intereses Vocacionales, ofrecido en conjunto con Preuniversitario UC. Esta es una herramienta que podría serle útil para luego acercarse a conocer esas carreras en la Expo Futuro Novato y Novata UC, para tomar una decisión informada al momento de elegir una carrera de Educación Superior. Además, podrá participar en los sorteos que realizaremos durante su visita.</p>
  357.     
  358.     <p>Te recordamos que en la Expo tú y tus estudiantes podrán conocer todas nuestras carreras, servicios y oportunidades de acceso y financiamiento para la Admisión 2026. Además, tendrán la oportunidad de participar en cientos de charlas, recorridos guiados, talleres y otras actividades que se ofrecerán durante los tres días en que se realizará el evento.</p>
  359.     
  360.     <p>Un par de semanas antes del evento, podrás revisar el programa de actividades y enterarte de todas las novedades de la Expo en nuestro sitio web <a target="_blank" href="https://admision.uc.cl" style="color: #1a73e8;">admision.uc.cl</a>.</p>
  361.     
  362.     <p>¡Los y las esperamos!</p>
  363.     <p>Saludos,</p>
  364.     
  365.     <p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
  366.     Pontificia Universidad Católica de Chile</p>
  367. </body>
  368. </html>';
  369.                     
  370.                     
  371.                     $mensajes->enviar6Mensaje($correoSolicitante"Confirmación Inscripción Colegio - ¡Nos vemos en la Expo Futuro Novato y Novata UC!"$mensaje);
  372.                 }
  373.             }
  374.             return $this->renderForm('pre_inscripcion_expo/finalizar.html.twig', [
  375.                 'preInscripcionExpo' => $preInscripcionExpo,
  376.             ]);
  377.         }
  378.         return $this->renderForm('pre_inscripcion_expo/form.html.twig', [
  379.             'form' => $form,
  380.         ]);
  381.     }
  382.     /**
  383.      * @Route("/{id}", name="app_pre_inscripcion_expo_show", methods={"GET"})
  384.      */
  385.     public function show(PreInscripcionExpo $preInscripcionExpo): Response
  386.     {
  387.         return $this->render('pre_inscripcion_expo/show.html.twig', [
  388.             'pre_inscripcion_expo' => $preInscripcionExpo,
  389.         ]);
  390.     }
  391.     /**
  392.      * @Route("/{id}/edit", name="app_pre_inscripcion_expo_edit", methods={"GET", "POST"})
  393.      */
  394.     public function edit(Request $requestPreInscripcionExpo $preInscripcionExpoPreInscripcionExpoRepository $preInscripcionExpoRepository): Response
  395.     {
  396.         $form $this->createForm(PreInscripcionExpoEditType::class, $preInscripcionExpo);
  397.         $form->handleRequest($request);
  398.         if ($form->isSubmitted() && $form->isValid()) {
  399.             $preInscripcionExpoRepository->add($preInscripcionExpotrue);
  400.             $fecha = new \DateTime('now');
  401.             $preInscripcionExpo->setFecha($fecha);
  402.             $entityManager $this->getDoctrine()->getManager();
  403.             $entityManager->persist($preInscripcionExpo);
  404.             $entityManager->flush();
  405.             return $this->redirectToRoute('app_pre_inscripcion_expo_index', [], Response::HTTP_SEE_OTHER);
  406.         }
  407.         return $this->renderForm('pre_inscripcion_expo/edit.html.twig', [
  408.             'pre_inscripcion_expo' => $preInscripcionExpo,
  409.             'form' => $form,
  410.         ]);
  411.     }
  412.     /**
  413.      * @Route("/{id}", name="app_pre_inscripcion_expo_delete", methods={"POST"})
  414.      */
  415.     public function delete(Request $requestPreInscripcionExpo $preInscripcionExpoPreInscripcionExpoRepository $preInscripcionExpoRepository): Response
  416.     {
  417.         if ($this->isCsrfTokenValid('delete'.$preInscripcionExpo->getId(), $request->request->get('_token'))) {
  418.             $preInscripcionExpoRepository->remove($preInscripcionExpotrue);
  419.         }
  420.         return $this->redirectToRoute('app_pre_inscripcion_expo_index', [], Response::HTTP_SEE_OTHER);
  421.     }
  422.     /**
  423.      * @Route("/{id}/eliminar", name="app_pre_inscripcion_expo_eliminar", methods={"GET", "POST"})
  424.      */
  425.     public function eliminar($idRequest $requestPreInscripcionExpo $preInscripcionExpoPreInscripcionExpoRepository $preInscripcionExpoRepository): Response
  426.     {
  427.         if ($this->isGranted('ROLE_ADMIN')) {
  428.         $pre_incripcion $preInscripcionExpoRepository->findOneById($id);
  429.         if(!$pre_incripcion){
  430.             $x 1/0;
  431.         }
  432.             $entityManager $this->getDoctrine()->getManager();
  433.         $pre_incripcion->setEliminado(1);
  434.         $entityManager->persist($pre_incripcion);
  435.         $entityManager->flush();
  436.         return $this->redirectToRoute('app_pre_inscripcion_expo_index', [], Response::HTTP_SEE_OTHER);
  437.         }
  438.     }
  439.     /**
  440.      * @Route("/{id}/subir-nomina", name="app_pre_inscripcion_expo_subir_nomina", methods={"GET", "POST"})
  441.      */
  442.     public function subirNomina(
  443.         Request $request,
  444.         PreInscripcionExpo $preInscripcionExpo,
  445.         InscripcionexpoRepository $inscripcionexpoRepository,
  446.         ExcelHelper $excelHelper,
  447.         SluggerInterface $slugger,
  448.         Mensajes $mensajes
  449.     ): Response {
  450.         $form $this->createFormBuilder()
  451.             ->add('archivoAdjunto', \Symfony\Component\Form\Extension\Core\Type\FileType::class, [
  452.                 'label' => 'Subir nueva nómina de estudiantes',
  453.                 'required' => true,
  454.             ])
  455.             ->getForm();
  456.         $form->handleRequest($request);
  457.         $entityManager $this->getDoctrine()->getManager();
  458.         $version '2025';
  459.         $colegio $preInscripcionExpo->getColegio();
  460.         if ($form->isSubmitted() && $form->isValid()) {
  461.             $archivoFile $form->get('archivoAdjunto')->getData();
  462.             
  463.             if ($archivoFile) {
  464.                     $file $archivoFile;
  465.                     $filename $file->getPathname();
  466.                     if (!file_exists($filename)) {
  467.                         throw new \Exception('File does not exist');
  468.                     }
  469.                     $spreadsheet $excelHelper->readFile($filename);
  470.                     $data $excelHelper->createDataFromSpreadsheet($spreadsheet);
  471.                     $asistentes= array();
  472.                     $errores= array();
  473.                     $registrosSubidos 0;
  474.                     foreach ($data as $hoja) {
  475.                         if(strtolower($hoja["columnNames"][0]) == "rut"
  476.                             && strtolower($hoja["columnNames"][1]) == "dv"
  477.                             && strtolower($hoja["columnNames"][2]) == "nombres"
  478.                             && strtolower($hoja["columnNames"][3]) == "primer apellido"
  479.                             && strtolower($hoja["columnNames"][4]) == "segundo apellido"
  480.                             && strtolower($hoja["columnNames"][5]) == "correo"
  481.                         ){
  482.                             //correcto
  483.                             foreach ($hoja["columnValues"] as $fila) {
  484.                                 if($fila[0] > ) {
  485.                                     //que el correo no está registrado
  486.                                     $inscripcion $entityManager->getRepository(Inscripcionexpo::class)->findOneBy(array('correo'=>$fila[5], 'version'=>$version));
  487.                                     if($inscripcion ){
  488.                                     } else {
  489.                                         $inscripcionexpo = new Inscripcionexpo();
  490.                                         $inscripcionexpo ->setRut($fila[0]."-".$fila[1]);
  491.                                         $inscripcionexpo ->setDv($fila[1]);
  492.                                         $inscripcionexpo ->setNombres($fila[2]);
  493.                                         $inscripcionexpo ->setPaterno($fila[3]);
  494.                                         $inscripcionexpo ->setMaterno($fila[4]);
  495.                                         $inscripcionexpo ->setCorreo($fila[5]);
  496.                                         $inscripcionexpo ->setVersion($version);
  497.                                         $inscripcionexpo ->setEnsayo(0);
  498.                                         $nombrecolegio '';
  499.                                         if ($colegio){
  500.                                             $inscripcionexpo->setColegio($colegio);
  501.                                             $nombrecolegio $colegio->getNombrecorto();
  502.                                         }
  503.                                         $inscripcionexpoRepository->add($inscripcionexpotrue);
  504.                                         $validator Validation::createValidator();
  505.                                         $constraints = new Email();
  506.                                         $violations $validator->validate($fila[5], $constraints);
  507.                                         if (count($violations) == 0) {
  508.                                         //PREINSCRIPCIÓN:
  509.                                             $mensaje '<!DOCTYPE html>
  510.                                         <html lang="es">
  511.                                         <head>
  512.                                             <meta charset="UTF-8">
  513.                                             <title>Expo Futuro Novato y Novata UC</title>
  514.                                         </head>
  515.                                         <body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
  516.                                             <p>Te informamos que tu colegio o liceo ha confirmado su participación en la Expo Futuro Novato y Novata UC, que se desarrollará el 7, 8 y 9 de octubre en el Campus San Joaquín de la Pontificia Universidad Católica de Chile, y nos ha comentado que tú serás parte de su delegación.</p>
  517.                                             
  518.                                             <p>Esta es la feria de carreras universitarias más grande Chile, donde podrás conocer más de 80 stands de todas las carreras UC. También podrás descubrir sobre todas las oportunidades de acceso y financiamiento de tus estudios para la Admisión 2026, e informarte sobre los servicios que existen para quienes ingresan a nuestra casa de estudios. Además, tendrás la oportunidad de participar de cientos de charlas, recorridos guiados, talleres y otras actividades que se ofrecerán durante los tres días en que se realizará el evento.</p>
  519.                                             
  520.                                             <p>Tu colegio ya ha proporcionado algunos de tus datos, pero necesitamos que completes tu inscripción para que puedas recibir más información sobre el evento, y participar de los sorteos que haremos durante los días de la Expo. Además, al confirmar tus datos <strong>tendrás acceso a la plataforma donde podrás rendir un Test de Intereses Vocacionales<strong>, ofrecido in conjunto con el Preuniversitario UC. Esta es una herramienta que podrá ayudarte a reflexionar e informarte sobre las áreas de estudio en las que presentas mayor afinidad. Esperamos que te sea útil y luego puedas acercarte a conocer esas carreras en la Expo Futuro Novato y Novata UC, para tomar una decisión informada al momento de elegir una carrera de Educación Superior. Completa tus datos aquí. <a href="https://admision.uc.cl/informacion-para/futuro-estudiante-de-pregrado/expo-futuro-novato-y-novata/inscripcion-estudiantes/" style="color: #1a73e8;">https://admision.uc.cl/informacion-para/futuro-estudiante-de-pregrado/expo-futuro-novato-y-novata/inscripcion-estudiantes/</a>.</p>
  521.                                             
  522.                                             
  523.                                             <p>¡Te esperamos en la Expo!</p>
  524.                                             
  525.                                             <p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
  526.                                             Pontificia Universidad Católica de Chile</p>
  527.                                         </body>
  528.                                         </html>';
  529.                                         if($inscripcionexpo->getCorreo()){
  530.                                             $mensajes->enviar6Mensaje($fila[5], "¡Completa tus datos y ven a la Expo Futuro Novato y Novata UC!"$mensaje);
  531.                                         }
  532.                                         }
  533.                                     }
  534.                                     //agregar dato
  535.                                     $registrosSubidos++;
  536.                                 }
  537.                             }
  538.                         }
  539.                         else {
  540.                             //error de archivo
  541.                             $form->addError(new FormError('el formato del archivo no coincide'));
  542.                             $preInscripcionExpo->setEstado('formato no coincide');
  543.                         }
  544.                     }
  545.                     $erroresColumnas = [];
  546.                     $columnasEsperadas = ['rut''dv''nombres''primer apellido''segundo apellido''correo'];
  547.                     $columnasArchivo array_map('strtolower'$hoja['columnNames']);
  548.                     foreach ($columnasEsperadas as $columna) {
  549.                         if (!in_array($columna$columnasArchivo)) {
  550.                             $erroresColumnas[] = "Falta la columna: $columna";
  551.                         }
  552.                     }
  553.                     if (!empty($erroresColumnas)) {
  554.                         $preInscripcionExpo->setEstado('formato no coincide');
  555.                         return $this->render('pre_inscripcion_expo/finalizar.html.twig', [
  556.                             'preInscripcionExpo' => $preInscripcionExpo,
  557.                             'registrosSubidos' => $registrosSubidos,
  558.                             'erroresColumnas' => $erroresColumnas,
  559.                         ]);
  560.                     }
  561.                     //guardar archivo
  562.                     $originalFilename pathinfo($archivoFile->getClientOriginalName(), PATHINFO_FILENAME);
  563.                     $safeFilename $slugger->slug($originalFilename);
  564.                     $newFilename $safeFilename.'-'.uniqid().'.'.$archivoFile->guessExtension();
  565.                     try {
  566.                         $archivoFile->move(
  567.                             $this->getParameter('archivo_expoexcel_directory'),
  568.                             $newFilename
  569.                         );
  570.                     } catch (FileException $e) {
  571.                     }
  572.                     $preInscripcionExpo->setFile($newFilename);
  573.                 }
  574.        
  575.         }
  576.         return $this->render('pre_inscripcion_expo/subir_nomina.html.twig', [
  577.             'form' => $form->createView(),
  578.             'preInscripcionExpo' => $preInscripcionExpo,
  579.         ]);
  580.     }
  581. }