src/Form/LivraisonsType.php line 108

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Livraisons;
  4. use App\Entity\PaymentMethod;
  5. use App\Entity\TypeLivraison;
  6. use App\Entity\StatutLivraison;
  7. use App\Entity\Livreurs;
  8. use App\Entity\ZoneLivraison;
  9. use App\Entity\User;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\FormBuilderInterface;
  12. use Symfony\Component\OptionsResolver\OptionsResolver;
  13. use Doctrine\ORM\EntityRepository;
  14. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  15. use Symfony\Component\Form\Extension\Core\Type\TextType;
  16. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  17. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  19. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  20. class LivraisonsType extends AbstractType
  21. {
  22. public function buildForm(FormBuilderInterface $builder, array $options): void
  23. {
  24. $builder
  25. ->add('depart', DateTimeType::class,
  26. array(
  27. 'widget' => 'single_text',
  28. 'format' => 'yyyy-MM-dd HH:mm',
  29. 'html5' => false
  30. ))
  31. ->add('arrivee', DateTimeType::class,
  32. array(
  33. 'widget' => 'single_text',
  34. 'format' => 'yyyy-MM-dd HH:mm',
  35. 'html5' => false
  36. ))
  37. ->add('pays')
  38. ->add('adresse_depart')
  39. ->add('adresse_arrivee')
  40. ->add('zonelivraison', EntityType::class, [
  41. 'class' => ZoneLivraison::class,
  42. 'query_builder' => function (EntityRepository $er) {
  43. return $er->createQueryBuilder('u');
  44. },
  45. 'choice_label' => 'libellezone',
  46. 'label' => 'Zone de départ',
  47. 'placeholder' => 'Selectionner une zone..',
  48. ])
  49. ->add('zonearrivee', EntityType::class, [
  50. 'class' => ZoneLivraison::class,
  51. 'query_builder' => function (EntityRepository $er) {
  52. return $er->createQueryBuilder('u');
  53. },
  54. 'choice_label' => 'libellezone',
  55. 'label' => 'Zone d\'arrivée',
  56. 'placeholder' => 'Selectionner une zone..',
  57. ])
  58. ->add('statut_livraison', EntityType::class, [
  59. 'class' => StatutLivraison::class,
  60. 'query_builder' => function (EntityRepository $er) {
  61. return $er->createQueryBuilder('u');
  62. },
  63. 'choice_label' => 'libelle',
  64. ])
  65. ->add('poids',ChoiceType::class, [
  66. 'label' => 'Poids (Kgs)',
  67. 'choices' => [
  68. 'Poids < 5 Kgs' => 3,
  69. 'Poids Compris entre 5 et 10 Kgs' => 7,
  70. 'Poids Compris entre 10 et 20 Kgs' => 15,
  71. 'Poids Compris entre 20 et 50 Kgs' => 35,
  72. 'Poids Compris entre 50 et 100 Kgs' => 75,
  73. ],
  74. 'expanded' => false, // Affiche les choix comme des boutons radio
  75. 'required' => true,
  76. ])
  77. ->add('description', TextareaType::class, [
  78. 'label' => 'Description', // Texte affiché devant le champ
  79. 'required' => false, // Facultatif
  80. 'attr' => [
  81. 'placeholder' => 'Entrez une description ici...',
  82. 'rows' => 4, // Nombre de lignes visibles du textarea
  83. ],
  84. ])
  85. ->add('type_livraison',EntityType::class, [
  86. 'class' => TypeLivraison::class,
  87. 'query_builder' => function (EntityRepository $er) {
  88. return $er->createQueryBuilder('u');
  89. },
  90. 'placeholder' => 'choisir un type de livraison..',
  91. ])
  92. ->add('id_livreurs', EntityType::class, [
  93. 'class' => Livreurs::class,
  94. 'query_builder' => function (EntityRepository $er) {
  95. return $er->createQueryBuilder('u');
  96. },
  97. 'choice_label' => function ($livreur) {
  98. return $livreur->getPrenom() . ' ' . $livreur->getNom();
  99. },
  100. 'label' => 'Le livreur',
  101. 'placeholder' => 'Aucun livreur', // ✅ Affiche une première option vide
  102. 'required' => false, // Facultatif, pour autoriser null
  103. ])
  104. ->add('userprofile')
  105. ->add('latitude', TextType::class, [
  106. 'label' => 'Latitude',
  107. 'required' => true,
  108. 'attr' => ['id' => 'latitude'], // Lié au JavaScript
  109. ])
  110. ->add('longitude', TextType::class, [
  111. 'label' => 'Longitude',
  112. 'required' => true,
  113. 'attr' => ['id' => 'longitude'], // Lié au JavaScript
  114. ])
  115. ->add('paymentMethod', EntityType::class, [
  116. 'class' => PaymentMethod::class,
  117. 'choice_label' => 'name',
  118. 'placeholder' => false,
  119. 'expanded' => true, // Renders radio buttons instead of a dropdown
  120. 'multiple' => false, // Ensures only one option can be selected
  121. 'required' => false,
  122. ])
  123. ;
  124. }
  125. public function configureOptions(OptionsResolver $resolver): void
  126. {
  127. $resolver->setDefaults([
  128. 'attr' => [
  129. 'id' => 'livraisonform',
  130. ],
  131. 'data_class' => Livraisons::class,
  132. ]);
  133. }
  134. }