src/Form/DevisFormType.php line 92

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Devis;
  4. use App\Entity\Offer;
  5. use App\Form\Type\Base64ImageType;
  6. use Karser\Recaptcha3Bundle\Form\Recaptcha3Type;
  7. use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  11. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  12. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  13. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  14. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  15. use Symfony\Component\Form\Extension\Core\Type\DateType;
  16. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  17. use Symfony\Component\Form\Extension\Core\Type\RadioType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  19. use Symfony\Component\Form\Extension\Core\Type\TextType;
  20. use Symfony\Component\Form\FormBuilderInterface;
  21. use Symfony\Component\OptionsResolver\OptionsResolver;
  22. use Symfony\Component\Validator\Constraints\Choice;
  23. const SPECIFIC_FIELDS = array(
  24.     'fluvial' => array(
  25.         'boatWidth',
  26.         'boatCertificat',
  27.         'boatCertificatDate',
  28.         'boatCertificatCommunity',
  29.         'boatDetectFire',
  30.         'boatExtinguishersNumber',
  31.         'boatExtinguishersVerified',
  32.         'boatLastElectricalCheck',
  33.         'boatLastGasCheck',
  34.         'boatLastDryDocking',
  35.         'boatWorkCarried',
  36.         'usageSecondaryResidence',
  37.         'usageTypeFluvial',
  38.         'usageProfessional',
  39.         // Dependent on usage professional = true
  40.         'usagePassagersSales',
  41.         'usagePassengerEmployeesNumber',
  42.         'usagePassengerNumber',
  43.         'usagePassengerTva',
  44.         'usagePassengerMortgaged',
  45.         'usagePassengerCruiseShip',
  46.         'usagePassengerPleasure',
  47.         'usagePassengerWithoutNavigation',
  48.         'usagePassengerCatering',
  49.         'usagePassengerLandBasedFacilities',
  50.         'usagePassengerLandBasedFacilitiesType',
  51.         'usageRiverNavigationZone',
  52.         'usageLakeNavigationZone',
  53.         'folderinsuredLastSixtyMounth',
  54.         'folderCurrentInsurance',
  55.         'experienceLicenseCertificateCommercialBoats',
  56.         'experienceLicenseFluvial'
  57.     ),
  58.     'maritime' => array(
  59.         'boatName',
  60.         'boatRegistration',
  61.         'boatConstructionType',
  62.         'boatMaxSpeed',
  63.         'boatMotorType',
  64.         'boatMattCarbon',
  65.         'boatHaveAnnex',
  66.         'boatAnnexModele',
  67.         'boatAnnexYear',
  68.         'boatAnnexMotorBrand',
  69.         'boatAnnexMotorPower',
  70.         'boatAnnexMotorYear',
  71.         'usageTypeMaritime',
  72.         'usageNavigationArea',
  73.         'usageAloneMoreOneDay',
  74.         'folderValueInsuranceTTC',
  75.         'folderSimilarRisk',
  76.         'experienceBoatLicense',
  77.         'experienceOwnerTime',
  78.         'experienceRemarkableNavigation',
  79.         'experienceOtherLicense',
  80.     )
  81. );
  82. class DevisFormType extends AbstractType
  83. {
  84.     public function buildForm(FormBuilderInterface $builder, array $options): void
  85.     {
  86.         switch ($options['flow_step']) {
  87.             case 1// Votre bateau
  88.                 $builder
  89.                     ->add('category'ChoiceType::class, [
  90.                         'label' => 'Quel type d’assurance avez-vous besoin ?',
  91.                         'choices' => [
  92.                             'maritime' => 'maritime',
  93.                             'fluvial' => 'fluvial',
  94.                         ],
  95.                         'expanded' => true,
  96.                         'attr' => array(
  97.                             'class' => 'inline'
  98.                         )
  99.                     ])
  100.                     ->add('boatName'TextType::class, [
  101.                         'label' => 'Nom',
  102.                     ])
  103.                     ->add('boatType'ChoiceType::class, [
  104.                         'label' => 'Type de bateau',
  105.                         'choices' => [
  106.                             'Monocoque à voile' => 'Monocoque à voile',
  107.                             'Multicoque à voile' => 'Multicoque à voile',
  108.                             'Monocoque à moteur' => 'Monocoque à moteur',
  109.                             'Mulitcoque à moteur' => 'Mulitcoque à moteur',
  110.                             'Pneumatique' => 'Pneumatique',
  111.                         ]
  112.                     ])
  113.                     ->add('boatRegistration'ChoiceType::class, [
  114.                         'label' => 'Immatriculation',
  115.                         'choices' => [
  116.                             'Plaisance' => 'Plaisance',
  117.                             'Commerce' => 'Commerce',
  118.                         ],
  119.                     ])
  120.                     ->add('boatConstructionType'ChoiceType::class, [
  121.                         'label' => 'Type de construction',
  122.                         'choices' => [
  123.                             'Série' => 'Série',
  124.                             'Amateur' => 'Amateur',
  125.                         ],
  126.                     ])
  127.                     ->add('boatConstructionDate'DateType::class, [
  128.                         'label' => 'Date de construction',
  129.                         'widget' => 'single_text',
  130.                     ])
  131.                     ->add('boatConstruct'TextType::class, [
  132.                         'label' => 'Constructeur',
  133.                     ])
  134.                     ->add('boatModel'TextType::class, [
  135.                         'label' => 'Modèle',
  136.                     ])
  137.                     ->add('boatMaterials'ChoiceType::class, [
  138.                         'label' => 'Matériau de construction',
  139.                         'choices' => [
  140.                             'Polyester et composite' => 'Polyester et composite',
  141.                             'Aluminium' => 'Aluminium',
  142.                             'Epoxy contre-plaqué' => 'Epoxy contre-plaqué',
  143.                             'Acier' => 'Acier',
  144.                             'Bois' => 'Bois',
  145.                             'Carbone' => 'Carbone',
  146.                             'Pneumatique' => 'Pneumatique',
  147.                             'Ferrociment' => 'Ferrociment',
  148.                             'Autre' => 'Autre',
  149.                         ],
  150.                     ])
  151.                     ->add('boatLength'TextType::class, [
  152.                         'label' => 'Longueur de la coque (en mètre)',
  153.                     ])
  154.                     ->add('boatWidth'TextType::class, [
  155.                         'label' => 'Largeur de la coque (en mètre)',
  156.                     ])
  157.                     ->add('boatMaxSpeed'TextType::class, [
  158.                         'label' => 'Vitesse maximale (en Kts)',
  159.                     ])
  160.                     ->add('boatMotorNumber'ChoiceType::class, [
  161.                         'label' => 'Nombre de moteur(s)',
  162.                         'choices' => [
  163.                             '0' => '0',
  164.                             '1' => '1',
  165.                             '2' => '2',
  166.                             '3' => '3',
  167.                             '4' => '4',
  168.                         ],
  169.                     ])
  170.                     ->add('boatMotorType'ChoiceType::class, [
  171.                         'label' => 'Type de moteur(s)',
  172.                         'choices' => [
  173.                             'Hors-bord' => 'Hors-bord',
  174.                             'In-board' => 'In-board',
  175.                         ],
  176.                     ])
  177.                     ->add('boatMotorBrand'TextType::class, [
  178.                         'label' => 'Marque moteur(s)',
  179.                     ])
  180.                     ->add('boatMotorPower'TextType::class, [
  181.                         'label' => 'Puissance moteur(s) (en C.V.)',
  182.                     ])
  183.                     ->add('boatMotorYear'TextType::class, [
  184.                         'label' => 'Année du/des moteur(s)',
  185.                     ])
  186.                     ->add('trailerBrand'TextType::class, [
  187.                         'label' => 'Marque de la remorque',
  188.                         'required' => false,
  189.                     ])
  190.                     ->add('trailerImmat'TextType::class, [
  191.                         'label' => 'Immatriculation de la remorque',
  192.                         'required' => false,
  193.                     ])
  194.                     ->add('trailerValue'TextType::class, [
  195.                         'label' => 'Valeur de la remorque',
  196.                         'required' => false,
  197.                     ])
  198.                     ->add('trailerYear'TextType::class, [
  199.                         'label' => 'Année de la remorque',
  200.                         'required' => false,
  201.                     ])
  202.                     ->add('boatCertificat'ChoiceType::class, [
  203.                         'label' => 'Certificats et autorisations nécessaires à l\'usage du bateau en cours de validité',
  204.                         'required' => true,
  205.                         'choices' => array(
  206.                             "Oui" => true,
  207.                             "Non" => false,
  208.                         ),
  209.                         'expanded' => true,
  210.                         'attr' => array(
  211.                             'class' => 'inline'
  212.                         )
  213.                     ])
  214.                     ->add('boatCertificatDate'DateType::class, [
  215.                         'label' => 'Date de délivrance du certificat de navigation par la commission de surveillance',
  216.                         'widget' => 'single_text',
  217.                         'required' => false,
  218.                     ])
  219.                     ->add('boatCertificatCommunity'ChoiceType::class, [
  220.                         'label' => 'Certificat communautaire en cours de validité (unité de plus de 20m)',
  221.                         'required' => true,
  222.                         'choices' => array(
  223.                             "Oui" => true,
  224.                             "Non" => false,
  225.                         ),
  226.                         'expanded' => true,
  227.                         'attr' => array(
  228.                             'class' => 'inline'
  229.                         )
  230.                     ])
  231.                     ->add('boatDetectFire'TextType::class, [
  232.                         'label' => 'Moyens de détection incendie',
  233.                     ])
  234.                     ->add('boatExtinguishersNumber'TextType::class, [
  235.                         'label' => 'Nombre d\'extincteurs',
  236.                     ])
  237.                     ->add('boatExtinguishersVerified'ChoiceType::class, [
  238.                         'label' => 'Extincteurs vérifiés',
  239.                         'required' => true,
  240.                         'choices' => array(
  241.                             "Oui" => true,
  242.                             "Non" => false,
  243.                         ),
  244.                         'expanded' => true,
  245.                         'attr' => array(
  246.                             'class' => 'inline'
  247.                         )
  248.                     ])
  249.                     ->add('boatLastElectricalCheck'DateType::class, [
  250.                         'label' => 'Date du dernier contrôle électrique',
  251.                         'widget' => 'single_text',
  252.                         'required' => false,
  253.                     ])
  254.                     ->add('boatLastGasCheck'DateType::class, [
  255.                         'label' => 'Date du dernier contrôle gaz',
  256.                         'widget' => 'single_text',
  257.                         'required' => true// Peut-être mettre à true si nécessaire
  258.                     ])
  259.                     ->add('boatLastDryDocking'DateType::class, [
  260.                         'label' => 'Date de dernière mise en cale sèche',
  261.                         'widget' => 'single_text',
  262.                         'required' => false,
  263.                     ])
  264.                     ->add('boatWorkCarried'TextareaType::class, [
  265.                         'label' => 'Travaux réalisés à cette occasion',
  266.                         'required' => false,
  267.                         'attr' => array(
  268.                             'rows' => 5
  269.                         )
  270.                     ])
  271.                     ->add('boatMattCarbon'ChoiceType::class, [
  272.                         'label' => 'Le mât de votre bateau est-il en carbone',
  273.                         'required' => true,
  274.                         'choices' => array(
  275.                             "Oui" => true,
  276.                             "Non" => false,
  277.                         ),
  278.                         'expanded' => true,
  279.                         'attr' => array(
  280.                             'class' => 'inline'
  281.                         )
  282.                     ])
  283.                     ->add('boatHaveAnnex'ChoiceType::class, [
  284.                         'label' => 'Votre bateau dispose-t-il d\'une annexe ?',
  285.                         'required' => true,
  286.                         'choices' => array(
  287.                             "Oui" => true,
  288.                             "Non" => false,
  289.                         ),
  290.                         'expanded' => true,
  291.                         'attr' => array(
  292.                             'class' => 'inline'
  293.                         )
  294.                     ])
  295.                     ->add('boatAnnexModele'TextType::class, [
  296.                         'label' => 'Modèle d\'annexe',
  297.                     ])
  298.                     ->add('boatAnnexYear'TextType::class, [
  299.                         'label' => 'Année de l\'annexe',
  300.                     ])
  301.                     ->add('boatAnnexMotorBrand'TextType::class, [
  302.                         'label' => 'Marque du moteur de l\'annexe',
  303.                     ])
  304.                     ->add('boatAnnexMotorPower'TextType::class, [
  305.                         'label' => 'Puissance moteur de l\'annexe',
  306.                     ])
  307.                     ->add('boatAnnexMotorYear'TextType::class, [
  308.                         'label' => 'Année du moteur de l\'annexe',
  309.                     ])
  310.                 ;
  311.                 break;
  312.             case 2// Son utilisation
  313.                 $builder
  314.                     ->add('usagePurchaseDate'DateType::class, [
  315.                         'label' => 'Date d\'achat',
  316.                         'widget' => 'single_text',
  317.                     ])
  318.                     ->add('usageMainResidence'ChoiceType::class, [
  319.                         'label' => 'En résidence principale',
  320.                         'required' => true,
  321.                         'choices' => array(
  322.                             "Oui" => true,
  323.                             "Non" => false,
  324.                         ),
  325.                         'expanded' => true,
  326.                         'attr' => array(
  327.                             'class' => 'inline'
  328.                         )
  329.                     ])
  330.                     ->add('usageSecondaryResidence'ChoiceType::class, [
  331.                         'label' => 'En résidence secondaire',
  332.                         'required' => true,
  333.                         'choices' => array(
  334.                             "Oui" => true,
  335.                             "Non" => false,
  336.                         ),
  337.                         'expanded' => true,
  338.                         'attr' => array(
  339.                             'class' => 'inline'
  340.                         )
  341.                     ])
  342.                     ->add('usageTypeFluvial'ChoiceType::class, [
  343.                         'label' => 'Type d\'activité',
  344.                         'choices' => [
  345.                             "Transport de passagers" => "Transport de passagers",
  346.                             "Transport de marchandises" => "Transport de marchandises",
  347.                             "Travaux fluviaux" => "Travaux fluviaux",
  348.                             "Flotte de location" => "Flotte de location",
  349.                             "Bateau restaurant à poste fixe" => "Bateau restaurant à poste fixe",
  350.                         ],
  351.                     ])
  352.                     ->add('usageProfessional'ChoiceType::class, [
  353.                         'label' => 'Utilisation professionnelle',
  354.                         'required' => true,
  355.                         'choices' => array(
  356.                             "Oui" => true,
  357.                             "Non" => false,
  358.                         ),
  359.                         'expanded' => true,
  360.                         'attr' => array(
  361.                             'class' => 'inline'
  362.                         )
  363.                     ])
  364.                     ->add('usageFunding'ChoiceType::class, [
  365.                         'label' => 'Financement',
  366.                         'choices' => [
  367.                             'Aucun' => 'Aucun',
  368.                             'Crédit' => 'Crédit',
  369.                             'Leasing' => 'Leasing',
  370.                         ],
  371.                     ])
  372.                     ->add('usageFlag'CountryType::class, [
  373.                         'label' => 'Pavillon',
  374.                     ])
  375.                     ->add('usageAnchoragePortFrance'ChoiceType::class, [
  376.                         'label' => 'Port de mouillage en France ?',
  377.                         'required' => true,
  378.                         'choices' => array(
  379.                             "Oui" => true,
  380.                             "Non" => false,
  381.                         ),
  382.                         'expanded' => true,
  383.                         'attr' => array(
  384.                             'class' => 'inline'
  385.                         )
  386.                     ])
  387.                     ->add('usageAnchoragePort'TextType::class, [
  388.                         'label' => 'Port de mouillage',
  389.                     ])
  390.                     ->add('usageTypeMaritime'ChoiceType::class, [
  391.                         'label' => 'Utilisation',
  392.                         'choices' => [
  393.                             'Agrément personnel' => 'Agrément personnel',
  394.                             'Charter' => 'Charter',
  395.                             'Location avec skipper' => 'Location avec skipper',
  396.                             'Location sans skipper' => 'Location sans skipper',
  397.                         ],
  398.                     ])
  399.                     ->add('usageNavigationArea'ChoiceType::class, [
  400.                         'label' => 'Zone de navigation',
  401.                         'choices' => [
  402.                             "Europe, jusqu'à 50 milles des côtes françaises" => "Europe, jusqu'à 50 milles des côtes françaises",
  403.                             "Europe, jusqu'à 200 milles des côtes" => "Europe, jusqu'à 200 milles des côtes",
  404.                             "Antilles" => "Antilles",
  405.                             "Petites Antilles" => "Petites Antilles",
  406.                             "Antilles et mer des Caraïbes" => "Antilles et mer des Caraïbes",
  407.                             "Eaux intérieures" => "Eaux intérieures",
  408.                         ],
  409.                     ])
  410.                     ->add('usageAloneMoreOneDay'ChoiceType::class, [
  411.                         'label' => 'Prévoyez-vous des navigations en solitaire de plus de 24h ?',
  412.                         'required' => true,
  413.                         'choices' => array(
  414.                             "Oui" => true,
  415.                             "Non" => false,
  416.                         ),
  417.                         'expanded' => true,
  418.                         'attr' => array(
  419.                             'class' => 'inline'
  420.                         )
  421.                     ])
  422.                     ->add('usagePassagersSales'TextType::class, [
  423.                         'label' => 'Chiffre d\'affaires',
  424.                     ])
  425.                     ->add('usagePassengerEmployeesNumber'TextType::class, [
  426.                         'label' => 'Nombre de salariés',
  427.                     ])
  428.                     ->add('usagePassengerNumber'TextType::class, [
  429.                         'label' => 'Nombre de passagers',
  430.                     ])
  431.                     ->add('usagePassengerTva'ChoiceType::class, [
  432.                         'label' => 'Etes-vous assujetti à la TVA ?',
  433.                         'required' => true,
  434.                         'choices' => array(
  435.                             "Oui" => true,
  436.                             "Non" => false,
  437.                         ),
  438.                         'expanded' => true,
  439.                         'attr' => array(
  440.                             'class' => 'inline'
  441.                         )
  442.                     ])
  443.                     ->add('usagePassengerMortgaged'ChoiceType::class, [
  444.                         'label' => 'Ce bateau fait-il l\'objet d\'une hypothèque',
  445.                         'required' => true,
  446.                         'choices' => array(
  447.                             "Oui" => true,
  448.                             "Non" => false,
  449.                         ),
  450.                         'expanded' => true,
  451.                         'attr' => array(
  452.                             'class' => 'inline'
  453.                         )
  454.                     ])
  455.                     ->add('usagePassengerCruiseShip'ChoiceType::class, [
  456.                         'label' => 'Exploitation de bateau de croisière fluviale',
  457.                         'required' => true,
  458.                         'choices' => array(
  459.                             "Oui" => true,
  460.                             "Non" => false,
  461.                         ),
  462.                         'expanded' => true,
  463.                         'attr' => array(
  464.                             'class' => 'inline'
  465.                         )
  466.                     ])
  467.                     ->add('usagePassengerPleasure'ChoiceType::class, [
  468.                         'label' => 'Exploitation de bateau de promenade',
  469.                         'required' => true,
  470.                         'choices' => array(
  471.                             "Oui" => true,
  472.                             "Non" => false,
  473.                         ),
  474.                         'expanded' => true,
  475.                         'attr' => array(
  476.                             'class' => 'inline'
  477.                         )
  478.                     ])
  479.                     ->add('usagePassengerWithoutNavigation'ChoiceType::class, [
  480.                         'label' => 'Exploitation d\'établissement flottant sans navigation',
  481.                         'required' => true,
  482.                         'choices' => array(
  483.                             "Oui" => true,
  484.                             "Non" => false,
  485.                         ),
  486.                         'expanded' => true,
  487.                         'attr' => array(
  488.                             'class' => 'inline'
  489.                         )
  490.                     ])
  491.                     ->add('usagePassengerCatering'ChoiceType::class, [
  492.                         'label' => 'Restauration à bord',
  493.                         'required' => true,
  494.                         'choices' => array(
  495.                             "Oui" => true,
  496.                             "Non" => false,
  497.                         ),
  498.                         'expanded' => true,
  499.                         'attr' => array(
  500.                             'class' => 'inline'
  501.                         )
  502.                     ])
  503.                     ->add('usagePassengerLandBasedFacilities'ChoiceType::class, [
  504.                         'label' => 'Exploitation d\'installations terrestres',
  505.                         'required' => true,
  506.                         'choices' => array(
  507.                             "Oui" => true,
  508.                             "Non" => false,
  509.                         ),
  510.                         'expanded' => true,
  511.                         'attr' => array(
  512.                             'class' => 'inline'
  513.                         )
  514.                     ])
  515.                     ->add('usagePassengerLandBasedFacilitiesType'TextareaType::class, [
  516.                         'label' => 'Type d\'installations terrestres',
  517.                         'required' => false,
  518.                     ])
  519.                     ->add('usageRiverNavigationZone'ChoiceType::class, [
  520.                         'label' => 'Zone de navigation fluviale',
  521.                         'required' => true,
  522.                         'choices' => array(
  523.                             "Oui" => true,
  524.                             "Non" => false,
  525.                         ),
  526.                         'expanded' => true,
  527.                         'attr' => array(
  528.                             'class' => 'inline'
  529.                         )
  530.                     ])
  531.                     ->add('usageLakeNavigationZone'ChoiceType::class, [
  532.                         'label' => 'Zone de navigation lacustre',
  533.                         'required' => true,
  534.                         'choices' => array(
  535.                             "Oui" => true,
  536.                             "Non" => false,
  537.                         ),
  538.                         'expanded' => true,
  539.                         'attr' => array(
  540.                             'class' => 'inline'
  541.                         )
  542.                     ])
  543.                 ;
  544.                 break;
  545.             case 3// Dossier
  546.                 $builder
  547.                     ->add('folderValueInsurance'TextType::class, [
  548.                         'label' => 'Valeur d\'assurance du bateau (en TTC)',
  549.                     ])
  550.                     ->add('folderValueInsuranceTTC'ChoiceType::class, [
  551.                         'label' => 'Valeur T.T.C. ?',
  552.                         'required' => true,
  553.                         'choices' => array(
  554.                             "Oui" => true,
  555.                             "Non" => false,
  556.                         ),
  557.                         'expanded' => true,
  558.                         'attr' => array(
  559.                             'class' => 'inline'
  560.                         )
  561.                     ])
  562.                     ->add('folderTakeSinister'ChoiceType::class, [
  563.                         'label' => 'Avez-vous subi des sinistres lors des 60 derniers mois ?',
  564.                         'required' => true,
  565.                         'choices' => array(
  566.                             "Oui" => true,
  567.                             "Non" => false,
  568.                         ),
  569.                         'expanded' => true,
  570.                         'attr' => array(
  571.                             'class' => 'inline'
  572.                         )
  573.                     ])
  574.                     ->add('folderTakeSinisterNumber'ChoiceType::class, [
  575.                         'label' => 'Si oui, combien de sinistres avez-vous subi ?',
  576.                         'choices' => [
  577.                             '1' => '1',
  578.                             '2' => '2',
  579.                             '3' => '3',
  580.                             '4' => '4',
  581.                             '5+' => 'Plus de 5',
  582.                             '10+' => 'Plus de 10',
  583.                         ],
  584.                     ])
  585.                     ->add('folderSimilarRisk'ChoiceType::class, [
  586.                         'label' => 'Avez-vous déjà été assuré pour un risque similaire ?',
  587.                         'required' => true,
  588.                         'choices' => array(
  589.                             "Oui" => true,
  590.                             "Non" => false,
  591.                         ),
  592.                         'expanded' => true,
  593.                         'attr' => array(
  594.                             'class' => 'inline'
  595.                         )
  596.                     ])
  597. //                    ->add('folderContract', EntityType::class, [
  598. //                        'label' => 'LISTE DES CONTRATS ASSURBOAT',
  599. //                        'class' => Offer::class,
  600. //                    ])
  601.                     ->add('folderinsuredLastSixtyMounth'ChoiceType::class, [
  602.                         'label' => 'Avez-vous déjà été assuré pour un bateau durant les 60 derniers mois ?',
  603.                         'required' => true,
  604.                         'choices' => array(
  605.                             "Oui" => true,
  606.                             "Non" => false,
  607.                         ),
  608.                         'expanded' => true,
  609.                         'attr' => array(
  610.                             'class' => 'inline'
  611.                         )
  612.                     ])
  613.                     ->add('folderCurrentInsurance'TextType::class, [
  614.                         'required' => false,
  615.                         'label' => 'Société d\'assurance actuelle',
  616.                     ]);
  617.                 break;
  618.             case 4// Mon expérience
  619.                 $builder->add('experienceBoatLicense'ChoiceType::class, [
  620.                     'label' => 'Permis bateau',
  621.                     'choices' => [
  622.                         'Aucun' => 'Aucun',
  623.                         'Permis côtier' => 'Permis côtier',
  624.                         'Permis hauturier' => 'Permis hauturier',
  625.                         'Carte Mer' => 'Carte Mer',
  626.                         'Permis fluvial' => 'Permis fluvial',
  627.                     ],
  628.                 ])
  629.                     ->add('experienceBoatLicenseYear'TextType::class, [
  630.                         'label' => 'Année d\'obtention du permis bateau',
  631.                     ])
  632.                     ->add('experienceOwnerTime'ChoiceType::class, [
  633.                         'label' => 'Vous êtes (avez été) propriétaire d\'un bateau pendant',
  634.                         'choices' => [
  635.                             'Moins de 3 ans' => 'Moins de 3 ans',
  636.                             '4 à 10 ans' => '4 à 10 ans',
  637.                             'Plus de 10 ans' => 'Plus de 10 ans',
  638.                         ],
  639.                     ])
  640.                     ->add('experienceRemarkableNavigation'TextareaType::class, [
  641.                         'label' => 'Navigations remarquables et expériences',
  642.                         'required' => false,
  643.                     ])
  644.                     ->add('experienceOtherLicense'TextareaType::class, [
  645.                         'label' => 'Autres permis et diplômes',
  646.                         'required' => false,
  647.                     ])
  648.                     ->add('experienceLicenseFluvial'ChoiceType::class, [
  649.                         'label' => 'Permis fluvial',
  650.                         'required' => true,
  651.                         'choices' => array(
  652.                             "Oui" => true,
  653.                             "Non" => false,
  654.                         ),
  655.                         'expanded' => true,
  656.                         'attr' => array(
  657.                             'class' => 'inline'
  658.                         )
  659.                     ])
  660.                     ->add('experienceLicenseCertificateCommercialBoats'ChoiceType::class, [
  661.                         'label' => 'Certificat de capacité de conduite des bateaux de commerce',
  662.                         'required' => true,
  663.                         'choices' => array(
  664.                             "Oui" => true,
  665.                             "Non" => false,
  666.                         ),
  667.                         'expanded' => true,
  668.                         'attr' => array(
  669.                             'class' => 'inline'
  670.                         )
  671.                     ]);
  672.                 break;
  673.             case 5:
  674.                 $builder->add('informationsYouAre'ChoiceType::class, [
  675.                     'label' => 'Vous êtes un(e)',
  676.                     'choices' => [
  677.                         'Particulier' => 'Particulier',
  678.                         'Entreprise' => 'Entreprise',
  679.                         'Association' => 'Association',
  680.                         'Une collectivité locale' => 'Une collectivité locale',
  681.                     ],
  682.                 ])
  683.                     ->add('informationsSociety'TextType::class, [
  684.                         'label' => 'Société',
  685.                         'required' => true,
  686.                     ])
  687.                     ->add('informationsCivility'ChoiceType::class, [
  688.                         'label' => 'Civilité',
  689.                         'choices' => [
  690.                             'M.' => 'M.',
  691.                             'Mme' => 'Mme',
  692.                             'Mlle' => 'Mlle',
  693.                         ],
  694.                         'required' => true,
  695.                     ])
  696.                     ->add('informationsLegalEntity'ChoiceType::class, [
  697.                         'label' => 'Personne morale',
  698.                         'choices' => [
  699.                             'EURL' => 'EURL',
  700.                             'SARL' => 'SARL',
  701.                             'SAS' => 'SAS',
  702.                             'SA' => 'SA',
  703.                             'SNC' => 'SNC',
  704.                             'SEP' => 'SEP',
  705.                             'SC' => 'SC',
  706.                             'SCI' => 'SCI',
  707.                             'SCP' => 'SCP',
  708.                             'SASU' => 'SASU',
  709.                             'Autre' => 'Autre',
  710.                         ],
  711.                         'required' => true,
  712.                     ])
  713.                     ->add('informationsFirstname'TextType::class, [
  714.                         'label' => 'Prénom',
  715.                         'required' => true,
  716.                     ])
  717.                     ->add('informationsName'TextType::class, [
  718.                         'label' => 'Nom',
  719.                         'required' => true,
  720.                     ])
  721.                     ->add('informationsBirthday'DateType::class, [
  722.                         'label' => 'Date de naissance',
  723.                         'widget' => 'single_text',
  724.                         'required' => true,
  725.                     ])
  726.                     ->add('informationsDepartmentBirth'ChoiceType::class, [
  727.                         'label' => 'Département de naissance',
  728.                         'choices' => [
  729.                             '01 - Ain' => '01 - Ain',
  730.                             '02 - Aisne' => '02 - Aisne',
  731.                             '03 - Allier' => '03 - Allier',
  732.                             '04 - Alpes-de-Haute-Provence' => '04 - Alpes-de-Haute-Provence',
  733.                             '05 - Hautes-Alpes' => '05 - Hautes-Alpes',
  734.                             '06 - Alpes-Maritimes' => '06 - Alpes-Maritimes',
  735.                             '07 - Ardèche' => '07 - Ardèche',
  736.                             '08 - Ardennes' => '08 - Ardennes',
  737.                             '09 - Ariège' => '09 - Ariège',
  738.                             '10 - Aube' => '10 - Aube',
  739.                             '11 - Aude' => '11 - Aude',
  740.                             '12 - Aveyron' => '12 - Aveyron',
  741.                             '13 - Bouches-du-Rhône' => '13 - Bouches-du-Rhône',
  742.                             '14 - Calvados' => '14 - Calvados',
  743.                             '15 - Cantal' => '15 - Cantal',
  744.                             '16 - Charente' => '16 - Charente',
  745.                             '17 - Charente-Maritime' => '17 - Charente-Maritime',
  746.                             '18 - Cher' => '18 - Cher',
  747.                             '19 - Corrèze' => '19 - Corrèze',
  748.                             '2A - Corse-du-Sud' => '2A - Corse-du-Sud',
  749.                             '2B - Haute-Corse' => '2B - Haute-Corse',
  750.                             '21 - Côte-d\'Or' => '21 - Côte-d\'Or',
  751.                             '22 - Côtes-d\'Armor' => '22 - Côtes-d\'Armor',
  752.                             '23 - Creuse' => '23 - Creuse',
  753.                             '24 - Dordogne' => '24 - Dordogne',
  754.                             '25 - Doubs' => '25 - Doubs',
  755.                             '26 - Drôme' => '26 - Drôme',
  756.                             '27 - Eure' => '27 - Eure',
  757.                             '28 - Eure-et-Loir' => '28 - Eure-et-Loir',
  758.                             '29 - Finistère' => '29 - Finistère',
  759.                             '30 - Gard' => '30 - Gard',
  760.                             '31 - Haute-Garonne' => '31 - Haute-Garonne',
  761.                             '32 - Gers' => '32 - Gers',
  762.                             '33 - Gironde' => '33 - Gironde',
  763.                             '34 - Hérault' => '34 - Hérault',
  764.                             '35 - Ille-et-Vilaine' => '35 - Ille-et-Vilaine',
  765.                             '36 - Indre' => '36 - Indre',
  766.                             '37 - Indre-et-Loire' => '37 - Indre-et-Loire',
  767.                             '38 - Isère' => '38 - Isère',
  768.                             '39 - Jura' => '39 - Jura',
  769.                             '40 - Landes' => '40 - Landes',
  770.                             '41 - Loir-et-Cher' => '41 - Loir-et-Cher',
  771.                             '42 - Loire' => '42 - Loire',
  772.                             '43 - Haute-Loire' => '43 - Haute-Loire',
  773.                             '44 - Loire-Atlantique' => '44 - Loire-Atlantique',
  774.                             '45 - Loiret' => '45 - Loiret',
  775.                             '46 - Lot' => '46 - Lot',
  776.                             '47 - Lot-et-Garonne' => '47 - Lot-et-Garonne',
  777.                             '48 - Lozère' => '48 - Lozère',
  778.                             '49 - Maine-et-Loire' => '49 - Maine-et-Loire',
  779.                             '50 - Manche' => '50 - Manche',
  780.                             '51 - Marne' => '51 - Marne',
  781.                             '52 - Haute-Marne' => '52 - Haute-Marne',
  782.                             '53 - Mayenne' => '53 - Mayenne',
  783.                             '54 - Meurthe-et-Moselle' => '54 - Meurthe-et-Moselle',
  784.                             '55 - Meuse' => '55 - Meuse',
  785.                             '56 - Morbihan' => '56 - Morbihan',
  786.                             '57 - Moselle' => '57 - Moselle',
  787.                             '58 - Nièvre' => '58 - Nièvre',
  788.                             '59 - Nord' => '59 - Nord',
  789.                             '60 - Oise' => '60 - Oise',
  790.                             '61 - Orne' => '61 - Orne',
  791.                             '62 - Pas-de-Calais' => '62 - Pas-de-Calais',
  792.                             '63 - Puy-de-Dôme' => '63 - Puy-de-Dôme',
  793.                             '64 - Pyrénées-Atlantiques' => '64 - Pyrénées-Atlantiques',
  794.                             '65 - Hautes-Pyrénées' => '65 - Hautes-Pyrénées',
  795.                             '66 - Pyrénées-Orientales' => '66 - Pyrénées-Orientales',
  796.                             '67 - Bas-Rhin' => '67 - Bas-Rhin',
  797.                             '68 - Haut-Rhin' => '68 - Haut-Rhin',
  798.                             '69 - Rhône' => '69 - Rhône',
  799.                             '70 - Haute-Saône' => '70 - Haute-Saône',
  800.                             '71 - Saône-et-Loire' => '71 - Saône-et-Loire',
  801.                             '72 - Sarthe' => '72 - Sarthe',
  802.                             '73 - Savoie' => '73 - Savoie',
  803.                             '74 - Haute-Savoie' => '74 - Haute-Savoie',
  804.                             '75 - Paris' => '75 - Paris',
  805.                             '76 - Seine-Maritime' => '76 - Seine-Maritime',
  806.                             '77 - Seine-et-Marne' => '77 - Seine-et-Marne',
  807.                             '78 - Yvelines' => '78 - Yvelines',
  808.                             '79 - Deux-Sèvres' => '79 - Deux-Sèvres',
  809.                             '80 - Somme' => '80 - Somme',
  810.                             '81 - Tarn' => '81 - Tarn',
  811.                             '82 - Tarn-et-Garonne' => '82 - Tarn-et-Garonne',
  812.                             '83 - Var' => '83 - Var',
  813.                             '84 - Vaucluse' => '84 - Vaucluse',
  814.                             '85 - Vendée' => '85 - Vendée',
  815.                             '86 - Vienne' => '86 - Vienne',
  816.                             '87 - Haute-Vienne' => '87 - Haute-Vienne',
  817.                             '88 - Vosges' => '88 - Vosges',
  818.                             '89 - Yonne' => '89 - Yonne',
  819.                             '90 - Territoire de Belfort' => '90 - Territoire de Belfort',
  820.                             '91 - Essonne' => '91 - Essonne',
  821.                             '92 - Hauts-de-Seine' => '92 - Hauts-de-Seine',
  822.                             '93 - Seine-Saint-Denis' => '93 - Seine-Saint-Denis',
  823.                             '94 - Val-de-Marne' => '94 - Val-de-Marne',
  824.                             '95 - Val-d\'Oise' => '95 - Val-d\'Oise',
  825.                         ],
  826.                         'required' => true,
  827.                     ])
  828.                     ->add('informationsCityBirth'TextType::class, [
  829.                         'label' => 'Ville de naissance',
  830.                         'required' => true,
  831.                     ])
  832.                     ->add('informationsAddress'TextType::class, [
  833.                         'label' => 'Adresse',
  834.                         'required' => true,
  835.                     ])
  836.                     ->add('informationsPostalCode'TextType::class, [
  837.                         'label' => 'Code postal',
  838.                         'required' => true,
  839.                     ])
  840.                     ->add('informationsCity'TextType::class, [
  841.                         'label' => 'Ville',
  842.                         'required' => true,
  843.                     ])
  844.                     ->add('informationsCountry'CountryType::class, [
  845.                         'label' => 'Pays',
  846.                         'required' => true,
  847.                     ])
  848.                     ->add('informationsEmail'EmailType::class, [
  849.                         'label' => 'Email',
  850.                         'required' => true,
  851.                     ])
  852.                     ->add('informationsPhone'TextType::class, [
  853.                         'label' => 'Téléphone',
  854.                         'required' => true,
  855.                     ]);
  856.                 break;
  857.             case 6:
  858.                 $builder
  859.                     ->add('furtherMoreInformation'TextareaType::class, [
  860.                         'label' => 'Informations complémentaires',
  861.                         'required' => false,
  862.                     ])
  863.                     ->add('furtherCertifyNoSinister'ChoiceType::class, [
  864.                         'label' => 'Je certifie n\'avoir eu aucun contrat résilié pour non-paiement de prime ou pour sinistre',
  865.                         'required' => true,
  866.                         'choices' => array(
  867.                             "Oui" => true,
  868.                             "Non" => false,
  869.                         ),
  870.                         'expanded' => true,
  871.                         'attr' => array(
  872.                             'class' => 'inline'
  873.                         )
  874.                     ])
  875.                     ->add('furtherCertifyRiskReality'ChoiceType::class, [
  876.                         'label' => 'Je certifie que ma déclaration du risque est conforme à la réalité et je suis informé que les articles L113-2 et L113-8 du code des assurances s\'appliquent',
  877.                         'required' => true,
  878.                         'choices' => array(
  879.                             "Oui" => true,
  880.                             "Non" => false,
  881.                         ),
  882.                         'expanded' => true,
  883.                         'attr' => array(
  884.                             'class' => 'inline'
  885.                         )
  886.                     ])
  887. //                    ->add('documents', CollectionType::class, [
  888. //                        'entry_type' => DevisDocumentFrontFormType::class,
  889. //                        'entry_options' => ['label' => false], // Options supplémentaires pour chaque entrée
  890. //                        'allow_add' => true, // Permettre d'ajouter de nouveaux documents
  891. //                        'allow_delete' => true, // Permettre de supprimer des documents existants
  892. //                        'by_reference' => false, // Nécessaire pour manipuler la collection
  893. //                    ])
  894.                     ->add('documents'CollectionType::class, array(
  895.                         'entry_type' => Base64ImageType::class,
  896.                         'mapped' => false,
  897.                         'required' => false,
  898.                         'allow_add' => true,
  899.                         'allow_extra_fields' => true,
  900.                     ));
  901.                 if ($_ENV['APP_ENV'] !== 'dev') {
  902.                     $builder->add('captcha'Recaptcha3Type::class, [
  903.                         'constraints' => new Recaptcha3(),
  904.                         'action_name' => 'contact',
  905.                         'locale' => 'fr',
  906.                     ]);
  907.                 }
  908.                 break;
  909.         }
  910.         foreach (array_keys(SPECIFIC_FIELDS) as $category) {
  911.             foreach (SPECIFIC_FIELDS[$category] as $fieldName) {
  912.                 if ($builder->has($fieldName)) {
  913.                     $field $builder->get($fieldName);
  914.                     $options $field->getOptions();
  915.                     $type $field->getType()->getInnerType();
  916.                     $options['attr'] = array_merge($options['attr'], array('data-valid-only-for' => $category));
  917.                     $builder->add($fieldNameget_class($type), $options);
  918.                 }
  919.             }
  920.         }
  921.     }
  922.     public function configureOptions(OptionsResolver $resolver): void
  923.     {
  924.         $resolver->setDefaults([
  925.             'data_class' => Devis::class,
  926.         ]);
  927.     }
  928. }