<?php
namespace App\Form\GrandPublic;
use App\Entity\Referentiel\BureauDistributeur;
use App\Entity\Referentiel\SecteurPmi;
use App\Entity\Referentiel\Commune;
use App\Form\GDA\PlanningDispoType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\ChoiceList\ChoiceList;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\DateType;
class RechercheDispoType extends AbstractType
{
const REQUIRED = 'required';
const LABEL = 'label';
const CLASSE = 'class';
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$planningDispo = $options['planning_dispo'];
$builder->add('commune', EntityType::class, array(
self::REQUIRED => true,
self::CLASSE => Commune::class,
self::LABEL => 'Commune',
'multiple' => false,
'placeholder' => 'Sélectionner une commune',
'choice_filter' => ChoiceList::filter(
$this,
function ($commune): bool {
if($commune == null){
return true;
}
else{
return $commune->getLibelle() != 'Meudon-la-Foret';
}
}
),
'choice_label' => function ($commune, $key, $index) {
/** @var App\Entity\Referentiel\Commune $commune */
$libelle = $commune->getLibelle();
if($libelle == 'Meudon'){
return $commune->getCodePostal() . ' - ' . 'Meudon - 92360 - Meudon-la-Foret';
} else {
return $commune->getCodePostal() . ' - ' . $libelle;
}
}
));
if ($options['active_bureau_distrib'] == 'true') {
$builder->add('bureau_distributeur', EntityType::class, array(
self::REQUIRED => false,
self::CLASSE => BureauDistributeur::class,
self::LABEL => 'Bureau distributeur',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('bureau_distributeur')
->orderBy('bureau_distributeur.libelle', 'ASC');
},
'choice_label' => function ($bureau_distributeur, $key, $index) {
return mb_strtoupper($bureau_distributeur->getLibelle());
}
));
}
$builder->add('lieu_accueil', HiddenType::class, array(
self::REQUIRED => true,
self::LABEL => 'Lieu d\'accueil',
'data' => 'tous'
))
->add('date_naissance_enf', DateType::class, array(
self::REQUIRED => false,
// champ texte au lieu de listes déroulantes
'widget' => 'single_text',
// prevents rendering it as type="date", to avoid HTML5 date pickers
'html5' => false,
// bootstrap-datepicker
'attr' => array(self::CLASSE => 'form-control'),
// Pour pouvoir parser la date fournie par le datepicker
'format' => 'dd/MM/yyyy',
self::LABEL => 'Date de naissance',
))
->add('date_debut_accueil', DateType::class, array(
self::REQUIRED => false,
// champ texte au lieu de listes déroulantes
'widget' => 'single_text',
// prevents rendering it as type="date", to avoid HTML5 date pickers
'html5' => false,
// bootstrap-datepicker
'attr' => array(self::CLASSE => 'form-control'),
// Pour pouvoir parser la date fournie par le datepicker
'format' => 'dd/MM/yyyy',
self::LABEL => 'Date de début d\'accueil',
'data' => new \DateTime(),
))
->add('planning_dispo', CollectionType::class, array(
'data' => $planningDispo,
'entry_type' => PlanningDispoType::class,
'entry_options' => array(self::LABEL => false)
));
if ($options['active_atypique'] == 'true') {
$builder->add('accepte_atypique_matin', CheckboxType::class, array(
self::LABEL => 'Accepte l\'accueil avant 7h',
self::REQUIRED => false));
$builder->add('accepte_atypique_soir', CheckboxType::class, array(
self::LABEL => 'Accepte l\'accueil après 20h',
self::REQUIRED => false));
}
if ($options['active_handicap'] == 'true') {
$builder->add('accepte_handicap', CheckboxType::class, array(
self::LABEL => 'Accueille les enfants en situation de handicap',
self::REQUIRED => false));
}
$builder->add('rechercher', SubmitType::class, array(
self::LABEL => 'Rechercher'
));
}
/* passage de paramètes au form depuis le controller: https://www.grafikart.fr/forum/topics/21766 */
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setRequired('active_bureau_distrib');
$resolver->setRequired('planning_dispo');
$resolver->setRequired('active_atypique');
$resolver->setRequired('active_handicap');
}
}