src/Form/ClientType.php line 22

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Client;
  4. use App\Entity\Site;
  5. use App\Form\Client\BillingInfosType;
  6. use App\Form\Client\FamilyMemberType;
  7. use Doctrine\ORM\EntityRepository;
  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\EmailType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextType;
  16. use Symfony\Component\Form\FormBuilderInterface;
  17. use Symfony\Component\OptionsResolver\OptionsResolver;
  18. use VictorPrdh\RecaptchaBundle\Form\ReCaptchaType;
  19. class ClientType extends AbstractType
  20. {
  21.     public function buildForm(FormBuilderInterface $builder, array $options)
  22.     {
  23.         if ($options['isReservation']) {
  24.             $builder
  25.                 ->add('civilite'ChoiceType::class, [
  26.                     'label' => 'Civilité',
  27.                     'required' => true,
  28.                     'placeholder' => 'Madame, Monsieur',
  29.                     'choices'  => [
  30.                         'Madame' => 'Madame',
  31.                         'Monsieur' => 'Monsieur',
  32.                     ],
  33.                 ])
  34.                 ->add('firstname'TextType::class, [
  35.                     'label' => 'Prénom',
  36.                     'attr' => [
  37.                         'placeholder' => 'Préciser le prénom',
  38.                     ],
  39.                     'required' => true,
  40.                 ])
  41.                 ->add('lastname'TextType::class, [
  42.                     'label' => 'Nom',
  43.                     'attr' => [
  44.                         'placeholder' => 'Préciser le nom',
  45.                     ],
  46.                     'required' => true,
  47.                 ])
  48.                 ->add('phone'TextType::class, [
  49.                     'label' => 'Téléphone',
  50.                     'attr' => [
  51.                         'placeholder' => 'Préciser le téléphone',
  52.                     ],
  53.                     'required' => true
  54.                 ])
  55.                 ->add('email'EmailType::class, [
  56.                     'label' => 'Email de facturation',
  57.                     'attr' => [
  58.                         'placeholder' => 'Email de facturation',
  59.                     ],
  60.                     'required' => true,
  61.                 ])
  62.                 ->add('roomNumber'TextType::class, [
  63.                     'label' => 'Numéro de chambre ou d’appartement',
  64.                     'attr' => [
  65.                         'placeholder' => 'Numéro de chambre ou d’appartement',
  66.                     ],
  67.                     'required' => true,
  68.                 ])
  69.                 ->add('prenomTuteur'TextType::class, [
  70.                     'label' => 'Prénom',
  71.                     'attr' => [
  72.                         'placeholder' => 'Préciser le prénom',
  73.                     ],
  74.                     'required' => false
  75.                 ])
  76.                 ->add('civiliteTuteur'ChoiceType::class, [
  77.                     'label' => 'Civilité',
  78.                     'placeholder' => 'Madame, Monsieur',
  79.                     'choices'  => [
  80.                         'Madame' => 'Madame',
  81.                         'Monsieur' => 'Monsieur',
  82.                     ],
  83.                 ])
  84.                 ->add('nomTuteur'TextType::class, [
  85.                     'label' => 'Nom',
  86.                     'attr' => [
  87.                         'placeholder' => 'Préciser le nom',
  88.                     ],
  89.                     'required' => false
  90.                 ])
  91.                 ->add('numeroTuteur'TextType::class, [
  92.                     'label' => 'Téléphone',
  93.                     'attr' => [
  94.                         'placeholder' => 'Préciser le téléphone',
  95.                     ],
  96.                     'required' => false
  97.                 ])
  98.                 ->add('emailTuteur'TextType::class, [
  99.                     'label' => 'Email de facturation',
  100.                     'attr' => [
  101.                         'placeholder' => "Email de facturation",
  102.                     ],
  103.                     'required' => false
  104.                 ])
  105.                 ->add('daysOfWeek'ChoiceType::class, [
  106.                     'label' => 'Jours de préférences (RDV récurrence coiffure)',
  107.                     'choices' => [
  108.                         'Lundi' => 'Lundi',
  109.                         'Mardi' => 'Mardi',
  110.                         'Mercredi' => 'Mercredi',
  111.                         'Jeudi' => 'Jeudi',
  112.                         'Vendredi' => 'Vendredi',
  113.                         'Samedi' => 'Samedi',
  114.                         'Dimanche' => 'Dimanche',
  115.                     ],
  116.                     'multiple' => true,
  117.                     'expanded' => true// Optional: set to true for checkboxes, false for a select list
  118.                     'placeholder' => 'Sélectionner un jour',
  119.                     'required' => false,
  120.                 ])
  121. //                ->add('consignesClient', TextareaType::class, [
  122. //                    'label' => 'Consignes client',
  123. //                    'attr' => [
  124. //                        'placeholder' => "Consignes client",
  125. //                    ],
  126. //                    'required' => false
  127. //                ])
  128.                 ->add('cgvAccepted'CheckboxType::class, [
  129.                     'label' => false,
  130.                     'required' => false,
  131.                 ])
  132.                 ->add('privacyPolicyAccepted'CheckboxType::class, [
  133.                     'label' => false,
  134.                     'required' => false,
  135.                 ])
  136.                 ->add("recaptcha"ReCaptchaType::class);
  137.         }
  138.         else {
  139.             $builder
  140.                 ->add('firstname'TextType::class, [
  141.                     'label' => 'Prénom',
  142.                     'attr' => [
  143.                         'placeholder' => 'Entrer un prénom',
  144.                     ],
  145.                     'label_attr' => array('class' => ''),
  146.                 ])
  147.                 ->add('site'EntityType::class, [
  148.                     'label' => 'Site rattaché',
  149.                     'placeholder' => 'Choisir un site',
  150.                     'class' => Site::class,
  151.                     'required' => true,
  152.                     'query_builder' => function (EntityRepository $repository) {
  153.                         $qb $repository->createQueryBuilder('s');
  154.                         // the function returns a QueryBuilder object
  155.                         return $qb;
  156. //                            // find all users where 'deleted' is NOT '1'
  157. //                            ->where('s.status = :status')
  158. //                            ->setParameter('status', Site::STATUS_ACTIF);
  159.                     },
  160.                 ])
  161.                 ->add('lastname'TextType::class, [
  162.                     'label' => 'Nom',
  163.                     'attr' => [
  164.                         'placeholder' => 'Entrer un nom',
  165.                     ],
  166.                     'label_attr' => array('class' => ''),
  167.                 ])
  168.                 ->add('statusProspect'ChoiceType::class, [
  169.                     'label' => 'Statut',
  170.                     'attr' => [
  171.                         'placeholder' => 'Choisir un statut',
  172.                     ],
  173.                     'choices'  => [
  174.                         'Prospect' => 'Prospect',
  175.                         'Actif' => 'Actif',
  176.                         'Inactif' => 'Inactif',
  177.                         'Parti' => 'Parti',
  178.                     ],
  179.                     'label_attr' => array('class' => ''),
  180.                 ])
  181.                 // ->add('profilClient', ChoiceType::class, [
  182.                 //     'label' => 'Profil client',
  183.                 //     'attr' => [
  184.                 //         'placeholder' => 'Choisir un profil',
  185.                 //     ],
  186.                 //     'choices'  => [
  187.                 //         'Autonome et décisionnaire' => 'Autonome et décisionnaire',
  188.                 //         'Dépendant' => 'Dépendant',
  189.                 //     ],
  190.                 //     'label_attr' => array('class' => ''),
  191.                 // ])
  192.                 ->add('civilite'ChoiceType::class, [
  193.                     'label' => 'Civilite',
  194.                     'attr' => [
  195.                         'placeholder' => 'Entrer la civilite',
  196.                     ],
  197.                     'required' => false,
  198.                     'placeholder' => 'Choisir une civilite',
  199.                     'choices'  => [
  200.                         'Madame' => 'Madame',
  201.                         'Monsieur' => 'Monsieur',
  202.                     ],
  203.                     'label_attr' => array('class' => ''),
  204.                 ])
  205.                 // ->add('email', EmailType::class, [
  206.                 //     'label' => 'Email',
  207.                 //     'attr' => [
  208.                 //         'placeholder' => 'Entrer un email',
  209.                 //     ],
  210.                 //     'required' => false,
  211.                 //     'label_attr' => array('class' => ''),
  212.                 // ])
  213.                 ->add('birthday'TextType::class, [
  214.                     'label' => 'Date de naissance',
  215.                     'attr' => [
  216.                         'placeholder' => 'Entrer une date de naissance',
  217.                         'class' => 'flatpicker'
  218.                     ],
  219.                     'required' => false,
  220.                     'label_attr' => array('class' => ''),
  221.                 ])
  222.                 ->add('deathday'TextType::class, [
  223.                     'label' => 'Date de décès',
  224.                     'attr' => [
  225.                         'placeholder' => 'Entrer une date de décès',
  226.                         'class' => 'flatpicker'
  227.                     ],
  228.                     'required' => false,
  229.                     'label_attr' => array('class' => ''),
  230.                 ])
  231.                 ->add('roomNumber'TextType::class, [
  232.                     'label' => 'Batiment / Étage / Numéro de chambre',
  233.                     'attr' => [
  234.                         'placeholder' => 'Entrer le batiment / étage / numéro de chambre',
  235.                     ],
  236.                     'label_attr' => array('class' => ''),
  237.                 ])
  238.                 // ->add('phone', TextType::class, [
  239.                 //     'label' => 'Téléphone client',
  240.                 //     'attr' => [
  241.                 //         'placeholder' => 'Entrer un numéro de téléphone',
  242.                 //     ],
  243.                 //     'label_attr' => array('class' => ''),
  244.                 //     'required' => false
  245.                 // ])
  246.                 // ->add('buildingRoom', TextType::class, [
  247.                 //     'label' => 'Batiment chambre',
  248.                 //     'attr' => [
  249.                 //         'placeholder' => 'Entrer un numéro de batiment',
  250.                 //     ],
  251.                 //     'label_attr' => array('class' => ''),
  252.                 //     'required' => false
  253.                 // ])
  254.                 // ->add('stairs', TextType::class, [
  255.                 //     'label' => 'Etage chambre',
  256.                 //     'attr' => [
  257.                 //         'placeholder' => 'Entrer un étage de chambre',
  258.                 //     ],
  259.                 //     'label_attr' => array('class' => ''),
  260.                 //     'required' => false
  261.                 // ])
  262.                 ->add('comments'TextareaType::class, [
  263.                     'label' => 'Commentaires',
  264.                     'attr' => [
  265.                         'placeholder' => 'Entrer un commentaire',
  266.                     ],
  267.                     'label_attr' => array('class' => ''),
  268.                     'required' => false
  269.                 ])
  270.                 // contact
  271.                 ->add('nomTuteur'TextType::class, [
  272.                     'label' => 'Nom contact principal',
  273.                     'attr' => [
  274.                         'placeholder' => 'Entrer le nom',
  275.                     ],
  276.                     'label_attr' => array('class' => ''),
  277.                     'required' => false
  278.                 ])
  279.                 ->add('consignesClient'TextareaType::class, [
  280.                     'label' => 'Consignes client',
  281.                     'attr' => [
  282.                         'placeholder' => "Consignes client",
  283.                     ],
  284.                     'required' => false
  285.                 ])
  286.                 ->add('prenomTuteur'TextType::class, [
  287.                     'label' => 'Prénom contact principal',
  288.                     'attr' => [
  289.                         'placeholder' => 'Entrer un prénom',
  290.                     ],
  291.                     'label_attr' => array('class' => ''),
  292.                     'required' => false
  293.                 ])
  294.                 ->add('civiliteTuteur'ChoiceType::class, [
  295.                     'label' => 'Civilite ',
  296.                     'attr' => [
  297.                         'placeholder' => 'Entrer la civilite',
  298.                     ],
  299.                     'choices'  => [
  300.                         'Madame' => 'Madame',
  301.                         'Monsieur' => 'Monsieur',
  302.                     ],
  303.                     'label_attr' => array('class' => ''),
  304.                 ])
  305.                 ->add('numeroTuteur'TextType::class, [
  306.                     'label' => 'Numéro de tel contact principal',
  307.                     'attr' => [
  308.                         'placeholder' => 'Entrer un numéro de téléphone',
  309.                     ],
  310.                     'label_attr' => array('class' => ''),
  311.                     'required' => false
  312.                 ])
  313.                 ->add('addressTuteur'TextType::class, [
  314.                     'label' => 'Adresse contact principal',
  315.                     'attr' => [
  316.                         'placeholder' => 'Entrer une adresse',
  317.                     ],
  318.                     'label_attr' => array('class' => ''),
  319.                     'required' => false
  320.                 ])
  321.                 ->add('addressTuteur2'TextType::class, [
  322.                     'label' => 'Complément d\'adresse',
  323.                     'attr' => [
  324.                         'placeholder' => 'Entrer un complément adresse',
  325.                     ],
  326.                     'label_attr' => array('class' => ''),
  327.                     'required' => false
  328.                 ])
  329.                 ->add('city'TextType::class, [
  330.                     'label' => 'Ville',
  331.                     'attr' => [
  332.                         'placeholder' => 'Entrer une ville',
  333.                     ],
  334.                     'label_attr' => array('class' => ''),
  335.                     'required' => false
  336.                 ])
  337.                 ->add('zipcode'TextType::class, [
  338.                     'label' => 'Code postal',
  339.                     'attr' => [
  340.                         'placeholder' => 'Entrer un code postal',
  341.                     ],
  342.                     'label_attr' => array('class' => ''),
  343.                     'required' => false
  344.                 ])
  345.                 ->add('daysOfWeek'ChoiceType::class, [
  346.                     'label' => 'Jours de préférences (RDV récurrence coiffure)',
  347.                     'attr' => [
  348.                         'class' => 'select2jours'
  349.                     ],
  350.                     'choices' => [
  351.                         'Lundi' => 'Lundi',
  352.                         'Mardi' => 'Mardi',
  353.                         'Mercredi' => 'Mercredi',
  354.                         'Jeudi' => 'Jeudi',
  355.                         'Vendredi' => 'Vendredi',
  356.                     ],
  357.                     'multiple' => true,
  358.                     'expanded' => false// Optional: set to true for checkboxes, false for a select list
  359.                     'placeholder' => 'Sélectionner un jour',
  360.                     'required' => false,
  361.                 ])
  362.                 ->add('emailTuteur'TextType::class, [
  363.                     'label' => 'Email contact principal',
  364.                     'attr' => [
  365.                         'placeholder' => 'Entrer un email'
  366.                     ],
  367.                     'label_attr' => array('class' => ''),
  368.                     'required' => false
  369.                 ])
  370.                 ->add('commentTuteur'TextareaType::class, [
  371.                     'label' => 'Qualité contact principal',
  372.                     'attr' => [
  373.                         'placeholder' => 'Indiquer la qualité du contact principal (fils, fille, époux, ami...)',
  374.                     ],
  375.                     'label_attr' => array('class' => ''),
  376.                     'required' => false
  377.                 ])
  378.                 ->add('nomFacturation'TextType::class, [
  379.                     'label' => 'Nom contact facturation',
  380.                     'attr' => [
  381.                         'placeholder' => 'Entrer le nom',
  382.                     ],
  383.                     'label_attr' => array('class' => ''),
  384.                     'required' => false
  385.                 ])
  386.                 ->add('prenomFacturation'TextType::class, [
  387.                     'label' => 'Prénom contact facturation',
  388.                     'attr' => [
  389.                         'placeholder' => 'Entrer le prenom',
  390.                     ],
  391.                     'label_attr' => array('class' => ''),
  392.                     'required' => false
  393.                 ])
  394.                 ->add('addressFacturation'TextType::class, [
  395.                     'label' => 'Adresse facturation',
  396.                     'attr' => [
  397.                         'placeholder' => 'Entrer l\'adresse de facturation',
  398.                     ],
  399.                     'label_attr' => array('class' => ''),
  400.                     'required' => false
  401.                 ])
  402.                 ->add('ComplementAdresseFacturation'TextType::class, [
  403.                     'label' => 'Complémenent Adresse facturation',
  404.                     'attr' => [
  405.                         'placeholder' => 'Entrer le complément l\'adresse de facturation',
  406.                     ],
  407.                     'label_attr' => array('class' => ''),
  408.                     'required' => false
  409.                 ])
  410.                 ->add('codePostalFacturation'TextType::class, [
  411.                     'label' => 'Code postal Adresse facturation',
  412.                     'attr' => [
  413.                         'placeholder' => 'Entrer le code postal de l\'adresse de facturation',
  414.                     ],
  415.                     'label_attr' => array('class' => ''),
  416.                     'required' => false
  417.                 ])
  418.                 ->add('villeFacturation'TextType::class, [
  419.                     'label' => 'Ville Adresse facturation',
  420.                     'attr' => [
  421.                         'placeholder' => 'Entrer la ville de l\'adresse de facturation',
  422.                     ],
  423.                     'label_attr' => array('class' => ''),
  424.                     'required' => false
  425.                 ])
  426.                 ->add('civiliteFacturation'ChoiceType::class, [
  427.                     'label' => 'Civilité Facturation',
  428.                     'required' => true,
  429.                     'placeholder' => 'Madame, Monsieur',
  430.                     'choices'  => [
  431.                         'Madame' => 'Madame',
  432.                         'Monsieur' => 'Monsieur',
  433.                     ],
  434.                 ])
  435.                 // tab 2 : contract : contrat de prestation
  436. //                ->add('contract', CollectionType::class, [
  437. //                    'label' => false,
  438. //                    'entry_type' => ContractType::class,
  439. //                    'entry_options' => ['label' => false],
  440. //                    'by_reference' => false,
  441. //                    'allow_add' => true,
  442. //                    'allow_delete' => true
  443. //                ])
  444.                 ->add('billingInfos'BillingInfosType::class, [
  445.                     'label' => false,
  446.                     'show_sepa' => $options['show_sepa'],
  447.                     'defaultCompany' =>  $options['defaultCompany']
  448.                 ])
  449.                 // tab 4 : contract : famille
  450.                 ->add('familyMembers'CollectionType::class, [
  451.                     'label' => false,
  452.                     'entry_type' => FamilyMemberType::class,
  453.                     'entry_options' => ['label' => false],
  454.                     'by_reference' => false,
  455.                     'allow_add' => true,
  456.                     'allow_delete' => true
  457.                 ]);
  458.         }
  459.     }
  460.     public function configureOptions(OptionsResolver $resolver)
  461.     {
  462.         $resolver->setDefaults([
  463.             'data_class' => Client::class,
  464.             'show_sepa' => false,
  465.             'defaultCompany' => null,
  466.             'isReservation' => false,
  467.             'emailClient' => null,
  468.         ]);
  469.         $resolver->setAllowedTypes('show_sepa''bool');
  470.     }
  471. }