src/Form/Type/Quote/QuoteRequestType.php line 77

  1. <?php
  2. namespace App\Form\Type\Quote;
  3.  
  4. use App\Entity\Quote\QuoteRequest;
  5. use App\Entity\Taxonomy\Taxon;
  6. use App\Form\EventSubscriber\Quote\CustomerSubscriber;
  7. use App\Repository\Addressing\CountryRepository;
  8. use App\Repository\Product\ProductMesurementUnitRepository;
  9. use Doctrine\DBAL\Types\IntegerType;
  10. use Doctrine\ORM\EntityRepository;
  11. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  12. use Symfony\Component\Form\AbstractType;
  13. use Symfony\Component\Form\FormBuilderInterface;
  14. use Symfony\Component\OptionsResolver\OptionsResolver;
  15. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  18. use Symfony\Component\Form\Extension\Core\Type\CountryType;
  19. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  20. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  21. use Symfony\Component\Form\Extension\Core\Type\TelType;
  22. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  23. use Symfony\Component\Form\FormEvent;
  24. use Symfony\Component\Form\FormEvents;
  25. use Symfony\Component\HttpFoundation\RequestStack;
  26. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  27. use Symfony\Contracts\Translation\TranslatorInterface;
  28. class QuoteRequestType extends AbstractType
  29. {
  30.     private $unitRepository;
  31.     private $translator;
  32.     private $tokenStorage;
  33.     private $request;
  34.     public function __construct(RequestStack $requestProductMesurementUnitRepository $unitRepositoryTranslatorInterface $translatorTokenStorageInterface $tokenStorageInterface)
  35.     {
  36.         $this->unitRepository $unitRepository;
  37.         $this->translator $translator;
  38.         $this->tokenStorage $tokenStorageInterface;
  39.         $this->request $request->getCurrentRequest();
  40.     }
  41.     public function buildForm(FormBuilderInterface $builder, array $options)
  42.     {
  43.         $builder
  44.             ->add('sample',null,['required' => false'label'=>'app.ui.sample_needed'])
  45.             ->add('note'TextareaType::class, ['required' => false'attr' => ['rows' => 6]])
  46.             ->add('quantity'NumberType::class, ['required' => true'label' => 'app.ui.quantity'])
  47.             ->add('country'CountryType::class, ['label' => 'app.ui.country''placeholder' => 'app.ui.country']) 
  48.             ->add('company'TextType::class, ['required' => true'label' => 'app.ui.company'])
  49.             ->add('companyWebsite'TextType::class, ['required' => false'label' => 'app.ui.company_website'])
  50.             ->add('companyAddress'TextType::class, ['required' => true'label' => 'app.ui.company_address'])
  51.             
  52.             ;
  53.         $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
  54.             $product $event->getData();
  55.             $form $event->getForm();
  56.             if ($this->request->query->get('sample') == null) {
  57.                 $form->add('quantity'NumberType::class, ['required' => true'label' => 'app.ui.quantity']);
  58.             }
  59.             if ($this->request->query->get('product') == null) {
  60.                 $form->add('taxon'EntityType::class, [
  61.                     'label' => 'Style',
  62.                     'class' => Taxon::class,
  63.                     'multiple' => false,
  64.                     'expanded' => true,
  65.                     'required' => true,
  66.                     'query_builder' => function (EntityRepository $er) {
  67.                         return $er->createQueryBuilder('a')
  68.                             ->innerJoin('a.parent''b')
  69.                             ->andWhere('b.code = :code')
  70.                             ->setParameter('code''category');
  71.                     },
  72.                     'choice_label' => function (Taxon $entity) {
  73.                         return sprintf('%s'$entity->getName());
  74.                     }
  75.                 ])
  76.                     ->add('files'CollectionType::class, array(
  77.                         'entry_type'   => QuoteRequestFileType::class,
  78.                         'allow_add'    => false,
  79.                         'allow_delete' => false
  80.                     ))
  81.                     // ->add('attributes', CollectionType::class, array(
  82.                     //     'entry_type'   => RequestForQuoteAttributeItemType::class,
  83.                     //     'allow_add'    => false,
  84.                     //     'allow_delete' => false
  85.                     // ))
  86.                     ->add('options'CollectionType::class, array(
  87.                         'entry_type'   => QuoteRequestOptionType::class,
  88.                         'allow_add'    => false,
  89.                         'allow_delete' => false
  90.                     ))
  91.                     ->add('dimensions'TextType::class, ['required' => true'label' => 'app.ui.dimensions']);
  92.             }
  93.             if (!$this->tokenStorage->getToken()) {
  94.                 $form
  95.                     ->add('email'EmailType::class, ['required' => true'label' => 'app.ui.email'])
  96.                     ->add('firstname'TextType::class, ['required' => true'label' => 'app.ui.firstname'])
  97.                     ->add('lastname'TextType::class, ['required' => true'label' => 'app.ui.lastname'])
  98.                     ->add('phoneNumber'TelType::class, ['required' => false'label' => 'app.ui.phone_number'])
  99.   
  100.                     
  101.                     ;
  102.             }else{
  103.                
  104.             }
  105.             
  106.         });
  107.     }
  108.     public function configureOptions(OptionsResolver $resolver)
  109.     {
  110.         $resolver->setDefaults([
  111.             'data_class' => QuoteRequest::class,
  112.         ]);
  113.     }
  114. }