<?php
namespace App\Form;
use App\Entity\Devis;
use App\Entity\Offer;
use App\Form\Type\Base64ImageType;
use Karser\Recaptcha3Bundle\Form\Recaptcha3Type;
use Karser\Recaptcha3Bundle\Validator\Constraints\Recaptcha3;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\CountryType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\RadioType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Choice;
const SPECIFIC_FIELDS = array(
'fluvial' => array(
'boatWidth',
'boatCertificat',
'boatCertificatDate',
'boatCertificatCommunity',
'boatDetectFire',
'boatExtinguishersNumber',
'boatExtinguishersVerified',
'boatLastElectricalCheck',
'boatLastGasCheck',
'boatLastDryDocking',
'boatWorkCarried',
'usageSecondaryResidence',
'usageTypeFluvial',
'usageProfessional',
// Dependent on usage professional = true
'usagePassagersSales',
'usagePassengerEmployeesNumber',
'usagePassengerNumber',
'usagePassengerTva',
'usagePassengerMortgaged',
'usagePassengerCruiseShip',
'usagePassengerPleasure',
'usagePassengerWithoutNavigation',
'usagePassengerCatering',
'usagePassengerLandBasedFacilities',
'usagePassengerLandBasedFacilitiesType',
'usageRiverNavigationZone',
'usageLakeNavigationZone',
'folderinsuredLastSixtyMounth',
'folderCurrentInsurance',
'experienceLicenseCertificateCommercialBoats',
'experienceLicenseFluvial'
),
'maritime' => array(
'boatName',
'boatRegistration',
'boatConstructionType',
'boatMaxSpeed',
'boatMotorType',
'boatMattCarbon',
'boatHaveAnnex',
'boatAnnexModele',
'boatAnnexYear',
'boatAnnexMotorBrand',
'boatAnnexMotorPower',
'boatAnnexMotorYear',
'usageTypeMaritime',
'usageNavigationArea',
'usageAloneMoreOneDay',
'folderValueInsuranceTTC',
'folderSimilarRisk',
'experienceBoatLicense',
'experienceOwnerTime',
'experienceRemarkableNavigation',
'experienceOtherLicense',
)
);
class DevisFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
switch ($options['flow_step']) {
case 1: // Votre bateau
$builder
->add('category', ChoiceType::class, [
'label' => 'Quel type d’assurance avez-vous besoin ?',
'choices' => [
'maritime' => 'maritime',
'fluvial' => 'fluvial',
],
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('boatName', TextType::class, [
'label' => 'Nom',
])
->add('boatType', ChoiceType::class, [
'label' => 'Type de bateau',
'choices' => [
'Monocoque à voile' => 'Monocoque à voile',
'Multicoque à voile' => 'Multicoque à voile',
'Monocoque à moteur' => 'Monocoque à moteur',
'Mulitcoque à moteur' => 'Mulitcoque à moteur',
'Pneumatique' => 'Pneumatique',
]
])
->add('boatRegistration', ChoiceType::class, [
'label' => 'Immatriculation',
'choices' => [
'Plaisance' => 'Plaisance',
'Commerce' => 'Commerce',
],
])
->add('boatConstructionType', ChoiceType::class, [
'label' => 'Type de construction',
'choices' => [
'Série' => 'Série',
'Amateur' => 'Amateur',
],
])
->add('boatConstructionDate', DateType::class, [
'label' => 'Date de construction',
'widget' => 'single_text',
])
->add('boatConstruct', TextType::class, [
'label' => 'Constructeur',
])
->add('boatModel', TextType::class, [
'label' => 'Modèle',
])
->add('boatMaterials', ChoiceType::class, [
'label' => 'Matériau de construction',
'choices' => [
'Polyester et composite' => 'Polyester et composite',
'Aluminium' => 'Aluminium',
'Epoxy contre-plaqué' => 'Epoxy contre-plaqué',
'Acier' => 'Acier',
'Bois' => 'Bois',
'Carbone' => 'Carbone',
'Pneumatique' => 'Pneumatique',
'Ferrociment' => 'Ferrociment',
'Autre' => 'Autre',
],
])
->add('boatLength', TextType::class, [
'label' => 'Longueur de la coque (en mètre)',
])
->add('boatWidth', TextType::class, [
'label' => 'Largeur de la coque (en mètre)',
])
->add('boatMaxSpeed', TextType::class, [
'label' => 'Vitesse maximale (en Kts)',
])
->add('boatMotorNumber', ChoiceType::class, [
'label' => 'Nombre de moteur(s)',
'choices' => [
'0' => '0',
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4',
],
])
->add('boatMotorType', ChoiceType::class, [
'label' => 'Type de moteur(s)',
'choices' => [
'Hors-bord' => 'Hors-bord',
'In-board' => 'In-board',
],
])
->add('boatMotorBrand', TextType::class, [
'label' => 'Marque moteur(s)',
])
->add('boatMotorPower', TextType::class, [
'label' => 'Puissance moteur(s) (en C.V.)',
])
->add('boatMotorYear', TextType::class, [
'label' => 'Année du/des moteur(s)',
])
->add('trailerBrand', TextType::class, [
'label' => 'Marque de la remorque',
'required' => false,
])
->add('trailerImmat', TextType::class, [
'label' => 'Immatriculation de la remorque',
'required' => false,
])
->add('trailerValue', TextType::class, [
'label' => 'Valeur de la remorque',
'required' => false,
])
->add('trailerYear', TextType::class, [
'label' => 'Année de la remorque',
'required' => false,
])
->add('boatCertificat', ChoiceType::class, [
'label' => 'Certificats et autorisations nécessaires à l\'usage du bateau en cours de validité',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('boatCertificatDate', DateType::class, [
'label' => 'Date de délivrance du certificat de navigation par la commission de surveillance',
'widget' => 'single_text',
'required' => false,
])
->add('boatCertificatCommunity', ChoiceType::class, [
'label' => 'Certificat communautaire en cours de validité (unité de plus de 20m)',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('boatDetectFire', TextType::class, [
'label' => 'Moyens de détection incendie',
])
->add('boatExtinguishersNumber', TextType::class, [
'label' => 'Nombre d\'extincteurs',
])
->add('boatExtinguishersVerified', ChoiceType::class, [
'label' => 'Extincteurs vérifiés',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('boatLastElectricalCheck', DateType::class, [
'label' => 'Date du dernier contrôle électrique',
'widget' => 'single_text',
'required' => false,
])
->add('boatLastGasCheck', DateType::class, [
'label' => 'Date du dernier contrôle gaz',
'widget' => 'single_text',
'required' => true, // Peut-être mettre à true si nécessaire
])
->add('boatLastDryDocking', DateType::class, [
'label' => 'Date de dernière mise en cale sèche',
'widget' => 'single_text',
'required' => false,
])
->add('boatWorkCarried', TextareaType::class, [
'label' => 'Travaux réalisés à cette occasion',
'required' => false,
'attr' => array(
'rows' => 5
)
])
->add('boatMattCarbon', ChoiceType::class, [
'label' => 'Le mât de votre bateau est-il en carbone',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('boatHaveAnnex', ChoiceType::class, [
'label' => 'Votre bateau dispose-t-il d\'une annexe ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('boatAnnexModele', TextType::class, [
'label' => 'Modèle d\'annexe',
])
->add('boatAnnexYear', TextType::class, [
'label' => 'Année de l\'annexe',
])
->add('boatAnnexMotorBrand', TextType::class, [
'label' => 'Marque du moteur de l\'annexe',
])
->add('boatAnnexMotorPower', TextType::class, [
'label' => 'Puissance moteur de l\'annexe',
])
->add('boatAnnexMotorYear', TextType::class, [
'label' => 'Année du moteur de l\'annexe',
])
;
break;
case 2: // Son utilisation
$builder
->add('usagePurchaseDate', DateType::class, [
'label' => 'Date d\'achat',
'widget' => 'single_text',
])
->add('usageMainResidence', ChoiceType::class, [
'label' => 'En résidence principale',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usageSecondaryResidence', ChoiceType::class, [
'label' => 'En résidence secondaire',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usageTypeFluvial', ChoiceType::class, [
'label' => 'Type d\'activité',
'choices' => [
"Transport de passagers" => "Transport de passagers",
"Transport de marchandises" => "Transport de marchandises",
"Travaux fluviaux" => "Travaux fluviaux",
"Flotte de location" => "Flotte de location",
"Bateau restaurant à poste fixe" => "Bateau restaurant à poste fixe",
],
])
->add('usageProfessional', ChoiceType::class, [
'label' => 'Utilisation professionnelle',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usageFunding', ChoiceType::class, [
'label' => 'Financement',
'choices' => [
'Aucun' => 'Aucun',
'Crédit' => 'Crédit',
'Leasing' => 'Leasing',
],
])
->add('usageFlag', CountryType::class, [
'label' => 'Pavillon',
])
->add('usageAnchoragePortFrance', ChoiceType::class, [
'label' => 'Port de mouillage en France ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usageAnchoragePort', TextType::class, [
'label' => 'Port de mouillage',
])
->add('usageTypeMaritime', ChoiceType::class, [
'label' => 'Utilisation',
'choices' => [
'Agrément personnel' => 'Agrément personnel',
'Charter' => 'Charter',
'Location avec skipper' => 'Location avec skipper',
'Location sans skipper' => 'Location sans skipper',
],
])
->add('usageNavigationArea', ChoiceType::class, [
'label' => 'Zone de navigation',
'choices' => [
"Europe, jusqu'à 50 milles des côtes françaises" => "Europe, jusqu'à 50 milles des côtes françaises",
"Europe, jusqu'à 200 milles des côtes" => "Europe, jusqu'à 200 milles des côtes",
"Antilles" => "Antilles",
"Petites Antilles" => "Petites Antilles",
"Antilles et mer des Caraïbes" => "Antilles et mer des Caraïbes",
"Eaux intérieures" => "Eaux intérieures",
],
])
->add('usageAloneMoreOneDay', ChoiceType::class, [
'label' => 'Prévoyez-vous des navigations en solitaire de plus de 24h ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassagersSales', TextType::class, [
'label' => 'Chiffre d\'affaires',
])
->add('usagePassengerEmployeesNumber', TextType::class, [
'label' => 'Nombre de salariés',
])
->add('usagePassengerNumber', TextType::class, [
'label' => 'Nombre de passagers',
])
->add('usagePassengerTva', ChoiceType::class, [
'label' => 'Etes-vous assujetti à la TVA ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerMortgaged', ChoiceType::class, [
'label' => 'Ce bateau fait-il l\'objet d\'une hypothèque',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerCruiseShip', ChoiceType::class, [
'label' => 'Exploitation de bateau de croisière fluviale',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerPleasure', ChoiceType::class, [
'label' => 'Exploitation de bateau de promenade',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerWithoutNavigation', ChoiceType::class, [
'label' => 'Exploitation d\'établissement flottant sans navigation',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerCatering', ChoiceType::class, [
'label' => 'Restauration à bord',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerLandBasedFacilities', ChoiceType::class, [
'label' => 'Exploitation d\'installations terrestres',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usagePassengerLandBasedFacilitiesType', TextareaType::class, [
'label' => 'Type d\'installations terrestres',
'required' => false,
])
->add('usageRiverNavigationZone', ChoiceType::class, [
'label' => 'Zone de navigation fluviale',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('usageLakeNavigationZone', ChoiceType::class, [
'label' => 'Zone de navigation lacustre',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
;
break;
case 3: // Dossier
$builder
->add('folderValueInsurance', TextType::class, [
'label' => 'Valeur d\'assurance du bateau (en TTC)',
])
->add('folderValueInsuranceTTC', ChoiceType::class, [
'label' => 'Valeur T.T.C. ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('folderTakeSinister', ChoiceType::class, [
'label' => 'Avez-vous subi des sinistres lors des 60 derniers mois ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('folderTakeSinisterNumber', ChoiceType::class, [
'label' => 'Si oui, combien de sinistres avez-vous subi ?',
'choices' => [
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4',
'5+' => 'Plus de 5',
'10+' => 'Plus de 10',
],
])
->add('folderSimilarRisk', ChoiceType::class, [
'label' => 'Avez-vous déjà été assuré pour un risque similaire ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
// ->add('folderContract', EntityType::class, [
// 'label' => 'LISTE DES CONTRATS ASSURBOAT',
// 'class' => Offer::class,
// ])
->add('folderinsuredLastSixtyMounth', ChoiceType::class, [
'label' => 'Avez-vous déjà été assuré pour un bateau durant les 60 derniers mois ?',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('folderCurrentInsurance', TextType::class, [
'required' => false,
'label' => 'Société d\'assurance actuelle',
]);
break;
case 4: // Mon expérience
$builder->add('experienceBoatLicense', ChoiceType::class, [
'label' => 'Permis bateau',
'choices' => [
'Aucun' => 'Aucun',
'Permis côtier' => 'Permis côtier',
'Permis hauturier' => 'Permis hauturier',
'Carte Mer' => 'Carte Mer',
'Permis fluvial' => 'Permis fluvial',
],
])
->add('experienceBoatLicenseYear', TextType::class, [
'label' => 'Année d\'obtention du permis bateau',
])
->add('experienceOwnerTime', ChoiceType::class, [
'label' => 'Vous êtes (avez été) propriétaire d\'un bateau pendant',
'choices' => [
'Moins de 3 ans' => 'Moins de 3 ans',
'4 à 10 ans' => '4 à 10 ans',
'Plus de 10 ans' => 'Plus de 10 ans',
],
])
->add('experienceRemarkableNavigation', TextareaType::class, [
'label' => 'Navigations remarquables et expériences',
'required' => false,
])
->add('experienceOtherLicense', TextareaType::class, [
'label' => 'Autres permis et diplômes',
'required' => false,
])
->add('experienceLicenseFluvial', ChoiceType::class, [
'label' => 'Permis fluvial',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('experienceLicenseCertificateCommercialBoats', ChoiceType::class, [
'label' => 'Certificat de capacité de conduite des bateaux de commerce',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
]);
break;
case 5:
$builder->add('informationsYouAre', ChoiceType::class, [
'label' => 'Vous êtes un(e)',
'choices' => [
'Particulier' => 'Particulier',
'Entreprise' => 'Entreprise',
'Association' => 'Association',
'Une collectivité locale' => 'Une collectivité locale',
],
])
->add('informationsSociety', TextType::class, [
'label' => 'Société',
'required' => true,
])
->add('informationsCivility', ChoiceType::class, [
'label' => 'Civilité',
'choices' => [
'M.' => 'M.',
'Mme' => 'Mme',
'Mlle' => 'Mlle',
],
'required' => true,
])
->add('informationsLegalEntity', ChoiceType::class, [
'label' => 'Personne morale',
'choices' => [
'EURL' => 'EURL',
'SARL' => 'SARL',
'SAS' => 'SAS',
'SA' => 'SA',
'SNC' => 'SNC',
'SEP' => 'SEP',
'SC' => 'SC',
'SCI' => 'SCI',
'SCP' => 'SCP',
'SASU' => 'SASU',
'Autre' => 'Autre',
],
'required' => true,
])
->add('informationsFirstname', TextType::class, [
'label' => 'Prénom',
'required' => true,
])
->add('informationsName', TextType::class, [
'label' => 'Nom',
'required' => true,
])
->add('informationsBirthday', DateType::class, [
'label' => 'Date de naissance',
'widget' => 'single_text',
'required' => true,
])
->add('informationsDepartmentBirth', ChoiceType::class, [
'label' => 'Département de naissance',
'choices' => [
'01 - Ain' => '01 - Ain',
'02 - Aisne' => '02 - Aisne',
'03 - Allier' => '03 - Allier',
'04 - Alpes-de-Haute-Provence' => '04 - Alpes-de-Haute-Provence',
'05 - Hautes-Alpes' => '05 - Hautes-Alpes',
'06 - Alpes-Maritimes' => '06 - Alpes-Maritimes',
'07 - Ardèche' => '07 - Ardèche',
'08 - Ardennes' => '08 - Ardennes',
'09 - Ariège' => '09 - Ariège',
'10 - Aube' => '10 - Aube',
'11 - Aude' => '11 - Aude',
'12 - Aveyron' => '12 - Aveyron',
'13 - Bouches-du-Rhône' => '13 - Bouches-du-Rhône',
'14 - Calvados' => '14 - Calvados',
'15 - Cantal' => '15 - Cantal',
'16 - Charente' => '16 - Charente',
'17 - Charente-Maritime' => '17 - Charente-Maritime',
'18 - Cher' => '18 - Cher',
'19 - Corrèze' => '19 - Corrèze',
'2A - Corse-du-Sud' => '2A - Corse-du-Sud',
'2B - Haute-Corse' => '2B - Haute-Corse',
'21 - Côte-d\'Or' => '21 - Côte-d\'Or',
'22 - Côtes-d\'Armor' => '22 - Côtes-d\'Armor',
'23 - Creuse' => '23 - Creuse',
'24 - Dordogne' => '24 - Dordogne',
'25 - Doubs' => '25 - Doubs',
'26 - Drôme' => '26 - Drôme',
'27 - Eure' => '27 - Eure',
'28 - Eure-et-Loir' => '28 - Eure-et-Loir',
'29 - Finistère' => '29 - Finistère',
'30 - Gard' => '30 - Gard',
'31 - Haute-Garonne' => '31 - Haute-Garonne',
'32 - Gers' => '32 - Gers',
'33 - Gironde' => '33 - Gironde',
'34 - Hérault' => '34 - Hérault',
'35 - Ille-et-Vilaine' => '35 - Ille-et-Vilaine',
'36 - Indre' => '36 - Indre',
'37 - Indre-et-Loire' => '37 - Indre-et-Loire',
'38 - Isère' => '38 - Isère',
'39 - Jura' => '39 - Jura',
'40 - Landes' => '40 - Landes',
'41 - Loir-et-Cher' => '41 - Loir-et-Cher',
'42 - Loire' => '42 - Loire',
'43 - Haute-Loire' => '43 - Haute-Loire',
'44 - Loire-Atlantique' => '44 - Loire-Atlantique',
'45 - Loiret' => '45 - Loiret',
'46 - Lot' => '46 - Lot',
'47 - Lot-et-Garonne' => '47 - Lot-et-Garonne',
'48 - Lozère' => '48 - Lozère',
'49 - Maine-et-Loire' => '49 - Maine-et-Loire',
'50 - Manche' => '50 - Manche',
'51 - Marne' => '51 - Marne',
'52 - Haute-Marne' => '52 - Haute-Marne',
'53 - Mayenne' => '53 - Mayenne',
'54 - Meurthe-et-Moselle' => '54 - Meurthe-et-Moselle',
'55 - Meuse' => '55 - Meuse',
'56 - Morbihan' => '56 - Morbihan',
'57 - Moselle' => '57 - Moselle',
'58 - Nièvre' => '58 - Nièvre',
'59 - Nord' => '59 - Nord',
'60 - Oise' => '60 - Oise',
'61 - Orne' => '61 - Orne',
'62 - Pas-de-Calais' => '62 - Pas-de-Calais',
'63 - Puy-de-Dôme' => '63 - Puy-de-Dôme',
'64 - Pyrénées-Atlantiques' => '64 - Pyrénées-Atlantiques',
'65 - Hautes-Pyrénées' => '65 - Hautes-Pyrénées',
'66 - Pyrénées-Orientales' => '66 - Pyrénées-Orientales',
'67 - Bas-Rhin' => '67 - Bas-Rhin',
'68 - Haut-Rhin' => '68 - Haut-Rhin',
'69 - Rhône' => '69 - Rhône',
'70 - Haute-Saône' => '70 - Haute-Saône',
'71 - Saône-et-Loire' => '71 - Saône-et-Loire',
'72 - Sarthe' => '72 - Sarthe',
'73 - Savoie' => '73 - Savoie',
'74 - Haute-Savoie' => '74 - Haute-Savoie',
'75 - Paris' => '75 - Paris',
'76 - Seine-Maritime' => '76 - Seine-Maritime',
'77 - Seine-et-Marne' => '77 - Seine-et-Marne',
'78 - Yvelines' => '78 - Yvelines',
'79 - Deux-Sèvres' => '79 - Deux-Sèvres',
'80 - Somme' => '80 - Somme',
'81 - Tarn' => '81 - Tarn',
'82 - Tarn-et-Garonne' => '82 - Tarn-et-Garonne',
'83 - Var' => '83 - Var',
'84 - Vaucluse' => '84 - Vaucluse',
'85 - Vendée' => '85 - Vendée',
'86 - Vienne' => '86 - Vienne',
'87 - Haute-Vienne' => '87 - Haute-Vienne',
'88 - Vosges' => '88 - Vosges',
'89 - Yonne' => '89 - Yonne',
'90 - Territoire de Belfort' => '90 - Territoire de Belfort',
'91 - Essonne' => '91 - Essonne',
'92 - Hauts-de-Seine' => '92 - Hauts-de-Seine',
'93 - Seine-Saint-Denis' => '93 - Seine-Saint-Denis',
'94 - Val-de-Marne' => '94 - Val-de-Marne',
'95 - Val-d\'Oise' => '95 - Val-d\'Oise',
],
'required' => true,
])
->add('informationsCityBirth', TextType::class, [
'label' => 'Ville de naissance',
'required' => true,
])
->add('informationsAddress', TextType::class, [
'label' => 'Adresse',
'required' => true,
])
->add('informationsPostalCode', TextType::class, [
'label' => 'Code postal',
'required' => true,
])
->add('informationsCity', TextType::class, [
'label' => 'Ville',
'required' => true,
])
->add('informationsCountry', CountryType::class, [
'label' => 'Pays',
'required' => true,
])
->add('informationsEmail', EmailType::class, [
'label' => 'Email',
'required' => true,
])
->add('informationsPhone', TextType::class, [
'label' => 'Téléphone',
'required' => true,
]);
break;
case 6:
$builder
->add('furtherMoreInformation', TextareaType::class, [
'label' => 'Informations complémentaires',
'required' => false,
])
->add('furtherCertifyNoSinister', ChoiceType::class, [
'label' => 'Je certifie n\'avoir eu aucun contrat résilié pour non-paiement de prime ou pour sinistre',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
->add('furtherCertifyRiskReality', ChoiceType::class, [
'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',
'required' => true,
'choices' => array(
"Oui" => true,
"Non" => false,
),
'expanded' => true,
'attr' => array(
'class' => 'inline'
)
])
// ->add('documents', CollectionType::class, [
// 'entry_type' => DevisDocumentFrontFormType::class,
// 'entry_options' => ['label' => false], // Options supplémentaires pour chaque entrée
// 'allow_add' => true, // Permettre d'ajouter de nouveaux documents
// 'allow_delete' => true, // Permettre de supprimer des documents existants
// 'by_reference' => false, // Nécessaire pour manipuler la collection
// ])
->add('documents', CollectionType::class, array(
'entry_type' => Base64ImageType::class,
'mapped' => false,
'required' => false,
'allow_add' => true,
'allow_extra_fields' => true,
));
if ($_ENV['APP_ENV'] !== 'dev') {
$builder->add('captcha', Recaptcha3Type::class, [
'constraints' => new Recaptcha3(),
'action_name' => 'contact',
'locale' => 'fr',
]);
}
break;
}
foreach (array_keys(SPECIFIC_FIELDS) as $category) {
foreach (SPECIFIC_FIELDS[$category] as $fieldName) {
if ($builder->has($fieldName)) {
$field = $builder->get($fieldName);
$options = $field->getOptions();
$type = $field->getType()->getInnerType();
$options['attr'] = array_merge($options['attr'], array('data-valid-only-for' => $category));
$builder->add($fieldName, get_class($type), $options);
}
}
}
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Devis::class,
]);
}
}