<?php
namespace App\Form;
use App\Entity\Commune;
use App\Entity\Devise;
use App\Entity\EnvIntervention;
use App\Entity\Gouvernorat;
use App\Entity\ModExecution;
use App\Entity\Partenaire;
use App\Entity\Programme;
use App\Entity\Status;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class SearchProjetArType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('partenaire', EntityType::class, [
'class' => Partenaire::class,
'label' => 'اختر الشريك',
'choice_label' => 'nomAr',
'mapped' => false,
'required' => false,
'placeholder' => 'اختر الشريك',
'attr' => [
'class' => 'form-select select2',
],
])
->add('programme', EntityType::class, [
'class' => Programme::class,
'label' => 'اختر البرنامج',
'choice_label' => 'nomAr',
'mapped' => false,
'required' => false,
'placeholder' => 'اختر البرنامج',
'attr' => [
'class' => 'form-select select2',
],
])
->add('gouvernorat', EntityType::class, [
'class' => Gouvernorat::class,
'mapped' => false,
'required' => false,
'label' => 'اختر الولاية',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')->orderBy('u.nomFr', 'ASC');
},
'choice_label' => 'nomAr',
'placeholder' => 'اختر الولاية',
'attr' => [
'class' => 'form-select select2',
],
])
->add('communes', EntityType::class, [
'class' => Commune::class,
'label' => 'اختر البلدية',
'query_builder' => null,
'choice_label' => 'nomAr',
'multiple' => true,
'mapped' => false,
'required' => false,
'placeholder' => 'اختر البلدية',
'attr' => [
'multiple' => true,
'class' => 'form-select select2',
],
])
->add('date')
->add('budget')
->add('envIntervention', EntityType::class, [
'class' => EnvIntervention::class,
'label' => 'اختر القطاع',
'choice_label' => 'nomAr',
'mapped' => false,
'required' => false,
'placeholder' => 'اختر القطاع',
'attr' => [
'class' => 'form-select select2',
],
])
->add('modExecution', EntityType::class, [
'class' => ModExecution::class,
'label' => 'اختر التنفيذ',
'choice_label' => 'nomAr',
'mapped' => false,
'required' => false,
'placeholder' => 'اختر التنفيذ',
'attr' => [
'class' => 'form-select select2',
],
]);
$builder->get('gouvernorat')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$this->addComunesField($form->getParent(), $form);
}
);
$builder->get('partenaire')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$this->addProgrammeField($form->getParent(), $form);
}
);
}
private function addComunesField(FormInterface $form, $data)
{
if (!empty($data->getData())) {
$gouv = $data->getData();
$form->add('communes', EntityType::class, [
'class' => Commune::class,
'label' => 'اختر البلدية',
'multiple' => true,
'required' => false,
'mapped' => false,
'placeholder' => 'اختر البلدية',
'attr' => [
'multiple' => true,
'class' => 'form-select select2',
],
'query_builder' => function (EntityRepository $er) use ($gouv) {
return $er->createQueryBuilder('f')->where('f.gouvernorat=:c')->setParameter('c', $gouv->getId())->orderBy('f.nomFr', 'ASC');
},
'choice_label' => function (Commune $commune) {
return $commune->getNomAr();
},
]);
}
}
private function addProgrammeField(FormInterface $form, $data)
{
if (!empty($data->getData())) {
$part = $data->getData();
$form->add('programme', EntityType::class, [
'required' => false,
'class' => Programme::class,
'label' => 'اختر البرنامج',
'multiple' => false,
'mapped' => true,
'placeholder' => 'اختر البرنامج',
'attr' => [
'multiple' => false,
'class' => 'form-select select2',
],
'query_builder' => function (EntityRepository $er) use ($part) {
return $er->createQueryBuilder('f')->where('f.partenaireId=:c')->setParameter('c', $part->getId())->orderBy('f.nomFr', 'ASC');
},
'choice_label' => function (Programme $programme) {
return $programme->getNomAr();
},
]);
}
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
// Configure your form options here
]);
}
}