src/Form/ClientType.php line 159

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.                         'Décès' => 'Décès'
  179.                     ],
  180.                     'label_attr' => array('class' => ''),
  181.                 ])
  182.                 // ->add('profilClient', ChoiceType::class, [
  183.                 //     'label' => 'Profil client',
  184.                 //     'attr' => [
  185.                 //         'placeholder' => 'Choisir un profil',
  186.                 //     ],
  187.                 //     'choices'  => [
  188.                 //         'Autonome et décisionnaire' => 'Autonome et décisionnaire',
  189.                 //         'Dépendant' => 'Dépendant',
  190.                 //     ],
  191.                 //     'label_attr' => array('class' => ''),
  192.                 // ])
  193.                 ->add('civilite'ChoiceType::class, [
  194.                     'label' => 'Civilite',
  195.                     'attr' => [
  196.                         'placeholder' => 'Entrer la civilite',
  197.                     ],
  198.                     'required' => false,
  199.                     'placeholder' => 'Choisir une civilite',
  200.                     'choices'  => [
  201.                         'Madame' => 'Madame',
  202.                         'Monsieur' => 'Monsieur',
  203.                     ],
  204.                     'label_attr' => array('class' => ''),
  205.                 ])
  206.                 // ->add('email', EmailType::class, [
  207.                 //     'label' => 'Email',
  208.                 //     'attr' => [
  209.                 //         'placeholder' => 'Entrer un email',
  210.                 //     ],
  211.                 //     'required' => false,
  212.                 //     'label_attr' => array('class' => ''),
  213.                 // ])
  214.                 ->add('birthday'TextType::class, [
  215.                     'label' => 'Date de naissance',
  216.                     'attr' => [
  217.                         'placeholder' => 'Entrer une date de naissance',
  218.                         'class' => 'flatpicker'
  219.                     ],
  220.                     'required' => false,
  221.                     'label_attr' => array('class' => ''),
  222.                 ])
  223.                 ->add('deathday'TextType::class, [
  224.                     'label' => 'Date de décès',
  225.                     'attr' => [
  226.                         'placeholder' => 'Entrer une date de décès',
  227.                         'class' => 'flatpicker'
  228.                     ],
  229.                     'required' => false,
  230.                     'label_attr' => array('class' => ''),
  231.                 ])
  232.                 ->add('roomNumber'TextType::class, [
  233.                     'label' => 'Batiment / Étage / Numéro de chambre',
  234.                     'attr' => [
  235.                         'placeholder' => 'Entrer le batiment / étage / numéro de chambre',
  236.                     ],
  237.                     'label_attr' => array('class' => ''),
  238.                 ])
  239.                 // ->add('phone', TextType::class, [
  240.                 //     'label' => 'Téléphone client',
  241.                 //     'attr' => [
  242.                 //         'placeholder' => 'Entrer un numéro de téléphone',
  243.                 //     ],
  244.                 //     'label_attr' => array('class' => ''),
  245.                 //     'required' => false
  246.                 // ])
  247.                 // ->add('buildingRoom', TextType::class, [
  248.                 //     'label' => 'Batiment chambre',
  249.                 //     'attr' => [
  250.                 //         'placeholder' => 'Entrer un numéro de batiment',
  251.                 //     ],
  252.                 //     'label_attr' => array('class' => ''),
  253.                 //     'required' => false
  254.                 // ])
  255.                 // ->add('stairs', TextType::class, [
  256.                 //     'label' => 'Etage chambre',
  257.                 //     'attr' => [
  258.                 //         'placeholder' => 'Entrer un étage de chambre',
  259.                 //     ],
  260.                 //     'label_attr' => array('class' => ''),
  261.                 //     'required' => false
  262.                 // ])
  263.                 ->add('comments'TextareaType::class, [
  264.                     'label' => 'Commentaires',
  265.                     'attr' => [
  266.                         'placeholder' => 'Entrer un commentaire',
  267.                     ],
  268.                     'label_attr' => array('class' => ''),
  269.                     'required' => false
  270.                 ])
  271.                 // contact
  272.                 ->add('nomTuteur'TextType::class, [
  273.                     'label' => 'Nom contact principal',
  274.                     'attr' => [
  275.                         'placeholder' => 'Entrer le nom',
  276.                     ],
  277.                     'label_attr' => array('class' => ''),
  278.                     'required' => false
  279.                 ])
  280.                 ->add('consignesClient'TextareaType::class, [
  281.                     'label' => 'Consignes client',
  282.                     'attr' => [
  283.                         'placeholder' => "Consignes client",
  284.                     ],
  285.                     'required' => false
  286.                 ])
  287.                 ->add('prenomTuteur'TextType::class, [
  288.                     'label' => 'Prénom contact principal',
  289.                     'attr' => [
  290.                         'placeholder' => 'Entrer un prénom',
  291.                     ],
  292.                     'label_attr' => array('class' => ''),
  293.                     'required' => false
  294.                 ])
  295.                 ->add('civiliteTuteur'ChoiceType::class, [
  296.                     'label' => 'Civilite ',
  297.                     'attr' => [
  298.                         'placeholder' => 'Entrer la civilite',
  299.                     ],
  300.                     'choices'  => [
  301.                         'Madame' => 'Madame',
  302.                         'Monsieur' => 'Monsieur',
  303.                     ],
  304.                     'label_attr' => array('class' => ''),
  305.                 ])
  306.                 ->add('numeroTuteur'TextType::class, [
  307.                     'label' => 'Numéro de tel contact principal',
  308.                     'attr' => [
  309.                         'placeholder' => 'Entrer un numéro de téléphone',
  310.                     ],
  311.                     'label_attr' => array('class' => ''),
  312.                     'required' => false
  313.                 ])
  314.                 ->add('addressTuteur'TextType::class, [
  315.                     'label' => 'Adresse contact principal',
  316.                     'attr' => [
  317.                         'placeholder' => 'Entrer une adresse',
  318.                     ],
  319.                     'label_attr' => array('class' => ''),
  320.                     'required' => false
  321.                 ])
  322.                 ->add('addressTuteur2'TextType::class, [
  323.                     'label' => 'Complément d\'adresse',
  324.                     'attr' => [
  325.                         'placeholder' => 'Entrer un complément adresse',
  326.                     ],
  327.                     'label_attr' => array('class' => ''),
  328.                     'required' => false
  329.                 ])
  330.                 ->add('city'TextType::class, [
  331.                     'label' => 'Ville',
  332.                     'attr' => [
  333.                         'placeholder' => 'Entrer une ville',
  334.                     ],
  335.                     'label_attr' => array('class' => ''),
  336.                     'required' => false
  337.                 ])
  338.                 ->add('zipcode'TextType::class, [
  339.                     'label' => 'Code postal',
  340.                     'attr' => [
  341.                         'placeholder' => 'Entrer un code postal',
  342.                     ],
  343.                     'label_attr' => array('class' => ''),
  344.                     'required' => false
  345.                 ])
  346.                 ->add('daysOfWeek'ChoiceType::class, [
  347.                     'label' => 'Jours de préférences (RDV récurrence coiffure)',
  348.                     'attr' => [
  349.                         'class' => 'select2jours'
  350.                     ],
  351.                     'choices' => [
  352.                         'Lundi' => 'Lundi',
  353.                         'Mardi' => 'Mardi',
  354.                         'Mercredi' => 'Mercredi',
  355.                         'Jeudi' => 'Jeudi',
  356.                         'Vendredi' => 'Vendredi',
  357.                     ],
  358.                     'multiple' => true,
  359.                     'expanded' => false// Optional: set to true for checkboxes, false for a select list
  360.                     'placeholder' => 'Sélectionner un jour',
  361.                     'required' => false,
  362.                 ])
  363.                 ->add('emailTuteur'TextType::class, [
  364.                     'label' => 'Email contact principal',
  365.                     'attr' => [
  366.                         'placeholder' => 'Entrer un email'
  367.                     ],
  368.                     'label_attr' => array('class' => ''),
  369.                     'required' => false
  370.                 ])
  371.                 ->add('commentTuteur'TextareaType::class, [
  372.                     'label' => 'Qualité contact principal',
  373.                     'attr' => [
  374.                         'placeholder' => 'Indiquer la qualité du contact principal (fils, fille, époux, ami...)',
  375.                     ],
  376.                     'label_attr' => array('class' => ''),
  377.                     'required' => false
  378.                 ])
  379.                 ->add('nomFacturation'TextType::class, [
  380.                     'label' => 'Nom contact facturation',
  381.                     'attr' => [
  382.                         'placeholder' => 'Entrer le nom',
  383.                     ],
  384.                     'label_attr' => array('class' => ''),
  385.                     'required' => false
  386.                 ])
  387.                 ->add('prenomFacturation'TextType::class, [
  388.                     'label' => 'Prénom contact facturation',
  389.                     'attr' => [
  390.                         'placeholder' => 'Entrer le prenom',
  391.                     ],
  392.                     'label_attr' => array('class' => ''),
  393.                     'required' => false
  394.                 ])
  395.                 ->add('addressFacturation'TextType::class, [
  396.                     'label' => 'Adresse facturation',
  397.                     'attr' => [
  398.                         'placeholder' => 'Entrer l\'adresse de facturation',
  399.                     ],
  400.                     'label_attr' => array('class' => ''),
  401.                     'required' => false
  402.                 ])
  403.                 ->add('ComplementAdresseFacturation'TextType::class, [
  404.                     'label' => 'Complémenent Adresse facturation',
  405.                     'attr' => [
  406.                         'placeholder' => 'Entrer le complément l\'adresse de facturation',
  407.                     ],
  408.                     'label_attr' => array('class' => ''),
  409.                     'required' => false
  410.                 ])
  411.                 ->add('codePostalFacturation'TextType::class, [
  412.                     'label' => 'Code postal Adresse facturation',
  413.                     'attr' => [
  414.                         'placeholder' => 'Entrer le code postal de l\'adresse de facturation',
  415.                     ],
  416.                     'label_attr' => array('class' => ''),
  417.                     'required' => false
  418.                 ])
  419.                 ->add('villeFacturation'TextType::class, [
  420.                     'label' => 'Ville Adresse facturation',
  421.                     'attr' => [
  422.                         'placeholder' => 'Entrer la ville de l\'adresse de facturation',
  423.                     ],
  424.                     'label_attr' => array('class' => ''),
  425.                     'required' => false
  426.                 ])
  427.                 ->add('civiliteFacturation'ChoiceType::class, [
  428.                     'label' => 'Civilité Facturation',
  429.                     'required' => true,
  430.                     'placeholder' => 'Madame, Monsieur',
  431.                     'choices'  => [
  432.                         'Madame' => 'Madame',
  433.                         'Monsieur' => 'Monsieur',
  434.                     ],
  435.                 ])
  436.                 // tab 2 : contract : contrat de prestation
  437. //                ->add('contract', CollectionType::class, [
  438. //                    'label' => false,
  439. //                    'entry_type' => ContractType::class,
  440. //                    'entry_options' => ['label' => false],
  441. //                    'by_reference' => false,
  442. //                    'allow_add' => true,
  443. //                    'allow_delete' => true
  444. //                ])
  445.                 ->add('billingInfos'BillingInfosType::class, [
  446.                     'label' => false,
  447.                     'show_sepa' => $options['show_sepa'],
  448.                     'defaultCompany' =>  $options['defaultCompany']
  449.                 ])
  450.                 // tab 4 : contract : famille
  451.                 ->add('familyMembers'CollectionType::class, [
  452.                     'label' => false,
  453.                     'entry_type' => FamilyMemberType::class,
  454.                     'entry_options' => ['label' => false],
  455.                     'by_reference' => false,
  456.                     'allow_add' => true,
  457.                     'allow_delete' => true
  458.                 ]);
  459.         }
  460.     }
  461.     public function configureOptions(OptionsResolver $resolver)
  462.     {
  463.         $resolver->setDefaults([
  464.             'data_class' => Client::class,
  465.             'show_sepa' => false,
  466.             'defaultCompany' => null,
  467.             'isReservation' => false,
  468.             'emailClient' => null,
  469.         ]);
  470.         $resolver->setAllowedTypes('show_sepa''bool');
  471.     }
  472. }