Deprecated: Constant E_STRICT is deprecated in /home/pastorz/old-espace-client/vendor/symfony/error-handler/ErrorHandler.php on line 58

Deprecated: Constant E_STRICT is deprecated in /home/pastorz/old-espace-client/vendor/symfony/error-handler/ErrorHandler.php on line 76
Symfony Profiler

src/Form/ShippingCarrierFormType.php line 80

Open in your IDE?
  1. <?php
  2. namespace App\Form;
  3. use App\Entity\Carrier;
  4. use App\Entity\CarrierPriceRange;
  5. use App\Entity\Shipment;
  6. use App\Service\BrandService;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\Form\AbstractType;
  10. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  11. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  12. use Symfony\Component\Form\Extension\Core\Type\TextType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\Form\FormEvent;
  15. use Symfony\Component\Form\FormEvents;
  16. use Symfony\Component\Form\FormInterface;
  17. use Symfony\Component\OptionsResolver\OptionsResolver;
  18. use Symfony\Component\Validator\Constraints\NotBlank;
  19. use Symfony\Contracts\Translation\TranslatorInterface;
  20. class ShippingCarrierFormType extends AbstractType
  21. {
  22.     public const SERVICE_POINT_NAME "servicePoint";
  23.     public function __construct(private TranslatorInterface $translator, private BrandService $brandService)
  24.     {
  25.     }
  26.     /**
  27.      * @param FormBuilderInterface $builder
  28.      * @param array $options
  29.      */
  30.     public function buildForm(FormBuilderInterface $builder, array $options)
  31.     {
  32.         $prices $options['prices'];
  33.         $locale $options['locale'];
  34.         $carriers $prices->map(fn(CarrierPriceRange $price) => $price->getCarrier());
  35.         $carriersAttr = array();
  36.         foreach ($prices as $price) {
  37.             $carriersAttr[$price->getCarrier()->getId()] = array(
  38.                 'logo' => $price->getCarrier()->getLogo(),
  39.                 'tooltip' => $locale === 'fr' $price->getCarrier()->getTooltipContent() : $price->getCarrier()->getTooltipContentEN(),
  40.                 'price' => $price->getPriceIncludedTaxes(),
  41.             );
  42.         }
  43.         $builder->add('carrier'EntityType::class, array(
  44.             'class' => Carrier::class,
  45.             'label' => false,
  46.             'required' => true,
  47.             'choices' => $carriers,
  48.             'expanded' => true,
  49.             'attr' => $carriersAttr
  50.         ))->add('option'ChoiceType::class, array(
  51.             'label' => false,
  52.             'required' => false,
  53.             'mapped' => false,
  54.             'expanded' => true,
  55.             'multiple' => false,
  56.             'choices' => array(
  57.                 Shipment::OPTION_SIGNATURE,
  58.                 Shipment::OPTION_SIGNATURE_INSURANCE,
  59.             ),
  60.             'choice_label' => fn(mixed $choice) => Shipment::OPTIONS_LABELS[$choice]
  61.         ))->add('discountCode'TextType::class, [
  62.             'label' => 'app.common.fields.discount.code',
  63.             'label_translation_parameters' => [
  64.                 '%brandCode%' => strtoupper($this->brandService->getBrand()->getCode()),
  65.             ],
  66.             'required' => false,
  67.             'mapped' => false,
  68.         ])->add('discountCodeHidden'HiddenType::class, [
  69.             'required' => false,
  70.             'mapped' => false,
  71.         ]);
  72.         $formModifier = function (FormInterface $formCarrier $carrier null): void {
  73.             if ($carrier && $carrier->getIsServicePoint()) {
  74.                 $form->add(self::SERVICE_POINT_NAMEHiddenType::class, array(
  75.                     'label' => false,
  76.                     'required' => false,
  77.                     'constraints' => array(
  78.                         new NotBlank(message$this->translator->trans('app.deliveryNotes.ship.noPickupAddressSelected'))
  79.                     ),
  80.                     'mapped' => false,
  81.                     'error_bubbling' => false
  82.                 ));
  83.             }
  84.         };
  85.         $builder->get("carrier")->addEventListener(
  86.             FormEvents::POST_SUBMIT,
  87.             function (FormEvent $event) use ($formModifier): void {
  88.                 $carrier $event->getForm()->getData();
  89.                 $formModifier($event->getForm()->getParent(), $carrier);
  90.             }
  91.         );
  92.     }
  93.     /**
  94.      * @param OptionsResolver $resolver
  95.      */
  96.     public function configureOptions(OptionsResolver $resolver): void
  97.     {
  98.         $resolver->setDefaults(array(
  99.             'allow_extra_fields' => true,
  100.             'data_class' => Shipment::class,
  101.             'prices' => new ArrayCollection(),
  102.             'locale' => 'fr',
  103.         ));
  104.     }
  105. }