/**
  * 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;
 }
Exemplo n.º 2
0
 /**
  * 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;
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 /**
  * @return Mage_SalesRule_Model_Resource_Rule_Collection
  */
 public function _initSelect()
 {
     parent::_initSelect();
     return $this;
 }
Exemplo n.º 5
0
 /**
  * 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;
 }