Exemplo n.º 1
0
	public function applyRule(ISC_QUOTE $quote)
	{
		$applies = false;
		$items = $quote->getItems();
		foreach($items as $item) {
			// Skip items that have a parent ID or don't match the product ID necessary
			if($item->getParentId() || $item->getProductId() != $this->prodids) {
				continue;
			}

			$quantity = $item->getQuantity();
			$freeItems = 0;

			while ($quantity >= $this->amount) {
				$quantity = $quantity - $this->amount;
				$freeItems += $this->amount_free;
			}

			foreach($items as $subItem) {
				// If the product already exists in the cart, then we can update it instead
				if($subItem->getParentId() != $item->getId()) {
						continue;
				}

				if($freeItems == 0) {
					$quote->removeItem($subItem->getId());
				}
				else {
					try {
						$subItem->setQuantity($freeItems);
					}
					catch(ISC_QUOTE_EXCEPTION $e) {
						$freeItems = 0;
						continue;
					}
					$this->banners[] = sprintf(getLang($this->getName().'DiscountMessage'), $freeItems, $subItem->getName());
					$freeItems = 0;
					$applies = true;
				}

			}

			if($freeItems > 0) {
				// Still need to add a free item to the cart
				try {
					$newItem = clone $item;
					$newItem
						->setBasePrice(0, true)
						->setQuantity($freeItems)
						->setParentId($item->getId())
						->removeGiftWrapping();
					$quote->addItem($newItem, false);

					$this->banners[] = sprintf(getLang($this->getName().'DiscountMessage'), $freeItems, $item->getName());
					$applies = true;
				}
				catch(ISC_QUOTE_EXCEPTION $e) {
					$applies = false;
					continue;
				}
			}
		}

		return $applies;
	}