Exemplo n.º 1
0
 public function calculateDiscount(Coupon $coupon, Cart $cart)
 {
     $products = $coupon->getProducts();
     $config = $coupon->getConfig();
     $found = false;
     $eligibleItems = [];
     foreach ($cart as $item) {
         if (!$this->isApplicable($item, $products)) {
             continue;
         }
         if (array_key_exists($item->getProductId(), $products)) {
             $found = true;
             $hash = $this->getHash($item);
             $eligibleItems[$hash] = 0;
         }
     }
     if ($found) {
         foreach ($cart as &$item) {
             $hash2 = $this->getHash($item);
             if (array_key_exists($hash2, $eligibleItems)) {
                 $eligibleItems[$hash2]++;
                 if ($eligibleItems[$hash2] % 2 == 0) {
                     $item->setDiscount($item->getTerm()->getTotalPrice());
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
 public function calculateDiscount(Coupon $coupon, Cart $cart)
 {
     $products = $coupon->getProducts();
     $config = $coupon->getConfig();
     $percent = $config['percent'];
     foreach ($cart as &$item) {
         if (!$this->isApplicable($item, $products)) {
             continue;
         }
         if (empty($products) || array_key_exists($item->getProductId(), $products)) {
             $discount = $item->getPrice() - $item->getPrice() * (1 - $percent / 100);
             $item->setDiscount($discount);
         }
     }
 }
Exemplo n.º 3
0
 public function calculateDiscount(Coupon $coupon, Cart $cart)
 {
     $products = $coupon->getProducts();
     $config = $coupon->getConfig();
     $price = $config['price'];
     foreach ($cart as &$item) {
         if (!$this->isApplicable($item, $products)) {
             continue;
         }
         $period = $item->getTerm()->getPeriod();
         $priceForPeriod = $price * $period;
         if ($priceForPeriod < $item->getPrice()) {
             $item->setDiscount($item->getPrice() - $priceForPeriod);
         }
     }
 }
Exemplo n.º 4
0
 public function calculateDiscount(Coupon $coupon, Cart $cart)
 {
     $products = $coupon->getProducts();
     $config = $coupon->getConfig();
     $addons = $config['addon'];
     $found = false;
     foreach ($cart as $item) {
         if (!$this->isApplicable($item, $products)) {
             continue;
         }
         if ($found == false && array_key_exists($item->getProductId(), $products)) {
             $found = true;
             break;
         }
     }
     if ($found) {
         foreach ($cart as &$item) {
             if (array_key_exists($item->getProductId(), $addons) && (empty($addons[$item->getProductId()]) || in_array($item->getTerm()->getPeriod(), $addons[$item->getProductId()]))) {
                 $item->setDiscount($item->getPrice());
                 unset($addons[$item->getProductId()]);
             }
         }
     }
 }
Exemplo n.º 5
0
 public function calculateDiscount(Coupon $coupon, Cart $cart)
 {
     $products = $coupon->getProducts();
     $config = $coupon->getConfig();
     $addon = $config['addon'];
     $found = false;
     foreach ($cart as $item) {
         if (!$this->isApplicable($item, $products)) {
             continue;
         }
         if ($found == false && array_key_exists($item->getProductId(), $products)) {
             $found = $item->getId();
             break;
         }
     }
     if ($found) {
         foreach ($cart as &$item) {
             if ($item->getId() != $found && in_array($item->getProductId(), $addon)) {
                 $item->setDiscount($item->getPrice() / 2);
                 break;
             }
         }
     }
 }