Пример #1
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();
        }
    }
Пример #2
0
 /**
  * Send invest confirmation
  *
  * @param Invoice $invoice
  * @param float   $amount
  */
 public function sendPurchaseConfirmationMessage(Invoice $invoice, $amount)
 {
     $templateName = 'EcommerceBundle:Email:sale.confirmation.html.twig';
     $toEmail = $invoice->getTransaction()->getActor()->getEmail();
     $orderUrl = $this->router->generate('core_actor_showinvoice', array('number' => $invoice->getInvoiceNumber()), UrlGeneratorInterface::ABSOLUTE_URL);
     $context = array('order_number' => $invoice->getTransaction()->getTransactionKey(), 'amount' => $amount, 'payment_type' => $invoice->getTransaction()->getPaymentMethod()->getName(), 'order_url' => $orderUrl);
     $this->sendMessage($templateName, $context, $this->parameters['company']['sales_email'], $toEmail);
     //send email to optic to confirm purchase
     //check empty bank number account
     $templateName = 'EcommerceBundle:Email:sale.confirmation.actor.html.twig';
     $productItems = $invoice->getTransaction()->getItems();
     $actor = $productItems->first()->getProduct()->getActor();
     if ($actor instanceof Actor) {
         $toEmail = $actor->getEmail();
         $token = null;
         if ($actor->getBankAccountNumber() == '') {
             $token = sha1(uniqid());
             $date = new \DateTime();
             $actor->setBankAccountToken($token);
             $actor->setBankAccountTime($date->getTimestamp());
             $this->manager->persist($actor);
             $this->manager->flush();
         }
         $context = array('order_number' => $invoice->getTransaction()->getTransactionKey(), 'products' => $productItems, 'token' => $token, 'actor' => $actor);
         $this->sendMessage($templateName, $context, $this->parameters['company']['sales_email'], $toEmail);
     }
 }
Пример #3
0
 /**
  * Create invoice from order
  *
  * @param Delivery $delivery
  *
  * @return Invoice
  */
 public function createInvoice($delivery = null, $transaction = null)
 {
     /** @var Transaction $transaction */
     if (is_null($transaction)) {
         $transaction = $this->getCurrentTransaction();
     }
     $invoiceNumber = $this->manager->getRepository('EcommerceBundle:Invoice')->getNextNumber();
     $invoice = new Invoice();
     $invoice->setInvoiceNumber($invoiceNumber);
     //Actor invoices  = ONE SHOT
     if ($transaction->getItems()->first()->getAdvert() instanceof Advert || $transaction->getItems()->first()->getProduct() instanceof Product) {
         $invoice->setFullName($this->securityContext->getToken()->getUser()->getFullName());
         if (!is_null($delivery)) {
             $invoice->setDni($delivery->getDni());
             $invoice->setAddressInfo($delivery->getAddressInfo());
         } else {
             $invoice->setAddressInfo($this->getBillingAddress($transaction->getActor()));
         }
         $invoice->setTransaction($transaction);
         $this->manager->persist($invoice);
         $this->manager->flush();
         $totals = $this->calculateTotals($transaction, $delivery);
         if ($transaction->getItems()->first()->getProduct() instanceof Product) {
             $this->mailer->sendPurchaseNotification($invoice);
             $this->mailer->sendPurchaseConfirmationMessage($invoice, $totals['amount']);
         } elseif ($transaction->getItems()->first()->getAdvert() instanceof Advert) {
             $this->mailer->sendAdvertPurchaseNotification($invoice);
             $this->mailer->sendAdvertPurchaseConfirmationMessage($invoice, $totals['amount']);
         }
     } elseif ($transaction->getItems()->first()->getPlan() instanceof Plan) {
         $name = $transaction->getActor()->getName();
         $invoice->setFullName($name);
         $invoice->setAddress($transaction->getActor()->getAddress());
         $invoice->setPostalCode($transaction->getActor()->getPostalCode());
         $invoice->setCity($transaction->getActor()->getCity());
         if (!is_null($transaction->getActor()->getState())) {
             $invoice->setState($transaction->getActor()->getState());
         }
         $invoice->setCountry($transaction->getActor()->getCountry());
         $invoice->setTransaction($transaction);
         $this->manager->persist($invoice);
         $this->manager->flush();
         $totals = $this->calculateTotals($transaction, $delivery);
         $this->mailer->sendPlanPurchaseNotification($invoice);
         $this->mailer->sendPlanPurchaseConfirmationMessage($invoice, $totals['amount']);
     }
     return $invoice;
 }