src/Form/Manager/ProviderOrderType.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Form\Manager;
  3. use App\Entity\Provider;
  4. use App\Entity\ProviderOrder;
  5. use App\Form\Helpers\CollectionType;
  6. use Symfony\Component\Form\FormEvent;
  7. use Symfony\Component\Form\FormEvents;
  8. use Symfony\Component\Form\AbstractType;
  9. use App\Form\Manager\ProviderOrderItemType;
  10. use Symfony\Component\Form\FormBuilderInterface;
  11. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  12. use Symfony\Component\OptionsResolver\OptionsResolver;
  13. use Symfony\Component\Form\Extension\Core\Type\DateType;
  14. use Symfony\Component\Form\Extension\Core\Type\TextType;
  15. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  16. class ProviderOrderType extends AbstractType
  17. {
  18.     protected $authorizationChecker;
  19.     public function __construct(AuthorizationCheckerInterface $authorizationChecker)
  20.     {
  21.         $this->authorizationChecker $authorizationChecker;
  22.     }
  23.     public function buildForm(FormBuilderInterface $builder, array $options): void
  24.     {
  25.         $builder
  26.             ->add('reference'TextType::class, [
  27.                 'label' => 'N° Commande'
  28.             ])
  29.             ->add('orderedAt'DateType::class, [
  30.                 'label' => 'Date',
  31.                 'input' => 'datetime_immutable',
  32.                 'widget' => 'single_text'
  33.             ])
  34.             ->add('deliveredEstimationAt'DateType::class, [
  35.                 'label' => 'Livraison estimée',
  36.                 'input' => 'datetime_immutable',
  37.                 'widget' => 'single_text'
  38.             ])
  39.             ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options){
  40.                 $entity $event->getData();
  41.                 $form $event->getForm();
  42.                 $persisted $entity && $entity->getId();
  43.                 $form->add('provider'EntityType::class, [
  44.                     'label' => 'Fournisseur',
  45.                     'class' => Provider::class,
  46.                     'disabled' => $persisted,
  47.                     'attr' =>  ['data-controller' => 'select2''data-parent' => $options['is_ajax'] ? '#forecastingOrderModal' false]
  48.                 ]);
  49.                 if ($persisted) {
  50.                     $hasProducts = !$this->authorizationChecker->isGranted('ROLE_SUPER_ADMIN') && $entity->getProductCount();
  51.                     $form->add('providerOrderItems'CollectionType::class, [
  52.                         'entry_type' => ProviderOrderItemType::class,
  53.                         'allow_add' => !$hasProducts,
  54.                         'allow_delete' => !$hasProducts,
  55.                         'allow_delete_persisted' => false,
  56.                         'entry_options' => [
  57.                             'label' => false,
  58.                             'attr' => [ 'class' => 'form-row provider-order-item' ],
  59.                             'provider' => $entity->getProvider()->getId(),
  60.                             'is_ajax' => $options['is_ajax']
  61.                         ],
  62.                         'by_reference' => false,
  63.                         'label' => false,
  64.                         'attr' => [ 'class' => 'provider-order-items' ],
  65.                         'button_label' => 'Ajouter un produit',
  66.                         'disabled' => $hasProducts,
  67.                     ]);
  68.                 }
  69.                 
  70.             })
  71.         ;
  72.     }
  73.     public function configureOptions(OptionsResolver $resolver): void
  74.     {
  75.         $resolver->setDefaults([
  76.             'data_class' => ProviderOrder::class,
  77.             'is_ajax' => false
  78.         ]);
  79.     }
  80. }