/** * 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; }
/** * Run "afterLoad" callback on items if it is applicable * * @return Enterprise_TargetRule_Model_Resource_Rule_Collection */ protected function _afterLoad() { foreach ($this->_items as $rule) { /* @var $rule Enterprise_TargetRule_Model_Rule */ if (!$this->getFlag('do_not_run_after_load')) { $rule->afterLoad(); } } parent::_afterLoad(); 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; }
/** * Get SQL for get record count. * Reset left join, group and having parts * * @return Varien_Db_Select */ public function getSelectCountSql() { $countSelect = parent::getSelectCountSql(); if ($this->getFlag('is_customer_count_added')) { $countSelect->reset(Zend_Db_Select::GROUP); $countSelect->reset(Zend_Db_Select::HAVING); $countSelect->resetJoinLeft(); } return $countSelect; }
/** * 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; }
/** * Convert collection items to select options array * * @return array */ public function toOptionArray() { return parent::_toOptionArray('easyshippingrules_rule_id', 'name'); }
/** * Redeclare before load method for adding event * * @return MatheusGontijo_EasyShippingRules_Model_Resource_Custommethod_Collection */ protected function _beforeLoad() { parent::_beforeLoad(); $this->getSelect()->joinLeft(array('c' => $this->getResource()->getTable('easyshippingrules/carrier')), 'main_table.easyshippingrules_carrier_id = c.easyshippingrules_carrier_id', array('name AS carrier_name')); return $this; }
/** * Retrieve option hash * * @return array */ public function toOptionHash() { return parent::_toOptionHash('easyshippingrules_carrier_id', 'name'); }