src/FormSubscriber/GHCambioContratoSubscriber.php line 99

Open in your IDE?
  1. <?php
  2. // src/Form/EventListener/AddNameFieldSubscriber.php
  3. namespace App\FormSubscriber;
  4. use App\Entity\GHCandidato;
  5. use App\Entity\TerPersona;
  6. use Doctrine\ORM\EntityRepository;
  7. use App\Entity\GHPerfilCargo;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\Form\Extension\Core\Type\TextType;
  12. use Symfony\Component\Form\FormEvent;
  13. use Symfony\Component\Form\FormEvents;
  14. use Symfony\Component\Form\Form;
  15. use Doctrine\ORM\EntityManagerInterface;
  16. class GHCambioContratoSubscriber implements EventSubscriberInterface {
  17.     private $entityManager;
  18.     public function __construct(
  19.             EntityManagerInterface $entityManager
  20.     ) {
  21.         $this->entityManager $entityManager;
  22.     }
  23.     public static function getSubscribedEvents(): array {
  24.         return [
  25.             FormEvents::PRE_SET_DATA => 'preSetData',
  26.             FormEvents::PRE_SUBMIT => 'preSubmit',
  27.         ];
  28.     }
  29.     private function modificarFormulario(Form $form, ?TerPersona $colaborador): void
  30.     {
  31.         $qb $this->entityManager->createQueryBuilder()
  32.             ->select('p')
  33.             ->from(GHPerfilCargo::class, 'p')
  34.             ->join('p.estado''est')
  35.             ->join('p.cargo''c')
  36.             ->where('est.id = :estadoActivo'// 🔥 NO usar ID
  37.             ->setParameter('estadoActivo'1)
  38.             ->orderBy('c.nombre''ASC');
  39.         // 👉 Excluir el cargo actual si existe colaborador
  40.         if (
  41.             $colaborador &&
  42.             $colaborador->getPerfilCargo() &&
  43.             $colaborador->getPerfilCargo()->getCargo()
  44.         ) {
  45.             $nombreCargoActual $colaborador->getPerfilCargo()->getCargo()->getNombre();
  46.             $qb->andWhere('c.nombre != :nombreActual')
  47.                 ->setParameter('nombreActual'$nombreCargoActual);
  48.         }
  49.         $tiposCargoDisponibles $qb->getQuery()->getResult();
  50.         // 🧠 DEBUG REAL (si algo falla, aquí se ve)
  51.         /*
  52.         dump(array_map(
  53.             fn(GHPerfilCargo $p) => [
  54.                 'perfilCargoId' => $p->getId(),
  55.                 'cargo' => $p->getCargo()->getNombre(),
  56.                 'estado' => $p->getEstado()->getCodigo(),
  57.             ],
  58.             $tiposCargoDisponibles
  59.         ));
  60.         die;
  61.         */
  62.         // 🧾 Formulario
  63.         $form->add('cargo'EntityType::class, [
  64.             'class' => GHPerfilCargo::class,
  65.             'choices' => $tiposCargoDisponibles// 🔥 AQUÍ está la magia
  66.             'placeholder' => 'Seleccione un cargo',
  67.             'required' => true,
  68.             'choice_label' => function (GHPerfilCargo $perfilCargo) {
  69.                 return $perfilCargo->getCargo()->getNombre();
  70.             },
  71.             'attr' => ['class' => 'form-control'],
  72.         ]);
  73.     }
  74.     public function preSetData(FormEvent $event): void {
  75.         $form $event->getForm();
  76.         $data $event->getData();
  77.         if ($data && $data->getColaborador()) {
  78.             $colaborador $data->getColaborador();
  79.             $this->modificarFormulario($form$colaborador);
  80.         }
  81.     }
  82.     public function preSubmit(FormEvent $event): void {
  83.         $form $event->getForm();
  84.         $data $event->getData();
  85.         if (isset($data['colaborador'])) {
  86.             $idColaborador $data['colaborador'];
  87.             $colaborador $this->entityManager->getRepository(\App\Entity\TerPersona::class)->find($idColaborador);
  88.             $this->modificarFormulario($form$colaborador);
  89.             // Buscar el salario y tipo contrato por medio de la confirmacion y condiciones del contrato
  90.             $candidato $this->entityManager->getRepository(GHCandidato::class)->findOneBy([
  91.                 'numeroDocumento' => $colaborador->getNumeroDocumento()
  92.             ]);
  93.             $salario null;
  94.             $tipoContrato null;
  95.             $sucursal null;
  96.             if($candidato){
  97.                 $salario $candidato->getContratacion() && $candidato->getContratacion()->last() ? $candidato->getContratacion()->last()->getSalario()  : 'N/A';
  98.                 $tipoContrato $candidato->getVacante()->getParTipoContrato() ? $candidato->getVacante()->getParTipoContrato()->getNombre() : 'N/A';
  99.                 $sucursal $candidato->getVacante()->getSede() ? $candidato->getVacante()->getSede()->getNombre() : 'N/A';
  100.             }
  101.             // Sigue actualizando los campos visibles si deseas:
  102.             $cargo $colaborador?->getPerfilCargo()?->getCargo()?->getNombre() ?? 'N/A';
  103.             $salario $colaborador->getSalario() ? $colaborador->getSalario() : ($salario ?? 'N/A'); // Validar si encontro registro de salario desde la contratacion
  104.             $empresaObj $colaborador?->getEmpresa();
  105.             $empresa $empresaObj $empresaObj->getNombre() : 'N/A';
  106.             $tipoContrato $colaborador->getTipoContrato() ? $colaborador->getTipoContrato()->getNombre() : ($tipoContrato ?? 'N/A');
  107.             $data['cargoTmp'] = $cargo// Falla
  108.             $data['salarioTmp'] = $salario;
  109.             $data['empresaTmp'] = $empresa;
  110.             $data['sedeTmp'] = ($colaborador->getSede() ? $colaborador->getSede()->getNombre() : ($sucursal ?? 'N/A'));
  111.             $data['tipoContratoTmp'] = $tipoContrato;
  112.             $event->setData($data);
  113.         }
  114.     }
  115. }