src/Form/TblOperationTravailType.php line 30

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\RefDureeOperationTravail;
  4. use App\Entity\RefFonction;
  5. use App\Entity\RefTypeOperationTravail;
  6. use App\Entity\TblOperationTravail;
  7. use App\Entity\TblParcelle;
  8. use App\Entity\TblPersonnel;
  9. use App\Repository\RefFonctionRepository;
  10. use App\Repository\RefTypeOperationTravailRepository;
  11. use App\Repository\TblParcelleRepository;
  12. use App\Repository\TblPersonnelRepository;
  13. use DateTime;
  14. use Doctrine\ORM\EntityRepository;
  15. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  16. use Symfony\Component\Form\AbstractType;
  17. use Symfony\Component\Form\Extension\Core\Type\DateType;
  18. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  19. use Symfony\Component\Form\Extension\Core\Type\TimeType;
  20. use Symfony\Component\Form\FormBuilderInterface;
  21. use Symfony\Component\Form\FormEvent;
  22. use Symfony\Component\Form\FormEvents;
  23. use Symfony\Component\OptionsResolver\OptionsResolver;
  24. use Symfony\Component\Validator\Constraints\NotBlank;
  25. use Symfony\Component\Form\FormInterface;
  26. use Symfony\Component\Form\Extension\Core\Type\TextType;
  27. class TblOperationTravailType extends AbstractType
  28. {
  29.     private $parcelleRepo;
  30.     private $typeOperationRepo;
  31.     private $personnelRepo;
  32.     public function __construct(
  33.         TblParcelleRepository $parcelleRepo,
  34.         RefTypeOperationTravailRepository $typeOperationRepo,
  35.         TblPersonnelRepository $personnelRepo
  36.     )
  37.     {
  38.         $this->parcelleRepo $parcelleRepo;
  39.         $this->typeOperationRepo $typeOperationRepo;
  40.         $this->personnelRepo $personnelRepo;
  41.     }
  42.     public function buildForm(FormBuilderInterface $builder, array $options): void
  43.     {
  44.         $builder
  45.             ->add('personnel'EntityType::class, [
  46.                 'class' => TblPersonnel::class,
  47.                 'attr' => ['class' => 'select2'],
  48.                 'required' => true,
  49.                 'query_builder' => $this->personnelRepo->getOrderByPersonnelNotSalaire(),
  50.                 'constraints' => [new NotBlank()],
  51.                 'placeholder' => '--AUCUN--',
  52.             ])
  53.             ->add('heureDebut'TimeType::class, [
  54.                 'required' => true,
  55.                 'data' => new DateTime("08:00"),
  56.                 'constraints' => [new NotBlank()],
  57.                 'widget' => 'single_text',
  58.             ])
  59.             ->add('heureFin'TimeType::class, [
  60.                 'required' => true,
  61.                 'data' => new DateTime(),
  62.                 'constraints' => [new NotBlank()],
  63.                 'widget' => 'single_text',
  64.             ])
  65.             ->add('dateOperation'DateType::class, [
  66.                 'required' => true,
  67.                 'constraints' => [new NotBlank()],
  68.                 'widget' => 'single_text',
  69.             ])
  70.             ->add('dureeOperationTravail'EntityType::class, [
  71.                 'class' => RefDureeOperationTravail::class,
  72.                 'constraints' => [new NotBlank()],
  73.                 'attr' => ['class' => 'select2'],
  74.                 'required' => true,
  75.                 'placeholder' => '--AUCUNE--',
  76.             ])
  77.             ->add('typeOperationTravail'EntityType::class, [
  78.                 'class' => RefTypeOperationTravail::class,
  79.                 'attr' => ['class' => 'select2'],
  80.                 'constraints' => [new NotBlank()],
  81.                 'required' => true,
  82.                 'placeholder' => '--AUCUNE--',
  83.                 'query_builder' => $this->typeOperationRepo->getOrderByTypeOperation(),
  84.             ])
  85.             ->add('parcelle'EntityType::class, [
  86.                 'class' => TblParcelle::class,
  87.                 'constraints' => [new NotBlank()],
  88.                 'attr' => ['class' => 'select2'],
  89.                 'required' => true,
  90.                 'multiple' => true,
  91.                 'query_builder' => $this->parcelleRepo->getOrderByParcelle(),
  92.             ])
  93.             ->add('montantTJM')
  94.         ;
  95.         $formModifier = function (FormInterface $formTblPersonnel $personnel null) {
  96.             $tarifJours null === $personnel null $personnel->getTarifJours();
  97.             $form->add('montantTJM'NumberType::class, [
  98.                 'empty_data' => $tarifJours,
  99.                 
  100.             ]);
  101.         };
  102.         $builder->addEventListener(
  103.             FormEvents::PRE_SET_DATA,
  104.             function (FormEvent $event) use ($formModifier) {
  105.                 $data $event->getData();
  106.                 $formModifier($event->getForm(), $data->getPersonnel());
  107.             }
  108.         );
  109.         $builder->get('personnel')->addEventListener(
  110.             FormEvents::POST_SUBMIT,
  111.             function (FormEvent $event) use ($formModifier) {
  112.                 $personnel $event->getForm()->getData();
  113.                 $formModifier($event->getForm()->getParent(), $personnel);
  114.             }
  115.         );
  116.     }
  117.     public function configureOptions(OptionsResolver $resolver): void
  118.     {
  119.         $resolver->setDefaults([
  120.             'data_class' => TblOperationTravail::class,
  121.         ]);
  122.     }
  123. }