<?php
namespace App\Form;
use App\Entity\Need;
use App\Entity\Partner;
use App\Entity\Speciality;
use Doctrine\ORM\EntityRepository;
use EWZ\Bundle\RecaptchaBundle\Form\Type\EWZRecaptchaType;
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\IsTrue as RecaptchaTrue;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class PractitionerType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('lastName', TextType::class, [
"label" => "Nom",
"attr" => [
"placeholder" => "Nom",
],
"required" => true,
])
->add('firstName', TextType::class, [
"label" => "Prénom",
"attr" => [
"placeholder" => "Prénom",
],
"required" => true,
])
->add('publicEmail', TextType::class, [
"label" => "E-mail professionnel",
"attr" => [
"placeholder" => "E-mail professionnel",
],
"required" => false,
])
->add('phone', TextType::class, [
"label" => "Numéro de téléphone",
"attr" => [
"placeholder" => "Numéro de téléphone",
],
"required" => true,
])
->add('avatar', FileType::class, [
"label" => "Avatar",
"required" => false,
"mapped" => false,
])
->add('slogan', TextType::class, [
"label" => "Slogan",
"attr" => [
"placeholder" => "Slogan",
],
"required" => false,
])
->add('addressName', TextType::class, [
"label" => "Nom du cabinet",
"attr" => [
"placeholder" => "Nom du cabinet",
],
"required" => false,
])
->add('address', TextType::class, [
"label" => "Adresse du cabinet",
"attr" => [
"placeholder" => "Adresse du cabinet",
],
"required" => false,
])
->add('address2', TextType::class, [
"label" => "Complément d'adresse",
"attr" => [
"placeholder" => "Complément d'adresse",
],
"required" => false,
])
->add('zipCode', TextType::class, [
"label" => "Code postal",
"attr" => [
"placeholder" => "Code postal",
],
"required" => false,
])
->add('city', TextType::class, [
"label" => "Ville",
"attr" => [
"placeholder" => "Ville",
],
"required" => false,
])
->add('country', TextType::class, [
"label" => "Pays",
"attr" => [
"placeholder" => "Pays",
],
"required" => false,
])
->add('siret', TextType::class, [
"label" => "SIRET",
"attr" => [
"placeholder" => "SIRET",
],
"required" => false,
])
->add('legalForm', TextType::class, [
"label" => "Forme légale",
"attr" => [
"placeholder" => "Forme légale",
],
"required" => false,
])
->add('assuranceName', TextType::class, [
"label" => "Nom de l'assurance",
"attr" => [
"placeholder" => "Nom de l'assurance",
],
"required" => false,
])
->add('allowTeleconsultation', CheckboxType::class, [
"label" => "accepte la téléconsultation",
"required" => false,
])
->add('allowOffice', CheckboxType::class, [
"label" => "accepte les consultations à son cabinet",
"required" => false,
])
->add('allowHomeVisit', CheckboxType::class, [
"label" => "accepte les consultations au domicile du client",
"required" => false,
])
->add('nbDaysBeforeReservation', NumberType::class, [
"label" => "Nombre de jours avant réservation",
"attr" => [
"min" => 0,
],
"required" => true,
])
->add('nbDaysAvailable', NumberType::class, [
"label" => "Nombre de jours disponibles à la réservation",
"attr" => [
"min" => 1,
],
"required" => true,
])
->add('monday', DaySlotType::class, array(
'label' => "Lundi",
"required" => false,
))
->add('tuesday', DaySlotType::class, array(
'label' => "Mardi",
"required" => false,
))
->add('wednesday', DaySlotType::class, array(
'label' => "Mercredi",
"required" => false,
))
->add('thursday', DaySlotType::class, array(
'label' => "Jeudi",
"required" => false,
))
->add('friday', DaySlotType::class, array(
'label' => "Vendredi",
"required" => false,
))
->add('saturday', DaySlotType::class, array(
'label' => "Samedi",
"required" => false,
))
->add('sunday', DaySlotType::class, array(
'label' => "Dimanche",
"required" => false,
))
->add('speciality', EntityType::class, [
'class' => Speciality::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('s')
->orderBy('s.label', 'ASC');
},
'label' => "Spécialités",
'choice_label' => 'label',
'attr' => [
"data-control" => "select2",
],
'multiple' => true,
'expanded' => false,
"required" => false,
])
->add('need', EntityType::class, [
'class' => Need::class,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('n')
->orderBy('n.label', 'ASC');
},
'label' => "Besoins",
'choice_label' => 'label',
'attr' => [
"data-control" => "select2",
],
'multiple' => true,
'expanded' => false,
"required" => false,
])
->add('captcha', EWZRecaptchaType::class, [
'language' => 'fr',
'mapped' => false,
'constraints' => array(
new RecaptchaTrue()
)
])
->add('secondaryLocations', CollectionType::class, [
"label" => "Cabinets secondaires",
"entry_type" => PartnerSecondaryLocationType::class,
"entry_options" => ['label' => false],
"allow_add" => true,
"by_reference" => false,
"delete_empty" => true,
"required" => false,
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => Partner::class,
]);
}
}