src/FormSubscriber/GHCambioContratoSubscriber.php line 97

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