public function updateRuleProductData(Mage_SalesRule_Model_Rule $rule) { // foreach ($rule->getActions()->getActions() as $action) { // break; // } $ruleId = $rule->getId(); $read = $this->_getReadAdapter(); $write = $this->_getWriteAdapter(); $write->delete($this->getTable('salesrule/rule_product'), $write->quoteInto('rule_id=?', $ruleId)); if (!$rule->getIsActive()) { return $this; } if ($rule->getUsesPerCoupon() > 0) { $usedPerCoupon = $read->fetchOne('select count(*) from ' . $this->getTable('salesrule/rule_customer') . ' where rule_id=?', $ruleId); if ($usedPerCoupon >= $rule->getUsesPerCoupon()) { return $this; } } $productIds = explode(',', $rule->getProductIds()); $websiteIds = explode(',', $rule->getWebsiteIds()); $customerGroupIds = explode(',', $rule->getCustomerGroupIds()); $fromTime = strtotime($rule->getFromDate()); $toTime = strtotime($rule->getToDate()); if ($toTime) { $toTime += 86400; } $couponCode = $rule->getCouponCode() ? "'" . $rule->getCouponCode() . "'" : 'NULL'; $sortOrder = (int) $rule->getSortOrder(); $rows = array(); $header = 'replace into ' . $this->getTable('salesrule/rule_product') . ' (rule_id, from_time, to_time, website_id, customer_group_id, product_id, coupon_code, sort_order) values '; try { $write->beginTransaction(); foreach ($productIds as $productId) { foreach ($websiteIds as $websiteId) { foreach ($customerGroupIds as $customerGroupId) { $rows[] = "('{$ruleId}', '{$fromTime}', '{$toTime}', '{$websiteId}', '{$customerGroupId}', '{$productId}', {$couponCode}, '{$sortOrder}')"; if (sizeof($rows) == 100) { $sql = $header . join(',', $rows); $write->query($sql); $rows = array(); } } } } if (!empty($rows)) { $sql = $header . join(',', $rows); $write->query($sql); } $write->commit(); } catch (Exception $e) { $write->rollback(); throw $e; } return $this; }
/** * Add rule discount description label to address object * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_SalesRule_Model_Rule $rule * @return Mage_SalesRule_Model_Validator */ protected function _addDiscountDescription($address, $rule) { $description = $address->getDiscountDescriptionArray(); $ruleLabel = $rule->getStoreLabel($address->getQuote()->getStore()); $label = ''; if ($ruleLabel) { $label = $ruleLabel; } elseif ($rule->getCouponCode()) { $label = $rule->getCouponCode(); } if (!empty($label)) { $description[$rule->getId()] = $label; } $address->setDiscountDescriptionArray($description); return $this; }
/** * Get the applied coupon code on the quote for the passed in rule. * * @param Mage_Sales_Model_Quote * @param Mage_SalesRule_Model_Rule * @return string | null */ public function getQuoteCouponCode(Mage_Sales_Model_Quote $quote, Mage_SalesRule_Model_Rule $rule) { /** @var string */ $codeAppliedToQuote = $quote->getCouponCode(); /** @var string */ $codeInRule = $rule->getCouponCode(); return $codeAppliedToQuote === $codeInRule ? $codeAppliedToQuote : $this->getCodeFromCouponPool($rule, $codeAppliedToQuote); }