<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use App\Service\AuthClaveUnicaService;
use App\Service\RacService;
use App\Repository\PostulacionRepository;
use App\Repository\ConvocatoriaRepository;
use App\Entity\Postulacion;
use App\Form\NuevaPostulacionType;
/**
* @Route("/organizacion", name="organizacion_")
*/
class OrganizacionController extends AbstractController
{
#[Route('/home', name: 'home')]
public function home(
Request $request,
PostulacionRepository $postulacionRepository,
ConvocatoriaRepository $convocatoriaRepository,
AuthClaveUnicaService $authClaveUnicaService,
RacService $racService
): Response
{
if (!($authClaveUnicaService->isValidaSessionCuActiva($request))){
$this->addFlash('warning', 'Sesión Expirada!');
$authClaveUnicaService->limpiarSession($request);
return $this->redirect($this->generateUrl('sesionExpirada'));
}
$userCuActual = $authClaveUnicaService->getUserLoginCUToSession($request);
$rolNumero = $userCuActual->rolNumero;
$rolDv = $userCuActual->rolDv;
$postulaciones = $postulacionRepository->findByRut(strval($rolNumero));
return $this->render('organizacion/home.html.twig', [
'userCuActual'=> $userCuActual,
'postulaciones' => $postulaciones,
]);
}
#[Route('/nuevapostulacion', name: 'postulacion')]
public function postulacion(
Request $request,
PostulacionRepository $postulacionRepository,
ConvocatoriaRepository $convocatoriaRepository,
AuthClaveUnicaService $authClaveUnicaService,
RacService $racService
): Response
{
if (!($authClaveUnicaService->isValidaSessionCuActiva($request))){
$this->addFlash('warning', 'Sesión Expirada!');
$authClaveUnicaService->limpiarSession($request);
return $this->redirect($this->generateUrl('default'));
}
$userCuActual = $authClaveUnicaService->getUserLoginCUToSession($request);
$run = strval(number_format((int) $userCuActual->rolNumero, 0, '', '.')) . '-' . $userCuActual -> rolDv;
$convocatorias = $convocatoriaRepository->findEnPostulacion();
$organizaciones = $racService->getRegisterRac(strval($run));
$organizacionesLista = [];
$organizacionesDictionary = [];
if(!empty($organizaciones)){
foreach($organizaciones as $orga){
if(!empty($orga['org_id']))$organizacionesDictionary[$orga['org_id']] = $orga;
if(!empty($orga['org_id']))$organizacionesLista[$orga['org_id'] . '.-' . $orga['nombre_org']] = $orga['org_id'];
}
}
$convocatoriasByPostulaciones = [];
foreach($convocatorias as $convo){
$convocatoriasByPostulaciones[$convo->getId()] = [];
$postulacionesForConvocatorias = $postulacionRepository->findAllByRutAndConvocatoria($userCuActual->rolNumero, $convo->getId());
foreach($postulacionesForConvocatorias as $postu){
$convocatoriasByPostulaciones[$convo->getId()][] = $postu->getOrganizacionId();
}
}
// Tu entidad o un objeto base
$form = $this->createForm(NuevaPostulacionType::class, null, [
'racService' => $organizacionesLista,
]);
// Manejo de la solicitud
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
try {
$convocatoria = $form->get('convocatoria')->getData();
$organizacion = $form->get('organizacion')->getData();
$postulacionExiste = $postulacionRepository->findOneByRutAndOrganizacionIdConvocatoria($userCuActual->rolNumero, $organizacion, $convocatoria);
if($postulacionExiste){
$this->addFlash('danger', 'Ya existe una postulación a esta convocatoria');
return $this->redirectToRoute('organizacion_postulacion');
}
$postulacion = new Postulacion();
$postulacion->setRut($userCuActual->rolNumero);
$postulacion->setDv($userCuActual->rolDv);
$postulacion->setNombres($userCuActual->nombres);
$postulacion->setApellidos($userCuActual->apellidos);
$postulacion->setEmail($organizacionesDictionary[$organizacion]["datos_org"]["email_contacto"][0]);
$postulacion->setRacRegion($organizacionesDictionary[$organizacion]["datos_org"]["region"]);
$postulacion->setOrganizacionId($organizacion);
$postulacion->setOrganizacionRut($organizacionesDictionary[$organizacion]["rut"] ?? '');
$postulacion->setOrganizacionName($organizacionesDictionary[$organizacion]["nombre_org"]);
$postulacion->setOrganizacionVersionForm($organizacionesDictionary[$organizacion]["formulario_org"]);
$postulacion->setFormConPersonlidadJuridica($organizacionesDictionary[$organizacion]["datos_org"]["personalidad_juridica"] == 'Sí tiene Personalidad Jurídica');
$postulacion->setCodVerificacionPost("");
$postulacion->setConvocatoria($convocatoria);
$postulacion->updateTimestamps();
$postulacion->setState("new");
$postulacionRepository->add($postulacion);
$this->addFlash('success', 'Postulación guardada exitosamente');
return $this->redirectToRoute('postulacion_postulacion_editar', ['id' => $postulacion->getId(), 'action' => 'save']);
} catch (\Exception $e) {
$this->addFlash('danger', 'Ocurrió un error Inesperado' . $e->getMessage());
return $this->redirectToRoute('organizacion_postulacion');
}
}
return $this->render('organizacion/nueva_postulacion.html.twig', [
'userCuActual'=>$userCuActual,
'form' => $form->createView(),
'convocatorias' => $convocatorias,
'organizaciones' => $organizaciones,
'organizacionesDictionary' => $organizacionesDictionary,
'convocatoriasByPostulaciones' => $convocatoriasByPostulaciones
]);
}
}