<?php
namespace App\Form;
use App\Entity\Livraisons;
use App\Entity\PaymentMethod;
use App\Entity\TypeLivraison;
use App\Entity\StatutLivraison;
use App\Entity\Livreurs;
use App\Entity\ZoneLivraison;
use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Doctrine\ORM\EntityRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
class LivraisonsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('depart', DateTimeType::class,
array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
'html5' => false
))
->add('arrivee', DateTimeType::class,
array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
'html5' => false
))
->add('pays')
->add('adresse_depart')
->add('adresse_arrivee')
->add('zonelivraison', EntityType::class, [
'class' => ZoneLivraison::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u');
},
'choice_label' => 'libellezone',
'label' => 'Zone de départ',
'placeholder' => 'Selectionner une zone..',
])
->add('zonearrivee', EntityType::class, [
'class' => ZoneLivraison::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u');
},
'choice_label' => 'libellezone',
'label' => 'Zone d\'arrivée',
'placeholder' => 'Selectionner une zone..',
])
->add('statut_livraison', EntityType::class, [
'class' => StatutLivraison::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u');
},
'choice_label' => 'libelle',
])
->add('poids',ChoiceType::class, [
'label' => 'Poids (Kgs)',
'choices' => [
'Poids < 5 Kgs' => 3,
'Poids Compris entre 5 et 10 Kgs' => 7,
'Poids Compris entre 10 et 20 Kgs' => 15,
'Poids Compris entre 20 et 50 Kgs' => 35,
'Poids Compris entre 50 et 100 Kgs' => 75,
],
'expanded' => false, // Affiche les choix comme des boutons radio
'required' => true,
])
->add('description', TextareaType::class, [
'label' => 'Description', // Texte affiché devant le champ
'required' => false, // Facultatif
'attr' => [
'placeholder' => 'Entrez une description ici...',
'rows' => 4, // Nombre de lignes visibles du textarea
],
])
->add('type_livraison',EntityType::class, [
'class' => TypeLivraison::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u');
},
'placeholder' => 'choisir un type de livraison..',
])
->add('id_livreurs', EntityType::class, [
'class' => Livreurs::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u');
},
'choice_label' => function ($livreur) {
return $livreur->getPrenom() . ' ' . $livreur->getNom();
},
'label' => 'Le livreur',
'placeholder' => 'Aucun livreur', // ✅ Affiche une première option vide
'required' => false, // Facultatif, pour autoriser null
])
->add('userprofile')
->add('latitude', TextType::class, [
'label' => 'Latitude',
'required' => true,
'attr' => ['id' => 'latitude'], // Lié au JavaScript
])
->add('longitude', TextType::class, [
'label' => 'Longitude',
'required' => true,
'attr' => ['id' => 'longitude'], // Lié au JavaScript
])
->add('paymentMethod', EntityType::class, [
'class' => PaymentMethod::class,
'choice_label' => 'name',
'placeholder' => false,
'expanded' => true, // Renders radio buttons instead of a dropdown
'multiple' => false, // Ensures only one option can be selected
'required' => false,
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'attr' => [
'id' => 'livraisonform',
],
'data_class' => Livraisons::class,
]);
}
}