예제 #1
0
 /**
  * {@inheritDoc}
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     /** @var User $user */
     $user = $this->securityContext->getToken()->getUser();
     if (!$user) {
         throw new \LogicException('The DeliveryType cannot be used without an authenticated user!');
     }
     $numDeliveryAddresses = $this->em->getRepository('EcommerceBundle:Address')->countTotal($user->getId(), false);
     // initialize delivery addresses options
     $selectDelivery['same'] = 'account.address.select.same';
     if ($numDeliveryAddresses > 0) {
         $selectDelivery['existing'] = 'account.address.select.existing';
     }
     $selectDelivery['new'] = 'account.address.select.new';
     $builder->add('fullName', null, array('required' => false))->add('dni', null, array('required' => false))->add('address', null, array('required' => false))->add('city', TextType::class, array('required' => false))->add('state', EntityType::class, array('class' => 'CoreBundle:State', 'query_builder' => function (EntityRepository $er) {
         return $er->createQueryBuilder('c');
     }, 'required' => false, 'placeholder' => 'Selecciona tu provincia', 'empty_data' => null))->add('postalCode', null, array('required' => false))->add('phone', null, array('required' => false))->add('phone2', null, array('required' => false))->add('preferredSchedule', ChoiceType::class, array('choices' => Delivery::getSchedules(), 'required' => false, 'choices_as_values' => true))->add('deliveryDni', TextType::class, array('required' => false))->add('deliveryAddress', TextType::class, array('required' => false))->add('deliveryCity', TextType::class, array('required' => false))->add('deliveryState', EntityType::class, array('class' => 'CoreBundle:State', 'query_builder' => function (EntityRepository $er) {
         return $er->createQueryBuilder('c');
     }, 'required' => false, 'placeholder' => 'Selecciona tu provincia', 'empty_data' => null))->add('deliveryPostalCode', TextType::class, array('required' => false))->add('deliveryPhone', TextType::class, array('required' => false))->add('deliveryPhone2', TextType::class, array('required' => false))->add('deliveryPreferredSchedule', ChoiceType::class, array('choices' => Delivery::getSchedules(), 'required' => false))->add('notes', TextareaType::class, array('required' => false));
     $factory = $builder->getFormFactory();
     $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($user, $numDeliveryAddresses, $factory) {
         $form = $event->getForm();
         // delivery addresses
         if ($numDeliveryAddresses > 0) {
             $existingDeliveryAddress = null;
             //                if ($this->session->has('select-delivery') && 'existing' === $this->session->get('select-delivery')) {
             //                    $existingDeliveryAddress = $this->session->get('existing-delivery-address');
             //                }
             $deliveryAddressData = !is_null($existingDeliveryAddress) ? $this->em->getReference('EcommerceBundle:Address', $existingDeliveryAddress) : null;
             $formOptions = array('class' => 'EcommerceBundle\\Entity\\Address', 'multiple' => false, 'expanded' => false, 'mapped' => false, 'required' => false, 'auto_initialize' => false, 'data' => $deliveryAddressData, 'query_builder' => function (EntityRepository $er) use($user) {
                 return $er->createQueryBuilder('a')->where('a.actor = :user')->andWhere('a.forBilling = false')->setParameter('user', $user);
             });
             $form->add($factory->createNamed('existingDeliveryAddress', 'entity', null, $formOptions));
         }
     });
     $builder->add('selectDelivery', ChoiceType::class, array('choices' => $selectDelivery, 'multiple' => false, 'expanded' => true, 'required' => true, 'label' => false, 'mapped' => false, 'data' => $this->session->has('select-delivery') ? $this->session->get('select-delivery') : 'same'));
 }