src/FormSubscriber/GHInduccionProcesoSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. // src/Form/EventListener/AddNameFieldSubscriber.php
  3. namespace App\FormSubscriber;
  4. use App\Entity\ParInduccion;
  5. use Doctrine\ORM\EntityRepository;
  6. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Form\Extension\Core\Type\TextType;
  9. use Symfony\Component\Form\FormEvent;
  10. use Symfony\Component\Form\FormEvents;
  11. use Symfony\Component\Form\Form;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. class GHInduccionProcesoSubscriber implements EventSubscriberInterface {
  14.     private $entityManager;
  15.     public function __construct(
  16.             EntityManagerInterface $entityManager
  17.     ) {
  18.         $this->entityManager $entityManager;
  19.     }
  20.     public static function getSubscribedEvents(): array {
  21.         // Tells the dispatcher that you want to listen on the form.pre_set_data
  22.         // event and that the preSetData method should be called.
  23.         return [FormEvents::PRE_SUBMIT => 'preSubmit'];
  24.     }
  25.     public function preSubmit(FormEvent $event): void {
  26.         $data $event->getData();
  27.         //data es un arreglo con los valores establecidos por el usuario en el form.
  28.         //como $data contiene el pais seleccionado por el usuario al enviar el formulario,
  29.         // usamos el valor de la posicion $data['country'] para filtrar el sql de los estados
  30.         if (isset($data['procesoInduccion'])) {
  31.             $idBusqueda $data['procesoInduccion'];
  32.             $proceso $this->entityManager->getRepository(\App\Entity\ParProceso::class)->find($idBusqueda);
  33.             $event->getForm()
  34.                     ->add('responsable'\Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\TerPersona::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
  35.                             return $er->createQueryBuilder('p')
  36.                             ->leftJoin('p.perfilCargo''pc')
  37.                             ->leftJoin('pc.ParProceso''pro')
  38.                             ->leftJoin('p.estado''e')
  39.                             ->where('pro.id = :idProceso')
  40.                             ->andWhere('e.id = 1')
  41.                             ->setParameter('idProceso'$idBusqueda)
  42.                             ->orderBy('p.nombres''ASC');
  43.                         },
  44.                         'label' => 'Responsable',
  45.                         'attr' => ['class' => 'form-control'],
  46.                         'placeholder' => 'Seleccione una Opción.',
  47.                         'required' => true,
  48.                         'label' => '<span class="text-danger">*</span> Responsable',
  49.                         'label_html' => true,
  50.                     ])
  51.                 ->add('duracion'EntityType::class, [
  52.                     'class' => ParInduccion::class,
  53.                     'query_builder' => function (EntityRepository $er) use ($idBusqueda) {
  54.                         return $er->createQueryBuilder('i')
  55.                             ->leftJoin('i.proceso''pro')
  56.                             ->where('pro.id = :idProceso')
  57.                             ->setParameter('idProceso'$idBusqueda)
  58.                             ->orderBy('i.duracion''ASC');
  59.                     },
  60.                     'choice_label' => 'duracion'// Mostramos la propiedad "duracion" como etiqueta
  61.                     'required' => true,
  62.                     'attr' => ['class' => 'form-control'],
  63.                     'disabled' => true,
  64.                 ])
  65.                     ->add('descripcion'EntityType::class, [
  66.                         'class' => \App\Entity\ParInduccion::class,
  67.                         'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
  68.                             return $er->createQueryBuilder('i')
  69.                                 ->leftJoin('i.proceso''pro')
  70.                                 ->where('pro.id = :idProceso')
  71.                                 ->setParameter('idProceso'$idBusqueda)
  72.                                 ->orderBy('i.descripcion''ASC');
  73.                         },
  74.                         'label' => 'Descripción Inducción',
  75.                         'choice_label' => 'descripcion',
  76.                         'attr' => ['class' => 'form-control'],
  77.                         'disabled' => true,
  78.                         'mapped' => false,
  79.                     ])
  80.             ;
  81.             $event->setData($data);
  82.         }
  83.     }
  84. }