<?php
namespace App\Controller\Frontend\NuevoIngreso;
use App\Entity\NuevoIngreso\Aspirante;
use App\Entity\NuevoIngreso\AspRegistro;
use App\Entity\NuevoIngreso\PlanesOfertados;
use App\Form\NuevoIngreso\BuscaPreregistroCurpType;
use App\Form\NuevoIngreso\BuscaPreregistroType;
use App\Form\NuevoIngreso\BuscarConfirmacionType;
use App\Repository\NuevoIngreso\AspiranteRepository;
use App\Repository\NuevoIngreso\AspRegistroRepository;
use App\Repository\NuevoIngreso\PlanesOfertadosRepository;
use App\Repository\NuevoIngreso\TopesPlanesOfertadosRepository;
use App\Service\Mailer\Mailer;
use App\Service\NuevoIngreso\AspiranteService;
use Doctrine\Persistence\ManagerRegistry;
use Qipsius\TCPDFBundle\Controller\TCPDFController;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/public/aspirante/confirmacion")
*/
class AspiranteConfirmacionController extends AbstractController
{
//STATUS 2, es para la confirmacion, para tomar en cuenta en fechas, etc.
private const STATUS = 2;
/**
* @Route("/_nivel_uagro_superior_/{nivel}", name="frontend_aspirante_confirmacion_nivel")
*/
public function confirmacionNivel(PlanesOfertadosRepository $planesOfertadosRepository, int $nivel): Response
{
return $this->render('frontend/aspirante/confirmacion/nivel.html.twig', [
'planes' => $planesOfertadosRepository->findPlanesPorNivel($nivel, self::STATUS),
'nivel' => $nivel
]);
}
/**
* @Route("/espacios_agotados/{nivel}/{plan}", name="frontend_aspirante_espacios_agotados")
*/
public function espaciosAgotados(PlanesOfertadosRepository $planesOfertadosRepository, int $nivel, int $plan): Response
{
return $this->render('frontend/aspirante/confirmacion/espacios_agotados.html.twig', [
'planes' => $planesOfertadosRepository->findPlanesPorNivel($nivel, self::STATUS),
'nivel' => $nivel,
'plan' => $plan
]);
}
/**
* @Route("/_a_confirmar_registro/{id}", name="frontend_aspirante_confirmacion_confirm")
*/
public function confirmacionConfirm(PlanesOfertados $plan, PlanesOfertadosRepository $planesOfertadosRepository, TopesPlanesOfertadosRepository $topesPlanesOfertadosRepository)
{
//Checamos si el plan en realidad se encuentra en las fechas de inicio y fin de preregistro, de acuerdo ala fecha/hora actual
if(!$planesOfertadosRepository->findPlanPorFecha($plan, self::STATUS)) {
$this->addFlash('error', 'El plan no se encuentra activo. No lo intente de nuevo.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_nivel', [ 'nivel' => $plan->getNivelPlanEstudios() ]);
}
//Si ya no hay espacios no puede continuar
/*
$topePlanOfertado = $topesPlanesOfertadosRepository->findOneBy(
['planOfertadoTope' => $plan]
);
if ($topePlanOfertado->getNumeroConsecutivo() > $topePlanOfertado->getNumeroMaximo() ) {
$this->addFlash('error', 'Lo sentimos, Ya no hay espacios Disponibles en ' .$plan->getNombreUnidadAcademica());
return $this->redirectToRoute('frontend_aspirante_confirmacion_nivel', [ 'nivel' => $plan->getNivelPlanEstudios() ]);
}
*/
return $this->render('frontend/aspirante/confirmacion/confirm.html.twig', [
'planOfertado' => $plan
]);
}
/**
* @Route("/execute/{id}", name="frontend_aspirante_confirmacion_execute")
*/
public function confirmacionExecute(
PlanesOfertados $plan, Request $request, AspiranteRepository $aspiranteRepository,
AspRegistroRepository $aspRegistroRepository, PlanesOfertadosRepository $planesOfertadosRepository,
TopesPlanesOfertadosRepository $topesPlanesOfertadosRepository, ManagerRegistry $doctrine
): Response
{
$entityManager = $doctrine->getManager();
//Checamos si el plan en realidad se encuentra en las fechas de inicio y fin de confirmacion, de acuerdo ala fecha/hora actual
if(!$planesOfertadosRepository->findPlanPorFecha($plan, self::STATUS)) {
$this->addFlash('error', 'El plan no se encuentra activo. No lo intente de nuevo.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_nivel', [ 'nivel' => $plan->getNivelPlanEstudios() ]);
}
$form = $this->createForm(BuscarConfirmacionType::class, null);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$formData = $form->getData();
$aspRegistro = $aspRegistroRepository->findOneBy([
'claveUnicaRegistro' => $formData['clur'],
'cancelado' => 0
]);
if ($aspRegistro) {
//Checar si ya tiene Registro Confirmado, CONSECUTIVO_PLESXURES != 0
if ($aspRegistro->getConsecutivoPlesxures() != null) {
if ($aspRegistro->getCiclo() < 460)
{
$this->addFlash('error', 'No existe confirmación para esa CLUR.');
// Nota aqui se podrá poner el return al twig con el mensaje que modifico en su código
return $this->redirectToRoute('frontend_aspirante_buscar_confirmacion');
}
$this->addFlash('success', 'Ya ha reservado espacio anteriormente.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_finalizada', [ 'id' => $aspRegistro->getAspirante()->getId() ]);
}
//Verificar que el ciclo este activo de acuerdo al plan de estudios
$cicloActivoTopesPlaesOfertados = $topesPlanesOfertadosRepository->findOneBy([
'planOfertadoTope' => $plan->getId(),
'estado' => 1
]);
if (!$cicloActivoTopesPlaesOfertados) {
$this->addFlash('error', 'El Ciclo del Plan elegido no esta Activo.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_execute', [ 'id' => $plan->getId() ]);
}
// Verificamos que aun halla espacios disponibles, de lo contrario redirigimos...
if ($cicloActivoTopesPlaesOfertados->getNumeroConsecutivo() > $cicloActivoTopesPlaesOfertados->getNumeroMaximo()) {
$this->addFlash('error', 'Lo sentimos, Ya no hay espacios Disponibles, acude a las oficinas de la Unidad Académica ' .$plan->getNombreUnidadAcademica().' para instrucciones para indicaciones de nuevos espacios.');
return $this->redirectToRoute('frontend_aspirante_espacios_agotados', [ 'nivel' => $plan->getNivelPlanEstudios(), 'plan' => $plan->getId() ]);
} else {
$aspRegistro->setPlanOfertado($plan);
$aspRegistro->setCiclo($cicloActivoTopesPlaesOfertados->getCiclo());
$entityManager->flush();
//redirigir cuando ya ocupo un espacio
$this->addFlash('success', 'Espacio Reservado Satisfactoriamente.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_finalizada', [ 'id' => $aspRegistro->getAspirante()->getId() ]);
}
} else {
$this->addFlash('error', 'No se ha encontrado Preregistro con la CLUR proporcionada.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_execute', [ 'id' => $plan->getId() ]);
}
}
return $this->renderForm('frontend/aspirante/confirmacion/execute.html.twig', [
'form' => $form,
'planOfertado' => $plan
]);
}
/**
* @Route("/confirmation-finished/{id}", name="frontend_aspirante_confirmacion_finalizada")
*/
public function confirmacionFinalizada(Aspirante $aspirante, AspRegistroRepository $aspRegistroRepository)
{
$aspRegistro = $aspRegistroRepository->findBy(['aspirante' => $aspirante->getId()]);
return $this->render('frontend/aspirante/confirmacion/confirmacion_finalizada.html.twig', [
'aspirante' => $aspirante,
'aspRegistro' => $aspRegistro[0]
]);
}
/**
* @Route("/{id}/confirmacion-pdf", name="frontend_aspirante_confirmacion_pdf")
*/
public function generaConfirmacionRegistroPdf(
Aspirante $aspirante, AspRegistroRepository $aspRegistroRepository,
TCPDFController $tcpdf, AspiranteService $aspiranteService, $projectDir
)
{
if($datosRegistro = $aspRegistroRepository->findByAspirante($aspirante->getId()))
{
$pdf = $aspiranteService->generaRegistroConfirmadoPDF($tcpdf, $aspirante, $datosRegistro, $projectDir);
//$pdf = $aspiranteService->generarPreregistroPDF($aspirante, $datosRegistro);
$pdf->Output('registroUAGro.pdf', 'D');
}
return $this->redirectToRoute('frontend_aspirante_confirmacion_finalizada', [ 'id' => $aspirante->getId() ]);
}
/**
* @Route("/{id}/programacion-pdf", name="frontend_aspirante_programacion_pdf")
*/
public function descargaProgramacionPdf(Aspirante $aspirante, AspRegistroRepository $aspRegistroRepository, $projectDirConfirmacionNMS, $projectDirConfirmacionNS)
{
$planAspirante = $aspRegistroRepository->findOneBy([
'aspirante' => $aspirante
]);
if ($planAspirante->getPlanOfertado()->getNivelPlanEstudios() === 3) {
$filePath = $projectDirConfirmacionNMS.$planAspirante->getPlanOfertado()->getPdfRevisionDoctos();
} else {
$filePath = $projectDirConfirmacionNS.$planAspirante->getPlanOfertado()->getPdfRevisionDoctos();
}
$response = new Response();
$response->headers->set('Content-Type', 'application/xml; charset=utf-8');
$response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $planAspirante->getPlanOfertado()->getPdfRevisionDoctos() ));
$response->setContent(file_get_contents($filePath));
return $response;
}
/**
* @Route("/{id}/enviar-email-confirmacion", name="frontend_aspirante_enviar_email_confirmacion")
*/
public function enviaEmailConfirmacion(Aspirante $aspirante, Mailer $mailer)
{
if($aspirante)
{
$mailer->enviarEmailConfirmacion($aspirante);
$this->addFlash('success', 'Se ha enviado el correo satisfactoriamente.');
} else {
$this->addFlash('error', 'No se ha encontrado email.');
}
return $this->redirectToRoute('frontend_aspirante_confirmacion_finalizada', [ 'id'=> $aspirante->getId() ]);
}
/**
* @Route("/search-confirmation", name="frontend_aspirante_buscar_confirmacion")
*/
public function buscarConfirmacion(Request $request, AspRegistroRepository $aspRegistroRepository): Response
{
$form = $this->createForm(BuscarConfirmacionType::class, null);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$formData = $form->getData();
//dd( $formData['clur']);
$aspiranteRegistro = $aspRegistroRepository->findOneBy([
'claveUnicaRegistro' => $formData['clur']
]);
if (!$aspiranteRegistro) {
$this->addFlash('error', 'No se ha encontrado ASPIRANTE con la CLUR proporcionada.');
return $this->redirectToRoute('frontend_aspirante_buscar_confirmacion');
}
if ($aspiranteRegistro->getConsecutivoPlesxures() != null) {
if($aspiranteRegistro->getCiclo() < 460 ) {
$this->addFlash('error', 'No existe confirmación para este ciclo.');
return $this->redirectToRoute('frontend_aspirante_buscar_confirmacion');
}
$this->addFlash('success', 'Confirmación encontrada.');
return $this->redirectToRoute('frontend_aspirante_confirmacion_finalizada', [ "id" => $aspiranteRegistro->getAspirante()->getId() ]);
} else {
$this->addFlash('error', 'No se ha CONFIRMADO registro con la CLUR proporcionada.');
return $this->redirectToRoute('frontend_aspirante_buscar_confirmacion');
}
}
return $this->renderForm('frontend/aspirante/confirmacion/buscar_confirmacion.html.twig', [
'form' => $form
]);
}
/**
* @Route("/search-sede", name="frontend_aspirante_buscar_sede")
*/
public function buscarSede(Request $request, AspRegistroRepository $aspRegistroRepository): Response
{
return $this->renderForm('frontend/aspirante/confirmacion/buscar_sede.html.twig');
}
}