/** * Filter collection by specified website, customer group, coupon code, date. * Filter collection to use only active rules. * Involved sorting by sort_order column. * * @param int $websiteId * @param int $customerGroupId * @param string $couponCode * @param string|null $now * @use $this->addWebsiteGroupDateFilter() * * @return Mage_SalesRule_Model_Resource_Rule_Collection */ public function setValidationFilter($websiteId, $customerGroupId, $couponCode = '', $now = null) { if (!$this->getFlag('validation_filter')) { if (is_null($now)) { $now = Mage::getModel('core/date')->date('Y-m-d'); } /* We need to overwrite joinLeft if coupon is applied */ $this->getSelect()->reset(); Mage_Rule_Model_Resource_Rule_Collection_Abstract::_initSelect(); $this->addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now); $select = $this->getSelect(); $connection = $this->getConnection(); if (strlen($couponCode)) { $select->joinLeft(array('rule_coupons' => $this->getTable('salesrule/coupon')), $connection->quoteInto('main_table.rule_id = rule_coupons.rule_id AND main_table.coupon_type != ?', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON), array('code')); $noCouponCondition = $connection->quoteInto('main_table.coupon_type = ? ', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON); $orWhereConditions = array($connection->quoteInto('(main_table.coupon_type = ? AND rule_coupons.type = 0)', Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO), $connection->quoteInto('(main_table.coupon_type = ? AND main_table.use_auto_generation = 1 AND rule_coupons.type = 1)', Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC), $connection->quoteInto('(main_table.coupon_type = ? AND main_table.use_auto_generation = 0 AND rule_coupons.type = 0)', Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC)); $orWhereCondition = implode(' OR ', $orWhereConditions); $select->where($noCouponCondition . ' OR ((' . $orWhereCondition . ') AND rule_coupons.code = ?)', $couponCode); $select->where('(rule_coupons.expiration_date IS NULL) AND (to_date is null or to_date >= ?) OR (rule_coupons.expiration_date IS NOT NULL) AND (rule_coupons.expiration_date >= ?) ', $now); } else { $this->addFieldToFilter('main_table.coupon_type', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON); } $select->where(' (main_table.to_date IS NULL) OR (main_table.to_date >= ?) ', $now); $this->setOrder('sort_order', self::SORT_ORDER_ASC); $this->setFlag('validation_filter', true); } return $this; }
/** * Filter collection by specified website, customer group, coupon code, date. * Filter collection to use only active rules. * Involved sorting by sort_order column. * * @param int $websiteId * @param int $customerGroupId * @param string $couponCode * @param string|null $now * @use $this->addWebsiteGroupDateFilter() * * @return Mage_SalesRule_Model_Resource_Rule_Collection */ public function setValidationFilter($websiteId, $customerGroupId, $couponCode = '', $now = null) { if (!$this->getFlag('validation_filter')) { /* We need to overwrite joinLeft if coupon is applied */ $this->getSelect()->reset(); parent::_initSelect(); $this->addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now); $select = $this->getSelect(); if (strlen($couponCode)) { $select->joinLeft(array('rule_coupons' => $this->getTable('salesrule/coupon')), 'main_table.rule_id = rule_coupons.rule_id ', array('code')); $select->where('(main_table.coupon_type = ? ', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON)->orWhere('(main_table.coupon_type = ? AND rule_coupons.type = 0', Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO)->orWhere('main_table.coupon_type = ? AND main_table.use_auto_generation = 1 ' . 'AND rule_coupons.type = 1', Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC)->orWhere('main_table.coupon_type = ? AND main_table.use_auto_generation = 0 ' . 'AND rule_coupons.type = 0)', Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC)->where('rule_coupons.code = ?)', $couponCode); } else { $this->addFieldToFilter('main_table.coupon_type', Mage_SalesRule_Model_Rule::COUPON_TYPE_NO_COUPON); } $this->setOrder('sort_order', self::SORT_ORDER_ASC); $this->setFlag('validation_filter', true); } return $this; }
/** * Add primary coupon to collection * * @return Mage_SalesRule_Model_Resource_Rule_Collection */ public function _initSelect() { parent::_initSelect(); $this->getSelect()->joinLeft(array('rule_coupons' => $this->getTable('salesrule/coupon')), 'main_table.rule_id = rule_coupons.rule_id AND rule_coupons.is_primary = 1', array('code')); return $this; }
/** * @return Mage_SalesRule_Model_Resource_Rule_Collection */ public function _initSelect() { parent::_initSelect(); return $this; }
/** * Add primary coupon to collection * * @return Mage_SalesRule_Model_Resource_Rule_Collection */ public function _initSelect() { parent::_initSelect(); $this->getSelect()->joinLeft(array('rule_coupons' => $this->getTable('salesrule/coupon')), 'main_table.rule_id = rule_coupons.rule_id', array('code', 'usage_limit', 'expiration_date', 'is_primary', 'created_at')); return $this; }