Ejemplo n.º 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'));
 }
Ejemplo n.º 2
0
    public function createFixtures()
    {
        if ($this->container->getParameter('ecommerce.fixture_data')) {
            //Create Families
            $family = new Family();
            $family->setName('Family test');
            $family->setDescription('Description family test');
            $family->setMetaTitle('Meta titlte family test 1');
            $family->setMetaDescription('Meta description family test 1');
            //Create Categories
            $category = new Category();
            $category->setFamily($family);
            $category->setName('Category test');
            $category->setDescription('Description category test');
            $category->setMetaTitle('Meta titlte category test 1');
            $category->setMetaDescription('Meta description category test 1');
            $category2 = new Category();
            $category2->setFamily($family);
            $category2->setName('Category test 2');
            $category2->setDescription('Description category test 2');
            $category2->setMetaTitle('Meta titlte category test 2');
            $category2->setMetaDescription('Meta description category test 2');
            //Create Attributes
            $attr = new Attribute();
            $attr->setCategory($category2);
            $attr->setName('Attribute value');
            $attrValue = new AttributeValue();
            $attrValue->setAttribute($attr);
            $attrValue->setName('Yes');
            $attrValue2 = new AttributeValue();
            $attrValue2->setAttribute($attr);
            $attrValue2->setName('No');
            //Creates Features
            $feature = new Feature();
            $feature->setCategory($category2);
            $feature->setName('Feature value');
            $featureValue = new FeatureValue();
            $featureValue->setFeature($feature);
            $featureValue->setName('Yes');
            $featureValue2 = new FeatureValue();
            $featureValue2->setFeature($feature);
            $featureValue2->setName('No');
            //Create Brands
            $brand = new Brand();
            $brand->setName('Brand test');
            $brand->setAvailable(true);
            $brand2 = new Brand();
            $brand2->setName('Brand test 2');
            $brand2->setAvailable(true);
            $brand3 = new Brand();
            $brand3->setName('Brand test 3');
            $brand3->setAvailable(false);
            //Create Brands
            $brandModel = new BrandModel();
            $brandModel->setName('Model test');
            $brandModel->setAvailable(true);
            $brandModel->setBrand($brand);
            $brandModel2 = new BrandModel();
            $brandModel2->setName('Model test 2');
            $brandModel2->setAvailable(true);
            $brandModel->setBrand($brand2);
            //Create Products
            $product = new Product();
            $product->setName('Product test 1');
            $product->setInitPrice(1.84);
            $product->setPrice(0.84);
            $product->setPriceType(Product::PRICE_TYPE_FIXED);
            $product->setDiscount(1);
            $product->setDiscountType(Product::PRICE_TYPE_FIXED);
            $product->setBrand($brand);
            $product->setModel($brandModel);
            $product->setCategory($category);
            $product->setActive(true);
            $product->setAvailable(true);
            $product->setHighlighted(true);
            $product->setDescription('Description product test 1 for testing.');
            $product->setReference(uniqid());
            $product->setMetaTitle('Meta titlte test 1');
            $product->setMetaDescription('Meta description test 1');
            $product->setStock(7);
            $product->addAttributeValue($attrValue2);
            $product->addFeatureValue($featureValue);
            $product->setStorePickup(false);
            $product->setFreeTransport(true);
            $product->setTechnicalDetails('Technical details test.');
            $product2 = new Product();
            $product2->setName('Product test 2');
            $product2->setPrice(1.14);
            $product2->setPriceType(Product::PRICE_TYPE_FIXED);
            $product2->setDiscount(0);
            $product2->setDiscountType(Product::PRICE_TYPE_FIXED);
            $product2->setBrand($brand2);
            $product2->setModel($brandModel2);
            $product2->setCategory($category2);
            $product2->setActive(true);
            $product2->setAvailable(true);
            $product2->setHighlighted(true);
            $product2->setDescription('Description product test 2 for testing.');
            $product2->setReference(uniqid());
            $product2->setMetaTitle('Meta titlte test 2');
            $product2->setMetaDescription('Meta description test 2');
            $product2->setStock(12);
            $product2->addAttributeValue($attrValue);
            $product2->addFeatureValue($featureValue2);
            $product2->addRelatedProduct($product);
            $product2->setStorePickup(false);
            $product2->setFreeTransport(true);
            $product2->setTechnicalDetails('Technical details test 2.');
            $product3 = new Product();
            $product3->setName('Product test 3');
            $product3->setInitPrice(10.14);
            $product3->setPrice(7.98);
            $product3->setPriceType(Product::PRICE_TYPE_FIXED);
            $product3->setDiscount(10);
            $product3->setDiscountType(Product::PRICE_TYPE_PERCENT);
            $product3->setBrand($brand);
            $product3->setModel($brandModel);
            $product3->setCategory($category);
            $product3->setActive(true);
            $product3->setAvailable(true);
            $product3->setHighlighted(true);
            $product3->setDescription('Description product test 3 for testing.');
            $product3->setReference(uniqid());
            $product3->setMetaTitle('Meta titlte test 3');
            $product3->setMetaDescription('Meta description test 3');
            $product3->setStock(12);
            $product3->addAttributeValue($attrValue);
            $product3->addFeatureValue($featureValue);
            $product3->addRelatedProduct($product);
            $product3->addRelatedProduct($product2);
            $product3->setStorePickup(true);
            $product3->setFreeTransport(false);
            $product3->setTechnicalDetails('Technical details test 3.');
            //Create a sale (create all entities needed)
            $actor = $this->getManager()->getRepository('CoreBundle:Actor')->findOneByUsername('user');
            $actor2 = $this->getManager()->getRepository('CoreBundle:Actor')->findOneByUsername('user2');
            $country = $this->getManager()->getRepository('CoreBundle:Country')->find('es');
            $state = $this->getManager()->getRepository('CoreBundle:State')->findOneByName('Barcelona');
            //payment methods
            $pm = new PaymentMethod();
            $pm->setName('Bank Transfer');
            $psp = new PaymentServiceProvider();
            $psp->setActive(true);
            $psp->setIsTestingAccount(false);
            $psp->setRecurring(false);
            $psp->setPaymentMethod($pm);
            $psp->setFormClass('EcommerceBundle\\Form\\BankTransferType');
            $psp->setModelClass('EcommerceBundle\\Factory\\Providers\\BankTransferProvider');
            $psp->setAppendTwigToForm('<div class="col-sm-10 detail-transfer">
                {{ "checkout.transfer" | trans({"%bank_name%": core["company"]["name"], "%bank_account%": get_parameter("ecommerce.bank_account") }) | nl2br }}
                <br />
            </div>
            <div class="col-sm-12 priceAndCheck">
                <div class="price">
                    <span>{{ "checkout.amount" | trans }}:</span>
                    <strong style="margin-right: 15px;">{{ totals.amount | price }}</strong>
                    <button >{{ "checkout.confirm" | trans }}</button>
                </div>
                <a href="{{ path(\'ecommerce_checkout_deliveryinfo\') }}" class="btn btn-primary" title="{{ "back" | trans }}">{{ "back" | trans }}</a>
            </div>');
            $pm1 = new PaymentMethod();
            $pm1->setName('Bank Transfer test');
            $psp1 = new PaymentServiceProvider();
            $psp1->setActive(true);
            $psp1->setIsTestingAccount(true);
            $psp1->setRecurring(false);
            $psp1->setPaymentMethod($pm1);
            $psp1->setFormClass('EcommerceBundle\\Form\\BankTransferType');
            $psp1->setModelClass('EcommerceBundle\\Factory\\Providers\\BankTransferProvider');
            $psp1->setAppendTwigToForm('<div class="col-sm-10 detail-transfer">
                {{ "checkout.transfer" | trans({"%bank_name%": core["company"]["name"], "%bank_account%": get_parameter("ecommerce.bank_account") }) | nl2br }}
                <br />
            </div>
            <div class="col-sm-12 priceAndCheck">
                <div class="price">
                    <span>{{ "checkout.amount" | trans }}:</span>
                    <strong style="margin-right: 15px;">{{ totals.amount | price }}</strong>
                    <button >{{ "checkout.confirm" | trans }}</button>
                </div>
                <a href="{{ path(\'ecommerce_checkout_deliveryinfo\') }}" class="btn btn-primary" title="{{ "back" | trans }}">{{ "back" | trans }}</a>
            </div>');
            $pm2 = new PaymentMethod();
            $pm2->setName('Store Pickup');
            $psp2 = new PaymentServiceProvider();
            $psp2->setActive(false);
            $psp2->setIsTestingAccount(false);
            $psp2->setRecurring(false);
            $psp2->setPaymentMethod($pm2);
            $pm3 = new PaymentMethod();
            $pm3->setName('Paypal');
            $psp3 = new PaymentServiceProvider();
            $psp3->setActive(true);
            $psp3->setIsTestingAccount(true);
            $psp3->setRecurring(false);
            $psp3->setPaymentMethod($pm3);
            $psp3->setApiCredentialParameters(array('host' => 'https://api.sandbox.paypal.com', 'client_id' => 'AafbeOnqAQTpS4bgP85kvrewollR8XsxAYmHlHI7ZzqEXqfjHMrMCaCjZjweT5y4DemLMSlfPro-P3Nz', 'secret' => 'EJIuyFXnqYwW5HtPmPl7TsWsoCgT0-RtPnAa8TodOUGjOg9yp6E0nZOHIM5bOVP_Q1jSnTencHlxGUQ7', 'return_url' => 'http://sasturain.dev/response-ok?paypal=true', 'cancel_url' => 'http://sasturain.dev/cancel-payment'));
            $psp3->setFormClass('EcommerceBundle\\Form\\PayPalType');
            $psp3->setModelClass('EcommerceBundle\\Factory\\Providers\\PayPalDirectPaymentProvider');
            $psp3->setAppendTwigToForm('<div class="col-sm-12 priceAndCheck">
                <div class="price">
                    <span>{{ "checkout.amount" | trans }}:</span>
                    <strong style="margin-right: 15px;">{{ totals.amount | price }}</strong>
                    <button >{{ "checkout.confirm" | trans }}</button>
                </div>
                <a href="{{ path(\'ecommerce_checkout_deliveryinfo\') }}" class="btn btn-primary" title="{{ "back" | trans }}">{{ "back" | trans }}</a>
            </div>');
            $pm4 = new PaymentMethod();
            $pm4->setName('Paypal Direct Payment');
            $psp4 = new PaymentServiceProvider();
            $psp4->setActive(true);
            $psp4->setIsTestingAccount(true);
            $psp4->setRecurring(true);
            $psp4->setPaymentMethod($pm4);
            $psp4->setApiCredentialParameters(array('host' => 'https://api.sandbox.paypal.com', 'client_id' => 'AafbeOnqAQTpS4bgP85kvrewollR8XsxAYmHlHI7ZzqEXqfjHMrMCaCjZjweT5y4DemLMSlfPro-P3Nz', 'secret' => 'EJIuyFXnqYwW5HtPmPl7TsWsoCgT0-RtPnAa8TodOUGjOg9yp6E0nZOHIM5bOVP_Q1jSnTencHlxGUQ7', 'return_url' => 'http://sasturain.dev/response-ok?paypal=true', 'cancel_url' => 'http://sasturain.dev/cancel-payment'));
            $psp4->setFormClass('EcommerceBundle\\Form\\PayPalDirectPaymentType');
            $psp4->setModelClass('EcommerceBundle\\Factory\\Providers\\PayPalDirectPaymentProvider');
            $psp4->setAppendTwigToForm('<div class="col-sm-12 priceAndCheck">
                <div class="price">
                   <span>{{ "checkout.amount" | trans }}:</span>
                   <strong>{{ totals.amount | price }}</strong>
                   <button >{{ "checkout.pay" | trans }}</button>
                </div>
                <a href="{{ path(\'ecommerce_checkout_deliveryinfo\') }}" class="btn btn-primary" title="{{ "back" | trans }}">{{ "back" | trans }}</a>
            </div>');
            $pm6 = new PaymentMethod();
            $pm6->setName('Braintree');
            $psp6 = new PaymentServiceProvider();
            $psp6->setActive(true);
            $psp6->setIsTestingAccount(true);
            $psp6->setRecurring(true);
            $psp6->setPaymentMethod($pm6);
            $psp6->setApiCredentialParameters(array('environment' => 'sandbox', 'merchant_id' => '3j49t8qb3h4nv9hk', 'public_key' => 'tygwjhymnm5bm55s', 'private_key' => 'a791f33b9d41ab9c57c857da1c526fa1'));
            $psp6->setFormClass('EcommerceBundle\\Form\\BraintreeType');
            $psp6->setModelClass('EcommerceBundle\\Factory\\Providers\\BraintreeProvider');
            $psp6->setAppendTwigToForm('<section>
                <div class="bt-drop-in-wrapper">
                    <div id="bt-dropin"></div>
                </div>

                <label for="amount">
                    <span class="input-label">Amount</span>
                    <div class="input-wrapper amount-wrapper">
                        <input id="amount" name="braintree[amount]" type="tel" min="1" placeholder="Amount" value="10">
                    </div>
                </label>
            </section>
            <button class="btn btn-primary" type="submit"><span>Test Transaction</span></button>');
            $transaction = new Transaction();
            $transaction->setTransactionKey(uniqid());
            $transaction->setStatus(Transaction::STATUS_PENDING);
            $transaction->setTotalPrice(2.12);
            $transaction->setVat($this->container->getParameter('ecommerce.vat'));
            $transaction->setPaymentMethod($pm);
            $transaction->setActor($actor);
            $transaction->setCreated(new \DateTime('now'));
            $productPurchase = new ProductPurchase();
            $productPurchase->setProduct($product);
            $productPurchase->setQuantity(1);
            $productPurchase->setBasePrice(2.12);
            $productPurchase->setTotalPrice(2.12);
            $productPurchase->setTransaction($transaction);
            $productPurchase->setCreated(new \DateTime('now'));
            $productPurchase->setReturned(false);
            $address = new Address();
            $address->setAddress('Test address 113');
            $address->setPostalCode('08349');
            $address->setCity('Cabrera de Mar');
            $address->setState($state);
            $address->setCountry($country);
            $address->setPhone('123123123');
            $address->setPreferredSchedule(1);
            $address->setContactPerson('Testo Ramon');
            $address->setForBilling(true);
            $address->setDni('33956669K');
            $address->setActor($actor);
            $address2 = new Address();
            $address2->setAddress('Test address 112');
            $address2->setPostalCode('08349');
            $address2->setCity('Cabrera de Mar');
            $address2->setState($state);
            $address2->setCountry($country);
            $address2->setPhone('123123121');
            $address2->setPreferredSchedule(1);
            $address2->setContactPerson('Test User');
            $address2->setForBilling(true);
            $address2->setDni('30110048N');
            $address2->setActor($actor2);
            $invoice = new Invoice();
            $invoice->setInvoiceNumber(rand(1600, 2000));
            $invoice->setTransaction($transaction);
            $invoice->setFullName('full name test invoice');
            $invoice->setCreated(new \DateTime('now'));
            $invoice->setDni('33956669K');
            $invoice->setAddressInfo($address);
            $delivery = new Delivery();
            $delivery->setFullName('Tes full name');
            $delivery->setPhone('123123123');
            $delivery->setPreferredSchedule(1);
            $delivery->setExpenses(5.5);
            $delivery->setExpensesType('by_percentage');
            $delivery->setTransaction($transaction);
            $delivery->setDni('33956669K');
            $delivery->setAddressInfo($address);
            $delivery->setDeliveryPhone('123123123');
            $delivery->setDeliveryPreferredSchedule(1);
            $delivery->setDeliveryDni('33956669K');
            $delivery->setDeliveryAddress('Address test 113');
            $delivery->setDeliveryPostalCode('08349');
            $delivery->setDeliveryCity('Cabrera de Mar');
            $delivery->setDeliveryState($state);
            $delivery->setDeliveryCountry($country);
            $this->getManager()->persist($family);
            $this->getManager()->persist($category);
            $this->getManager()->persist($category2);
            $this->getManager()->persist($attr);
            $this->getManager()->persist($attrValue);
            $this->getManager()->persist($attrValue2);
            $this->getManager()->persist($feature);
            $this->getManager()->persist($featureValue);
            $this->getManager()->persist($featureValue2);
            $this->getManager()->persist($brand);
            $this->getManager()->persist($brand2);
            $this->getManager()->persist($brand3);
            $this->getManager()->persist($brandModel);
            $this->getManager()->persist($brandModel2);
            $this->getManager()->persist($product);
            $this->getManager()->persist($product2);
            $this->getManager()->persist($product3);
            $this->getManager()->persist($pm);
            $this->getManager()->persist($psp);
            $this->getManager()->persist($pm1);
            $this->getManager()->persist($psp1);
            $this->getManager()->persist($pm2);
            $this->getManager()->persist($psp2);
            $this->getManager()->persist($pm3);
            $this->getManager()->persist($psp3);
            $this->getManager()->persist($pm4);
            $this->getManager()->persist($psp4);
            $this->getManager()->persist($pm6);
            $this->getManager()->persist($psp6);
            $this->getManager()->persist($transaction);
            $this->getManager()->persist($productPurchase);
            $this->getManager()->persist($address);
            $this->getManager()->persist($address2);
            $this->getManager()->persist($invoice);
            $this->getManager()->persist($delivery);
            $this->getManager()->flush();
        }
    }
Ejemplo n.º 3
0
 /**
  * Save user billing address
  *
  * @param Delivery $delivery
  */
 private function saveUserBillingAddress($delivery)
 {
     // get billing address
     /** @var Address $billingAddress */
     $billingAddress = $this->manager->getRepository('EcommerceBundle:Address')->findOneBy(array('actor' => $this->securityContext->getToken()->getUser(), 'forBilling' => true));
     // build new billing address when it does not exist
     if (is_null($billingAddress)) {
         $billingAddress = new Address();
         $billingAddress->setForBilling(true);
         $billingAddress->setActor($this->securityContext->getToken()->getUser());
     }
     $billingAddress->setContactPerson($delivery->getContactPerson());
     $billingAddress->setDni($delivery->getDni());
     $billingAddress->setAddressInfo($delivery->getAddressInfo());
     $billingAddress->setPhone($delivery->getPhone());
     $billingAddress->setPhone2($delivery->getPhone2());
     $billingAddress->setPreferredSchedule($delivery->getPreferredSchedule());
     $country = $this->manager->getRepository('CoreBundle:Country')->find('es');
     $billingAddress->setCountry($country);
     $this->manager->persist($billingAddress);
     $this->manager->flush();
 }