<?php
namespace App\Form;
use App\Entity\Reservation;
use App\Entity\Service;
use App\Form\Config\TypeConfigurationType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ReservationType extends TypeConfigurationType
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
private $services = [];
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$service = $builder->getData()->getService();
$builder
->add('firstname', TextType::class, [
"required"=>true,
"label"=>"Nom",
"attr"=>[
"class"=>"form-input"
]
])
->add('lastname', TextType::class, [
"required"=>true,
"label"=>"Prenom(s)",
"attr"=>[
"class"=>"form-input"
]
])
->add('telephone', TextType::class, [
"required"=>true,
"label"=>"No de Telephone",
"attr"=>[
"class"=>"form-input"
]
])
->add('email', TextType::class, [
"required"=>true,
"label"=>"Votre email",
"attr"=>[
"class"=>"form-input"
]
])
->add('service', EntityType::class, [
'class' => Service::class,
'choice_label' => 'name',
'data' => $service,
'placeholder' => 'Sélectionnez un service',
'required' => true,
"attr"=>[
"class"=>"form-input"
],
])
/*->add('name', EntityType::class, [
'class' => Service::class,
'required' => true,
'choice_label' => 'service',
'multiple' => false,
"attr"=>[
"class"=>"form-select form-control-sm"
]
])*/
->add('reserved_at', DateTimeType::class, [
"required"=>true,
'widget' => 'single_text',
'attr' => [
'class' => 'js-datetimepicker form-input',
'placeholder' => 'Sélectionnez une date et une heure'
],
'label' => 'Date et heure de réservation'
])
->add('observations', TextareaType::class, [
"required"=>true,
"label"=>"Observation",
"attr"=>[
"class"=>"form-input",
"placeholder"=>"Dites-nous plus sur votre demande."
]
]);
//dd($builder->get('reserved_at'));
$builder->get('reserved_at')
->addModelTransformer(new CallbackTransformer(
function ($eng_date) {
if (null === $eng_date)
return null;
return $eng_date->format('d/m/Y H:i');
},
function ($fr_date) {
if (null === $fr_date)
return null;
$date = \DateTimeImmutable::createFromFormat('d/m/Y H:i', '29/07/2024 12:50')->format('Y-m-d H:i:s');
return new \DateTimeImmutable($date);
}
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Reservation::class,
'service' => null, // Définir une option par défaut
'csrf_protection' => true,
'csrf_field_name' => '_token',
'csrf_token_id' => 'reservation_item'
]);
$resolver->setAllowedTypes('service', ['null', Service::class]);
}
}