src/Form/Type/ProfilRepreneur/RessourcesCapaciteType.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author Mehrez Labidi
  5.  */
  6. namespace App\Form\Type\ProfilRepreneur;
  7. use Symfony\Component\Validator\Context\ExecutionContextInterface;
  8. use Symfony\Component\Validator\Constraints as Assert;
  9. use Symfony\Component\Validator\Constraints\NotBlank;
  10. use App\Form\Type\ProfilRepreneur\ProfilRepreneurType;
  11. use App\Entity\ProfilRepreneur;
  12. use App\Validator\Constraints\Montant;
  13. use App\Helper\Utils;
  14. use Symfony\Component\Form\Extension\Core\Type\{
  15.     ChoiceType,
  16.     DateType,
  17.     TextType,
  18.     HiddenType,
  19.     TextareaType,
  20.     NumberType,
  21.     SubmitType
  22. };
  23. use Symfony\Component\Form\FormBuilderInterface;
  24. use Symfony\Component\OptionsResolver\OptionsResolver;
  25. use App\Form\Type\FormChoices;
  26. use Symfony\Component\Form\FormEvent;
  27. use Symfony\Component\Form\FormEvents;
  28. class RessourcesCapaciteType extends ProfilRepreneurType {
  29.     public function buildForm(FormBuilderInterface $builder, array $options): void {
  30.         parent::buildForm($builder$options);
  31.         // ===== RESSOURCES FINANCIÈRES =====
  32.         $builder
  33.                 ->add('apport'NumberType::class, [
  34.                     'label' => 'Quel est votre apport financier personnel pour ce projet de reprise',
  35.                     'required' => false,
  36.                     'invalid_message' => 'Ce montant est invalide',
  37.                     'constraints' => [
  38.                         new Assert\NotBlank([
  39.                             'message' => 'Veuillez indiquer votre apport financier personnel.',
  40.                             'groups' => ['publier'],
  41.                                 ]),
  42.                         new Montant()
  43.                     ],
  44.                     'attr' => ['placeholder' => 'en €''id' => 'apport']
  45.                 ])
  46.                 ->add('apport_liquide'ChoiceType::class, [
  47.                     'label' => 'Cet apport financier est-il immédiatement et entièrement liquide pour votre projet de reprise ?',
  48.                     'choices' => [
  49.                         'Oui' => ProfilRepreneur::OUI,
  50.                         'Non' => ProfilRepreneur::NON
  51.                     ],
  52.                     'expanded' => true,
  53.                     'multiple' => false,
  54.                     'required' => true,
  55.                     'constraints' => [
  56.                         new Assert\NotBlank([
  57.                             'message' => 'Veuillez indiquer si votre apport est immédiatement liquide.',
  58.                             'groups' => ['publier'],
  59.                                 ]),
  60.                     ],
  61.                     'attr' => ['id' => 'apport_liquide']
  62.                 ])
  63.                 ->add('precisions_apport_liquide'TextareaType::class, [
  64.                     'label' => 'Précisez',
  65.                     'required' => false,
  66.                     'constraints' => [
  67.                         new Assert\NotBlank([
  68.                             'message' => 'Veuillez préciser pourquoi votre apport n\'est pas entièrement liquide.',
  69.                             'groups' => ['publier'],
  70.                                 ]),
  71.                     ],
  72.                     'attr' => [
  73.                         'class' => 'form-control',
  74.                         'rows' => self::ROWS_MEDIUM,
  75.                         'id' => 'precisions_apport_liquide',
  76.                         'onfocus' => 'this.rows = 10',
  77.                         'onblur' => 'this.rows = 3'
  78.                     ]
  79.                 ])
  80.                 ->add('relais_financement'ChoiceType::class, [
  81.                     'label' => 'Disposez-vous de relais de financement complémentaires ? (investisseurs, associés,…)',
  82.                     'choices' => [
  83.                         'Oui' => ProfilRepreneur::OUI,
  84.                         'Non' => ProfilRepreneur::NON
  85.                     ],
  86.                     'expanded' => true,
  87.                     'multiple' => false,
  88.                     'required' => true,
  89.                     'constraints' => [
  90.                         new Assert\NotBlank([
  91.                             'message' => 'Veuillez indiquer si vous disposez de relais de financement complémentaires.',
  92.                             'groups' => ['publier'],
  93.                                 ]),
  94.                     ],
  95.                     'attr' => ['id' => 'relais_financement']
  96.                 ])
  97.                 ->add('precisions_relais_financement'TextareaType::class, [
  98.                     'label' => 'Précisez',
  99.                     'required' => false,
  100.                     'constraints' => [
  101.                         new Assert\NotBlank([
  102.                             'message' => 'Veuillez préciser vos relais de financement complémentaires.',
  103.                             'groups' => ['publier'],
  104.                                 ]),
  105.                     ],
  106.                     'attr' => [
  107.                         'class' => 'form-control',
  108.                         'rows' => self::ROWS_MEDIUM,
  109.                         'id' => 'precisions_relais_financement',
  110.                         'onfocus' => 'this.rows = 10',
  111.                         'onblur' => 'this.rows = 3'
  112.                     ]
  113.                 ])
  114.                 ->add('montant_total_mobilisable'NumberType::class, [
  115.                     'label' => 'Si oui : Montant total que vous pensez pouvoir mobiliser pour une reprise (votre apport + soutiens éventuels)',
  116.                     'required' => false,
  117.                     'invalid_message' => 'Ce montant est invalide',
  118.                     'constraints' => [
  119.                         new Assert\NotBlank([
  120.                             'message' => 'Veuillez indiquer le montant total mobilisable pour la reprise.',
  121.                             'groups' => ['publier'],
  122.                                 ]),
  123.                         new Montant()
  124.                     ],
  125.                     'attr' => ['placeholder' => 'en €''id' => 'montant_total_mobilisable']
  126.                 ])
  127.                 ->add('financeurs_rencontres'ChoiceType::class, [
  128.                     'label' => 'Avez-vous déjà rencontré des financeurs pour un projet de reprise ?',
  129.                     'choices' => [
  130.                         'Oui' => ProfilRepreneur::OUI,
  131.                         'Non' => ProfilRepreneur::NON
  132.                     ],
  133.                     'expanded' => true,
  134.                     'multiple' => false,
  135.                     'required' => true,
  136.                     'constraints' => [
  137.                         new Assert\NotBlank([
  138.                             'message' => 'Veuillez indiquer si vous avez déjà rencontré des financeurs.',
  139.                             'groups' => ['publier'],
  140.                                 ]),
  141.                     ],
  142.                     'attr' => ['id' => 'financeurs_rencontres']
  143.                 ])
  144.                 ->add('precisions_financeurs_rencontres'TextareaType::class, [
  145.                     'label' => 'Précisez',
  146.                     'required' => false,
  147.                     'constraints' => [
  148.                         new Assert\NotBlank([
  149.                             'message' => 'Veuillez préciser les financeurs rencontrés.',
  150.                             'groups' => ['publier'],
  151.                                 ]),
  152.                     ],
  153.                     'attr' => [
  154.                         'class' => 'form-control',
  155.                         'rows' => self::ROWS_MEDIUM,
  156.                         'id' => 'precisions_financeurs_rencontres',
  157.                         'onfocus' => 'this.rows = 10',
  158.                         'onblur' => 'this.rows = 3'
  159.                     ]
  160.                 ])
  161.                 ->add('statut_residence'ChoiceType::class, [
  162.                     'label' => 'Etes vous propriétaire ou locataire de votre résidence principale',
  163.                     'choices' => [
  164.                         'Je suis propriétaire' => ProfilRepreneur::STATUT_PROPRIETAIRE,
  165.                         'Je suis locataire' => ProfilRepreneur::STATUT_LOCATAIRE
  166.                     ],
  167.                     'expanded' => true,
  168.                     'multiple' => false,
  169.                     'required' => true,
  170.                     'constraints' => [
  171.                         new Assert\NotBlank([
  172.                             'message' => 'Veuillez indiquer votre statut de résidence.',
  173.                             'groups' => ['publier'],
  174.                                 ]),
  175.                     ],
  176.                     'attr' => ['id' => 'statut_residence']
  177.                 ])
  178.                 ->add('annee_acquisition'HiddenType::class, [
  179.                     'constraints' => [
  180.                         new Assert\NotBlank([
  181.                             'message' => 'Veuillez indiquer l\'année d\'acquisition de votre résidence.',
  182.                             'groups' => ['publier'],
  183.                                 ]),
  184.                     ],
  185.                     'attr' => ['id' => 'annee_acquisition''v-model' => 'annee_acquisition']
  186.                 ])
  187.                 ->add('emprunt_restant'NumberType::class, [
  188.                     'label' => 'Montant de l\'emprunt restant',
  189.                     'required' => false,
  190.                     'invalid_message' => 'Ce montant est invalide',
  191.                     'constraints' => [
  192.                         new Assert\NotBlank([
  193.                             'message' => 'Veuillez indiquer le montant de l\'emprunt restant.',
  194.                             'groups' => ['publier'],
  195.                                 ]),
  196.                         new Montant()
  197.                     ],
  198.                     'attr' => ['placeholder' => 'en €''id' => 'emprunt_restant']
  199.                 ])
  200.                 ->add('mensualites_emprunt'NumberType::class, [
  201.                     'label' => 'Montant des mensualités',
  202.                     'required' => false,
  203.                     'invalid_message' => 'Ce montant est invalide',
  204.                     'constraints' => [
  205.                         new Assert\NotBlank([
  206.                             'message' => 'Veuillez indiquer le montant de vos mensualités d\'emprunt.',
  207.                             'groups' => ['publier'],
  208.                                 ]),
  209.                         new Montant()
  210.                     ],
  211.                     'attr' => ['placeholder' => 'en €''id' => 'mensualites_emprunt']
  212.                 ])
  213.                 ->add('montant_loyer'NumberType::class, [
  214.                     'label' => 'Montant du loyer',
  215.                     'required' => false,
  216.                     'invalid_message' => 'Ce montant est invalide',
  217.                     'constraints' => [
  218.                         new Assert\NotBlank([
  219.                             'message' => 'Veuillez indiquer le montant de votre loyer.',
  220.                             'groups' => ['publier'],
  221.                                 ]),
  222.                         new Montant()
  223.                     ],
  224.                     'attr' => ['placeholder' => 'en €''id' => 'montant_loyer']
  225.                 ])
  226.                 ->add('salaire_espere'NumberType::class, [
  227.                     'label' => 'Quel salaire esperez vous après la reprise ? (net mensuel après impôts)',
  228.                     'required' => false,
  229.                     'invalid_message' => 'Ce montant est invalide',
  230.                     'constraints' => [
  231.                         new Assert\NotBlank([
  232.                             'message' => 'Veuillez indiquer le salaire espéré après la reprise.',
  233.                             'groups' => ['publier'],
  234.                                 ]),
  235.                         new Montant()
  236.                     ],
  237.                     'attr' => ['placeholder' => 'en €''id' => 'salaire_espere']
  238.                 ])
  239.                 ->add('salaire_minimum'NumberType::class, [
  240.                     'label' => 'De quel salaire avez-vous besoin au minimum pour vivre correctement ? (net mensuel après impôts)',
  241.                     'required' => false,
  242.                     'invalid_message' => 'Ce montant est invalide',
  243.                     'constraints' => [
  244.                         new Assert\NotBlank([
  245.                             'message' => 'Veuillez indiquer le salaire minimum dont vous avez besoin.',
  246.                             'groups' => ['publier'],
  247.                                 ]),
  248.                         new Montant()
  249.                     ],
  250.                     'attr' => ['placeholder' => 'en €''id' => 'salaire_minimum']
  251.                 ])
  252.                 ->add('id_pays'ChoiceType::class, [
  253.                     "label" => "Pays",
  254.                     "required" => false,
  255.                     "choices" => FormChoices::selectionnerChoisir() + self::listIdPays(),
  256.                     "attr" => [
  257.                         'id' => 'id_pays',
  258.                         "class" => "form-control"
  259.                     ]
  260.                 ])
  261.                 ->add('id_region'ChoiceType::class, [
  262.                     "required" => false,
  263.                     'invalid_message' => 'Ce id region est invalide',
  264.                     'constraints' => [],
  265.                     "choices" => FormChoices::selectionnerChoisir(),
  266.                     "attr" => [
  267.                         'id' => 'id_region',
  268.                         "class" => "form-control"
  269.                     ],
  270.                 ])
  271.                 ->add('id_departement'ChoiceType::class, [
  272.                     "required" => false,
  273.                     'invalid_message' => 'Ce id departement est invalide',
  274.                     'constraints' => [],
  275.                     "choices" => FormChoices::selectionnerChoisir(),
  276.                     "attr" => [
  277.                         'id' => 'id_departement',
  278.                         "class" => "form-control"
  279.                     ],
  280.                 ])
  281.                 ->add('code_postal'NumberType::class, [
  282.                     'label' => 'Quel est votre code postal ?',
  283.                     'required' => false,
  284.                     'invalid_message' => 'Ce code postal est invalide',
  285.                     'constraints' => [
  286.                         new Assert\NotBlank([
  287.                             'message' => 'Veuillez indiquer votre code_postal.',
  288.                             'groups' => ['publier'],
  289.                                 ]),
  290.                         new Montant()
  291.                     ],
  292.                     'attr' => ['placeholder' => '''id' => 'code_postal']
  293.                 ])
  294.                 // ===== TEMPS ET DISPONIBILITÉ =====
  295.                 ->add('mobilite_geographique'ChoiceType::class, [
  296.                     'label' => 'Etes-vous mobile géographiquement ?',
  297.                     'choices' => [
  298.                         'Oui' => ProfilRepreneur::OUI,
  299.                         'Non' => ProfilRepreneur::NON
  300.                     ],
  301.                     'expanded' => true,
  302.                     'multiple' => false,
  303.                     'required' => true,
  304.                     'constraints' => [
  305.                         new Assert\NotBlank([
  306.                             'message' => 'Veuillez indiquer si vous êtes mobile géographiquement.',
  307.                             'groups' => ['publier'],
  308.                                 ]),
  309.                     ],
  310.                     'attr' => ['id' => 'mobilite_geographique']
  311.                 ])
  312.                 ->add('situation_actuelle'ChoiceType::class, [
  313.                     'label' => 'Quelle est votre situation actuelle ?',
  314.                     'choices' => [
  315.                         'En poste (salarié / dirigeant)' => ProfilRepreneur::SITUATION_EN_POSTE,
  316.                         'En recherche (France Travail)' => ProfilRepreneur::SITUATION_EN_RECHERCHE
  317.                     ],
  318.                     'expanded' => true,
  319.                     'multiple' => false,
  320.                     'required' => true,
  321.                     'constraints' => [
  322.                         new Assert\NotBlank([
  323.                             'message' => 'Veuillez indiquer votre situation actuelle.',
  324.                             'groups' => ['publier'],
  325.                                 ]),
  326.                     ],
  327.                     'attr' => ['id' => 'situation_actuelle']
  328.                 ])
  329.                 ->add('disponibilite_plein_temps'ChoiceType::class, [
  330.                     'label' => 'Êtes-vous disponible à plein temps pour vous impliquer dans le projet ?',
  331.                     'choices' => [
  332.                         'Oui' => ProfilRepreneur::OUI,
  333.                         'Non' => ProfilRepreneur::NON
  334.                     ],
  335.                     'expanded' => true,
  336.                     'multiple' => false,
  337.                     'required' => true,
  338.                     'constraints' => [
  339.                         new Assert\NotBlank([
  340.                             'message' => 'Veuillez indiquer si vous êtes disponible à plein temps.',
  341.                             'groups' => ['publier'],
  342.                                 ]),
  343.                     ],
  344.                     'attr' => ['id' => 'disponibilite_plein_temps']
  345.                 ])
  346.                 ->add('precisions_disponibilite_plein_temps'TextareaType::class, [
  347.                     'label' => 'Précisez',
  348.                     'required' => false,
  349.                     'constraints' => [
  350.                         new Assert\NotBlank([
  351.                             'message' => 'Veuillez préciser votre disponibilité.',
  352.                             'groups' => ['publier'],
  353.                                 ]),
  354.                     ],
  355.                     'attr' => [
  356.                         'class' => 'form-control',
  357.                         'rows' => self::ROWS_MEDIUM,
  358.                         'id' => 'precisions_disponibilite_plein_temps',
  359.                         'onfocus' => 'this.rows = 10',
  360.                         'onblur' => 'this.rows = 3'
  361.                     ]
  362.                 ])
  363.                 ->add('situation_personnelle'ChoiceType::class, [
  364.                     'label' => 'Situation personelle',
  365.                     'choices' => [
  366.                         'Célibataire' => ProfilRepreneur::SITUATION_CELIBATAIRE,
  367.                         'En couple sans enfant à charge' => ProfilRepreneur::SITUATION_COUPLE_SANS_ENFANT,
  368.                         'En couple avec enfant à charge' => ProfilRepreneur::SITUATION_COUPLE_AVEC_ENFANT
  369.                     ],
  370.                     'expanded' => true,
  371.                     'multiple' => false,
  372.                     'required' => true,
  373.                     'constraints' => [
  374.                         new Assert\NotBlank([
  375.                             'message' => 'Veuillez indiquer votre situation personnelle.',
  376.                             'groups' => ['publier'],
  377.                                 ]),
  378.                     ],
  379.                     'attr' => ['id' => 'situation_personnelle']
  380.                 ])
  381.                 ->add('situation_conjoint'ChoiceType::class, [
  382.                     'label' => 'Quelle est la situation professionnelle de votre conjoint ?',
  383.                     'choices' => [
  384.                         'Salarié' => ProfilRepreneur::CONJOINT_SALARIE,
  385.                         'Entrepreneur' => ProfilRepreneur::CONJOINT_ENTREPRENEUR,
  386.                         'France Travail' => ProfilRepreneur::CONJOINT_FRANCE_TRAVAIL,
  387.                         'Autre' => ProfilRepreneur::CONJOINT_AUTRE
  388.                     ],
  389.                     'expanded' => true,
  390.                     'multiple' => false,
  391.                     'required' => true,
  392.                     'constraints' => [
  393.                         new Assert\NotBlank([
  394.                             'message' => 'Veuillez indiquer la situation professionnelle de votre conjoint.',
  395.                             'groups' => ['publier'],
  396.                                 ]),
  397.                     ],
  398.                     'attr' => ['id' => 'situation_conjoint']
  399.                 ])
  400.                 ->add('precisions_situation_conjoint'TextareaType::class, [
  401.                     'label' => 'Précisez',
  402.                     'required' => false,
  403.                     'constraints' => [
  404.                         new Assert\NotBlank([
  405.                             'message' => 'Veuillez préciser la situation de votre conjoint.',
  406.                             'groups' => ['publier'],
  407.                                 ]),
  408.                     ],
  409.                     'attr' => [
  410.                         'class' => 'form-control',
  411.                         'rows' => self::ROWS_MEDIUM,
  412.                         'id' => 'precisions_situation_conjoint',
  413.                         'onfocus' => 'this.rows = 10',
  414.                         'onblur' => 'this.rows = 3'
  415.                     ]
  416.                 ])
  417.                 // ===== RÉSEAUX ET SOUTIENS =====
  418.                 ->add('soutien_entourage'ChoiceType::class, [
  419.                     'label' => 'Votre entourage personnel soutient-il ce projet ?',
  420.                     'choices' => [
  421.                         'Oui pleinement' => ProfilRepreneur::SOUTIEN_OUI_PLEINEMENT,
  422.                         'Oui mais avec des réserves' => ProfilRepreneur::SOUTIEN_OUI_AVEC_RESERVES,
  423.                         'Non, ce projet inquiète ou interroge' => ProfilRepreneur::SOUTIEN_NON_INQUIET,
  424.                         'Je n\'en ai pas encore parlé' => ProfilRepreneur::SOUTIEN_PAS_ENCORE_PARLE
  425.                     ],
  426.                     'expanded' => true,
  427.                     'multiple' => false,
  428.                     'required' => true,
  429.                     'constraints' => [
  430.                         new Assert\NotBlank([
  431.                             'message' => 'Veuillez indiquer le soutien de votre entourage.',
  432.                             'groups' => ['publier'],
  433.                                 ]),
  434.                     ],
  435.                     'attr' => ['id' => 'soutien_entourage']
  436.                 ])
  437.                 ->add('precisions_soutien_entourage'TextareaType::class, [
  438.                     'label' => 'Précisez',
  439.                     'required' => false,
  440.                     'constraints' => [
  441.                         new Assert\NotBlank([
  442.                             'message' => 'Veuillez préciser le soutien de votre entourage.',
  443.                             'groups' => ['publier'],
  444.                                 ]),
  445.                     ],
  446.                     'attr' => [
  447.                         'class' => 'form-control',
  448.                         'rows' => self::ROWS_MEDIUM,
  449.                         'id' => 'precisions_soutien_entourage',
  450.                         'onfocus' => 'this.rows = 10',
  451.                         'onblur' => 'this.rows = 3'
  452.                     ]
  453.                 ])
  454.                 ->add('projet_plusieurs'ChoiceType::class, [
  455.                     'label' => 'Seriez-vous prêt à envisager un projet à plusieurs ?',
  456.                     'choices' => [
  457.                         'Oui' => ProfilRepreneur::PROJET_OUI,
  458.                         'Non' => ProfilRepreneur::PROJET_NON,
  459.                         'Je n\'y ai pas réfléchi' => ProfilRepreneur::PROJET_PAS_REFLECHI
  460.                     ],
  461.                     'expanded' => true,
  462.                     'multiple' => false,
  463.                     'required' => true,
  464.                     'constraints' => [
  465.                         new Assert\NotBlank([
  466.                             'message' => 'Veuillez indiquer si vous envisagez un projet à plusieurs.',
  467.                             'groups' => ['publier'],
  468.                                 ]),
  469.                     ],
  470.                     'attr' => ['id' => 'projet_plusieurs']
  471.                 ])
  472.                 ->add('formation_reprise'ChoiceType::class, [
  473.                     'label' => 'Avez-vous suivi une formation à la reprise d\'entreprise ?',
  474.                     'choices' => [
  475.                         'Oui' => ProfilRepreneur::FORMATION_OUI,
  476.                         'J\'ai prévu d\'en suivre une prochainement' => ProfilRepreneur::FORMATION_PREVU,
  477.                         'Non, ce n\'est pas envisagé pour le moment' => ProfilRepreneur::FORMATION_NON
  478.                     ],
  479.                     'expanded' => true,
  480.                     'multiple' => false,
  481.                     'required' => true,
  482.                     'constraints' => [
  483.                         new Assert\NotBlank([
  484.                             'message' => 'Veuillez indiquer si vous avez suivi une formation à la reprise.',
  485.                             'groups' => ['publier'],
  486.                                 ]),
  487.                     ],
  488.                     'attr' => ['id' => 'formation_reprise']
  489.                 ])
  490.                 ->add('precisions_formation_reprise'TextareaType::class, [
  491.                     'label' => 'Précisez',
  492.                     'required' => false,
  493.                     'constraints' => [
  494.                         new Assert\NotBlank([
  495.                             'message' => 'Veuillez préciser votre formation à la reprise.',
  496.                             'groups' => ['publier'],
  497.                                 ]),
  498.                     ],
  499.                     'attr' => [
  500.                         'class' => 'form-control',
  501.                         'rows' => self::ROWS_MEDIUM,
  502.                         'id' => 'precisions_formation_reprise',
  503.                         'onfocus' => 'this.rows = 10',
  504.                         'onblur' => 'this.rows = 3'
  505.                     ]
  506.                 ])
  507.                 ->add('accompagnement'HiddenType::class, [
  508.                     'attr' => [],
  509.                     'error_bubbling' => false,
  510.                     'constraints' => [
  511.                         new Assert\NotBlank([
  512.                             'message' => 'Veuillez sélectionner au moins un type d\'accompagnement.',
  513.                             'groups' => ['publier'],
  514.                                 ]),
  515.                     ]
  516.                 ])
  517.                 ->add('precisions_accompagnement'TextareaType::class, [
  518.                     'label' => 'Précisions',
  519.                     'required' => false,
  520.                     'constraints' => [
  521.                         new Assert\NotBlank([
  522.                             'message' => 'Veuillez préciser votre accompagnement.',
  523.                             'groups' => ['publier'],
  524.                                 ]),
  525.                     ],
  526.                     'attr' => [
  527.                         'class' => 'form-control',
  528.                         'rows' => self::ROWS_MEDIUM,
  529.                         'id' => 'precisions_accompagnement',
  530.                         'onfocus' => 'this.rows = 10',
  531.                         'onblur' => 'this.rows = 3'
  532.                     ]
  533.                 ])
  534.                 ->add('reseau_utile'ChoiceType::class, [
  535.                     'label' => 'Disposez-vous d\'un réseau utile pour votre projet (clients, partenaires, secteur) ?',
  536.                     'choices' => [
  537.                         'Oui' => ProfilRepreneur::OUI,
  538.                         'Non' => ProfilRepreneur::NON
  539.                     ],
  540.                     'expanded' => true,
  541.                     'multiple' => false,
  542.                     'required' => true,
  543.                     'constraints' => [
  544.                         new Assert\NotBlank([
  545.                             'message' => 'Veuillez indiquer si vous disposez d\'un réseau utile.',
  546.                             'groups' => ['publier'],
  547.                                 ]),
  548.                     ],
  549.                     'attr' => ['id' => 'reseau_utile']
  550.                 ])
  551.                 ->add('precisions_reseau_utile'TextareaType::class, [
  552.                     'label' => 'Précisez',
  553.                     'required' => false,
  554.                     'constraints' => [
  555.                         new Assert\NotBlank([
  556.                             'message' => 'Veuillez préciser votre réseau.',
  557.                             'groups' => ['publier'],
  558.                                 ]),
  559.                     ],
  560.                     'attr' => [
  561.                         'class' => 'form-control',
  562.                         'rows' => self::ROWS_MEDIUM,
  563.                         'id' => 'precisions_reseau_utile',
  564.                         'onfocus' => 'this.rows = 10',
  565.                         'onblur' => 'this.rows = 3'
  566.                     ]
  567.         ]);
  568.         // ===== REGION LISTENER (inlined) =====
  569.         $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
  570.             $data $event->getData();
  571.             if (!is_array($data) || !array_key_exists('id_pays'$data)) {
  572.                 return;
  573.             }
  574.             $form $event->getForm();
  575.             $id_pays $data['id_pays'];
  576.             if (!$id_pays) {
  577.                 $id_pays array_combine(
  578.                                 array_map('mb_strtolower'array_column($this->params->get('app.pays_version'), 1)),
  579.                                 array_column($this->params->get('app.pays_version'), 4)
  580.                         )[$_SESSION['codePays']];
  581.             }
  582.             if ($id_pays) {
  583.                 $id_region $data['id_region'] ?? null;
  584.                 $regions $this->lm->listRegionsByIdPays($id_paystrue);
  585.                 $list_regions FormChoices::selectionnerChoisir() + array_combine(
  586.                                 array_column($regions"nom_localisation"),
  587.                                 array_column($regions"id_localisation")
  588.                         );
  589.                 $form->add('id_region'ChoiceType::class, [
  590.                     'choices' => $list_regions ?? FormChoices::selectionnerChoisir(),
  591.                     'constraints' => [],
  592.                     'attr' => ['autocomplete' => 'off''class' => 'form-control'],
  593.                     'data' => $id_region,
  594.                 ]);
  595.                 // --- Departement (inlined) ---
  596.                 if ($id_region) {
  597.                     $departements $this->lm->listDepartementByIdRegion($id_regiontrue);
  598.                     $list_departements FormChoices::selectionnerChoisir() + array_combine(
  599.                                     array_column($departements"nom_localisation"),
  600.                                     array_column($departements"id_localisation")
  601.                             );
  602.                 } else {
  603.                     $departements = [];
  604.                 }
  605.                 $form->add('id_departement'ChoiceType::class, [
  606.                     'choices' => $list_departements ?? FormChoices::selectionnerChoisir(),
  607.                     'constraints' => [],
  608.                     'attr' => ['autocomplete' => 'off''class' => 'form-control'],
  609.                     'data' => $data['id_departement'] ?? null,
  610.                 ]);
  611.             }
  612.         });
  613.         $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
  614.             $form $event->getForm();
  615.             $data $event->getData();
  616.             if (!is_array($data) || !array_key_exists('id_pays'$data)) {
  617.                 return;
  618.             }
  619.             $id_pays $data['id_pays'] ?? null;
  620.             $id_region $data['id_region'] ?? null;
  621.             $regions = [];
  622.             if ($id_pays) {
  623.                 $regions $this->lm->listRegionsByIdPays($id_paystrue);
  624.                 $list_regions FormChoices::selectionnerChoisir() + array_combine(
  625.                                 array_column($regions"nom_localisation"),
  626.                                 array_column($regions"id_localisation")
  627.                         );
  628.                 $form->add('id_region'ChoiceType::class, [
  629.                     'choices' => $list_regions ?? FormChoices::selectionnerChoisir(),
  630.                     'constraints' => [],
  631.                     'attr' => ['autocomplete' => 'off''class' => 'form-control'],
  632.                     'data' => $id_region,
  633.                 ]);
  634.             }
  635.             // --- Departement (inlined) ---
  636.             if ($id_region) {
  637.                 $departements $this->lm->listDepartementByIdRegion($id_regiontrue);
  638.                 $list_departements FormChoices::selectionnerChoisir() + array_combine(
  639.                                 array_column($departements"nom_localisation"),
  640.                                 array_column($departements"id_localisation")
  641.                         );
  642.             } else {
  643.                 $departements = [];
  644.             }
  645.             $form->add('id_departement'ChoiceType::class, [
  646.                 'choices' => $list_departements ?? FormChoices::selectionnerChoisir(),
  647.                 'constraints' => [],
  648.                 'attr' => ['autocomplete' => 'off''class' => 'form-control'],
  649.                 'data' => $data['id_departement'] ?? null,
  650.             ]);
  651.         });
  652.     }
  653. }