/** * Callback for checkout Hook. Transfer active rules to usage table. */ public function writeRuleUsages($objOrder) { $objCart = Cart::findByPk($objOrder->source_collection_id); $objRules = Rule::findActiveWitoutCoupons(); $arrRules = null === $objRules ? array() : $objRules->fetchEach('id'); $arrCoupons = deserialize($objCart->coupons); if (is_array($arrCoupons) && !empty($arrCoupons)) { $blnError = false; foreach ($arrCoupons as $k => $code) { $objRule = Rule::findOneByCouponCode($code, $objCart->getItems()); if (null === $objRule) { Message::addError(sprintf($GLOBALS['TL_LANG']['ERR']['couponCodeDropped'], $code)); unset($arrCoupons[$k]); $blnError = true; } else { $arrRules[] = $objRule->id; } } if ($blnError) { $objCart->coupons = $arrCoupons; return false; } } if (!empty($arrRules)) { $time = time(); \Database::getInstance()->query("INSERT INTO tl_iso_rule_usage (pid,tstamp,order_id,config_id,member_id) VALUES (" . implode(", {$time}, {$objOrder->id}, " . (int) Isotope::getConfig()->id . ", {$objOrder->member}), (", $arrRules) . ", {$time}, {$objOrder->id}, " . (int) Isotope::getConfig()->id . ", {$objOrder->member})"); } return true; }
/** * @category ISO_HOOKS: preCheckout * * @param ProductCollection\Order $order * @param Checkout $checkout * * @return bool */ public function checkBeforeCheckout(ProductCollection\Order $order, Checkout $checkout) { foreach ($order->getItems() as $item) { /** @var Product|\Model $product */ $product = $item->getProduct(); $productType = $product->getRelated('type'); $stock = Stock::getStockForProduct($product->id); if ($productType->stockmanagement_active && false !== $stock && $item->quantity > $stock) { Message::addError($GLOBALS['TL_LANG']['MSC']['simpleStockmanagement']['productQuantityUnavailable']); if ($checkout->iso_cart_jumpTo > 0) { /** @type \PageModel $jumpTo */ $jumpTo = \PageModel::findPublishedById($checkout->iso_cart_jumpTo); if (null !== $jumpTo) { $jumpTo->loadDetails(); \Controller::redirect($jumpTo->getFrontendUrl(null, $jumpTo->language)); } } return false; } } return true; }