src/FormSubscriber/GHEntrenamientoProcesoSubscriber.php line 55

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