src/Form/PractitionerType.php line 185

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Need;
  4. use App\Entity\Partner;
  5. use App\Entity\Speciality;
  6. use Doctrine\ORM\EntityRepository;
  7. use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
  8. use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrue as RecaptchaTrue;
  9. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  12. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  13. use Symfony\Component\Form\Extension\Core\Type\FileType;
  14. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextType;
  16. use Symfony\Component\Form\FormBuilderInterface;
  17. use Symfony\Component\OptionsResolver\OptionsResolver;
  18. class PractitionerType extends AbstractType
  19. {
  20. public function buildForm(FormBuilderInterface $builder, array $options): void
  21. {
  22. $builder
  23. ->add('lastName', TextType::class, [
  24. "label" => "Nom",
  25. "attr" => [
  26. "placeholder" => "Nom",
  27. ],
  28. "required" => true,
  29. ])
  30. ->add('firstName', TextType::class, [
  31. "label" => "Prénom",
  32. "attr" => [
  33. "placeholder" => "Prénom",
  34. ],
  35. "required" => true,
  36. ])
  37. ->add('publicEmail', TextType::class, [
  38. "label" => "E-mail professionnel",
  39. "attr" => [
  40. "placeholder" => "E-mail professionnel",
  41. ],
  42. "required" => false,
  43. ])
  44. ->add('phone', TextType::class, [
  45. "label" => "Numéro de téléphone",
  46. "attr" => [
  47. "placeholder" => "Numéro de téléphone",
  48. ],
  49. "required" => true,
  50. ])
  51. ->add('avatar', FileType::class, [
  52. "label" => "Avatar",
  53. "required" => false,
  54. "mapped" => false,
  55. ])
  56. ->add('slogan', TextType::class, [
  57. "label" => "Slogan",
  58. "attr" => [
  59. "placeholder" => "Slogan",
  60. ],
  61. "required" => false,
  62. ])
  63. ->add('addressName', TextType::class, [
  64. "label" => "Nom du cabinet",
  65. "attr" => [
  66. "placeholder" => "Nom du cabinet",
  67. ],
  68. "required" => false,
  69. ])
  70. ->add('address', TextType::class, [
  71. "label" => "Adresse du cabinet",
  72. "attr" => [
  73. "placeholder" => "Adresse du cabinet",
  74. ],
  75. "required" => false,
  76. ])
  77. ->add('address2', TextType::class, [
  78. "label" => "Complément d'adresse",
  79. "attr" => [
  80. "placeholder" => "Complément d'adresse",
  81. ],
  82. "required" => false,
  83. ])
  84. ->add('zipCode', TextType::class, [
  85. "label" => "Code postal",
  86. "attr" => [
  87. "placeholder" => "Code postal",
  88. ],
  89. "required" => false,
  90. ])
  91. ->add('city', TextType::class, [
  92. "label" => "Ville",
  93. "attr" => [
  94. "placeholder" => "Ville",
  95. ],
  96. "required" => false,
  97. ])
  98. ->add('country', TextType::class, [
  99. "label" => "Pays",
  100. "attr" => [
  101. "placeholder" => "Pays",
  102. ],
  103. "required" => false,
  104. ])
  105. ->add('siret', TextType::class, [
  106. "label" => "SIRET",
  107. "attr" => [
  108. "placeholder" => "SIRET",
  109. ],
  110. "required" => false,
  111. ])
  112. ->add('legalForm', TextType::class, [
  113. "label" => "Forme légale",
  114. "attr" => [
  115. "placeholder" => "Forme légale",
  116. ],
  117. "required" => false,
  118. ])
  119. ->add('assuranceName', TextType::class, [
  120. "label" => "Nom de l'assurance",
  121. "attr" => [
  122. "placeholder" => "Nom de l'assurance",
  123. ],
  124. "required" => false,
  125. ])
  126. ->add('allowTeleconsultation', CheckboxType::class, [
  127. "label" => "accepte la téléconsultation",
  128. "required" => false,
  129. ])
  130. ->add('allowOffice', CheckboxType::class, [
  131. "label" => "accepte les consultations à son cabinet",
  132. "required" => false,
  133. ])
  134. ->add('allowHomeVisit', CheckboxType::class, [
  135. "label" => "accepte les consultations au domicile du client",
  136. "required" => false,
  137. ])
  138. ->add('nbDaysBeforeReservation', NumberType::class, [
  139. "label" => "Nombre de jours avant réservation",
  140. "attr" => [
  141. "min" => 0,
  142. ],
  143. "required" => true,
  144. ])
  145. ->add('nbDaysAvailable', NumberType::class, [
  146. "label" => "Nombre de jours disponibles à la réservation",
  147. "attr" => [
  148. "min" => 1,
  149. ],
  150. "required" => true,
  151. ])
  152. ->add('monday', DaySlotType::class, array(
  153. 'label' => "Lundi",
  154. "required" => false,
  155. ))
  156. ->add('tuesday', DaySlotType::class, array(
  157. 'label' => "Mardi",
  158. "required" => false,
  159. ))
  160. ->add('wednesday', DaySlotType::class, array(
  161. 'label' => "Mercredi",
  162. "required" => false,
  163. ))
  164. ->add('thursday', DaySlotType::class, array(
  165. 'label' => "Jeudi",
  166. "required" => false,
  167. ))
  168. ->add('friday', DaySlotType::class, array(
  169. 'label' => "Vendredi",
  170. "required" => false,
  171. ))
  172. ->add('saturday', DaySlotType::class, array(
  173. 'label' => "Samedi",
  174. "required" => false,
  175. ))
  176. ->add('sunday', DaySlotType::class, array(
  177. 'label' => "Dimanche",
  178. "required" => false,
  179. ))
  180. ->add('speciality', EntityType::class, [
  181. 'class' => Speciality::class,
  182. 'query_builder' => function (EntityRepository $er) {
  183. return $er->createQueryBuilder('s')
  184. ->orderBy('s.label', 'ASC');
  185. },
  186. 'label' => "Spécialités",
  187. 'choice_label' => 'label',
  188. 'attr' => [
  189. "data-control" => "select2",
  190. ],
  191. 'multiple' => true,
  192. 'expanded' => false,
  193. "required" => false,
  194. ])
  195. ->add('need', EntityType::class, [
  196. 'class' => Need::class,
  197. 'query_builder' => function (EntityRepository $er) {
  198. return $er->createQueryBuilder('n')
  199. ->orderBy('n.label', 'ASC');
  200. },
  201. 'label' => "Besoins",
  202. 'choice_label' => 'label',
  203. 'attr' => [
  204. "data-control" => "select2",
  205. ],
  206. 'multiple' => true,
  207. 'expanded' => false,
  208. "required" => false,
  209. ])
  210. ->add('captcha', EWZRecaptchaType::class, [
  211. 'language' => 'fr',
  212. 'mapped' => false,
  213. 'constraints' => array(
  214. new RecaptchaTrue()
  215. )
  216. ])
  217. ->add('secondaryLocations', CollectionType::class, [
  218. "label" => "Cabinets secondaires",
  219. "entry_type" => PartnerSecondaryLocationType::class,
  220. "entry_options" => ['label' => false],
  221. "allow_add" => true,
  222. "by_reference" => false,
  223. "delete_empty" => true,
  224. "required" => false,
  225. ])
  226. ;
  227. }
  228. public function configureOptions(OptionsResolver $resolver): void
  229. {
  230. $resolver->setDefaults([
  231. 'data_class' => Partner::class,
  232. ]);
  233. }
  234. }