<?php
namespace App\Form\Gestiform\Formations\Dossier;
use App\Entity\Gestiform\Admin\Etablissement;
use App\Entity\Gestiform\Admin\MasterListe\Masterlistelg;
use App\Entity\Gestiform\Admin\Profil;
use App\Entity\Gestiform\Admin\Societe;
use App\Entity\Gestiform\Formations\Catalogue\Module\Module;
use App\Entity\Gestiform\Formations\Catalogue\Parcours\Parcours;
use App\Entity\Gestiform\Formations\Dossier\Dossier;
use App\Entity\Gestiform\Formations\Entreprise\Contact;
use App\Entity\Gestiform\Formations\Entreprise\Entreprise;
use App\Entity\Gestiform\Formations\Session\Planning\Event;
use App\Entity\Gestiform\Formations\Session\Session;
use App\Entity\Gestiform\Users\Employe;
use App\Form\Common\AdresseType;
use App\Repository\Gestiform\Admin\ProfilRepository;
use App\Repository\Gestiform\Formations\Session\Planning\EventRepository;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;
class DossierInfosType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$selectedTypeFormation = $options["selectedTypeFormation"];
$selectedDispositif = $options["selectedDispositif"];
$apiGestiform = $options['apiGestiform'];
$selectedParcours = $options["selectedParcours"];
$selectedSessions = $options["selectedSessions"];
$selectedContact= $options["selectedContact"];
$selectedEtablissement= $options["selectedEtablissement"];
$builder
->add('personalInformations', PersonalInformationsType::class, [
'required' => false,
])
->add('adresse', AdresseType::class, [
'required' => false,
'label' => 'Adresse',
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('referentPedagogique', EntityType::class, [
'class' => Employe::class,
'query_builder' => function (EntityRepository $repo) {
return $repo->createQueryBuilder('u')
->where('u.enabled = true');
},
'placeholder' => 'Choisir dans cette liste ...',
'choice_label' => function (Employe $employe) {
return $employe->getPersonalInformations()?->getFullName() ?? "";
},
'required' => false,
'multiple' => false,
'label' => 'Pédagogique',
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('referentCommercial', EntityType::class, [
'class' => Employe::class,
'query_builder' => function (EntityRepository $repo) {
return $repo->createQueryBuilder('u')
->where('u.enabled = true');
},
'placeholder' => 'Choisir dans cette liste ...',
'choice_label' => function (Employe $employe) {
return $employe->getPersonalInformations()?->getFullName() ?? "";
},
'required' => false,
'multiple' => false,
'label' => 'Admission',
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('referentAdministratif', EntityType::class, [
'class' => Employe::class,
'query_builder' => function (EntityRepository $repo) {
return $repo->createQueryBuilder('u')
->where('u.enabled = true');
},
'placeholder' => 'Choisir dans cette liste ...',
'choice_label' => function (Employe $employe) {
return $employe->getPersonalInformations()?->getFullName() ?? "";
},
'required' => false,
'multiple' => false,
'label' => 'Administratif',
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('referentCoach', EntityType::class, [
'class' => Employe::class,
'query_builder' => function (EntityRepository $repo){
return $repo->createQueryBuilder('u')
->where('u.enabled = true');
},
'placeholder' => 'Choisir dans cette liste ...',
'choice_label' => function (Employe $employe) {
return $employe->getPersonalInformations()?->getFullName() ?? "";
},
'required' => false,
'multiple' => false,
'label' => 'Coach',
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('profil', EntityType::class, [
'class' => Profil::class,
'label' => 'Le profil',
'query_builder' => function (ProfilRepository $repo) {
return $repo->createQueryBuilder('p')
->andWhere("p.archive = false")
->orderBy("p.intitule", "ASC");
},
'choice_label' => 'intitule',
'placeholder' => 'Choisir dans cette liste ...',
'required' => true,
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('typeFormation', EntityType::class, [
'class' => Masterlistelg::class,
'query_builder' => function (EntityRepository $repo) use ($selectedTypeFormation) {
return $repo->createQueryBuilder('m')
->where('m = :selectedTypeFormation')
->setParameter('selectedTypeFormation', $selectedTypeFormation);
},
'choice_label' => 'designation',
'required' => true,
'label' => "Type de formation",
'constraints' => [
new NotBlank(['message' => 'Le type de formation est requis.'])
],
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('dispositif', EntityType::class, [
'class' => Masterlistelg::class,
'query_builder' => function (EntityRepository $repo) use ($selectedDispositif) {
return $repo->createQueryBuilder('m')
->where('m = :selectedDispositif')
->setParameter('selectedDispositif', $selectedDispositif);
},
'choice_label' => 'designation',
'required' => true,
'label' => "Type de dispositif",
'constraints' => [
new NotBlank(['message' => 'Le type de dispositif est requis.'])
],
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('parcours', EntityType::class, [
'class' => Parcours::class,
'query_builder' => function (EntityRepository $repo) use ($selectedParcours) {
return $repo->createQueryBuilder('p')
->where('p = :selectedParcours')
->setParameter('selectedParcours', $selectedParcours);
},
'choice_label' => function ($parcours) {
return $parcours->getIntitule() . '--' . $parcours->getSigle();
},
'required' => true,
'label' => "Affecter un parcours",
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('session', EntityType::class, [
'class' => Session::class,
'query_builder' => function (EntityRepository $repo) use ($selectedSessions) {
return $repo->createQueryBuilder('s')
->where('s = :selectedSessions')
->setParameter('selectedSessions', $selectedSessions);
},
'choice_label' => 'intitule',
'required' => true,
'label' => "Affecter une session",
"attr" => [
"class" => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('emailCandidature', TextType::class,
[
'required' => false,
'label' => 'Email notification',
'attr' => [
'class' => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('societe', EntityType::class, [
'class' => Societe::class,
'choice_label' => 'raisonSociale',
'required' => false,
'placeholder' => 'Choisir dans cette liste ...',
'label' => 'Societe',
'attr' => [
'class' => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('modules', EntityType::class, [
'class' => Module::class,
'choice_label' => 'getFullIntituleType',
'mapped' => false,
'required' => false,
'multiple' => true,
'label' => 'Modules',
'group_by' => 'sousThemeTheme.theme.intitule',
'attr' => [
'class' => 'form-control select2'
]
,
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('diplomant', CheckboxType::class, [
'label' => 'Diplomant',
'required' => false,
'attr' => [
'class' => "form-check-input"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('delegueClasse', CheckboxType::class, [
'label' => 'Délégué de Classe',
'required' => false,
'attr' => [
'class' => "form-check-input"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('modaliteEnseignement', ChoiceType::class, [
'required' => true,
'label' => "Modalité d'enseignement",
'choices' => [
'Présentiel' => 'Présentiel',
'Distanciel' => 'Distanciel',
],
'placeholder' => 'Choisir dans cette liste ...',
'multiple' => false,
'attr' => [
'class' => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('entreprise', EntityType::class, [
'class' => Entreprise::class,
'choice_label' => 'raisonSociale',
'required' => false,
'label' => 'Entreprise liée',
'placeholder' => 'Choisir dans cette liste ...',
'attr' => [
'class' => "form-control entreprise-selector",
],
'label_attr' => [
'class' => "col-lg-3 col-form-label",
],
])
->add('entrepriseContact', EntityType::class, [
'class' => Contact::class,
'choice_label' => function (Contact $contact) {
return $contact->getPersonalInformations()?->getFullName() ?? "";
},
'query_builder' => function (EntityRepository $repo) use ($selectedContact) {
return $repo->createQueryBuilder('c')
->where('c = :selectedContact')
->setParameter('selectedContact', $selectedContact);
},
'required' => false,
'placeholder' => 'Sélectionnez un contact',
'label' => 'Contact entreprise',
'attr' => [
'class' => "form-control",
],
'label_attr' => [
'class' => "col-lg-3 col-form-label",
],
])
->add('etablissement', EntityType::class, [
'class' => Etablissement::class,
'choice_label' => function (Etablissement $etablissement) {
return $etablissement->getIntitule()?? "";
},
'query_builder' => function (EntityRepository $repo) use ($selectedEtablissement) {
return $repo->createQueryBuilder('c')
->where('c = :selectedEtablissement')
->setParameter('selectedEtablissement', $selectedEtablissement);
},
'required' => false,
'placeholder' => 'Sélectionnez un établissement',
'label' => 'Établissement Société',
'attr' => [
'class' => "form-control",
],
'label_attr' => [
'class' => "col-lg-3 col-form-label",
],
])
->add('cv', FileType::class, [
'required' => false,
'mapped' => false,
'label' => 'CV',
'attr' => [
'class' => "form-control"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
->add('events', EntityType::class, [
'class' => Event::class,
'mapped' => false,
'query_builder' => function (EventRepository $repo) {
return $repo->createQueryBuilder('e')
->where('e.start <= CURRENT_TIMESTAMP()')
->andWhere('e.parent is null')
->andWhere('e.module is not null');
},
'choice_label' => function (Event $event) {
return $event->getModule()?->getIntitule() . '--' . $event->getModule()?->getCode()
. '--' . $event->getStart()?->format('y-M-d') . '--' . $event->getEnd()?->format('y-M-d');
},
'required' => true,
'multiple' => true,
'label' => "Liste des modules par session",
"attr" => [
"class" => "form-control select2"
],
'label_attr' => [
'class' => "col-lg-3 col-form-label"
]
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Dossier::class,
'selectedTypeFormation' => null,
'selectedDispositif' => null,
'selectedParcours' => null,
'selectedSessions' => null,
'apiGestiform' => null,
'selectedContact' => null,
'selectedEtablissement' => null,
]);
}
}