Exemplo n.º 1
0
 /**
  * @return static
  */
 public function withCartPriceRules()
 {
     foreach ($this->entity->getCartPriceRules() as $cartPriceRule) {
         $this->entityDTO->cartPriceRules[] = $this->dtoBuilderFactory->getCartPriceRuleDTOBuilder($cartPriceRule)->build();
     }
     return $this;
 }
Exemplo n.º 2
0
 public function testCreate()
 {
     $coupon = $this->dummyData->getCoupon();
     $cartPriceRule = $this->dummyData->getCartPriceRule();
     $taxRate = $this->dummyData->getTaxRate();
     $cartTotal = new CartTotal();
     $cartTotal->origSubtotal = 1;
     $cartTotal->subtotal = 2;
     $cartTotal->taxSubtotal = 3;
     $cartTotal->discount = 4;
     $cartTotal->shipping = 5;
     $cartTotal->shippingDiscount = 6;
     $cartTotal->tax = 7;
     $cartTotal->total = 8;
     $cartTotal->savings = 9;
     $cartTotal->coupons = [$coupon];
     $cartTotal->addCartPriceRule($cartPriceRule);
     $cartTotal->taxRate = $taxRate;
     $this->assertTrue($cartTotal instanceof CartTotal);
     $this->assertSame(1, $cartTotal->origSubtotal);
     $this->assertSame(2, $cartTotal->subtotal);
     $this->assertSame(3, $cartTotal->taxSubtotal);
     $this->assertSame(4, $cartTotal->discount);
     $this->assertSame(5, $cartTotal->shipping);
     $this->assertSame(6, $cartTotal->shippingDiscount);
     $this->assertSame(7, $cartTotal->tax);
     $this->assertSame(8, $cartTotal->total);
     $this->assertSame(9, $cartTotal->savings);
     $this->assertSame($taxRate, $cartTotal->taxRate);
     $this->assertSame($coupon, $cartTotal->coupons[0]);
     $this->assertSame($cartPriceRule, $cartTotal->getCartPriceRules()[0]);
 }
Exemplo n.º 3
0
 private function calculateCartPriceRules()
 {
     foreach ($this->pricing->getCartPriceRules() as $cartPriceRule) {
         if ($cartPriceRule->isValid($this->pricing->getDate(), $this->cart->getCartItems())) {
             $numberTimesToApply = $cartPriceRule->numberTimesToApply($this->cart->getCartItems());
             foreach ($cartPriceRule->getCartPriceRuleDiscounts() as $discount) {
                 $price = $this->pricing->getPrice($discount->getProduct(), $discount->getQuantity());
                 $discountValue = $price->quantityPrice;
                 $discountValue *= $numberTimesToApply;
                 $this->cartTotal->discount += $discountValue;
                 if ($cartPriceRule->getReducesTaxSubtotal() and $discount->getProduct()->isTaxable()) {
                     $this->cartTotal->taxSubtotal -= $discountValue;
                 }
                 $this->cartTotal->addCartPriceRule($cartPriceRule);
             }
         }
     }
     // No subtotal below zero!
     $this->cartTotal->subtotal = max(0, $this->cartTotal->subtotal);
 }
Exemplo n.º 4
0
 private function setDiscountNames()
 {
     $discountNames = [];
     foreach ($this->total->getCartPriceRules() as $cartPriceRule) {
         $this->cartPriceRules[] = $cartPriceRule;
         $discountNames[] = $cartPriceRule->getName();
     }
     foreach ($this->getCoupons() as $coupon) {
         $discountNames[] = $coupon->getName();
     }
     $this->discountNames = implode(', ', $discountNames);
 }
Exemplo n.º 5
0
 public function testGetTotalWithCartPriceRulesAndReducesTaxSubtotal()
 {
     $productShirt = new Product();
     $productShirt->setSku('TS-NAVY-LG');
     $productShirt->setName('Navy T-shirt (large)');
     $productShirt->setUnitPrice(1200);
     $productShirt->setIsTaxable(true);
     $productPoster = new Product();
     $productPoster->setSku('PST-CKN');
     $productPoster->setName('Citizen Kane (1941) Poster');
     $productPoster->setUnitPrice(500);
     $productPoster->setIsTaxable(true);
     $cartPriceRule = new CartPriceRule();
     $cartPriceRule->setName('Buy a Shirt get a FREE poster');
     $cartPriceRule->addItem(new CartPriceRuleProductItem($productShirt, 1));
     $cartPriceRule->addItem(new CartPriceRuleProductItem($productPoster, 1));
     $cartPriceRule->addDiscount(new CartPriceRuleDiscount($productPoster, 1));
     $cartPriceRule->setReducesTaxSubtotal(true);
     $pricing = new Pricing();
     $pricing->setCartPriceRules([$cartPriceRule]);
     $cartItem1 = new CartItem();
     $cartItem1->setProduct($productShirt);
     $cartItem1->setQuantity(1);
     $cartItem2 = new CartItem();
     $cartItem2->setProduct($productPoster);
     $cartItem2->setQuantity(1);
     $taxRate = new TaxRate();
     $taxRate->setZip5(92606);
     $taxRate->setRate(8.0);
     $taxRate->setApplyToShipping(false);
     $cart = new Cart();
     $cart->addCartItem($cartItem1);
     $cart->addCartItem($cartItem2);
     $cart->setTaxRate($taxRate);
     $expectedCartTotal = new CartTotal();
     $expectedCartTotal->origSubtotal = 1700;
     $expectedCartTotal->subtotal = 1700;
     $expectedCartTotal->taxSubtotal = 1200;
     $expectedCartTotal->shipping = 0;
     $expectedCartTotal->discount = 500;
     $expectedCartTotal->tax = 96;
     $expectedCartTotal->total = 1296;
     $expectedCartTotal->savings = 500;
     $expectedCartTotal->addCartPriceRule($cartPriceRule);
     $expectedCartTotal->taxRate = $taxRate;
     $cartCalculator = new CartCalculator($pricing);
     $this->assertEquals($expectedCartTotal, $cartCalculator->getTotal($cart));
 }