<?php
// src/Form/EventListener/AddNameFieldSubscriber.php
namespace App\FormSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\Form;
use Doctrine\ORM\EntityManagerInterface;
class GHPerfilCargoSubscriber implements EventSubscriberInterface {
private $entityManager;
public function __construct(
EntityManagerInterface $entityManager
) {
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents(): array {
// Tells the dispatcher that you want to listen on the form.pre_set_data
// event and that the preSetData method should be called.
return [FormEvents::PRE_SUBMIT => 'preSubmit'];
}
public function preSubmit(FormEvent $event): void {
$data = $event->getData();
//data es un arreglo con los valores establecidos por el usuario en el form.
//como $data contiene el pais seleccionado por el usuario al enviar el formulario,
// usamos el valor de la posicion $data['country'] para filtrar el sql de los estados
if (isset($data['ParProceso'])) {
$idBusqueda = $data['ParProceso'];
$proceso = $this->entityManager->getRepository(\App\Entity\ParProceso::class)->find($idBusqueda);
$event->getForm()->add('cargo', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\ParCargo::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
return $er->createQueryBuilder('c')
->leftJoin('c.procesos', 'pro')
->where('pro.id = :idBusqueda')
->setParameter('idBusqueda', $idBusqueda)
->orderBy('c.nombre', 'ASC');
}, 'label' => 'Cargo',
'attr' => ['class' => 'form-control'], 'placeholder' => 'Seleccione una Opción.', 'required' => true])
->add('subprocesoId', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\ParSubproceso::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
return $er->createQueryBuilder('sp')
->leftJoin('sp.proceso', 'pro')
->where('pro.id = :idBusqueda')
->setParameter('idBusqueda', $idBusqueda)
->orderBy('sp.subproceso', 'ASC');
}, 'label' => 'SubProceso',
'attr' => ['class' => 'form-control'], 'placeholder' => 'Seleccione una Opción.', 'required' => true])
->add('personalCargo', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\ParCargo::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
return $er->createQueryBuilder('c')
->leftJoin('c.procesos', 'pro')
->where('pro.id = :idBusqueda')
->setParameter('idBusqueda', $idBusqueda)
->orderBy('c.nombre', 'ASC');
}, 'label' => 'Personal a cargo',
'multiple' => true,
'attr' => ['class' => 'form-control'], 'placeholder' => 'Seleccione una Opción.', 'required' => false])
// ->add('jefeInmediatoCargo', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\ParCargo::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
// return $er->createQueryBuilder('c')
// ->leftJoin('c.procesos', 'pro')
// ->leftJoin('c.perfilCargo', 'pc')
// ->leftJoin('pc.persona', 'p')
// ->leftJoin('p.nivelCargo', 'nc')
// ->where('pro.id = :idProceso')
// ->andWhere('nc.id in (1,2,3)')
// ->setParameter('idProceso', $idBusqueda)
// ->orderBy('c.nombre', 'ASC');
// }, 'label' => 'Jefe Inmediato',
// 'attr' => ['class' => 'form-control'], 'placeholder' => 'Seleccione una Opción.', 'required' => true])
// ->add('cargoAprueba', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\ParCargo::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
// return $er->createQueryBuilder('c')
// ->leftJoin('c.procesos', 'pro')
// ->leftJoin('c.perfilCargo', 'pc')
// ->leftJoin('pc.persona', 'p')
// ->leftJoin('p.nivelCargo', 'nc')
// ->where('pro.id = :idProceso')
// ->andWhere('nc.id in (1,2)')
// ->setParameter('idProceso', $idBusqueda)
// ->orderBy('c.nombre', 'ASC');
// }, 'label' => 'Aprobado por',
// 'attr' => ['class' => 'form-control'], 'placeholder' => 'Seleccione una Opción.', 'required' => true])
;
}
if (isset($data['empresaFilial'])) {
$idBusqueda = $data['empresaFilial'];
$event->getForm()->add('sede', \Symfony\Bridge\Doctrine\Form\Type\EntityType::class, ['class' => \App\Entity\TerSedeEmpresa::class, 'query_builder' => function (\Doctrine\ORM\EntityRepository $er) use ($idBusqueda) {
return $er->createQueryBuilder('se')
->leftJoin('se.empresaFilial', 'ef')
->where('ef.id in (:idEmpresa)')
->setParameter('idEmpresa', $idBusqueda)
->orderBy('se.nombre', 'ASC');
}, 'label' => 'Sucursal',
'multiple' => true,
'label_attr' => ['class' => 'field_required'],
'attr' => ['class' => 'form-control'], 'placeholder' => 'Seleccione una Opción.'])
;
}
}
}