<?php
namespace App\Controller;
use App\Entity\GHCandidato;
use App\Entity\GHDocumentoContratacion;
use App\Entity\GHEntrevista;
use App\Entity\GHExamenPeriodico;
use App\Entity\GHPruebasPsicotecnicas;
use App\Entity\GHPruebasTecnicas;
use App\Entity\GHRevisionInicial;
use App\Entity\GHVerificacionAntecedente;
use App\Entity\GHVerificacionAntecedentePersona;
use App\Entity\SecMensaje;
use App\Entity\TerPersonaHistorial;
use App\Message\NotificarUltimoRegistroMessage;
use App\Services\DocumentHandler;
use Doctrine\Common\Collections\Criteria;
use Doctrine\ORM\Mapping\Entity;
use Dompdf\Dompdf;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\TerPersona;
use App\Form\TerPersonaType;
use App\Repository\TerPersonaRepository;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class TerPersonaController extends AbstractController {
private $entityManager;
private $code = 0;
private $msj = "";
private $url = "";
private $html = "";
/**
* @var DocumentHandler
*/
private $documentHandler;
public function __construct(EntityManagerInterface $entityManager, DocumentHandler $documentHandler) {
$this->entityManager = $entityManager;
$this->documentHandler = $documentHandler;
}
#[Route('/ter/persona', name: 'ter_persona')]
public function index(TerPersonaRepository $terPersonaRepository): Response {
$personas = $terPersonaRepository->getAll();
return $this->render('ter_persona/index.html.twig', [
'entities' => $personas,
]);
}
#[Route('/ter/persona/desvinculadas', name: 'ter_persona_desvinculadas')]
public function indexDesvinculadas(TerPersonaRepository $terPersonaRepository): Response {
$personas = $terPersonaRepository->getAll([2]);
return $this->render('ter_persona/index.html.twig', [
'entities' => $personas,
]);
}
#[Route('/ter/persona/crear', name: 'ter_persona_new')]
public function crearPersona(Request $request, \App\Services\DocumentHandler $documentHandler, \App\Services\ResponseHandler $responseHandler, UserPasswordHasherInterface $passwordHasher): Response {
$persona = new TerPersona();
$form = $this->createForm(TerPersonaType::class, $persona, ['method' => 'POST', 'action' => $this->generateUrl($request->attributes->get('_route'))]);
$form->remove('estado');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->entityManager;
$foto = $form->get('fotografia')->getData();
//$indiceIzq = $form->get('indiceIzquierdo')->getData();
//$indiceDer = $form->get('indiceDerecho')->getData();
if ($foto != NULL) { //$persona->getFirmaCorta() != null && $persona->getFirmaLarga() != null && $indiceIzq != NULL && $indiceDer != NULL
/* $rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaCorta(), TerPersona::class);
if ($rutaArchivo['code'] == 'success') {
$persona->setFirmaCorta($rutaArchivo['msj']);
}
$rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaLarga(), TerPersona::class);
if ($rutaArchivo['code'] == 'success') {
$persona->setFirmaLarga($rutaArchivo['msj']);
} */
$rutaArchivo = $documentHandler->cargarArchivo($foto, TerPersona::class);
// $rutaArchivoII = $documentHandler->cargarArchivo($indiceIzq, TerPersona::class);
// $rutaArchivoID = $documentHandler->cargarArchivo($indiceDer, TerPersona::class);
if ($rutaArchivo['code'] == 'success') { //&& $rutaArchivoII['code'] == 'success' && $rutaArchivoID['code'] == 'success'
$persona->setHorario('NA');
$persona->setFotografia($rutaArchivo['msj']);
// $persona->setIndiceDerecho($rutaArchivoID['msj']);
// $persona->setIndiceIzquierdo($rutaArchivoII['msj']);
$persona->setCreateAt(new \DateTime('now'));
$persona->setCreateUser($this->getUser()->getUsername());
$persona->setUpdateAt(new \DateTime('now'));
$persona->setUpdateUser($this->getUser()->getUsername());
$persona->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
$persona->setFechaDiligenciamiento(new \DateTime('now'));
$entityManager->persist($persona);
$user = new \App\Entity\SecUser();
$plaintextPassword = 'ClaveTemporal123*';
// hash the password (based on the security.yaml config for the $user class)
$hashedPassword = $passwordHasher->hashPassword(
$user,
$plaintextPassword
);
$user->setPassword($hashedPassword);
$user->setEmail($persona->getEmail());
$user->setEnabled(true);
$user->setPersona($persona);
$user->setUsername(trim($persona->getNumeroDocumento()));
$user->setRoles(['ROLE_USUARIO']);
$entityManager->persist($user);
$entityManager->flush();
$this->code = 'success';
$this->msj = 'Registro creado correctamente';
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));
} else {
$this->code = 'warning';
$this->msj = "Imposible continuar, por favor valide que los documentos solicitados esten presentes.{$rutaArchivo['msj']}";
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));
}
} else {
$this->code = 'warning';
$this->msj = "Valide que la firma se encuentre adjunta en el formulario.";
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));
}
}
return $this->render('ter_persona/crear.html.twig', [
'persona' => $persona,
'form' => $form->createView(),
]);
}
#[Route('/ter/persona/editar/{id}', name: 'ter_persona_edit')]
public function editarPersona(Request $request, TerPersona $persona, \App\Services\DocumentHandler $documentHandler, \App\Services\ResponseHandler $responseHandler, \App\Services\MailerCore $mailerCore): Response {
$entityManager = $this->entityManager;
if (!$persona) {
throw $this->createNotFoundException('No se encontró a la persona solicitada, valide e intente nuevamente.');
}
//
$form = $this->createForm(TerPersonaType::class, $persona, ['disabled_fields' => true,'method' => 'POST', 'action' => $this->generateUrl($request->attributes->get('_route'),['id'=>$persona->getId()] )]);
$form->remove('nombres')
->remove('tipoDocumento')
->remove('numeroDocumento')
->remove('email')
->remove('nivelCargo');
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$foto = $form->get('fotografia')->getData();
// $indiceIzq = $form->get('indiceIzquierdo')->getData();
// $indiceDer = $form->get('indiceDerecho')->getData();
if ($foto != NULL) { //&& $indiceIzq != NULL && $indiceDer != NULL
/* $rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaCorta(), TerPersona::class);
if ($rutaArchivo['code'] == 'success') {
$persona->setFirmaCorta($rutaArchivo['msj']);
}
$rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaLarga(), TerPersona::class);
if ($rutaArchivo['code'] == 'success') {
$persona->setFirmaLarga($rutaArchivo['msj']);
} */
$rutaArchivo = $documentHandler->cargarArchivo($foto, TerPersona::class);
// $rutaArchivoII = $documentHandler->cargarArchivo($indiceIzq, TerPersona::class);
// $rutaArchivoID = $documentHandler->cargarArchivo($indiceDer, TerPersona::class);
if ($rutaArchivo['code'] == 'success') { //&& $rutaArchivoII['code'] == 'success' && $rutaArchivoID['code'] == 'success'
$persona->setHorario('NA');
$persona->setFotografia($rutaArchivo['msj']);
// $persona->setIndiceDerecho($rutaArchivoID['msj']);
// $persona->setIndiceIzquierdo($rutaArchivoII['msj']);
/*
$persona->setCreateAt(new \DateTime('now'));
$persona->setCreateUser($this->getUser()->getUsername());
$persona->setUpdateAt(new \DateTime('now'));
$persona->setUpdateUser($this->getUser()->getUsername());
$persona->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
$entityManager->persist($persona);
$user = new \App\Entity\SecUser();
$plaintextPassword = 'ClaveTemporal123*';
// hash the password (based on the security.yaml config for the $user class)
$hashedPassword = $passwordHasher->hashPassword(
$user,
$plaintextPassword
);
$user->setPassword($hashedPassword);
$user->setEmail($persona->getEmail());
$user->setEnabled(true);
$user->setPersona($persona);
$user->setUsername(trim($persona->getNumeroDocumento()));
$user->setRoles(['ROLE_USUARIO']);
$entityManager->persist($user);
$entityManager->flush();
$this->addFlash('success', "Registro cargado exitosamente.");
return $this->redirectToRoute($responseHandler->manejoRespuesta()); */
} else {
$this->code = 'warning';
$this->msj = "Imposible continuar, por favor valide que los documentos solicitados esten presentes.{$rutaArchivo['msj']}";
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));
}
}
$persona->setUpdateAt(new \DateTime('now'));
$persona->setUpdateUser($this->getUser()->getUsername());
$entityManager->flush();
$usuario = $entityManager->getRepository(\App\Entity\SecUser::class)->findOneBy(['username' => $persona->getNumeroDocumento()]);
/* if ($usuario) {
$mailerCore->notificarUsuario('solicitaCarnet', [$usuario]);
$mailerCore->notificarUsuario('controlInstalaciones', [$usuario]);
$mailerCore->notificarUsuario('solicitudAccesos', [$usuario]);
} */
$this->code = 'success';
$this->msj = 'Registro cargado correctamente';
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url, 'html' => $this->html]));
}
$estado = $persona->getEstado();
$estadosFiltrados = ($estado && in_array($estado->getId(), [1, 2])) ? [$estado] : [];
return $this->render('ter_persona/editar.html.twig', [
'persona' => $persona,
'form' => $form->createView(),
'estados' => $estadosFiltrados,
]);
}
#[Route('/ter/persona/show/{id}', name: 'ter_persona_show')]
public function showPersona(Request $request, TerPersona $persona, \App\Services\DocumentHandler $documentHandler, \App\Services\ResponseHandler $responseHandler, \App\Services\MailerCore $mailerCore, MessageBusInterface $bus): Response
{
$entityManager = $this->entityManager;
$entrevista = null; // Validar entrevista de persona
// Validar los dias que lleva en la empresa desde fecha ingreso
$diasEmpresa = null;
$fechaIngreso = null;
if (!$persona) {
throw $this->createNotFoundException('No se encontró a la persona solicitada, valide e intente nuevamente.');
}
// Validar que existio esa persona como candidato
$candidato = $entityManager->getRepository(GHCandidato::class)->findOneBy([
'numeroDocumento' => $persona->getNumeroDocumento()
]);
if($candidato){
$fechaIngreso = $candidato->getContratacion()->last();
$entrevista = $candidato->getEntrevista()->last();
$diasEmpresa = date_diff($fechaIngreso && $fechaIngreso->getFechaIngreso() ? $fechaIngreso->getFechaIngreso() : new \DateTime(), new \DateTime('now'))->days;
}else{
// Si no fue candidato buscar por la fecha de creacion
$diasEmpresa = date_diff($persona->getCreateAt(), new \DateTime('now'))->days;
}
// Validar los contactos de emergencia que tiene el usuario
$contactosEmergencia = $persona->getContactoPersona();
$form = $this->createForm(TerPersonaType::class, $persona, ['disabled_fields' => false, 'method' => 'POST', 'action' => $this->generateUrl($request->attributes->get('_route'), ['id' => $persona->getId()])]);
$form->remove('nombres')
->remove('tipoDocumento')
->remove('numeroDocumento');
// Precargar datos del formulario
$form->get('direccion')->setData($persona ? $persona->getDireccion() : ($entrevista ? $entrevista->getDireccion() : null));
$form->get('barrio')->setData($persona ? $persona->getBarrio() : ($entrevista ? $entrevista->getBarrio() : null));
$form->get('localidad')->setData($persona ? $persona->getLocalidad() : ($entrevista ? $entrevista->getLocalidad() : null));
$form->get('email')->setData($persona ? $persona->getEmail() : ($candidato ? $candidato->getCorreoElectronico() : null));
$form->get('celular')->setData($persona ? $persona->getCelular() : ($candidato ? $candidato->getCelular() : null));
$form->get('telefonoFijo')->setData($persona ? $persona->getTelefonoFijo() : ($entrevista ? $entrevista->getTelefono() : null));
$form->get('tenenciaResidencia')->setData($persona->getTenenciaResidencia() ? $persona->getTenenciaResidencia() : ($entrevista && $entrevista->getTenenciaResidencia() ? $entrevista->getTenenciaResidencia() : null));
// Segunda pestaña -> INFORMACIÓN GENERAL
$entrevistaInfoAcademica = $entrevista && $entrevista->getEntrevistaInfoAcademica()->last() ? $entrevista->getEntrevistaInfoAcademica()->last() : null;
$form->get('nivelEducativo')->setData($persona->getNivelEducativo() ?
$persona->getNivelEducativo() :
($entrevistaInfoAcademica && $entrevistaInfoAcademica->getNivelEducativo() ? $entrevistaInfoAcademica->getNivelEducativo() : null));
$form->get('tituloObtenido')->setData($persona->getTituloObtenido() ? $persona->getTituloObtenido() : ($entrevistaInfoAcademica ? $entrevistaInfoAcademica->getNombreCarrera() : null));
$form->get('institucion')->setData($persona->getInstitucion() ? $persona->getInstitucion() : ($entrevistaInfoAcademica ? $entrevistaInfoAcademica->getInstitucion() : null));
$form->get('horario')->setData($persona->getHorario() ? $persona->getHorario() : ($entrevistaInfoAcademica ? $entrevistaInfoAcademica->getHorario() : null));
$form->get('modalidadEstudio')->setData($persona->getModalidadEstudio() ?
$persona->getModalidadEstudio() :
($entrevistaInfoAcademica && $entrevistaInfoAcademica->getModalidadTrabajo() ?
$entrevistaInfoAcademica->getModalidadTrabajo() : null));
// Validar el historial que tiene la persona en cambios
$cambiosHistorico = $persona->getHistorialesPerso();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$entityManager = $this->entityManager;
// Validar foto de persona
$archivo = $form->get('fotografia')->getData();
if($archivo){
$archivoNombre = $this->documentHandler->cargarArchivo($archivo, TerPersona::class, "",$persona->getFotografia());
if($archivoNombre['code'] !== 'success'){
$this->code = 'error';
$this->msj = '¡Archivo no compatible!';
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url]));
}
$persona->setFotografia($archivoNombre['msj']); // Guardar
$entityManager->persist($persona);
}
// Validar el grupo sanguineo si viene de entrevista
if($entrevista)
$persona->setGrupoSanguineoRH(strtoupper($entrevista->getGrupoSanguineo()));
$persona->setFechaDiligenciamiento(new \DateTime()); // Fecha diligenciamiento cuando actualiza datos
$entityManager->persist($persona);
$historial = new TerPersonaHistorial();
$historial->setFechaDiligenciamiento(new \DateTime()); // Agregar la fecha de diligencia
$historial->setCreateAt($persona->getCreateAt());
$historial->setUpdateAt($persona->getUpdateAt());
$historial->setCreateUser($persona->getCreateUser());
$historial->setUpdateUser($persona->getUpdateUser());
// $historial->setFechaNacimiento($persona->getFechaNacimiento());
$historial->setCelular($persona->getCelular());
$historial->setEdad($persona->getEdad());
$historial->setGrupoSanguineoRH($persona->getGrupoSanguineoRH());
$historial->setEstrato($persona->getEstrato());
$historial->setLocalidad($persona->getLocalidad());
$historial->setBarrio($persona->getBarrio());
$historial->setDireccion($persona->getDireccion());
$historial->setUniversidad($persona->getUniversidad());
$historial->setSede($persona->getSede());
$historial->setCualExequial($persona->getCualExequial());
$historial->setFotogratia($persona->getFotografia());
$historial->setQueHaceTiempoLibre($persona->getQueHaceTiempoLibre());
$historial->setCualDeporte($persona->getCualDeporte());
$historial->setCualEnfermedad($persona->getCualEnfermedad());
$historial->setCualesActiviSalud($persona->getCualesActiviSalud());
$historial->setPromedioDiario($persona->getPromedioDiario());
$historial->setPersona($persona);
$entityManager->persist($historial);
$entityManager->flush();
// Enviar notificación al usuario para que actualice su perfil en un año
$this->Notificacion1anio($persona);
$this->code = 'success';
$this->msj = 'Registro Actualizado correctamente';
return new Response(json_encode(['code' => $this->code, 'msj' => $this->msj, 'url' => $this->url]));
}
return $this->render('ter_persona/show.html.twig', [
'historial' => $cambiosHistorico,
'persona' => $persona,
'form' => $form->createView(),
// Validar si fue candidato
'entrevista' => $entrevista,
// Contactos de persona
'contactosPersona' => $contactosEmergencia,
'diasEmpresa' => (floor(($diasEmpresa / 365) * 100) / 100), // Dias en la empresa calculada en decimales
'fechaIngreso' => $fechaIngreso && $fechaIngreso->getFechaIngreso()
? ($fechaIngreso->getFechaIngreso())->format('Y-m-d') : ($persona->getCreateAt())->format('Y-m-d'),
]);
}
public function Notificacion1anio(TerPersona $persona = null) {
$entityManager = $this->entityManager;
// VERIFICAR los usuarios que tengan ya un año sin actualizar su perfil
if ($personaCliente = $this->getUser()->getPersona()->isPersonaCliente()) {
// Si la persona tiene un cliente asociado, no se envía la notificación
return;
}
$personaAtenticada = $this->getUser()->getPersona()->getId();
// $persona = $entityManager->getRepository(\App\Entity\TerPersona::class)->find($personaAtenticada);
$personaGH = $entityManager->getRepository(\App\Entity\TerPersona::class)->findOneBy(['numeroDocumento' => '52225052']);
if (!$persona) {
throw $this->createNotFoundException('No se encontró a la persona solicitada, valide e intente nuevamente.');
}
$fechaActual = new \DateTime('now');
$fechaUltimaActualizacion = $persona->getUpdateAt();
$diferencia1anio = $fechaUltimaActualizacion->diff($fechaActual);
$personaPerfilCargo = $persona->getPerfilCargo();
if($personaPerfilCargo)
$procesoPersona = $personaPerfilCargo->getParProceso()->getId();
$personaGHPerfilCargo = $personaGH->getPerfilCargo();
$procesoPersonaGH = $personaGHPerfilCargo->getParProceso()->getId();
//enviar a gh a ana maria benitez
if ($diferencia1anio->y >= 1 && $persona->isNoti1anio() === false && $persona->getEstado()->getId() == 1) {
$notificacionInterna = new SecMensaje();
$notificacionInterna->setProceso(
$this->entityManager->getRepository(\App\Entity\ParProceso::class)->find($procesoPersona)
);
// Pasa la ENTIDAD persona directamente
$notificacionInterna->setColaborador($persona);
$notificacionInterna->setPerfilCargo($personaPerfilCargo);
$notificacionInterna->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
$notificacionInterna->setTipo(1); // notificación de un año
$notificacionInterna->setTitulo('Actualización de datos personales');
$notificacionInterna->setDescripcion(
'Buen día ' . $persona->getNombres() . ', se le recuerda que hace un año no actualiza su información personal en el sistema, por favor ingrese a la sección de colaboradores y actualice su información. Gracias'
);
$notificacionInterna->setLeido(false);
$notificacionInterna->setCreateAt(new \DateTime('now'));
$notificacionInterna->setUpdateAt(new \DateTime('now'));
$notificacionInterna->setCreateUser($this->getUser()->getUsername());
$notificacionInterna->setUpdateUser($this->getUser()->getUsername());
// Marca que ya se notificó el año
$persona->setNoti1anio(true); // <-- verifica el nombre del setter
$entityManager->persist($notificacionInterna);
$entityManager->persist($persona); // opcional si ya está managed, pero seguro
}
if ($diferencia1anio->y >= 1) {
// notificación para GH
$notificacionInternaGH = new SecMensaje();
$notificacionInternaGH->setProceso(
$this->entityManager->getRepository(\App\Entity\ParProceso::class)->find($procesoPersonaGH)
);
// Asegúrate de pasar la ENTIDAD $personaGH (no el id)
$notificacionInternaGH->setColaborador($personaGH);
$notificacionInternaGH->setPerfilCargo($personaGHPerfilCargo);
$notificacionInternaGH->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
$notificacionInternaGH->setTipo(1);
$notificacionInternaGH->setTitulo('Actualización de datos personales: ' . $persona->getNombres());
$notificacionInternaGH->setDescripcion(
'Notificación para el colaborador: ' . $persona->getNombres() . '<br>' .
'Buen día ' . $persona->getNombres() . ', se le recuerda que hace un año no actualiza su información personal en el sistema, por favor ingrese a la sección de colaboradores y actualice su información. Gracias'
);
$notificacionInternaGH->setLeido(false);
$notificacionInternaGH->setCreateAt(new \DateTime('now'));
$notificacionInternaGH->setUpdateAt(new \DateTime('now'));
$notificacionInternaGH->setCreateUser($this->getUser()->getUsername());
$notificacionInternaGH->setUpdateUser($this->getUser()->getUsername());
$entityManager->persist($notificacionInternaGH);
}
$entityManager->flush();
}
// Funcion para repositorio de documentos
#[Route('/colaborador/repositorio_documentos/{id}', name: 'repositorio_documentos_colaborador')]
public function repositorioColaboradorDocumentos(Request $request, EntityManagerInterface $entityManager, TerPersona $terPersona) {
// Buscar al candidato por terpersona
$candidato = $entityManager->getRepository(GHCandidato::class)->findOneBy([
'numeroDocumento' => $terPersona->getNumeroDocumento(),
]);
$camposDinamicos = [];
// Validar para mostrar otros documentos cargados
$otrosDocs = $request->get('otros') ?? false;
// Declaracion variables de candidato
$antecedentes = null;
$pruebaPsicotecnica = null;
$pruebaTecnica = null;
$examenesMedicos = null;
$visitaDomicilio = null;
$afiliaciones = null;
$contrato = null;
$recursoPerfil = null;
$documentos = null;
$cesantias = null;
$evidenciaEvaluacionDesempeno = null; // Evluacion desempeño
// Buscar los documentos asociados con la contratacion
$ghDocumentosContrato = null;
// Validar que encontro al candidato
if($candidato && !$otrosDocs){
// Buscar en todo el proceso de contratacion los documentos asociados al colaborador
$antecedentes = $entityManager->getRepository(GHRevisionInicial::class)->findOneBy([
'candidato' => $candidato,
]);
$pruebaPsicotecnica = $candidato->getPruebaPsicotecnica()->last() ?? null;
$pruebaTecnica = $candidato->getPruebaTecnica()->last() ?? null;
$examenesMedicos = $candidato->getExamenes()->last() ?? null;
$visitaDomicilio = $candidato->getVisitaDomiciliaria()->last() ?? null;
$afiliaciones = $candidato->getAfiliacionContratacion()->last() ?? null;
$contrato = $candidato->getContrato()->last() ?? null;
$recursoPerfil = $candidato->getSolicitudDotacion()->last() ?? null;
$documentos = $candidato->getContratacion()->last() ?? null;
// Buscar los documentos asociados con la contratacion
$ghDocumentosContrato = null;
if($documentos)
$ghDocumentosContrato = $entityManager->getRepository(GHDocumentoContratacion::class)->findOneBy([
'contratacion' => $documentos,
]);
}
// Validar el terPersona
if($terPersona && !$otrosDocs){
// Datos de mantenimiento -----------------------------------------------------------------------
$registroOpain = $terPersona->getRegistrosOpain()->last() ?? null;
$registroDian = $terPersona->getRegistroInscripcion()->last() ?? null;
$registroDReposicion = $registroDian ? $registroDian->getRegistroInscripcionReposicion()->last() : null;
$examenPeriodico = $terPersona->getExamenPeriodicoPersona()->last() ?? null;
$visitaPeriodica = $terPersona->getVisitaPeriodicaPersona()->last() ?? null;
$antecedentesPeriodicos = $terPersona->getVerificacionAntecedentesPersona()->last() ?? null;
// Ev Desempeño -----------------------------------------------------------------------------
$evDesempeno = $terPersona->getEvaluacionesDesempenoPersona()->last() ?? null;
// Ultimas cesantias --------------------------------------------------------------------------
$cesantias = $terPersona->getRetiroCesantias()->last() ?? null;
// Proceso disciplinario -------------------------------------------------------------------
$procesoDisciplinario = $terPersona->getProcesoDisciplinarioPersona()->last() ?? null;
// Cambio contrato
$cambioContrato = $terPersona->getCambioContrato()->last() ?? null;
// Desvinculacion --------------------------------------------------------------------------
$desvinculacion = $terPersona->getDesvinculacion()->last() ?? null;
// dump($desvinculacion);
}
// Array para recorrer los filtrado
if(!$otrosDocs){
$camposDinamicos = [
// Proceso de seleccion
[
'titulo' => 'Hoja de Vida',
'campos' => [
'entidad' => [$candidato],
'atributo' => 'hojaVida',
'ruta' => 'Repository/GHCandidato/',
'icono' => 'fas fa-file',
// Fecha cargue documento
'fecha' => $candidato ? $candidato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],
[
'titulo' => 'Antecedentes',
'campos' => [
'entidad' => [$antecedentes],
'atributo' => 'archivo',
'ruta' => 'Repository/GHRevisionInicial/',
'icono' => 'fab fa-first-order-alt',
'fecha' => $antecedentes ? $antecedentes->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Prueba de Confiabilidad',
'campos' => [
'entidad' => [$pruebaPsicotecnica],
'atributo' => 'evidenciaDisc',
'ruta' => 'Repository/GHPruebasPsicotecnicas/',
'icono' => 'fas fa-head-side-cough',
'fecha' => $pruebaPsicotecnica ? $pruebaPsicotecnica->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Prueba Disc',
'campos' => [
'entidad' => [$pruebaPsicotecnica],
'atributo' => 'evidenciaEthickos',
'ruta' => 'Repository/GHPruebasPsicotecnicas/',
'icono' => 'fas fa-head-side-cough',
'fecha' => $pruebaPsicotecnica ? $pruebaPsicotecnica->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Prueba Tecnica',
'campos' => [
'entidad' => [$pruebaTecnica],
'atributo' => 'archivo',
'ruta' => 'Repository/GHPruebasTecnicas/',
'icono' => 'fas fa-head-side-virus',
'fecha' => $pruebaTecnica ? $pruebaTecnica->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
// Proceso de contratacion
'titulo' => 'Resultados Medicos',
'campos' => [
'entidad' => [$examenesMedicos],
'atributo' => 'resultado',
'ruta' => 'Repository/GHExamenes/',
'icono' => 'fas fa-list',
'fecha' => $examenesMedicos ? $examenesMedicos->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Visita Domiciliaria',
'campos' => [
'entidad' => [$visitaDomicilio],
'atributo' => 'informeVisita',
'ruta' => 'Repository/GHVisitaDomiciliaria/',
'icono' => 'fas fa-house-user',
'fecha' => $visitaDomicilio ? $visitaDomicilio->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Afiliaciones',
'campos' => [
'entidad' => [$afiliaciones],
'atributo' => 'soporte',
'ruta' => 'Repository/GHAfiliacionContratacion/',
'icono' => 'fas fa-passport',
// Agregar el listar ya que es una coleccion con varias afiliaciones
'enlace' => 'gh_afiliacion_contratacion',
'fecha' => $afiliaciones ? $afiliaciones->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Contrato',
'campos' => [
'entidad' => [$contrato],
'atributo' => 'contrato',
'ruta' => 'Repository/GHContrato/',
'icono' => 'fas fa-user-cog',
'fecha' => $contrato ? $contrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
// DAtos de recurso perfil
'titulo' => 'Foto Recurso Perfil',
'campos' => [
'entidad' => [$recursoPerfil],
'atributo' => 'foto',
'ruta' => 'Repository/GHSolicitudDotacion/',
'icono' => 'fa-solid fa-briefcase',
'fecha' => $recursoPerfil ? $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Cert. Procuraduria',
'campos' => [
'entidad' => [$recursoPerfil],
'atributo' => 'certificadoProcuraduria',
'ruta' => 'Repository/GHSolicitudDotacion/',
'icono' => 'fa-solid fa-briefcase',
'fecha' => $recursoPerfil ? $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Soporte Carnet',
'campos' => [
'entidad' => [$recursoPerfil],
'atributo' => 'soporteCarnet',
'ruta' => 'Repository/GHSolicitudDotacion/',
'icono' => 'fa-solid fa-briefcase',
'fecha' => $recursoPerfil ? $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Foto Carnet',
'campos' => [
'entidad' => [$recursoPerfil],
'atributo' => 'fotoCarnet',
'ruta' => 'Repository/GHSolicitudDotacion/',
'icono' => 'fa-solid fa-briefcase',
'fecha' => $recursoPerfil ? $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Documentos',
'campos' => [
'entidad' => [$ghDocumentosContrato],
'atributo' => 'evidencia',
'ruta' => 'Repository/GHDocumentoContratacion/',
'icono' => 'fas fa-folder-open',
'enlace' => 'gh_documento_contratacion',
'fecha' => $ghDocumentosContrato ? $ghDocumentosContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],
// Evidencias de mantenimiento
[
'titulo' => 'Formulario 1526',
'campos' => [
'entidad' => [$registroDian],
'atributo' => 'formato',
'ruta' => 'Repository/GHRegistroInscripcion/',
'icono' => 'fas fa-file-signature',
'fecha' => $registroDian && $registroDian->getFechaInscripcion()
? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Formulario 1783',
'campos' => [
'entidad' => [$registroDian],
'atributo' => 'formulario1783',
'ruta' => 'Repository/GHRegistroInscripcion/',
'icono' => 'fas fa-file-signature',
'fecha' => $registroDian && $registroDian->getFechaInscripcion()
? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Acta Entrega Carnet',
'campos' => [
'entidad' => [$registroDian],
'atributo' => 'evidencia',
'ruta' => 'Repository/GHRegistroInscripcion/',
'icono' => 'fas fa-id-card',
'fecha' => $registroDian && $registroDian->getFechaInscripcion()
? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Manual Funciones',
'campos' => [
'entidad' => [$registroDian],
'atributo' => 'manual',
'ruta' => 'Repository/GHRegistroInscripcion/',
'icono' => 'fas fa-file-signature',
'fecha' => $registroDian && $registroDian->getFechaInscripcion()
? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Repo. Acta Entrega Carnet',
'campos' => [
'entidad' => [$registroDReposicion],
'atributo' => 'actaEntrega',
'ruta' => 'Repository/GHRegistroInscripcionReposicion/',
'icono' => 'fas fa-file-signature',
'fecha' => $registroDReposicion && $registroDReposicion->getUpdateAt()
? $registroDReposicion->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],
[
'titulo' => 'Ev. Carnet OPAIN',
'campos' => [
'entidad' => [$registroOpain],
'atributo' => 'evidenciaCarnet',
'ruta' => 'Repository/GHRegistroOpain/',
'icono' => 'fas fa-id-card',
'fecha' => $registroOpain ? $registroOpain->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Renov. Carnet OPAIN',
'campos' => [
'entidad' => [$registroOpain],
'atributo' => 'evidenciaCarnet',
'ruta' => 'Repository/GHRegistroOpain/',
'icono' => 'fas fa-id-card',
'fecha' => $registroOpain && $registroOpain->getFechaRenovacion() ?
$registroOpain->getFechaRenovacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Devol. Carnet OPAIN',
'campos' => [
'entidad' => [$registroOpain],
'atributo' => 'evidenciaCarnet',
'ruta' => 'Repository/GHRegistroOpain/',
'icono' => 'fas fa-id-card',
'fecha' => $registroOpain && $registroOpain->getFechaRenovacion() ?
$registroOpain->getFechaRenovacion()->format('Y-m-d') : 'N/A',
]
],
// Controles de seguridad --------------------------------- GH
[
'titulo' => 'Resultado / Examen Periodico',
'campos' => [
'entidad' => [$examenPeriodico],
'atributo' => 'soporte',
'ruta' => 'Repository/GHExamenPeriodico/',
'icono' => 'fas fa-file',
'fecha' => $examenPeriodico && $examenPeriodico->getFecha() ?
$examenPeriodico->getFecha()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Resultado / Visita Periodica',
'campos' => [
'entidad' => [$visitaPeriodica],
'atributo' => 'soporte',
'ruta' => 'Repository/GHExamenPeriodico/',
'icono' => 'fas fa-file',
'fecha' => $visitaPeriodica && $visitaPeriodica->getFecha() ?
$visitaPeriodica->getFecha()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Resultado / Verificación Antecedentes',
'campos' => [
'entidad' => [$antecedentesPeriodicos],
'atributo' => 'evidencia',
'ruta' => 'Repository/GHVerificacionAntecedente/',
'icono' => 'fas fa-file',
'fecha' => $antecedentesPeriodicos && $antecedentesPeriodicos->getFecha() ?
$antecedentesPeriodicos->getFecha()->format('Y-m-d') : 'N/A',
]
],
// Evaluacion y desempeño
[
'titulo' => 'Evaluación Desempeño',
'campos' => [
'entidad' => [$evDesempeno],
'atributo' => 'fechaSolicitud',
'ruta' => 'Repository/GHEvaluacionDesempenoPersona/',
'icono' => 'fas fa-scroll',
'enlace' => 'gh_retiro_cesantias_edit',
'fecha' => $evDesempeno && $evDesempeno->getUpdateAt() ?
$evDesempeno->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],
// Cesantias
[
'titulo' => 'Retiro Cesantias',
'campos' => [
'entidad' => [$cesantias],
'atributo' => 'fechaSolicitud',
'ruta' => 'Repository/GHRetiroCesantias/',
'icono' => 'fas fa-scroll',
'enlace' => 'gh_retiro_cesantias_edit',
'fecha' => $cesantias && $cesantias->getUpdateAt() ?
$cesantias->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
// Proceso disciplinario
'titulo' => 'Acta Proceso Disciplinario',
'campos' => [
'entidad' => [$procesoDisciplinario],
'atributo' => 'acta',
'ruta' => 'Repository/GHProcesoDisciplinario/',
'icono' => 'fas fa-pencil-ruler',
'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
$procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Soporte Medida Disciplinaria',
'campos' => [
'entidad' => [$procesoDisciplinario],
'atributo' => 'soporteMedida',
'ruta' => 'Repository/GHProcesoDisciplinario/',
'icono' => 'fas fa-pencil-ruler',
'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
$procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Citación Proceso Disciplinario',
'campos' => [
'entidad' => [$procesoDisciplinario],
'atributo' => 'citacion',
'ruta' => 'Repository/GHProcesoDisciplinario/',
'icono' => 'fas fa-pencil-ruler',
'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
$procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Gestión Apelación',
'campos' => [
'entidad' => [$procesoDisciplinario],
'atributo' => 'gestionApelacion',
'ruta' => 'Repository/GHProcesoDisciplinario/',
'icono' => 'fas fa-pencil-ruler',
'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
$procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],
// Cambio contrato
[
'titulo' => 'Prueba Tecnica / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'pruebaTecnica',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Examen Medico / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'examenMedico',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Visita Domiciliaria / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'visitaDomiciliaria',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Contrato / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'contrato',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Carta Notif. / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'cartaNotificacion',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Cesion Contrato / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'cesionContrato',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Otro Si / Cond. Contrato',
'campos' => [
'entidad' => [$cambioContrato],
'atributo' => 'otroSi',
'ruta' => 'Repository/GHCambioContrato/',
'icono' => 'fab fa-stack-exchange',
'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
$cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
]
],
// Proceso de desvinculacion
[
'titulo' => 'Soporte Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'soporte',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],
[
'titulo' => 'Carta Renuncia',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'cartaRenuncia',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Acta Entrega / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'actaEntrega',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Acta Destruccion Carnet Dian / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'actaDestruccionCarnetDian',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Liquidación / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'liquidacion',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Liquidación Firmada / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'liquidacionFirmada',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Soporte Liquidación / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'soporteLiquidacion',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Paz y Salvo / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'pazysalvo',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],[
'titulo' => 'Documentos Firmados / Desvinculación',
'campos' => [
'entidad' => [$desvinculacion],
'atributo' => 'documentosFirmados',
'ruta' => 'Repository/GHDesvinculacion/',
'icono' => 'fas fa-person-circle-minus',
'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
$desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
]
],
];
}
return $this->render('ter_persona/repositorioDocumentos.html.twig',[
'terPersona' => $terPersona,
'camposDinamicos' => $camposDinamicos,
'candidato' => $candidato,
// Retiro Cesantias
'cesantias' => $cesantias,
'otrosDocs' => $otrosDocs,
]);
}
// Funcion para registrar los demas documentos
#[Route('/colaborador/repositorio_documentos_otros_docs/{id}', name: 'repositorio_documentos_colaborador_otros_docs')]
public function registrarOtrosDocumentos(Request $request, EntityManagerInterface $entityManager, TerPersona $terPersona)
{
// Listar los documentos que tiene ya el colaborador
$documentos = $terPersona->getOtrosDocumentos() ?? [];
$nombreDocumentos = $terPersona->getNombreOtrosDocumentos() ?? [];
// Crear un formulario improvisado
$form = $this->createFormBuilder(null,[
'method' => 'POST',
'action' => $this->generateUrl('repositorio_documentos_colaborador_otros_docs',[
'id' => $terPersona->getId(),
])
])
->add('otrosDocumentos',FileType::class,[
'multiple' => true,
'mapped' => false,
'required' => true,
'label'=>'Otros Documentos',
])
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$archivos = $form->get('otrosDocumentos')->getData();
// Validar que los archivos sean validos
if($archivos){
foreach($archivos as $archivo){
$carchivoCargado = $this->documentHandler->cargarArchivo($archivo,TerPersona::class);
if($carchivoCargado['code'] !== 'success'){
return new JsonResponse([
'code' => 'error',
'msj' => '¡Archivos no compatibles!',
'url' => $this->url,
'html' => $this->html
]);
}
// Seguir acumulando archivos , ya que no se pidio funcion de borrar , si se pide es adicional
$documentos[] = $carchivoCargado['msj'];
$nombreDocumentos[] = $carchivoCargado['title']; // Cargar los nombres de los documentos
}
// Persistir los datos
$terPersona->setOtrosDocumentos($documentos);
$terPersona->setNombreOtrosDocumentos($nombreDocumentos);
$entityManager->persist($terPersona);
}
// Guardar datos
$entityManager->flush();
return new JsonResponse([
'code' => 'success',
'msj' => 'Registro cargado exitosamente',
'url' => $this->url,
'html' => $this->html
]);
}
return $this->renderForm('ter_persona/otros_documentos.html.twig',[
'terPersona' => $terPersona,
'form' => $form,
]);
}
#[Route('/colaborador/imprimir/{id}', name: 'perfil_colaborador_imprimir')]
public function imprimirColaborador(EntityManagerInterface $entityManager, TerPersona $persona, \App\Services\ResponseHandler $responseHandler): Response {
// $historial = $entityManager->getRepository(TerPersonaHistorial::class)->findBy(['persona' => $persona]);
// if (!$historial) {
// $this->addFlash('warning', 'No se encontro un historial asociado a la persona solicitada.');
// return $this->redirectToRoute($responseHandler->manejoRespuesta());
// }
$path = $this->getParameter('kernel.project_dir') . '/public_html/assets/img/brand/logos-empresas.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
$rutaLogo = $base64;
$historiales = $entityManager->getRepository(TerPersonaHistorial::class)->findBy(
['persona' => $persona],
['updateAt' => 'DESC'],
1
);
$historial = $historiales[0] ?? null;
$html = $this->renderView('formatos/formatoHistorialTerPersona.html.twig', ['logo' => $rutaLogo, 'historial' => $historial, 'persona' => $persona]);
$dompdf = new Dompdf();
//$customPaper = array(0, 0, 220, 130);
//$dompdf->setPaper($customPaper);
$dompdf->loadHtml($html);
$dompdf->render();
return new Response(
$dompdf->stream('resume', ["Attachment" => false]),
Response::HTTP_OK,
['Content-Type' => 'application/pdf']
);
}
}