src/Form/Gestiform/Formations/Dossier/DossierInfosType.php line 156

Open in your IDE?
  1. <?php
  2. namespace App\Form\Gestiform\Formations\Dossier;
  3. use App\Entity\Gestiform\Admin\Etablissement;
  4. use App\Entity\Gestiform\Admin\MasterListe\Masterlistelg;
  5. use App\Entity\Gestiform\Admin\Profil;
  6. use App\Entity\Gestiform\Admin\Societe;
  7. use App\Entity\Gestiform\Formations\Catalogue\Module\Module;
  8. use App\Entity\Gestiform\Formations\Catalogue\Parcours\Parcours;
  9. use App\Entity\Gestiform\Formations\Dossier\Dossier;
  10. use App\Entity\Gestiform\Formations\Entreprise\Contact;
  11. use App\Entity\Gestiform\Formations\Entreprise\Entreprise;
  12. use App\Entity\Gestiform\Formations\Session\Planning\Event;
  13. use App\Entity\Gestiform\Formations\Session\Session;
  14. use App\Entity\Gestiform\Users\Employe;
  15. use App\Form\Common\AdresseType;
  16. use App\Repository\Gestiform\Admin\ProfilRepository;
  17. use App\Repository\Gestiform\Formations\Session\Planning\EventRepository;
  18. use Doctrine\ORM\EntityRepository;
  19. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  20. use Symfony\Component\Form\AbstractType;
  21. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  22. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  23. use Symfony\Component\Form\Extension\Core\Type\FileType;
  24. use Symfony\Component\Form\Extension\Core\Type\TextType;
  25. use Symfony\Component\Form\FormBuilderInterface;
  26. use Symfony\Component\OptionsResolver\OptionsResolver;
  27. use Symfony\Component\Validator\Constraints\NotBlank;
  28. class DossierInfosType extends AbstractType
  29. {
  30.     public function buildForm(FormBuilderInterface $builder, array $options): void
  31.     {
  32.         $selectedTypeFormation $options["selectedTypeFormation"];
  33.         $selectedDispositif $options["selectedDispositif"];
  34.         $apiGestiform $options['apiGestiform'];
  35.         $selectedParcours $options["selectedParcours"];
  36.         $selectedSessions $options["selectedSessions"];
  37.         $selectedContact$options["selectedContact"];
  38.         $selectedEtablissement$options["selectedEtablissement"];
  39.         $builder
  40.             ->add('personalInformations'PersonalInformationsType::class, [
  41.                 'required' => false,
  42.             ])
  43.             ->add('adresse'AdresseType::class, [
  44.                 'required' => false,
  45.                 'label' => 'Adresse',
  46.                 'label_attr' => [
  47.                     'class' => "col-lg-3 col-form-label"
  48.                 ]
  49.             ])
  50.             ->add('referentPedagogique'EntityType::class, [
  51.                 'class' => Employe::class,
  52.                 'query_builder' => function (EntityRepository $repo) {
  53.                     return $repo->createQueryBuilder('u')
  54.                         ->where('u.enabled = true');
  55.                 },
  56.                 'placeholder' => 'Choisir dans cette liste ...',
  57.                 'choice_label' => function (Employe $employe) {
  58.                     return $employe->getPersonalInformations()?->getFullName() ?? "";
  59.                 },
  60.                 'required' => false,
  61.                 'multiple' => false,
  62.                 'label' => 'Pédagogique',
  63.                 "attr" => [
  64.                     "class" => "form-control"
  65.                 ],
  66.                 'label_attr' => [
  67.                     'class' => "col-lg-3 col-form-label"
  68.                 ]
  69.             ])
  70.             ->add('referentCommercial'EntityType::class, [
  71.                 'class' => Employe::class,
  72.                 'query_builder' => function (EntityRepository $repo) {
  73.                     return $repo->createQueryBuilder('u')
  74.                         ->where('u.enabled = true');
  75.                 },
  76.                 'placeholder' => 'Choisir dans cette liste ...',
  77.                 'choice_label' => function (Employe $employe) {
  78.                     return $employe->getPersonalInformations()?->getFullName() ?? "";
  79.                 },
  80.                 'required' => false,
  81.                 'multiple' => false,
  82.                 'label' => 'Admission',
  83.                 "attr" => [
  84.                     "class" => "form-control"
  85.                 ],
  86.                 'label_attr' => [
  87.                     'class' => "col-lg-3 col-form-label"
  88.                 ]
  89.             ])
  90.             ->add('referentAdministratif'EntityType::class, [
  91.                 'class' => Employe::class,
  92.                 'query_builder' => function (EntityRepository $repo) {
  93.                     return $repo->createQueryBuilder('u')
  94.                         ->where('u.enabled = true');
  95.                 },
  96.                 'placeholder' => 'Choisir dans cette liste ...',
  97.                 'choice_label' => function (Employe $employe) {
  98.                     return $employe->getPersonalInformations()?->getFullName() ?? "";
  99.                 },
  100.                 'required' => false,
  101.                 'multiple' => false,
  102.                 'label' => 'Administratif',
  103.                 "attr" => [
  104.                     "class" => "form-control"
  105.                 ],
  106.                 'label_attr' => [
  107.                     'class' => "col-lg-3 col-form-label"
  108.                 ]
  109.             ])
  110.             ->add('referentCoach'EntityType::class, [
  111.                 'class' => Employe::class,
  112.                 'query_builder' => function (EntityRepository $repo){
  113.                     return $repo->createQueryBuilder('u')
  114.                         ->where('u.enabled = true');
  115.                 },
  116.                 'placeholder' => 'Choisir dans cette liste ...',
  117.                 'choice_label' => function (Employe $employe) {
  118.                     return $employe->getPersonalInformations()?->getFullName() ?? "";
  119.                 },
  120.                 'required' => false,
  121.                 'multiple' => false,
  122.                 'label' => 'Coach',
  123.                 "attr" => [
  124.                     "class" => "form-control"
  125.                 ],
  126.                 'label_attr' => [
  127.                     'class' => "col-lg-3 col-form-label"
  128.                 ]
  129.             ])
  130.             ->add('profil'EntityType::class, [
  131.                 'class' => Profil::class,
  132.                 'label' => 'Le profil',
  133.                 'query_builder' => function (ProfilRepository $repo) {
  134.                     return $repo->createQueryBuilder('p')
  135.                         ->andWhere("p.archive = false")
  136.                         ->orderBy("p.intitule""ASC");
  137.                 },
  138.                 'choice_label' => 'intitule',
  139.                 'placeholder' => 'Choisir dans cette liste ...',
  140.                 'required' => true,
  141.                 "attr" => [
  142.                     "class" => "form-control"
  143.                 ],
  144.                 'label_attr' => [
  145.                     'class' => "col-lg-3 col-form-label"
  146.                 ]
  147.             ])
  148.             ->add('typeFormation'EntityType::class, [
  149.                 'class' => Masterlistelg::class,
  150.                 'query_builder' => function (EntityRepository $repo) use ($selectedTypeFormation) {
  151.                     return $repo->createQueryBuilder('m')
  152.                         ->where('m = :selectedTypeFormation')
  153.                         ->setParameter('selectedTypeFormation'$selectedTypeFormation);
  154.                 },
  155.                 'choice_label' => 'designation',
  156.                 'required' => true,
  157.                 'label' => "Type de formation",
  158.                 'constraints' => [
  159.                     new NotBlank(['message' => 'Le type de formation est requis.'])
  160.                 ],
  161.                 "attr" => [
  162.                     "class" => "form-control"
  163.                 ],
  164.                 'label_attr' => [
  165.                     'class' => "col-lg-3 col-form-label"
  166.                 ]
  167.             ])
  168.             ->add('dispositif'EntityType::class, [
  169.                 'class' => Masterlistelg::class,
  170.                 'query_builder' => function (EntityRepository $repo) use ($selectedDispositif) {
  171.                     return $repo->createQueryBuilder('m')
  172.                         ->where('m = :selectedDispositif')
  173.                         ->setParameter('selectedDispositif'$selectedDispositif);
  174.                 },
  175.                 'choice_label' => 'designation',
  176.                 'required' => true,
  177.                 'label' => "Type de dispositif",
  178.                 'constraints' => [
  179.                     new NotBlank(['message' => 'Le type de dispositif est requis.'])
  180.                 ],
  181.                 "attr" => [
  182.                     "class" => "form-control"
  183.                 ],
  184.                 'label_attr' => [
  185.                     'class' => "col-lg-3 col-form-label"
  186.                 ]
  187.             ])
  188.             ->add('parcours'EntityType::class, [
  189.                 'class' => Parcours::class,
  190.                 'query_builder' => function (EntityRepository $repo) use ($selectedParcours) {
  191.                     return $repo->createQueryBuilder('p')
  192.                         ->where('p = :selectedParcours')
  193.                         ->setParameter('selectedParcours'$selectedParcours);
  194.                 },
  195.                 'choice_label' => function ($parcours) {
  196.                     return $parcours->getIntitule() . '--' $parcours->getSigle();
  197.                 },
  198.                 'required' => true,
  199.                 'label' => "Affecter un parcours",
  200.                 "attr" => [
  201.                     "class" => "form-control"
  202.                 ],
  203.                 'label_attr' => [
  204.                     'class' => "col-lg-3 col-form-label"
  205.                 ]
  206.             ])
  207.             ->add('session'EntityType::class, [
  208.                 'class' => Session::class,
  209.                 'query_builder' => function (EntityRepository $repo) use ($selectedSessions) {
  210.                     return $repo->createQueryBuilder('s')
  211.                         ->where('s = :selectedSessions')
  212.                         ->setParameter('selectedSessions'$selectedSessions);
  213.                 },
  214.                 'choice_label' => 'intitule',
  215.                 'required' => true,
  216.                 'label' => "Affecter une session",
  217.                 "attr" => [
  218.                     "class" => "form-control"
  219.                 ],
  220.                 'label_attr' => [
  221.                     'class' => "col-lg-3 col-form-label"
  222.                 ]
  223.             ])
  224.             ->add('emailCandidature'TextType::class,
  225.                 [
  226.                     'required' => false,
  227.                     'label' => 'Email notification',
  228.                     'attr' => [
  229.                         'class' => "form-control"
  230.                     ],
  231.                     'label_attr' => [
  232.                         'class' => "col-lg-3 col-form-label"
  233.                     ]
  234.                 ])
  235.             ->add('societe'EntityType::class, [
  236.                 'class' => Societe::class,
  237.                 'choice_label' => 'raisonSociale',
  238.                 'required' => false,
  239.                 'placeholder' => 'Choisir dans cette liste ...',
  240.                 'label' => 'Societe',
  241.                 'attr' => [
  242.                     'class' => "form-control"
  243.                 ],
  244.                 'label_attr' => [
  245.                     'class' => "col-lg-3 col-form-label"
  246.                 ]
  247.             ])
  248.             ->add('modules'EntityType::class, [
  249.                 'class' => Module::class,
  250.                 'choice_label' => 'getFullIntituleType',
  251.                 'mapped' => false,
  252.                 'required' => false,
  253.                 'multiple' => true,
  254.                 'label' => 'Modules',
  255.                 'group_by' => 'sousThemeTheme.theme.intitule',
  256.                 'attr' => [
  257.                     'class' => 'form-control select2'
  258.                 ]
  259.                 ,
  260.                 'label_attr' => [
  261.                     'class' => "col-lg-3 col-form-label"
  262.                 ]
  263.             ])
  264.             ->add('diplomant'CheckboxType::class, [
  265.                 'label' => 'Diplomant',
  266.                 'required' => false,
  267.                 'attr' => [
  268.                     'class' => "form-check-input"
  269.                 ],
  270.                 'label_attr' => [
  271.                     'class' => "col-lg-3 col-form-label"
  272.                 ]
  273.             ])
  274.             ->add('delegueClasse'CheckboxType::class, [
  275.                 'label' => 'Délégué de Classe',
  276.                 'required' => false,
  277.                 'attr' => [
  278.                     'class' => "form-check-input"
  279.                 ],
  280.                 'label_attr' => [
  281.                     'class' => "col-lg-3 col-form-label"
  282.                 ]
  283.             ])
  284.             ->add('modaliteEnseignement'ChoiceType::class, [
  285.                 'required' => true,
  286.                 'label' => "Modalité d'enseignement",
  287.                 'choices' => [
  288.                     'Présentiel' => 'Présentiel',
  289.                     'Distanciel' => 'Distanciel',
  290.                 ],
  291.                 'placeholder' => 'Choisir dans cette liste ...',
  292.                 'multiple' => false,
  293.                 'attr' => [
  294.                     'class' => "form-control"
  295.                 ],
  296.                 'label_attr' => [
  297.                     'class' => "col-lg-3 col-form-label"
  298.                 ]
  299.             ])
  300.             ->add('entreprise'EntityType::class, [
  301.                 'class' => Entreprise::class,
  302.                 'choice_label' => 'raisonSociale',
  303.                 'required' => false,
  304.                 'label' => 'Entreprise liée',
  305.                 'placeholder' => 'Choisir dans cette liste ...',
  306.                 'attr' => [
  307.                     'class' => "form-control entreprise-selector",
  308.                 ],
  309.                 'label_attr' => [
  310.                     'class' => "col-lg-3 col-form-label",
  311.                 ],
  312.             ])
  313.             ->add('entrepriseContact'EntityType::class, [
  314.                 'class' => Contact::class,
  315.                 'choice_label' => function (Contact $contact) {
  316.                     return $contact->getPersonalInformations()?->getFullName() ?? "";
  317.                 },
  318.                 'query_builder' => function (EntityRepository $repo) use ($selectedContact) {
  319.                     return $repo->createQueryBuilder('c')
  320.                         ->where('c = :selectedContact')
  321.                         ->setParameter('selectedContact'$selectedContact);
  322.                 },
  323.                 'required' => false,
  324.                 'placeholder' => 'Sélectionnez un contact',
  325.                 'label' => 'Contact entreprise',
  326.                 'attr' => [
  327.                     'class' => "form-control",
  328.                 ],
  329.                 'label_attr' => [
  330.                     'class' => "col-lg-3 col-form-label",
  331.                 ],
  332.             ])
  333.             ->add('etablissement'EntityType::class, [
  334.                 'class' => Etablissement::class,
  335.                 'choice_label' => function (Etablissement $etablissement) {
  336.                     return $etablissement->getIntitule()?? "";
  337.                 },
  338.                 'query_builder' => function (EntityRepository $repo) use ($selectedEtablissement) {
  339.                     return $repo->createQueryBuilder('c')
  340.                         ->where('c = :selectedEtablissement')
  341.                         ->setParameter('selectedEtablissement'$selectedEtablissement);
  342.                 },
  343.                 'required' => false,
  344.                 'placeholder' => 'Sélectionnez un établissement',
  345.                 'label' => 'Établissement Société',
  346.                 'attr' => [
  347.                     'class' => "form-control",
  348.                 ],
  349.                 'label_attr' => [
  350.                     'class' => "col-lg-3 col-form-label",
  351.                 ],
  352.             ])
  353.             ->add('cv'FileType::class, [
  354.                 'required' => false,
  355.                 'mapped' => false,
  356.                 'label' => 'CV',
  357.                 'attr' => [
  358.                     'class' => "form-control"
  359.                 ],
  360.                 'label_attr' => [
  361.                     'class' => "col-lg-3 col-form-label"
  362.                 ]
  363.             ])
  364.             ->add('events'EntityType::class, [
  365.                 'class' => Event::class,
  366.                 'mapped' => false,
  367.                 'query_builder' => function (EventRepository $repo) {
  368.                     return $repo->createQueryBuilder('e')
  369.                         ->where('e.start <= CURRENT_TIMESTAMP()')
  370.                         ->andWhere('e.parent  is  null')
  371.                         ->andWhere('e.module is not null');
  372.                 },
  373.                 'choice_label' => function (Event $event) {
  374.                     return $event->getModule()?->getIntitule() . '--' $event->getModule()?->getCode()
  375.                         . '--' $event->getStart()?->format('y-M-d') . '--' $event->getEnd()?->format('y-M-d');
  376.                 },
  377.                 'required' => true,
  378.                 'multiple' => true,
  379.                 'label' => "Liste des modules par session",
  380.                 "attr" => [
  381.                     "class" => "form-control select2"
  382.                 ],
  383.                 'label_attr' => [
  384.                     'class' => "col-lg-3 col-form-label"
  385.                 ]
  386.             ])
  387.         ;
  388.     }
  389.     public function configureOptions(OptionsResolver $resolver): void
  390.     {
  391.         $resolver->setDefaults([
  392.             'data_class' => Dossier::class,
  393.             'selectedTypeFormation' => null,
  394.             'selectedDispositif' => null,
  395.             'selectedParcours' => null,
  396.             'selectedSessions' => null,
  397.             'apiGestiform' => null,
  398.             'selectedContact' => null,
  399.             'selectedEtablissement' => null,
  400.         ]);
  401.     }
  402. }