/** * used only for Magento >= 1.7 * * Filter collection by website(s), customer group(s) and date. * Filter collection to only active rules. * Sorting is not involved * * @param int $websiteId * @param int $customerGroupId * @param string|null $now * @use $this->addWebsiteFilter() * * @return Mage_SalesRule_Model_Mysql4_Rule_Collection */ public function addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now = null) { $oResource = Mage::getSingleton('core/resource'); $sTable = $oResource->getTableName('aitoc_salesrule_assign_cutomer'); if (!$sTable) { return parent::addWebsiteGroupDateFilter($websiteId, $customerGroupId, $now); } if (!$this->getFlag('website_group_date_filter')) { if (is_null($now)) { $now = Mage::getModel('core/date')->date('Y-m-d'); } $this->addWebsiteFilter($websiteId); $entityInfo = $this->_getAssociatedEntityInfo('customer_group'); $connection = $this->getConnection(); $iCustomerId = Mage::getSingleton('customer/session')->getCustomerId(); if (!$iCustomerId) { $iCustomerId = 0; // fix for create order by admin if ($_SESSION and isset($_SESSION['adminhtml_quote']) and isset($_SESSION['adminhtml_quote']['customer_id']) and $_SESSION['adminhtml_quote']['customer_id']) { $iCustomerId = $_SESSION['adminhtml_quote']['customer_id']; } } $this->getSelect()->joinLeft(array('rc' => $sTable), 'main_table.rule_id = rc.entity_id AND rc.customer_id = ' . $iCustomerId); /* coupon code date is checked here to skip the promotion expiry date in case the coupon is set which has a different expiry */ $_coupon_code = Mage::getSingleton('checkout/session')->getQuote()->getCouponCode(); $use_promotion_expiry = true; if (isset($_coupon_code)) { $coupon_object = Mage::getModel("salesrule/coupon")->loadByCode($_coupon_code); $coupon_data = $coupon_object->getData(); if (!empty($coupon_data)) { $coupon_expiry = $coupon_object->getExpirationDate(); $current_date = date("Y-m-d H:i:s", Mage::getModel('core/date')->timestamp(time())); if ($coupon_expiry >= $current_date) { $use_promotion_expiry = false; } } } /* coupon code date is checked here to skip the promotion expiry date in case the coupon is set which has a different expiry */ if ($use_promotion_expiry) { $this->getSelect()->joinLeft(array('customer_group_ids' => $this->getTable($entityInfo['associations_table'])), $connection->quoteInto('main_table.' . $entityInfo['rule_id_field'] . ' = customer_group_ids.' . $entityInfo['rule_id_field'] . ' AND customer_group_ids.' . $entityInfo['entity_id_field'] . ' = ?', (int) $customerGroupId), array())->where('from_date is null or from_date <= ?', $now)->where('to_date is null or to_date >= ?', $now)->where('(rc.entity_id IS NOT NULL) OR (customer_group_ids.customer_group_id = ?)', $customerGroupId); } else { $this->getSelect()->joinLeft(array('customer_group_ids' => $this->getTable($entityInfo['associations_table'])), $connection->quoteInto('main_table.' . $entityInfo['rule_id_field'] . ' = customer_group_ids.' . $entityInfo['rule_id_field'] . ' AND customer_group_ids.' . $entityInfo['entity_id_field'] . ' = ?', (int) $customerGroupId), array())->where('from_date is null or from_date <= ?', $now)->where("((to_date is null or to_date >= ?) AND (coupon_type=1)) OR (coupon_type!=1)", $now)->where('(rc.entity_id IS NOT NULL) OR (customer_group_ids.customer_group_id = ?)', $customerGroupId); } $this->addIsActiveFilter(); $this->setFlag('website_group_date_filter', true); } return $this; }
/** * Set validation filter on rule collection * @param Mage_SalesRule_Model_Resource_Rule_Collection * @param string */ protected function addCouponFilter(Mage_SalesRule_Model_Resource_Rule_Collection $ruleCollection, $couponCode) { // multiple coupon compatibility if ($couponCode && !is_array($couponCode)) { $couponCode = explode(',', $couponCode); } $select = $ruleCollection->getSelect(); $select->reset(); $ruleTable = $ruleCollection->getTable('salesrule/rule'); $couponTable = $ruleCollection->getTable('salesrule/coupon'); $select->from(['main_table' => $ruleTable]); if ($couponCode) { $select->joinLeft(['c' => $couponTable], 'main_table.rule_id = c.rule_id ', ['code']); $select->where($select->getAdapter()->quoteInto(' main_table.coupon_type = ?', 1) . $select->getAdapter()->quoteInto(' OR c.code IN(?)', $couponCode)); $select->group('main_table.rule_id'); } else { $select->where('main_table.coupon_type = ?', 1); } $select->order('sort_order'); }