<?php
namespace App\Controller;
use App\Entity\Inscripcionexpo;
use App\Entity\Colegio;
use App\Entity\PreInscripcionExpo;
use App\Form\PreInscripcionExpoType;
use App\Form\PreInscripcionExpoEditType;
use App\Form\BotonType;
use App\Repository\PreInscripcionExpoRepository;
use App\Service\ExcelHelper;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
use App\Repository\InscripcionexpoRepository;
use App\Service\Mensajes;
use Symfony\Component\Form\FormError;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use Symfony\Component\Validator\Validation;
use Symfony\Component\Validator\Constraints\Email;
/**
* @Route("/pre/inscripcion/expo")
*/
class PreInscripcionExpoController extends AbstractController
{
/**
* @Route("/", name="app_pre_inscripcion_expo_index", methods={"GET", "POST"})
*/
public function index(PreInscripcionExpoRepository $preInscripcionExpoRepository, ExcelHelper $excelHelper, Request $request): Response
{
$versión = '2025';
$pre_incripcion_expos = $preInscripcionExpoRepository->findBy(array('version'=>$versión, 'eliminado'=>0));
$form = $this->createForm(BotonType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Id');
$sheet->setCellValue('B1', 'Colegio');
$sheet->setCellValue('C1', 'Nombre Solicitante');
$sheet->setCellValue('D1', 'Apellido Solicitante');
$sheet->setCellValue('E1', 'Rut Solicitante');
$sheet->setCellValue('F1', 'Email Solicitante');
$sheet->setCellValue('G1', 'Teléfono Solicitante');
$sheet->setCellValue('H1', 'Cargo Solicitante');
$sheet->setCellValue('I1', 'Día - Horario');
$sheet->setCellValue('J1', 'Medio transporte');
$sheet->setCellValue('K1', 'Cursos');
$sheet->setCellValue('L1', 'Número de asistentes');
$sheet->setCellValue('M1', 'Archivo adjunto');
$sheet->setCellValue('N1', 'Fecha');
$sheet->setCellValue('O1', 'rbd');
$sheet->setCellValue('P1', 'dependencia');
$i = 2;
foreach ($pre_incripcion_expos as $pre_inscp_exp){
$sheet->setCellValue('A' . $i, $pre_inscp_exp->getId());
if ($pre_inscp_exp->getColegio()){
$sheet->setCellValue('B' . $i, $pre_inscp_exp->getColegio()->getNombre());
$sheet->setCellValue('O' . $i, $pre_inscp_exp->getColegio()->getId());
if($pre_inscp_exp->getColegio()->getDependencia()){
$sheet->setCellValue('P' . $i, $pre_inscp_exp->getColegio()->getDependencia()->getGrupo());
}
}else{
$sheet->setCellValue('B' . $i, '--');
}
if ($pre_inscp_exp->getNombreSolicitante()){
$sheet->setCellValue('C' . $i, $pre_inscp_exp->getNombreSolicitante());
}else{
$sheet->setCellValue('C' . $i, '--');
}
if ($pre_inscp_exp->getApellidoSolicitante()){
$sheet->setCellValue('D' . $i, $pre_inscp_exp->getApellidoSolicitante());
}else{
$sheet->setCellValue('D' . $i, '--');
}
if ($pre_inscp_exp->getRutSolicitante()){
$sheet->setCellValue('E' . $i, $pre_inscp_exp->getRutSolicitante());
}else{
$sheet->setCellValue('E' . $i, '--');
}
if ($pre_inscp_exp->getEmailSolicitante()){
$sheet->setCellValue('F' . $i, $pre_inscp_exp->getEmailSolicitante());
}else{
$sheet->setCellValue('F' . $i, '--');
}
if ($pre_inscp_exp->getTelefonoSolicitante()){
$sheet->setCellValue('G' . $i, $pre_inscp_exp->getTelefonoSolicitante());
}else{
$sheet->setCellValue('G' . $i, '--');
}
if ($pre_inscp_exp->getCargoSolicitante()){
$sheet->setCellValue('H' . $i, $pre_inscp_exp->getCargoSolicitante());
}else{
$sheet->setCellValue('H' . $i, '--');
}
if ($pre_inscp_exp->getDiaHorario()){
$sheet->setCellValue('I' . $i, $pre_inscp_exp->getDiaHorario());
}else{
$sheet->setCellValue('I' . $i, '--');
}
if ($pre_inscp_exp->getMedioTransporte()){
$sheet->setCellValue('J' . $i, $pre_inscp_exp->getMedioTransporte());
}else{
$sheet->setCellValue('J' . $i, '--');
}
if ($pre_inscp_exp->getCursos()){
$sheet->setCellValue('K' . $i, $pre_inscp_exp->getCursos());
}else{
$sheet->setCellValue('K' . $i, '--');
}
if ($pre_inscp_exp->getNumeroAsistentes()){
$sheet->setCellValue('L' . $i, $pre_inscp_exp->getNumeroAsistentes());
}else{
$sheet->setCellValue('L' . $i, '--');
}
if ($pre_inscp_exp->getFile() != NULL){
$sheet->setCellValue('M' . $i, 'Sí');
}else{
$sheet->setCellValue('M' . $i, 'No');
}
if ($pre_inscp_exp->getFecha()){
$sheet->setCellValue('N' . $i, $pre_inscp_exp->getFecha());
}else{
$sheet->setCellValue('N' . $i, '--');
}
$i++;
}
$writer = new Xlsx($spreadsheet);
$fileName = 'preinscripciones_expo.xlsx';
$temp_file = tempnam(sys_get_temp_dir(), $fileName);
$writer->save($temp_file);
return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
}
return $this->render('pre_inscripcion_expo/index.html.twig', [
'pre_inscripcion_expos' => $pre_incripcion_expos,
'form' => $form->createView(),
]);
}
/**
* @Route("/new", name="app_pre_inscripcion_expo_new", methods={"GET", "POST"})
*/
public function new(InscripcionexpoRepository $inscripcionexpoRepository, ExcelHelper $excelHelper, Request $request, PreInscripcionExpoRepository $preInscripcionExpoRepository, SluggerInterface $slugger, Mensajes $mensajes): Response
{
$preInscripcionExpo = new PreInscripcionExpo();
$entityManager = $this->getDoctrine()->getManager();
$form = $this->createForm(PreInscripcionExpoType::class);
$version = '2025';
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid() && !$form->getErrors(true)->count()) {
$nombre_solicitante = $form->get('nombreSolicitante')->getData();
$apellido_solicitante = $form->get('apellidoSolicitante')->getData();
$rutSolicitante = $form->get('rutSolicitante')->getData();
$correoSolicitante = $form->get('correoSolicitante')->getData();
$telefonoSolicitante = $form->get('telefonoSolicitante')->getData();
$cargoSolicitante = $form->get('cargoSolicitante')->getData();
$colegio = $form->get('colegio')->getData();
$otro_colegio = json_decode($form->get('otroColegio')->getData());
$region = $form->get('region')->getData();
$comuna = $form->get('comuna')->getData();
$bloque = $form->get('bloque')->getData();
$metodoTransporte = $form->get('metodoTransporte')->getData();
$cantidadAsistentes = $form->get('cantidadAsistentes')->getData();
$cursos = $form->get('cursos')->getData();
$condiciones = $form->get('condiciones')->getData();
if ($condiciones){
$preInscripcionExpo = new PreInscripcionExpo();
$preInscripcionExpo->setVersion($version);
$preInscripcionExpo->setEliminado(0);
$archivoFile = $form->get('archivoAdjunto')->getData();
if ($archivoFile) {
$file = $archivoFile;
$filename = $file->getPathname();
if (!file_exists($filename)) {
throw new \Exception('File does not exist');
}
$spreadsheet = $excelHelper->readFile($filename);
$data = $excelHelper->createDataFromSpreadsheet($spreadsheet);
$asistentes= array();
$errores= array();
foreach ($data as $hoja) {
if(strtolower($hoja["columnNames"][0]) == "rut"
&& strtolower($hoja["columnNames"][1]) == "dv"
&& strtolower($hoja["columnNames"][2]) == "nombres"
&& strtolower($hoja["columnNames"][3]) == "primer apellido"
&& strtolower($hoja["columnNames"][4]) == "segundo apellido"
&& strtolower($hoja["columnNames"][5]) == "correo"
){
//correcto
foreach ($hoja["columnValues"] as $fila) {
if($fila[0] > 0 ) {
//que el correo no está registrado
$inscripcion = $entityManager->getRepository(Inscripcionexpo::class)->findOneBy(array('correo'=>$fila[5], 'version'=>$version));
if($inscripcion ){
} else {
$inscripcionexpo = new Inscripcionexpo();
$inscripcionexpo ->setRut($fila[0]."-".$fila[1]);
$inscripcionexpo ->setDv($fila[1]);
$inscripcionexpo ->setNombres($fila[2]);
$inscripcionexpo ->setPaterno($fila[3]);
$inscripcionexpo ->setMaterno($fila[4]);
$inscripcionexpo ->setCorreo($fila[5]);
$inscripcionexpo ->setVersion($version);
$inscripcionexpo ->setEnsayo(0);
$nombrecolegio = '';
if ($colegio){
$inscripcionexpo->setColegio($colegio);
$nombrecolegio = $colegio->getNombrecorto();
}
$inscripcionexpoRepository->add($inscripcionexpo, true);
$validator = Validation::createValidator();
$constraints = new Email();
$violations = $validator->validate($fila[5], $constraints);
if (count($violations) == 0) {
//PREINSCRIPCIÓN:
$mensaje = '<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Expo Futuro Novato y Novata UC</title>
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
<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>
<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>
<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>
<p>¡Te esperamos en la Expo!</p>
<p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
Pontificia Universidad Católica de Chile</p>
</body>
</html>';
if($inscripcionexpo->getCorreo()){
$mensajes->enviar6Mensaje($fila[5], "¡Completa tus datos y ven a la Expo Futuro Novato y Novata UC!", $mensaje);
}
}
}
//agregar dato
}
}
}
else {
//error de archivo
$form->addError(new FormError('el formato del archivo no coincide'));
$preInscripcionExpo->setEstado('formato no coincide');
}
}
$erroresColumnas = [];
$columnasEsperadas = ['rut', 'dv', 'nombres', 'primer apellido', 'segundo apellido', 'correo'];
$columnasArchivo = array_map('strtolower', $hoja['columnNames']);
foreach ($columnasEsperadas as $columna) {
if (!in_array($columna, $columnasArchivo)) {
$erroresColumnas[] = "Falta la columna: $columna";
}
}
if (!empty($erroresColumnas)) {
$preInscripcionExpo->setEstado('formato no coincide');
return $this->render('pre_inscripcion_expo/finalizar.html.twig', [
'preInscripcionExpo' => $preInscripcionExpo,
'erroresColumnas' => $erroresColumnas,
]);
}
//guardar archivo
$originalFilename = pathinfo($archivoFile->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename.'-'.uniqid().'.'.$archivoFile->guessExtension();
try {
$archivoFile->move(
$this->getParameter('archivo_expoexcel_directory'),
$newFilename
);
} catch (FileException $e) {
}
$preInscripcionExpo->setFile($newFilename);
}
$preInscripcionExpo->setRutSolicitante($rutSolicitante);
$preInscripcionExpo->setNombreSolicitante($nombre_solicitante);
$preInscripcionExpo->setApellidoSolicitante($apellido_solicitante);
$preInscripcionExpo->setTelefonoSolicitante($telefonoSolicitante);
$preInscripcionExpo->setCargoSolicitante($cargoSolicitante);
$preInscripcionExpo->setEmailSolicitante($correoSolicitante);
if ($otro_colegio == null){
$preInscripcionExpo->setColegio($colegio);
}else{
$colegio_nuevo = new Colegio();
$colegio_nuevo->setNombre($otro_colegio[0]);
$colegio_nuevo->setRbd($otro_colegio[1]);
$colegio_nuevo->setRegion($region);
$colegio_nuevo->setComuna($comuna);
$entityManager->persist($colegio_nuevo);
$entityManager->flush();
$preInscripcionExpo->setColegio($colegio_nuevo);
}
$preInscripcionExpo->setDiaHorario($bloque);
$preInscripcionExpo->setMedioTransporte($metodoTransporte);
$preInscripcionExpo->setNumeroAsistentes($cantidadAsistentes);
$string_cursos = '';
foreach ($cursos as $curso){
$string_cursos = $string_cursos . "-" . $curso;
}
$preInscripcionExpo->setCursos($string_cursos);
$fecha = new \DateTime('now');
$preInscripcionExpo->setFecha($fecha);
$entityManager->persist($preInscripcionExpo);
$entityManager->flush();
if ($form->get('archivoAdjunto')->getData()){
//Inscripción colegio con nómina
$mensaje = '
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Invitación a la Expo Futuro Novato y Novata UC</title>
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
<p>Hola ' . $nombre_solicitante . ' ' . $apellido_solicitante . ',</p>
<p>Gracias por inscribir la participación de tu establecimiento en la Expo Futuro Novato y Novata</p>
<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>
<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>
<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>
<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>
<p>¡Los y las esperamos!</p>
<p>Saludos,</p>
<p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
Pontificia Universidad Católica de Chile</p>
</body>
</html>';
$mensajes->enviar6Mensaje($correoSolicitante, "Confirmación Inscripción Colegio - ¡Nos vemos en la Expo Futuro Novato y Novata UC!", $mensaje);
}else{
//Inscripción colegio SIN nómina
$mensaje = '
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Invitación a la Expo Futuro Novato y Novata UC</title>
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
<p>Hola ' . $nombre_solicitante . ' ' . $apellido_solicitante . ',</p>
<p>Gracias por inscribir la participación de tu establecimiento en la Expo Futuro Novato y Novata</p>
<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>
<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>
<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>
<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>
<p>¡Los y las esperamos!</p>
<p>Saludos,</p>
<p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
Pontificia Universidad Católica de Chile</p>
</body>
</html>';
$mensajes->enviar6Mensaje($correoSolicitante, "Confirmación Inscripción Colegio - ¡Nos vemos en la Expo Futuro Novato y Novata UC!", $mensaje);
}
}
return $this->renderForm('pre_inscripcion_expo/finalizar.html.twig', [
'preInscripcionExpo' => $preInscripcionExpo,
]);
}
return $this->renderForm('pre_inscripcion_expo/form.html.twig', [
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_pre_inscripcion_expo_show", methods={"GET"})
*/
public function show(PreInscripcionExpo $preInscripcionExpo): Response
{
return $this->render('pre_inscripcion_expo/show.html.twig', [
'pre_inscripcion_expo' => $preInscripcionExpo,
]);
}
/**
* @Route("/{id}/edit", name="app_pre_inscripcion_expo_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, PreInscripcionExpo $preInscripcionExpo, PreInscripcionExpoRepository $preInscripcionExpoRepository): Response
{
$form = $this->createForm(PreInscripcionExpoEditType::class, $preInscripcionExpo);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$preInscripcionExpoRepository->add($preInscripcionExpo, true);
$fecha = new \DateTime('now');
$preInscripcionExpo->setFecha($fecha);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($preInscripcionExpo);
$entityManager->flush();
return $this->redirectToRoute('app_pre_inscripcion_expo_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('pre_inscripcion_expo/edit.html.twig', [
'pre_inscripcion_expo' => $preInscripcionExpo,
'form' => $form,
]);
}
/**
* @Route("/{id}", name="app_pre_inscripcion_expo_delete", methods={"POST"})
*/
public function delete(Request $request, PreInscripcionExpo $preInscripcionExpo, PreInscripcionExpoRepository $preInscripcionExpoRepository): Response
{
if ($this->isCsrfTokenValid('delete'.$preInscripcionExpo->getId(), $request->request->get('_token'))) {
$preInscripcionExpoRepository->remove($preInscripcionExpo, true);
}
return $this->redirectToRoute('app_pre_inscripcion_expo_index', [], Response::HTTP_SEE_OTHER);
}
/**
* @Route("/{id}/eliminar", name="app_pre_inscripcion_expo_eliminar", methods={"GET", "POST"})
*/
public function eliminar($id, Request $request, PreInscripcionExpo $preInscripcionExpo, PreInscripcionExpoRepository $preInscripcionExpoRepository): Response
{
if ($this->isGranted('ROLE_ADMIN')) {
$pre_incripcion = $preInscripcionExpoRepository->findOneById($id);
if(!$pre_incripcion){
$x = 1/0;
}
$entityManager = $this->getDoctrine()->getManager();
$pre_incripcion->setEliminado(1);
$entityManager->persist($pre_incripcion);
$entityManager->flush();
return $this->redirectToRoute('app_pre_inscripcion_expo_index', [], Response::HTTP_SEE_OTHER);
}
}
/**
* @Route("/{id}/subir-nomina", name="app_pre_inscripcion_expo_subir_nomina", methods={"GET", "POST"})
*/
public function subirNomina(
Request $request,
PreInscripcionExpo $preInscripcionExpo,
InscripcionexpoRepository $inscripcionexpoRepository,
ExcelHelper $excelHelper,
SluggerInterface $slugger,
Mensajes $mensajes
): Response {
$form = $this->createFormBuilder()
->add('archivoAdjunto', \Symfony\Component\Form\Extension\Core\Type\FileType::class, [
'label' => 'Subir nueva nómina de estudiantes',
'required' => true,
])
->getForm();
$form->handleRequest($request);
$entityManager = $this->getDoctrine()->getManager();
$version = '2025';
$colegio = $preInscripcionExpo->getColegio();
if ($form->isSubmitted() && $form->isValid()) {
$archivoFile = $form->get('archivoAdjunto')->getData();
if ($archivoFile) {
$file = $archivoFile;
$filename = $file->getPathname();
if (!file_exists($filename)) {
throw new \Exception('File does not exist');
}
$spreadsheet = $excelHelper->readFile($filename);
$data = $excelHelper->createDataFromSpreadsheet($spreadsheet);
$asistentes= array();
$errores= array();
$registrosSubidos = 0;
foreach ($data as $hoja) {
if(strtolower($hoja["columnNames"][0]) == "rut"
&& strtolower($hoja["columnNames"][1]) == "dv"
&& strtolower($hoja["columnNames"][2]) == "nombres"
&& strtolower($hoja["columnNames"][3]) == "primer apellido"
&& strtolower($hoja["columnNames"][4]) == "segundo apellido"
&& strtolower($hoja["columnNames"][5]) == "correo"
){
//correcto
foreach ($hoja["columnValues"] as $fila) {
if($fila[0] > 0 ) {
//que el correo no está registrado
$inscripcion = $entityManager->getRepository(Inscripcionexpo::class)->findOneBy(array('correo'=>$fila[5], 'version'=>$version));
if($inscripcion ){
} else {
$inscripcionexpo = new Inscripcionexpo();
$inscripcionexpo ->setRut($fila[0]."-".$fila[1]);
$inscripcionexpo ->setDv($fila[1]);
$inscripcionexpo ->setNombres($fila[2]);
$inscripcionexpo ->setPaterno($fila[3]);
$inscripcionexpo ->setMaterno($fila[4]);
$inscripcionexpo ->setCorreo($fila[5]);
$inscripcionexpo ->setVersion($version);
$inscripcionexpo ->setEnsayo(0);
$nombrecolegio = '';
if ($colegio){
$inscripcionexpo->setColegio($colegio);
$nombrecolegio = $colegio->getNombrecorto();
}
$inscripcionexpoRepository->add($inscripcionexpo, true);
$validator = Validation::createValidator();
$constraints = new Email();
$violations = $validator->validate($fila[5], $constraints);
if (count($violations) == 0) {
//PREINSCRIPCIÓN:
$mensaje = '<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Expo Futuro Novato y Novata UC</title>
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
<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>
<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>
<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>
<p>¡Te esperamos en la Expo!</p>
<p><strong>Dirección de Admisión y Vinculación Escolar</strong><br>
Pontificia Universidad Católica de Chile</p>
</body>
</html>';
if($inscripcionexpo->getCorreo()){
$mensajes->enviar6Mensaje($fila[5], "¡Completa tus datos y ven a la Expo Futuro Novato y Novata UC!", $mensaje);
}
}
}
//agregar dato
$registrosSubidos++;
}
}
}
else {
//error de archivo
$form->addError(new FormError('el formato del archivo no coincide'));
$preInscripcionExpo->setEstado('formato no coincide');
}
}
$erroresColumnas = [];
$columnasEsperadas = ['rut', 'dv', 'nombres', 'primer apellido', 'segundo apellido', 'correo'];
$columnasArchivo = array_map('strtolower', $hoja['columnNames']);
foreach ($columnasEsperadas as $columna) {
if (!in_array($columna, $columnasArchivo)) {
$erroresColumnas[] = "Falta la columna: $columna";
}
}
if (!empty($erroresColumnas)) {
$preInscripcionExpo->setEstado('formato no coincide');
return $this->render('pre_inscripcion_expo/finalizar.html.twig', [
'preInscripcionExpo' => $preInscripcionExpo,
'registrosSubidos' => $registrosSubidos,
'erroresColumnas' => $erroresColumnas,
]);
}
//guardar archivo
$originalFilename = pathinfo($archivoFile->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $slugger->slug($originalFilename);
$newFilename = $safeFilename.'-'.uniqid().'.'.$archivoFile->guessExtension();
try {
$archivoFile->move(
$this->getParameter('archivo_expoexcel_directory'),
$newFilename
);
} catch (FileException $e) {
}
$preInscripcionExpo->setFile($newFilename);
}
}
return $this->render('pre_inscripcion_expo/subir_nomina.html.twig', [
'form' => $form->createView(),
'preInscripcionExpo' => $preInscripcionExpo,
]);
}
}