src/Controller/TerPersonaController.php line 405

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\GHCandidato;
  4. use App\Entity\GHDocumentoContratacion;
  5. use App\Entity\GHEntrevista;
  6. use App\Entity\GHExamenPeriodico;
  7. use App\Entity\GHPruebasPsicotecnicas;
  8. use App\Entity\GHPruebasTecnicas;
  9. use App\Entity\GHRevisionInicial;
  10. use App\Entity\GHVerificacionAntecedente;
  11. use App\Entity\GHVerificacionAntecedentePersona;
  12. use App\Entity\SecMensaje;
  13. use App\Entity\TerPersonaHistorial;
  14. use App\Message\NotificarUltimoRegistroMessage;
  15. use App\Services\DocumentHandler;
  16. use Doctrine\Common\Collections\Criteria;
  17. use Doctrine\ORM\Mapping\Entity;
  18. use Dompdf\Dompdf;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  21. use Symfony\Component\Form\Extension\Core\Type\FileType;
  22. use Symfony\Component\HttpFoundation\JsonResponse;
  23. use Symfony\Component\HttpFoundation\Request;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Messenger\MessageBusInterface;
  26. use Symfony\Component\Routing\Annotation\Route;
  27. use Doctrine\ORM\EntityManagerInterface;
  28. use App\Entity\TerPersona;
  29. use App\Form\TerPersonaType;
  30. use App\Repository\TerPersonaRepository;
  31. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  32. class TerPersonaController extends AbstractController {
  33.     private $entityManager;
  34.     private $code 0;
  35.     private $msj "";
  36.     private $url "";
  37.     private $html "";
  38.     /**
  39.      * @var DocumentHandler
  40.      */
  41.     private $documentHandler;
  42.     public function __construct(EntityManagerInterface $entityManagerDocumentHandler $documentHandler) {
  43.         $this->entityManager $entityManager;
  44.         $this->documentHandler $documentHandler;
  45.     }
  46.     #[Route('/ter/persona'name'ter_persona')]
  47.     public function index(TerPersonaRepository $terPersonaRepository): Response {
  48.         $personas $terPersonaRepository->getAll();
  49.         return $this->render('ter_persona/index.html.twig', [
  50.                     'entities' => $personas,
  51.         ]);
  52.     }
  53.     
  54.       #[Route('/ter/persona/desvinculadas'name'ter_persona_desvinculadas')]
  55.     public function indexDesvinculadas(TerPersonaRepository $terPersonaRepository): Response {
  56.         $personas $terPersonaRepository->getAll([2]);
  57.         return $this->render('ter_persona/index.html.twig', [
  58.                     'entities' => $personas,
  59.         ]);
  60.     }
  61.     #[Route('/ter/persona/crear'name'ter_persona_new')]
  62.     public function crearPersona(Request $request\App\Services\DocumentHandler $documentHandler\App\Services\ResponseHandler $responseHandlerUserPasswordHasherInterface $passwordHasher): Response {
  63.         $persona = new TerPersona();
  64.         $form $this->createForm(TerPersonaType::class, $persona, ['method' => 'POST''action' => $this->generateUrl($request->attributes->get('_route'))]);
  65.         $form->remove('estado');
  66.         $form->handleRequest($request);
  67.         if ($form->isSubmitted() && $form->isValid()) {
  68.             $entityManager $this->entityManager;
  69.             $foto $form->get('fotografia')->getData();
  70.             //$indiceIzq = $form->get('indiceIzquierdo')->getData();
  71.             //$indiceDer = $form->get('indiceDerecho')->getData();
  72.             if ($foto != NULL) { //$persona->getFirmaCorta() != null && $persona->getFirmaLarga() != null &&  $indiceIzq != NULL && $indiceDer != NULL
  73.                 /*  $rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaCorta(), TerPersona::class);
  74.                   if ($rutaArchivo['code'] == 'success') {
  75.                   $persona->setFirmaCorta($rutaArchivo['msj']);
  76.                   }
  77.                   $rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaLarga(), TerPersona::class);
  78.                   if ($rutaArchivo['code'] == 'success') {
  79.                   $persona->setFirmaLarga($rutaArchivo['msj']);
  80.                   } */
  81.                 $rutaArchivo $documentHandler->cargarArchivo($fotoTerPersona::class);
  82.                 //  $rutaArchivoII = $documentHandler->cargarArchivo($indiceIzq, TerPersona::class);
  83.                 //  $rutaArchivoID = $documentHandler->cargarArchivo($indiceDer, TerPersona::class);
  84.                 if ($rutaArchivo['code'] == 'success') { //&& $rutaArchivoII['code'] == 'success' && $rutaArchivoID['code'] == 'success'
  85.                     $persona->setHorario('NA');
  86.                     $persona->setFotografia($rutaArchivo['msj']);
  87.                     //  $persona->setIndiceDerecho($rutaArchivoID['msj']);
  88.                     //  $persona->setIndiceIzquierdo($rutaArchivoII['msj']);
  89.                     $persona->setCreateAt(new \DateTime('now'));
  90.                     $persona->setCreateUser($this->getUser()->getUsername());
  91.                     $persona->setUpdateAt(new \DateTime('now'));
  92.                     $persona->setUpdateUser($this->getUser()->getUsername());
  93.                     $persona->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
  94.                     $persona->setFechaDiligenciamiento(new \DateTime('now'));
  95.                     $entityManager->persist($persona);
  96.                     $user = new \App\Entity\SecUser();
  97.                     $plaintextPassword 'ClaveTemporal123*';
  98.                     // hash the password (based on the security.yaml config for the $user class)
  99.                     $hashedPassword $passwordHasher->hashPassword(
  100.                             $user,
  101.                             $plaintextPassword
  102.                     );
  103.                     $user->setPassword($hashedPassword);
  104.                     $user->setEmail($persona->getEmail());
  105.                     $user->setEnabled(true);
  106.                     $user->setPersona($persona);
  107.                     $user->setUsername(trim($persona->getNumeroDocumento()));
  108.                     $user->setRoles(['ROLE_USUARIO']);
  109.                     $entityManager->persist($user);
  110.                     $entityManager->flush();
  111.                     $this->code 'success';
  112.                     $this->msj 'Registro creado correctamente';
  113.                     return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  114.                 } else {
  115.                     $this->code 'warning';
  116.                     $this->msj "Imposible continuar, por favor valide que los documentos solicitados esten presentes.{$rutaArchivo['msj']}";
  117.                     return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  118.                 }
  119.             } else {
  120.                 $this->code 'warning';
  121.                 $this->msj "Valide que la firma se encuentre adjunta en el formulario.";
  122.                 return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  123.             }
  124.         }
  125.         return $this->render('ter_persona/crear.html.twig', [
  126.                     'persona' => $persona,
  127.                     'form' => $form->createView(),
  128.         ]);
  129.     }
  130.     #[Route('/ter/persona/editar/{id}'name'ter_persona_edit')]
  131.     public function editarPersona(Request $requestTerPersona $persona\App\Services\DocumentHandler $documentHandler\App\Services\ResponseHandler $responseHandler\App\Services\MailerCore $mailerCore): Response {
  132.         $entityManager $this->entityManager;
  133.         if (!$persona) {
  134.             throw $this->createNotFoundException('No se encontró a la persona solicitada, valide e intente nuevamente.');
  135.         }
  136.         //
  137.         $form $this->createForm(TerPersonaType::class, $persona, ['disabled_fields' => true,'method' => 'POST''action' => $this->generateUrl($request->attributes->get('_route'),['id'=>$persona->getId()]  )]);
  138.         $form->remove('nombres')
  139.                 ->remove('tipoDocumento')
  140.                 ->remove('numeroDocumento')
  141.                 ->remove('email')
  142.                 ->remove('nivelCargo');
  143.         $form->handleRequest($request);
  144.         if ($form->isSubmitted() && $form->isValid()) {
  145.             $foto $form->get('fotografia')->getData();
  146.             // $indiceIzq = $form->get('indiceIzquierdo')->getData();
  147.             // $indiceDer = $form->get('indiceDerecho')->getData();
  148.             if ($foto != NULL) { //&& $indiceIzq != NULL && $indiceDer != NULL
  149.                 /* $rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaCorta(), TerPersona::class);
  150.                   if ($rutaArchivo['code'] == 'success') {
  151.                   $persona->setFirmaCorta($rutaArchivo['msj']);
  152.                   }
  153.                   $rutaArchivo = $documentHandler->cargarArchivoBase64($persona->getFirmaLarga(), TerPersona::class);
  154.                   if ($rutaArchivo['code'] == 'success') {
  155.                   $persona->setFirmaLarga($rutaArchivo['msj']);
  156.                   } */
  157.                 $rutaArchivo $documentHandler->cargarArchivo($fotoTerPersona::class);
  158.                 //  $rutaArchivoII = $documentHandler->cargarArchivo($indiceIzq, TerPersona::class);
  159.                 //  $rutaArchivoID = $documentHandler->cargarArchivo($indiceDer, TerPersona::class);
  160.                 if ($rutaArchivo['code'] == 'success') { //&& $rutaArchivoII['code'] == 'success' && $rutaArchivoID['code'] == 'success'
  161.                     $persona->setHorario('NA');
  162.                     $persona->setFotografia($rutaArchivo['msj']);
  163.                     // $persona->setIndiceDerecho($rutaArchivoID['msj']);
  164.                     // $persona->setIndiceIzquierdo($rutaArchivoII['msj']);
  165.                     /*
  166.                       $persona->setCreateAt(new \DateTime('now'));
  167.                       $persona->setCreateUser($this->getUser()->getUsername());
  168.                       $persona->setUpdateAt(new \DateTime('now'));
  169.                       $persona->setUpdateUser($this->getUser()->getUsername());
  170.                       $persona->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
  171.                       $entityManager->persist($persona);
  172.                       $user = new \App\Entity\SecUser();
  173.                       $plaintextPassword = 'ClaveTemporal123*';
  174.                       // hash the password (based on the security.yaml config for the $user class)
  175.                       $hashedPassword = $passwordHasher->hashPassword(
  176.                       $user,
  177.                       $plaintextPassword
  178.                       );
  179.                       $user->setPassword($hashedPassword);
  180.                       $user->setEmail($persona->getEmail());
  181.                       $user->setEnabled(true);
  182.                       $user->setPersona($persona);
  183.                       $user->setUsername(trim($persona->getNumeroDocumento()));
  184.                       $user->setRoles(['ROLE_USUARIO']);
  185.                       $entityManager->persist($user);
  186.                       $entityManager->flush();
  187.                       $this->addFlash('success', "Registro cargado exitosamente.");
  188.                       return $this->redirectToRoute($responseHandler->manejoRespuesta()); */
  189.                 } else {
  190.                     $this->code 'warning';
  191.                     $this->msj "Imposible continuar, por favor valide que los documentos solicitados esten presentes.{$rutaArchivo['msj']}";
  192.                     return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));                
  193.                 }
  194.             }
  195.             $persona->setUpdateAt(new \DateTime('now'));
  196.             $persona->setUpdateUser($this->getUser()->getUsername());
  197.             $entityManager->flush();
  198.             $usuario $entityManager->getRepository(\App\Entity\SecUser::class)->findOneBy(['username' => $persona->getNumeroDocumento()]);
  199.             /*  if ($usuario) {
  200.               $mailerCore->notificarUsuario('solicitaCarnet', [$usuario]);
  201.               $mailerCore->notificarUsuario('controlInstalaciones', [$usuario]);
  202.               $mailerCore->notificarUsuario('solicitudAccesos', [$usuario]);
  203.               } */
  204.               $this->code 'success';
  205.               $this->msj 'Registro cargado correctamente';
  206.               return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url'html' => $this->html]));
  207.         }
  208.             $estado $persona->getEstado();
  209.             $estadosFiltrados = ($estado && in_array($estado->getId(), [12])) ? [$estado] : [];
  210.         return $this->render('ter_persona/editar.html.twig', [
  211.                     'persona' => $persona,
  212.                     'form' => $form->createView(),
  213.                     'estados' => $estadosFiltrados,
  214.         ]);
  215.     }
  216.      #[Route('/ter/persona/show/{id}'name'ter_persona_show')]
  217.     public function showPersona(Request $requestTerPersona $persona\App\Services\DocumentHandler $documentHandler\App\Services\ResponseHandler $responseHandler\App\Services\MailerCore $mailerCoreMessageBusInterface $bus): Response
  218.      {
  219.          $entityManager $this->entityManager;
  220.          $entrevista null// Validar entrevista de persona
  221.          // Validar los dias que lleva en la empresa desde fecha ingreso
  222.          $diasEmpresa null;
  223.          $fechaIngreso null;
  224.          if (!$persona) {
  225.              throw $this->createNotFoundException('No se encontró a la persona solicitada, valide e intente nuevamente.');
  226.          }
  227.          // Validar que existio esa persona como candidato
  228.          $candidato $entityManager->getRepository(GHCandidato::class)->findOneBy([
  229.              'numeroDocumento' => $persona->getNumeroDocumento()
  230.          ]);
  231.          if($candidato){
  232.             $fechaIngreso $candidato->getContratacion()->last();
  233.              $entrevista $candidato->getEntrevista()->last();
  234.              $diasEmpresa date_diff($fechaIngreso && $fechaIngreso->getFechaIngreso() ? $fechaIngreso->getFechaIngreso() : new \DateTime(), new \DateTime('now'))->days;
  235.          }else{
  236.              // Si no fue candidato buscar por la fecha de creacion
  237.              $diasEmpresa date_diff($persona->getCreateAt(), new \DateTime('now'))->days;
  238.          }
  239.          // Validar los contactos de emergencia que tiene el usuario
  240.          $contactosEmergencia $persona->getContactoPersona();
  241.          $form $this->createForm(TerPersonaType::class, $persona, ['disabled_fields' => false'method' => 'POST''action' => $this->generateUrl($request->attributes->get('_route'), ['id' => $persona->getId()])]);
  242.          $form->remove('nombres')
  243.              ->remove('tipoDocumento')
  244.              ->remove('numeroDocumento');
  245.          // Precargar datos del formulario
  246.          $form->get('direccion')->setData($persona $persona->getDireccion() : ($entrevista $entrevista->getDireccion() : null));
  247.          $form->get('barrio')->setData($persona $persona->getBarrio() : ($entrevista $entrevista->getBarrio() : null));
  248.          $form->get('localidad')->setData($persona $persona->getLocalidad() : ($entrevista $entrevista->getLocalidad() : null));
  249.          $form->get('email')->setData($persona $persona->getEmail() : ($candidato $candidato->getCorreoElectronico() : null));
  250.          $form->get('celular')->setData($persona $persona->getCelular() : ($candidato $candidato->getCelular() : null));
  251.          $form->get('telefonoFijo')->setData($persona $persona->getTelefonoFijo() : ($entrevista $entrevista->getTelefono() : null));
  252.          $form->get('tenenciaResidencia')->setData($persona->getTenenciaResidencia() ? $persona->getTenenciaResidencia() : ($entrevista && $entrevista->getTenenciaResidencia() ? $entrevista->getTenenciaResidencia() : null));
  253.          // Segunda pestaña -> INFORMACIÓN GENERAL
  254.          $entrevistaInfoAcademica $entrevista && $entrevista->getEntrevistaInfoAcademica()->last() ? $entrevista->getEntrevistaInfoAcademica()->last() : null;
  255.          $form->get('nivelEducativo')->setData($persona->getNivelEducativo() ?
  256.              $persona->getNivelEducativo() :
  257.              ($entrevistaInfoAcademica && $entrevistaInfoAcademica->getNivelEducativo() ? $entrevistaInfoAcademica->getNivelEducativo() : null));
  258.          $form->get('tituloObtenido')->setData($persona->getTituloObtenido() ? $persona->getTituloObtenido() : ($entrevistaInfoAcademica $entrevistaInfoAcademica->getNombreCarrera() : null));
  259.          $form->get('institucion')->setData($persona->getInstitucion() ? $persona->getInstitucion() : ($entrevistaInfoAcademica $entrevistaInfoAcademica->getInstitucion() : null));
  260.          $form->get('horario')->setData($persona->getHorario() ? $persona->getHorario() : ($entrevistaInfoAcademica $entrevistaInfoAcademica->getHorario() : null));
  261.          $form->get('modalidadEstudio')->setData($persona->getModalidadEstudio() ?
  262.              $persona->getModalidadEstudio() :
  263.              ($entrevistaInfoAcademica && $entrevistaInfoAcademica->getModalidadTrabajo() ?
  264.              $entrevistaInfoAcademica->getModalidadTrabajo() : null));
  265.          // Validar el historial que tiene la persona en cambios
  266.          $cambiosHistorico $persona->getHistorialesPerso();
  267.          $form->handleRequest($request);
  268.          if ($form->isSubmitted() && $form->isValid()) {
  269.              $entityManager $this->entityManager;
  270.              // Validar foto de persona
  271.              $archivo $form->get('fotografia')->getData();
  272.              if($archivo){
  273.                  $archivoNombre $this->documentHandler->cargarArchivo($archivoTerPersona::class, "",$persona->getFotografia());
  274.                  if($archivoNombre['code'] !== 'success'){
  275.                      $this->code 'error';
  276.                      $this->msj '¡Archivo no compatible!';
  277.                      return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url]));
  278.                  }
  279.                  $persona->setFotografia($archivoNombre['msj']); // Guardar
  280.                  $entityManager->persist($persona);
  281.              }
  282.              // Validar el grupo sanguineo si viene de entrevista
  283.              if($entrevista)
  284.                  $persona->setGrupoSanguineoRH(strtoupper($entrevista->getGrupoSanguineo()));
  285.              $persona->setFechaDiligenciamiento(new \DateTime()); // Fecha diligenciamiento cuando actualiza datos
  286.              $entityManager->persist($persona);
  287.              $historial = new TerPersonaHistorial();
  288.              $historial->setFechaDiligenciamiento(new \DateTime()); // Agregar la fecha de diligencia
  289.              $historial->setCreateAt($persona->getCreateAt());
  290.              $historial->setUpdateAt($persona->getUpdateAt());
  291.              $historial->setCreateUser($persona->getCreateUser());
  292.              $historial->setUpdateUser($persona->getUpdateUser());
  293.              // $historial->setFechaNacimiento($persona->getFechaNacimiento());
  294.              $historial->setCelular($persona->getCelular());
  295.              $historial->setEdad($persona->getEdad());
  296.              $historial->setGrupoSanguineoRH($persona->getGrupoSanguineoRH());
  297.              $historial->setEstrato($persona->getEstrato());
  298.              $historial->setLocalidad($persona->getLocalidad());
  299.              $historial->setBarrio($persona->getBarrio());
  300.              $historial->setDireccion($persona->getDireccion());
  301.              $historial->setUniversidad($persona->getUniversidad());
  302.              $historial->setSede($persona->getSede());
  303.              $historial->setCualExequial($persona->getCualExequial());
  304.              $historial->setFotogratia($persona->getFotografia());
  305.              $historial->setQueHaceTiempoLibre($persona->getQueHaceTiempoLibre());
  306.              $historial->setCualDeporte($persona->getCualDeporte());
  307.              $historial->setCualEnfermedad($persona->getCualEnfermedad());
  308.              $historial->setCualesActiviSalud($persona->getCualesActiviSalud());
  309.              $historial->setPromedioDiario($persona->getPromedioDiario());
  310.              $historial->setPersona($persona);
  311.              $entityManager->persist($historial);
  312.              $entityManager->flush();
  313.              // Enviar notificación al usuario para que actualice su perfil en un año
  314.              $this->Notificacion1anio($persona);
  315.              $this->code 'success';
  316.              $this->msj 'Registro Actualizado correctamente';
  317.              return new Response(json_encode(['code' => $this->code'msj' => $this->msj'url' => $this->url]));
  318.          }
  319.          return $this->render('ter_persona/show.html.twig', [
  320.              'historial' => $cambiosHistorico,
  321.              'persona' => $persona,
  322.              'form' => $form->createView(),
  323.              // Validar si fue candidato
  324.              'entrevista' => $entrevista,
  325.              // Contactos de persona
  326.              'contactosPersona' => $contactosEmergencia,
  327.              'diasEmpresa' => (floor(($diasEmpresa 365) * 100) / 100), // Dias en la empresa calculada en decimales
  328.              'fechaIngreso' => $fechaIngreso && $fechaIngreso->getFechaIngreso()
  329.                  ? ($fechaIngreso->getFechaIngreso())->format('Y-m-d') : ($persona->getCreateAt())->format('Y-m-d'),
  330.          ]);
  331.      }
  332.      public function Notificacion1anio(TerPersona $persona null) {
  333.         $entityManager $this->entityManager;
  334.         // VERIFICAR los usuarios que tengan ya un año sin actualizar su perfil
  335.          if ($personaCliente $this->getUser()->getPersona()->isPersonaCliente()) {
  336.              // Si la persona tiene un cliente asociado, no se envía la notificación
  337.              return;
  338.          }
  339.          $personaAtenticada =  $this->getUser()->getPersona()->getId();
  340.          // $persona = $entityManager->getRepository(\App\Entity\TerPersona::class)->find($personaAtenticada);
  341.          $personaGH $entityManager->getRepository(\App\Entity\TerPersona::class)->findOneBy(['numeroDocumento' => '52225052']);
  342.          if (!$persona) {
  343.                 throw $this->createNotFoundException('No se encontró a la persona solicitada, valide e intente nuevamente.');
  344.          }
  345.          $fechaActual = new \DateTime('now');
  346.          $fechaUltimaActualizacion $persona->getUpdateAt();
  347.          $diferencia1anio $fechaUltimaActualizacion->diff($fechaActual);
  348.          $personaPerfilCargo $persona->getPerfilCargo();
  349.          if($personaPerfilCargo)
  350.             $procesoPersona $personaPerfilCargo->getParProceso()->getId();
  351.          $personaGHPerfilCargo $personaGH->getPerfilCargo();
  352.          $procesoPersonaGH $personaGHPerfilCargo->getParProceso()->getId();
  353.          //enviar a gh a ana maria benitez
  354.          if ($diferencia1anio->>= && $persona->isNoti1anio() === false && $persona->getEstado()->getId() == 1) {
  355.              $notificacionInterna = new SecMensaje();
  356.              $notificacionInterna->setProceso(
  357.                  $this->entityManager->getRepository(\App\Entity\ParProceso::class)->find($procesoPersona)
  358.              );
  359.              // Pasa la ENTIDAD persona directamente
  360.              $notificacionInterna->setColaborador($persona);
  361.              $notificacionInterna->setPerfilCargo($personaPerfilCargo);
  362.              $notificacionInterna->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
  363.              $notificacionInterna->setTipo(1); // notificación de un año
  364.              $notificacionInterna->setTitulo('Actualización de datos personales');
  365.              $notificacionInterna->setDescripcion(
  366.                  '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'
  367.              );
  368.              $notificacionInterna->setLeido(false);
  369.              $notificacionInterna->setCreateAt(new \DateTime('now'));
  370.              $notificacionInterna->setUpdateAt(new \DateTime('now'));
  371.              $notificacionInterna->setCreateUser($this->getUser()->getUsername());
  372.              $notificacionInterna->setUpdateUser($this->getUser()->getUsername());
  373.              // Marca que ya se notificó el año
  374.              $persona->setNoti1anio(true); // <-- verifica el nombre del setter
  375.              $entityManager->persist($notificacionInterna);
  376.              $entityManager->persist($persona); // opcional si ya está managed, pero seguro
  377.          }
  378.          if ($diferencia1anio->>= 1) {
  379.              // notificación para GH
  380.              $notificacionInternaGH = new SecMensaje();
  381.              $notificacionInternaGH->setProceso(
  382.                  $this->entityManager->getRepository(\App\Entity\ParProceso::class)->find($procesoPersonaGH)
  383.              );
  384.              // Asegúrate de pasar la ENTIDAD $personaGH (no el id)
  385.              $notificacionInternaGH->setColaborador($personaGH);
  386.              $notificacionInternaGH->setPerfilCargo($personaGHPerfilCargo);
  387.              $notificacionInternaGH->setEstado($this->entityManager->getRepository(\App\Entity\ParEstado::class)->find(1));
  388.              $notificacionInternaGH->setTipo(1);
  389.              $notificacionInternaGH->setTitulo('Actualización de datos personales: ' $persona->getNombres());
  390.              $notificacionInternaGH->setDescripcion(
  391.                  'Notificación para el colaborador: ' $persona->getNombres() . '<br>' .
  392.                  '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'
  393.              );
  394.              $notificacionInternaGH->setLeido(false);
  395.              $notificacionInternaGH->setCreateAt(new \DateTime('now'));
  396.              $notificacionInternaGH->setUpdateAt(new \DateTime('now'));
  397.              $notificacionInternaGH->setCreateUser($this->getUser()->getUsername());
  398.              $notificacionInternaGH->setUpdateUser($this->getUser()->getUsername());
  399.              $entityManager->persist($notificacionInternaGH);
  400.          }
  401.          $entityManager->flush();
  402.      }
  403.      // Funcion para repositorio de documentos
  404.     #[Route('/colaborador/repositorio_documentos/{id}'name'repositorio_documentos_colaborador')]
  405.     public function repositorioColaboradorDocumentos(Request $requestEntityManagerInterface $entityManagerTerPersona $terPersona) {
  406.         // Buscar al candidato por terpersona
  407.         $candidato $entityManager->getRepository(GHCandidato::class)->findOneBy([
  408.             'numeroDocumento' => $terPersona->getNumeroDocumento(),
  409.         ]);
  410.         $camposDinamicos = [];
  411.         // Validar para mostrar otros documentos cargados
  412.         $otrosDocs $request->get('otros') ?? false;
  413.         // Declaracion variables de candidato
  414.         $antecedentes null;
  415.         $pruebaPsicotecnica null;
  416.         $pruebaTecnica null;
  417.         $examenesMedicos null;
  418.         $visitaDomicilio null;
  419.         $afiliaciones null;
  420.         $contrato null;
  421.         $recursoPerfil null;
  422.         $documentos null;
  423.         $cesantias null;
  424.         $evidenciaEvaluacionDesempeno null// Evluacion desempeño
  425.         // Buscar los documentos asociados con la contratacion
  426.         $ghDocumentosContrato null;
  427.         // Validar que encontro al candidato
  428.         if($candidato && !$otrosDocs){
  429.             // Buscar en todo el proceso de contratacion los documentos asociados al colaborador
  430.             $antecedentes $entityManager->getRepository(GHRevisionInicial::class)->findOneBy([
  431.                 'candidato' => $candidato,
  432.             ]);
  433.             $pruebaPsicotecnica $candidato->getPruebaPsicotecnica()->last() ?? null;
  434.             $pruebaTecnica $candidato->getPruebaTecnica()->last() ?? null;
  435.             $examenesMedicos $candidato->getExamenes()->last() ?? null;
  436.             $visitaDomicilio $candidato->getVisitaDomiciliaria()->last() ?? null;
  437.             $afiliaciones $candidato->getAfiliacionContratacion()->last() ?? null;
  438.             $contrato $candidato->getContrato()->last() ?? null;
  439.             $recursoPerfil $candidato->getSolicitudDotacion()->last() ?? null;
  440.             $documentos $candidato->getContratacion()->last() ?? null;
  441.             // Buscar los documentos asociados con la contratacion
  442.             $ghDocumentosContrato null;
  443.             if($documentos)
  444.                 $ghDocumentosContrato $entityManager->getRepository(GHDocumentoContratacion::class)->findOneBy([
  445.                     'contratacion' => $documentos,
  446.                 ]);
  447.         }
  448.         // Validar el terPersona
  449.         if($terPersona && !$otrosDocs){
  450.             // Datos de mantenimiento -----------------------------------------------------------------------
  451.             $registroOpain $terPersona->getRegistrosOpain()->last() ?? null;
  452.             $registroDian $terPersona->getRegistroInscripcion()->last() ?? null;
  453.             $registroDReposicion $registroDian $registroDian->getRegistroInscripcionReposicion()->last() : null;
  454.             $examenPeriodico $terPersona->getExamenPeriodicoPersona()->last() ?? null;
  455.             $visitaPeriodica $terPersona->getVisitaPeriodicaPersona()->last() ?? null;
  456.             $antecedentesPeriodicos $terPersona->getVerificacionAntecedentesPersona()->last() ?? null;
  457.             // Ev Desempeño -----------------------------------------------------------------------------
  458.             $evDesempeno $terPersona->getEvaluacionesDesempenoPersona()->last() ?? null;
  459.             // Ultimas cesantias --------------------------------------------------------------------------
  460.             $cesantias $terPersona->getRetiroCesantias()->last() ?? null;
  461.             // Proceso disciplinario -------------------------------------------------------------------
  462.             $procesoDisciplinario $terPersona->getProcesoDisciplinarioPersona()->last() ?? null;
  463.             // Cambio contrato
  464.             $cambioContrato $terPersona->getCambioContrato()->last() ?? null;
  465.             // Desvinculacion --------------------------------------------------------------------------
  466.             $desvinculacion $terPersona->getDesvinculacion()->last() ?? null;
  467.             // dump($desvinculacion);
  468.         }
  469.         // Array para recorrer los filtrado
  470.         if(!$otrosDocs){
  471.             $camposDinamicos = [
  472.                 // Proceso de seleccion
  473.                 [
  474.                     'titulo' => 'Hoja de Vida',
  475.                     'campos' => [
  476.                         'entidad' => [$candidato],
  477.                         'atributo' => 'hojaVida',
  478.                         'ruta' => 'Repository/GHCandidato/',
  479.                         'icono' => 'fas fa-file',
  480.                         // Fecha cargue documento
  481.                         'fecha' => $candidato $candidato->getUpdateAt()->format('Y-m-d') : 'N/A',
  482.                     ]
  483.                 ],
  484.                 [
  485.                     'titulo' => 'Antecedentes',
  486.                     'campos' => [
  487.                         'entidad' => [$antecedentes],
  488.                         'atributo' => 'archivo',
  489.                         'ruta' => 'Repository/GHRevisionInicial/',
  490.                         'icono' => 'fab fa-first-order-alt',
  491.                         'fecha' => $antecedentes $antecedentes->getUpdateAt()->format('Y-m-d') : 'N/A',
  492.                     ]
  493.                 ],[
  494.                     'titulo' => 'Prueba de Confiabilidad',
  495.                     'campos' => [
  496.                         'entidad' => [$pruebaPsicotecnica],
  497.                         'atributo' => 'evidenciaDisc',
  498.                         'ruta' => 'Repository/GHPruebasPsicotecnicas/',
  499.                         'icono' => 'fas fa-head-side-cough',
  500.                         'fecha' => $pruebaPsicotecnica $pruebaPsicotecnica->getUpdateAt()->format('Y-m-d') : 'N/A',
  501.                     ]
  502.                 ],[
  503.                     'titulo' => 'Prueba Disc',
  504.                     'campos' => [
  505.                         'entidad' => [$pruebaPsicotecnica],
  506.                         'atributo' => 'evidenciaEthickos',
  507.                         'ruta' => 'Repository/GHPruebasPsicotecnicas/',
  508.                         'icono' => 'fas fa-head-side-cough',
  509.                         'fecha' => $pruebaPsicotecnica $pruebaPsicotecnica->getUpdateAt()->format('Y-m-d') : 'N/A',
  510.                     ]
  511.                 ],[
  512.                     'titulo' => 'Prueba Tecnica',
  513.                     'campos' => [
  514.                         'entidad' => [$pruebaTecnica],
  515.                         'atributo' => 'archivo',
  516.                         'ruta' => 'Repository/GHPruebasTecnicas/',
  517.                         'icono' => 'fas fa-head-side-virus',
  518.                         'fecha' => $pruebaTecnica $pruebaTecnica->getUpdateAt()->format('Y-m-d') : 'N/A',
  519.                     ]
  520.                 ],[
  521.                     // Proceso de contratacion
  522.                     'titulo' => 'Resultados Medicos',
  523.                     'campos' => [
  524.                         'entidad' => [$examenesMedicos],
  525.                         'atributo' => 'resultado',
  526.                         'ruta' => 'Repository/GHExamenes/',
  527.                         'icono' => 'fas fa-list',
  528.                         'fecha' => $examenesMedicos $examenesMedicos->getUpdateAt()->format('Y-m-d') : 'N/A',
  529.                     ]
  530.                 ],[
  531.                     'titulo' => 'Visita Domiciliaria',
  532.                     'campos' => [
  533.                         'entidad' => [$visitaDomicilio],
  534.                         'atributo' => 'informeVisita',
  535.                         'ruta' => 'Repository/GHVisitaDomiciliaria/',
  536.                         'icono' => 'fas fa-house-user',
  537.                         'fecha' => $visitaDomicilio $visitaDomicilio->getUpdateAt()->format('Y-m-d') : 'N/A',
  538.                     ]
  539.                 ],[
  540.                     'titulo' => 'Afiliaciones',
  541.                     'campos' => [
  542.                         'entidad' => [$afiliaciones],
  543.                         'atributo' => 'soporte',
  544.                         'ruta' => 'Repository/GHAfiliacionContratacion/',
  545.                         'icono' => 'fas fa-passport',
  546.                         // Agregar el listar ya que es una coleccion con varias afiliaciones
  547.                         'enlace' => 'gh_afiliacion_contratacion',
  548.                         'fecha' => $afiliaciones $afiliaciones->getUpdateAt()->format('Y-m-d') : 'N/A',
  549.                     ]
  550.                 ],[
  551.                     'titulo' => 'Contrato',
  552.                     'campos' => [
  553.                         'entidad' => [$contrato],
  554.                         'atributo' => 'contrato',
  555.                         'ruta' => 'Repository/GHContrato/',
  556.                         'icono' => 'fas fa-user-cog',
  557.                         'fecha' => $contrato $contrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  558.                     ]
  559.                 ],[
  560.                     // DAtos de recurso perfil
  561.                     'titulo' => 'Foto Recurso Perfil',
  562.                     'campos' => [
  563.                         'entidad' => [$recursoPerfil],
  564.                         'atributo' => 'foto',
  565.                         'ruta' => 'Repository/GHSolicitudDotacion/',
  566.                         'icono' => 'fa-solid fa-briefcase',
  567.                         'fecha' => $recursoPerfil $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
  568.                     ]
  569.                 ],[
  570.                     'titulo' => 'Cert. Procuraduria',
  571.                     'campos' => [
  572.                         'entidad' => [$recursoPerfil],
  573.                         'atributo' => 'certificadoProcuraduria',
  574.                         'ruta' => 'Repository/GHSolicitudDotacion/',
  575.                         'icono' => 'fa-solid fa-briefcase',
  576.                         'fecha' => $recursoPerfil $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
  577.                     ]
  578.                 ],[
  579.                     'titulo' => 'Soporte Carnet',
  580.                     'campos' => [
  581.                         'entidad' => [$recursoPerfil],
  582.                         'atributo' => 'soporteCarnet',
  583.                         'ruta' => 'Repository/GHSolicitudDotacion/',
  584.                         'icono' => 'fa-solid fa-briefcase',
  585.                         'fecha' => $recursoPerfil $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
  586.                     ]
  587.                 ],[
  588.                     'titulo' => 'Foto Carnet',
  589.                     'campos' => [
  590.                         'entidad' => [$recursoPerfil],
  591.                         'atributo' => 'fotoCarnet',
  592.                         'ruta' => 'Repository/GHSolicitudDotacion/',
  593.                         'icono' => 'fa-solid fa-briefcase',
  594.                         'fecha' => $recursoPerfil $recursoPerfil->getUpdateAt()->format('Y-m-d') : 'N/A',
  595.                     ]
  596.                 ],[
  597.                     'titulo' => 'Documentos',
  598.                     'campos' => [
  599.                         'entidad' => [$ghDocumentosContrato],
  600.                         'atributo' => 'evidencia',
  601.                         'ruta' => 'Repository/GHDocumentoContratacion/',
  602.                         'icono' => 'fas fa-folder-open',
  603.                         'enlace' => 'gh_documento_contratacion',
  604.                         'fecha' => $ghDocumentosContrato $ghDocumentosContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  605.                     ]
  606.                 ],
  607.                 // Evidencias de mantenimiento
  608.                 [
  609.                     'titulo' => 'Formulario 1526',
  610.                     'campos' => [
  611.                         'entidad' => [$registroDian],
  612.                         'atributo' => 'formato',
  613.                         'ruta' => 'Repository/GHRegistroInscripcion/',
  614.                         'icono' => 'fas fa-file-signature',
  615.                         'fecha' => $registroDian && $registroDian->getFechaInscripcion()
  616.                             ? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
  617.                     ]
  618.                 ],[
  619.                     'titulo' => 'Formulario 1783',
  620.                     'campos' => [
  621.                         'entidad' => [$registroDian],
  622.                         'atributo' => 'formulario1783',
  623.                         'ruta' => 'Repository/GHRegistroInscripcion/',
  624.                         'icono' => 'fas fa-file-signature',
  625.                         'fecha' => $registroDian && $registroDian->getFechaInscripcion()
  626.                             ? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
  627.                     ]
  628.                 ],[
  629.                     'titulo' => 'Acta Entrega Carnet',
  630.                     'campos' => [
  631.                         'entidad' => [$registroDian],
  632.                         'atributo' => 'evidencia',
  633.                         'ruta' => 'Repository/GHRegistroInscripcion/',
  634.                         'icono' => 'fas fa-id-card',
  635.                         'fecha' => $registroDian && $registroDian->getFechaInscripcion()
  636.                             ? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
  637.                     ]
  638.                 ],[
  639.                     'titulo' => 'Manual Funciones',
  640.                     'campos' => [
  641.                         'entidad' => [$registroDian],
  642.                         'atributo' => 'manual',
  643.                         'ruta' => 'Repository/GHRegistroInscripcion/',
  644.                         'icono' => 'fas fa-file-signature',
  645.                         'fecha' => $registroDian && $registroDian->getFechaInscripcion()
  646.                             ? $registroDian->getFechaInscripcion()->format('Y-m-d') : 'N/A',
  647.                     ]
  648.                 ],[
  649.                     'titulo' => 'Repo. Acta Entrega Carnet',
  650.                     'campos' => [
  651.                         'entidad' => [$registroDReposicion],
  652.                         'atributo' => 'actaEntrega',
  653.                         'ruta' => 'Repository/GHRegistroInscripcionReposicion/',
  654.                         'icono' => 'fas fa-file-signature',
  655.                         'fecha' => $registroDReposicion && $registroDReposicion->getUpdateAt()
  656.                             ? $registroDReposicion->getUpdateAt()->format('Y-m-d') : 'N/A',
  657.                     ]
  658.                 ],
  659.                 [
  660.                     'titulo' => 'Ev. Carnet OPAIN',
  661.                     'campos' => [
  662.                         'entidad' => [$registroOpain],
  663.                         'atributo' => 'evidenciaCarnet',
  664.                         'ruta' => 'Repository/GHRegistroOpain/',
  665.                         'icono' => 'fas fa-id-card',
  666.                         'fecha' => $registroOpain $registroOpain->getUpdateAt()->format('Y-m-d') : 'N/A',
  667.                     ]
  668.                 ],[
  669.                     'titulo' => 'Renov. Carnet OPAIN',
  670.                     'campos' => [
  671.                         'entidad' => [$registroOpain],
  672.                         'atributo' => 'evidenciaCarnet',
  673.                         'ruta' => 'Repository/GHRegistroOpain/',
  674.                         'icono' => 'fas fa-id-card',
  675.                         'fecha' => $registroOpain && $registroOpain->getFechaRenovacion() ?
  676.                             $registroOpain->getFechaRenovacion()->format('Y-m-d') : 'N/A',
  677.                     ]
  678.                 ],[
  679.                     'titulo' => 'Devol. Carnet OPAIN',
  680.                     'campos' => [
  681.                         'entidad' => [$registroOpain],
  682.                         'atributo' => 'evidenciaCarnet',
  683.                         'ruta' => 'Repository/GHRegistroOpain/',
  684.                         'icono' => 'fas fa-id-card',
  685.                         'fecha' => $registroOpain && $registroOpain->getFechaRenovacion() ?
  686.                             $registroOpain->getFechaRenovacion()->format('Y-m-d') : 'N/A',
  687.                     ]
  688.                 ],
  689.                 // Controles de seguridad --------------------------------- GH
  690.                 [
  691.                     'titulo' => 'Resultado / Examen Periodico',
  692.                     'campos' => [
  693.                         'entidad' => [$examenPeriodico],
  694.                         'atributo' => 'soporte',
  695.                         'ruta' => 'Repository/GHExamenPeriodico/',
  696.                         'icono' => 'fas fa-file',
  697.                         'fecha' => $examenPeriodico && $examenPeriodico->getFecha() ?
  698.                             $examenPeriodico->getFecha()->format('Y-m-d') : 'N/A',
  699.                     ]
  700.                 ],[
  701.                     'titulo' => 'Resultado / Visita Periodica',
  702.                     'campos' => [
  703.                         'entidad' => [$visitaPeriodica],
  704.                         'atributo' => 'soporte',
  705.                         'ruta' => 'Repository/GHExamenPeriodico/',
  706.                         'icono' => 'fas fa-file',
  707.                         'fecha' => $visitaPeriodica && $visitaPeriodica->getFecha() ?
  708.                             $visitaPeriodica->getFecha()->format('Y-m-d') : 'N/A',
  709.                     ]
  710.                 ],[
  711.                     'titulo' => 'Resultado / Verificación Antecedentes',
  712.                     'campos' => [
  713.                         'entidad' => [$antecedentesPeriodicos],
  714.                         'atributo' => 'evidencia',
  715.                         'ruta' => 'Repository/GHVerificacionAntecedente/',
  716.                         'icono' => 'fas fa-file',
  717.                         'fecha' => $antecedentesPeriodicos && $antecedentesPeriodicos->getFecha() ?
  718.                             $antecedentesPeriodicos->getFecha()->format('Y-m-d') : 'N/A',
  719.                     ]
  720.                 ],
  721.                 // Evaluacion y desempeño
  722.                 [
  723.                     'titulo' => 'Evaluación Desempeño',
  724.                     'campos' => [
  725.                         'entidad' => [$evDesempeno],
  726.                         'atributo' => 'fechaSolicitud',
  727.                         'ruta' => 'Repository/GHEvaluacionDesempenoPersona/',
  728.                         'icono' => 'fas fa-scroll',
  729.                         'enlace' => 'gh_retiro_cesantias_edit',
  730.                         'fecha' => $evDesempeno && $evDesempeno->getUpdateAt() ?
  731.                             $evDesempeno->getUpdateAt()->format('Y-m-d') : 'N/A',
  732.                     ]
  733.                 ],
  734.                 // Cesantias
  735.                 [
  736.                     'titulo' => 'Retiro Cesantias',
  737.                     'campos' => [
  738.                         'entidad' => [$cesantias],
  739.                         'atributo' => 'fechaSolicitud',
  740.                         'ruta' => 'Repository/GHRetiroCesantias/',
  741.                         'icono' => 'fas fa-scroll',
  742.                         'enlace' => 'gh_retiro_cesantias_edit',
  743.                         'fecha' => $cesantias && $cesantias->getUpdateAt() ?
  744.                             $cesantias->getUpdateAt()->format('Y-m-d') : 'N/A',
  745.                     ]
  746.                 ],[
  747.                     // Proceso disciplinario
  748.                     'titulo' => 'Acta Proceso Disciplinario',
  749.                     'campos' => [
  750.                         'entidad' => [$procesoDisciplinario],
  751.                         'atributo' => 'acta',
  752.                         'ruta' => 'Repository/GHProcesoDisciplinario/',
  753.                         'icono' => 'fas fa-pencil-ruler',
  754.                         'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
  755.                             $procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
  756.                     ]
  757.                 ],[
  758.                     'titulo' => 'Soporte Medida Disciplinaria',
  759.                     'campos' => [
  760.                         'entidad' => [$procesoDisciplinario],
  761.                         'atributo' => 'soporteMedida',
  762.                         'ruta' => 'Repository/GHProcesoDisciplinario/',
  763.                         'icono' => 'fas fa-pencil-ruler',
  764.                         'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
  765.                             $procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
  766.                     ]
  767.                 ],[
  768.                     'titulo' => 'Citación Proceso Disciplinario',
  769.                     'campos' => [
  770.                         'entidad' => [$procesoDisciplinario],
  771.                         'atributo' => 'citacion',
  772.                         'ruta' => 'Repository/GHProcesoDisciplinario/',
  773.                         'icono' => 'fas fa-pencil-ruler',
  774.                         'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
  775.                             $procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
  776.                     ]
  777.                 ],[
  778.                     'titulo' => 'Gestión Apelación',
  779.                     'campos' => [
  780.                         'entidad' => [$procesoDisciplinario],
  781.                         'atributo' => 'gestionApelacion',
  782.                         'ruta' => 'Repository/GHProcesoDisciplinario/',
  783.                         'icono' => 'fas fa-pencil-ruler',
  784.                         'fecha' => $procesoDisciplinario && $procesoDisciplinario->getUpdateAt() ?
  785.                             $procesoDisciplinario->getUpdateAt()->format('Y-m-d') : 'N/A',
  786.                     ]
  787.                 ],
  788.                 // Cambio contrato
  789.                 [
  790.                     'titulo' => 'Prueba Tecnica / Cond. Contrato',
  791.                     'campos' => [
  792.                         'entidad' => [$cambioContrato],
  793.                         'atributo' => 'pruebaTecnica',
  794.                         'ruta' => 'Repository/GHCambioContrato/',
  795.                         'icono' => 'fab fa-stack-exchange',
  796.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  797.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  798.                     ]
  799.                 ],[
  800.                     'titulo' => 'Examen Medico / Cond. Contrato',
  801.                     'campos' => [
  802.                         'entidad' => [$cambioContrato],
  803.                         'atributo' => 'examenMedico',
  804.                         'ruta' => 'Repository/GHCambioContrato/',
  805.                         'icono' => 'fab fa-stack-exchange',
  806.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  807.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  808.                     ]
  809.                 ],[
  810.                     'titulo' => 'Visita Domiciliaria / Cond. Contrato',
  811.                     'campos' => [
  812.                         'entidad' => [$cambioContrato],
  813.                         'atributo' => 'visitaDomiciliaria',
  814.                         'ruta' => 'Repository/GHCambioContrato/',
  815.                         'icono' => 'fab fa-stack-exchange',
  816.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  817.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  818.                     ]
  819.                 ],[
  820.                     'titulo' => 'Contrato / Cond. Contrato',
  821.                     'campos' => [
  822.                         'entidad' => [$cambioContrato],
  823.                         'atributo' => 'contrato',
  824.                         'ruta' => 'Repository/GHCambioContrato/',
  825.                         'icono' => 'fab fa-stack-exchange',
  826.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  827.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  828.                     ]
  829.                 ],[
  830.                     'titulo' => 'Carta Notif. / Cond. Contrato',
  831.                     'campos' => [
  832.                         'entidad' => [$cambioContrato],
  833.                         'atributo' => 'cartaNotificacion',
  834.                         'ruta' => 'Repository/GHCambioContrato/',
  835.                         'icono' => 'fab fa-stack-exchange',
  836.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  837.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  838.                     ]
  839.                 ],[
  840.                     'titulo' => 'Cesion Contrato / Cond. Contrato',
  841.                     'campos' => [
  842.                         'entidad' => [$cambioContrato],
  843.                         'atributo' => 'cesionContrato',
  844.                         'ruta' => 'Repository/GHCambioContrato/',
  845.                         'icono' => 'fab fa-stack-exchange',
  846.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  847.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  848.                     ]
  849.                 ],[
  850.                     'titulo' => 'Otro Si / Cond. Contrato',
  851.                     'campos' => [
  852.                         'entidad' => [$cambioContrato],
  853.                         'atributo' => 'otroSi',
  854.                         'ruta' => 'Repository/GHCambioContrato/',
  855.                         'icono' => 'fab fa-stack-exchange',
  856.                         'fecha' => $cambioContrato && $cambioContrato->getUpdateAt() ?
  857.                             $cambioContrato->getUpdateAt()->format('Y-m-d') : 'N/A',
  858.                     ]
  859.                 ],
  860.                 // Proceso de desvinculacion
  861.                 [
  862.                     'titulo' => 'Soporte Desvinculación',
  863.                     'campos' => [
  864.                         'entidad' => [$desvinculacion],
  865.                         'atributo' => 'soporte',
  866.                         'ruta' => 'Repository/GHDesvinculacion/',
  867.                         'icono' => 'fas fa-person-circle-minus',
  868.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  869.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  870.                     ]
  871.                 ],
  872.                 [
  873.                     'titulo' => 'Carta Renuncia',
  874.                     'campos' => [
  875.                         'entidad' => [$desvinculacion],
  876.                         'atributo' => 'cartaRenuncia',
  877.                         'ruta' => 'Repository/GHDesvinculacion/',
  878.                         'icono' => 'fas fa-person-circle-minus',
  879.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  880.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  881.                     ]
  882.                 ],[
  883.                     'titulo' => 'Acta Entrega / Desvinculación',
  884.                     'campos' => [
  885.                         'entidad' => [$desvinculacion],
  886.                         'atributo' => 'actaEntrega',
  887.                         'ruta' => 'Repository/GHDesvinculacion/',
  888.                         'icono' => 'fas fa-person-circle-minus',
  889.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  890.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  891.                     ]
  892.                 ],[
  893.                     'titulo' => 'Acta Destruccion Carnet Dian / Desvinculación',
  894.                     'campos' => [
  895.                         'entidad' => [$desvinculacion],
  896.                         'atributo' => 'actaDestruccionCarnetDian',
  897.                         'ruta' => 'Repository/GHDesvinculacion/',
  898.                         'icono' => 'fas fa-person-circle-minus',
  899.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  900.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  901.                     ]
  902.                 ],[
  903.                     'titulo' => 'Liquidación / Desvinculación',
  904.                     'campos' => [
  905.                         'entidad' => [$desvinculacion],
  906.                         'atributo' => 'liquidacion',
  907.                         'ruta' => 'Repository/GHDesvinculacion/',
  908.                         'icono' => 'fas fa-person-circle-minus',
  909.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  910.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  911.                     ]
  912.                 ],[
  913.                     'titulo' => 'Liquidación Firmada / Desvinculación',
  914.                     'campos' => [
  915.                         'entidad' => [$desvinculacion],
  916.                         'atributo' => 'liquidacionFirmada',
  917.                         'ruta' => 'Repository/GHDesvinculacion/',
  918.                         'icono' => 'fas fa-person-circle-minus',
  919.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  920.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  921.                     ]
  922.                 ],[
  923.                     'titulo' => 'Soporte Liquidación / Desvinculación',
  924.                     'campos' => [
  925.                         'entidad' => [$desvinculacion],
  926.                         'atributo' => 'soporteLiquidacion',
  927.                         'ruta' => 'Repository/GHDesvinculacion/',
  928.                         'icono' => 'fas fa-person-circle-minus',
  929.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  930.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  931.                     ]
  932.                 ],[
  933.                     'titulo' => 'Paz y Salvo / Desvinculación',
  934.                     'campos' => [
  935.                         'entidad' => [$desvinculacion],
  936.                         'atributo' => 'pazysalvo',
  937.                         'ruta' => 'Repository/GHDesvinculacion/',
  938.                         'icono' => 'fas fa-person-circle-minus',
  939.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  940.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  941.                     ]
  942.                 ],[
  943.                     'titulo' => 'Documentos Firmados / Desvinculación',
  944.                     'campos' => [
  945.                         'entidad' => [$desvinculacion],
  946.                         'atributo' => 'documentosFirmados',
  947.                         'ruta' => 'Repository/GHDesvinculacion/',
  948.                         'icono' => 'fas fa-person-circle-minus',
  949.                         'fecha' => $desvinculacion && $desvinculacion->getFechaDesvinculacion() ?
  950.                             $desvinculacion->getFechaDesvinculacion()->format('Y-m-d') : 'N/A',
  951.                     ]
  952.                 ],
  953.             ];
  954.         }
  955.         return $this->render('ter_persona/repositorioDocumentos.html.twig',[
  956.             'terPersona' => $terPersona,
  957.             'camposDinamicos' => $camposDinamicos,
  958.             'candidato' => $candidato,
  959.             // Retiro Cesantias
  960.             'cesantias' => $cesantias,
  961.             'otrosDocs' => $otrosDocs,
  962.         ]);
  963.     }
  964.     // Funcion para registrar los demas documentos
  965.     #[Route('/colaborador/repositorio_documentos_otros_docs/{id}'name'repositorio_documentos_colaborador_otros_docs')]
  966.     public function registrarOtrosDocumentos(Request $requestEntityManagerInterface $entityManagerTerPersona $terPersona)
  967.     {
  968.         // Listar los documentos que tiene ya el colaborador
  969.         $documentos $terPersona->getOtrosDocumentos() ?? [];
  970.         $nombreDocumentos $terPersona->getNombreOtrosDocumentos() ?? [];
  971.         // Crear un formulario improvisado
  972.         $form $this->createFormBuilder(null,[
  973.             'method' => 'POST',
  974.             'action' => $this->generateUrl('repositorio_documentos_colaborador_otros_docs',[
  975.                 'id' => $terPersona->getId(),
  976.             ])
  977.         ])
  978.             ->add('otrosDocumentos',FileType::class,[
  979.                 'multiple' => true,
  980.                 'mapped' => false,
  981.                 'required' => true,
  982.                 'label'=>'Otros Documentos',
  983.             ])
  984.             ->getForm();
  985.         $form->handleRequest($request);
  986.         if($form->isSubmitted() && $form->isValid()){
  987.             $archivos $form->get('otrosDocumentos')->getData();
  988.             // Validar que los archivos sean validos
  989.             if($archivos){
  990.                 foreach($archivos as $archivo){
  991.                     $carchivoCargado $this->documentHandler->cargarArchivo($archivo,TerPersona::class);
  992.                     if($carchivoCargado['code'] !== 'success'){
  993.                         return new JsonResponse([
  994.                            'code' => 'error',
  995.                            'msj' => '¡Archivos no compatibles!',
  996.                            'url' => $this->url,
  997.                            'html' => $this->html
  998.                         ]);
  999.                     }
  1000.                     // Seguir acumulando archivos , ya que no se pidio funcion de borrar , si se pide es adicional
  1001.                     $documentos[] = $carchivoCargado['msj'];
  1002.                     $nombreDocumentos[] = $carchivoCargado['title']; // Cargar los nombres de los documentos
  1003.                 }
  1004.                 // Persistir los datos
  1005.                 $terPersona->setOtrosDocumentos($documentos);
  1006.                 $terPersona->setNombreOtrosDocumentos($nombreDocumentos);
  1007.                 $entityManager->persist($terPersona);
  1008.             }
  1009.             // Guardar datos
  1010.             $entityManager->flush();
  1011.             return new JsonResponse([
  1012.                 'code' => 'success',
  1013.                 'msj' => 'Registro cargado exitosamente',
  1014.                 'url' => $this->url,
  1015.                 'html' => $this->html
  1016.             ]);
  1017.         }
  1018.         return $this->renderForm('ter_persona/otros_documentos.html.twig',[
  1019.             'terPersona' => $terPersona,
  1020.             'form' => $form,
  1021.         ]);
  1022.     }
  1023.     #[Route('/colaborador/imprimir/{id}'name'perfil_colaborador_imprimir')]
  1024.     public function imprimirColaborador(EntityManagerInterface $entityManagerTerPersona $persona\App\Services\ResponseHandler $responseHandler): Response {
  1025. //        $historial = $entityManager->getRepository(TerPersonaHistorial::class)->findBy(['persona' => $persona]);
  1026. //        if (!$historial) {
  1027. //           $this->addFlash('warning', 'No se encontro un historial asociado a la persona solicitada.');
  1028. //           return $this->redirectToRoute($responseHandler->manejoRespuesta());
  1029. //        }
  1030.         $path $this->getParameter('kernel.project_dir') . '/public_html/assets/img/brand/logos-empresas.png';
  1031.         $type pathinfo($pathPATHINFO_EXTENSION);
  1032.         $data file_get_contents($path);
  1033.         $base64 'data:image/' $type ';base64,' base64_encode($data);
  1034.         $rutaLogo $base64;
  1035.         $historiales $entityManager->getRepository(TerPersonaHistorial::class)->findBy(
  1036.             ['persona' => $persona],
  1037.             ['updateAt' => 'DESC'],
  1038.             1
  1039.         );
  1040.         $historial $historiales[0] ?? null;
  1041.         $html $this->renderView('formatos/formatoHistorialTerPersona.html.twig', ['logo' => $rutaLogo'historial' => $historial'persona' => $persona]);
  1042.         $dompdf = new Dompdf();
  1043.         //$customPaper = array(0, 0, 220, 130);
  1044.         //$dompdf->setPaper($customPaper);
  1045.         $dompdf->loadHtml($html);
  1046.         $dompdf->render();
  1047.         return new Response(
  1048.             $dompdf->stream('resume', ["Attachment" => false]),
  1049.             Response::HTTP_OK,
  1050.             ['Content-Type' => 'application/pdf']
  1051.         );
  1052.     }
  1053. }