/** * Processing object before save data * * @return Mage_Core_Model_Abstract */ protected function _beforeSave() { if (!$this->getRuleId() && $this->_rule instanceof Mage_SalesRule_Model_Rule) { $this->setRuleId($this->_rule->getId()); } return parent::_beforeSave(); }
/** * Update auto generated Specific Coupon if it's rule changed * * @param Mage_SalesRule_Model_Rule $rule * @return Mage_SalesRule_Model_Resource_Coupon */ public function updateSpecificCoupons(Mage_SalesRule_Model_Rule $rule) { if (!$rule || !$rule->getId() || !$rule->hasDataChanges()) { return $this; } $updateArray = array(); if ($rule->dataHasChangedFor('uses_per_coupon')) { $updateArray['usage_limit'] = $rule->getUsesPerCoupon(); } if ($rule->dataHasChangedFor('uses_per_customer')) { $updateArray['usage_per_customer'] = $rule->getUsesPerCustomer(); } $ruleNewDate = new Zend_Date($rule->getToDate()); $ruleOldDate = new Zend_Date($rule->getOrigData('to_date')); if ($ruleNewDate->compare($ruleOldDate)) { $updateArray['expiration_date'] = $rule->getToDate(); } if (!empty($updateArray)) { $this->_getWriteAdapter()->update($this->getTable('salesrule/coupon'), $updateArray, array('rule_id = ?' => $rule->getId(), 'generated_by_dotmailer is null')); } //update coupons added by dotmailer. not to change expiration date $dotmailerUpdateArray = $updateArray; unset($dotmailerUpdateArray['expiration_date']); if (!empty($dotmailerUpdateArray)) { $this->_getWriteAdapter()->update($this->getTable('salesrule/coupon'), $dotmailerUpdateArray, array('rule_id = ?' => $rule->getId(), 'generated_by_dotmailer is 1')); } return $this; }
/** * Add rule to filter * * @param Mage_SalesRule_Model_Rule|int $rule * * @return Mage_SalesRule_Model_Resource_Coupon_Collection */ public function addRuleToFilter($rule) { if ($rule instanceof Mage_SalesRule_Model_Rule) { $ruleId = $rule->getId(); } else { $ruleId = (int) $rule; } $this->addFieldToFilter('rule_id', $ruleId); return $this; }
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; } else { if (strlen($address->getCouponCode())) { $label = $address->getCouponCode(); } } if (strlen($label)) { $description[$rule->getId()] = $label; } $address->setDiscountDescriptionArray($description); return $this; }
/** * Save product attributes currently used in conditions and actions of rule * * @param Mage_SalesRule_Model_Rule $rule * @param mixed $attributes * @return Mage_SalesRule_Model_Resource_Rule */ public function setActualProductAttributes($rule, $attributes) { $write = $this->_getWriteAdapter(); $write->delete($this->getTable('salesrule_product_attribute'), array('rule_id=?' => $rule->getId())); //Getting attribute IDs for attribute codes $attributeIds = array(); $select = $this->_getReadAdapter()->select()->from(array('a' => $this->getTable('eav_attribute')), array('a.attribute_id'))->where('a.attribute_code IN (?)', array($attributes)); $attributesFound = $this->_getReadAdapter()->fetchAll($select); if ($attributesFound) { foreach ($attributesFound as $attribute) { $attributeIds[] = $attribute['attribute_id']; } $data = array(); foreach ($rule->getCustomerGroupIds() as $customerGroupId) { foreach ($rule->getWebsiteIds() as $websiteId) { foreach ($attributeIds as $attribute) { $data[] = array('rule_id' => $rule->getId(), 'website_id' => $websiteId, 'customer_group_id' => $customerGroupId, 'attribute_id' => $attribute); } } } $write->insertMultiple($this->getTable('salesrule_product_attribute'), $data); } return $this; }
/** * Validate the rule usage for given address * @param Mage_SalesRule_Model_Rule * @param Mage_Sales_Model_Quote_Address * @return bool */ protected function isValidRuleUsageForAddress(Mage_SalesRule_Model_Rule $rule, Mage_Sales_Model_Quote_Address $address) { $ruleId = $rule->getId(); $customerId = $address->getQuote()->getCustomerId(); $ruleCustomer = $this->getRuleCustomerModel(); $ruleCustomer->loadByCustomerRule($customerId, $ruleId); if ($ruleCustomer->getId() && $ruleCustomer->getTimesUsed() >= $rule->getUsesPerCustomer()) { return false; } return true; }
/** * Update auto generated Specific Coupon if it's rule changed * * @param Mage_SalesRule_Model_Rule $rule * @return Mage_SalesRule_Model_Resource_Coupon */ public function updateSpecificCoupons(Mage_SalesRule_Model_Rule $rule) { if (!$rule || !$rule->getId() || !$rule->hasDataChanges()) { return $this; } $updateArray = array(); if ($rule->dataHasChangedFor('uses_per_coupon')) { $updateArray['usage_limit'] = $rule->getUsesPerCoupon(); } if ($rule->dataHasChangedFor('uses_per_customer')) { $updateArray['usage_per_customer'] = $rule->getUsesPerCustomer(); } $ruleNewDate = new Zend_Date($rule->getToDate()); $ruleOldDate = new Zend_Date($rule->getOrigData('to_date')); if ($ruleNewDate->compare($ruleOldDate)) { $updateArray['expiration_date'] = $rule->getToDate(); } if (!empty($updateArray)) { $this->_getWriteAdapter()->update($this->getTable('salesrule_coupon'), $updateArray, array('rule_id = ?' => $rule->getId())); } return $this; }
/** * Look up how many times a rule was used by a customer * * @param int $customerId * @param Mage_SalesRule_Model_Rule $rule * * @return int */ public function getCustomerRuleUseCount($customerId, Mage_SalesRule_Model_Rule $rule) { /** @var Mage_SalesRule_Model_Rule_Customer $ruleCustomer */ $ruleCustomer = Mage::getModel('salesrule/rule_customer'); $ruleCustomer->loadByCustomerRule($customerId, $rule->getId()); return intval($ruleCustomer->getTimesUsed()); }
/** * Add the rule label to the address for later usage * * @param Mage_Sales_Model_Quote_Address $address * @param Mage_SalesRule_Model_Rule $rule * * @return $this */ protected function addRuleDescription(Mage_Sales_Model_Quote_Address $address, Mage_SalesRule_Model_Rule $rule) { $descriptions = $address->getDiscountDescriptionArray(); $label = trim($rule->getStoreLabel($address->getQuote()->getStore())); if (empty($label) && strlen($address->getCouponCode())) { $label = $address->getCouponCode(); } if (!empty($label)) { $descriptions[$rule->getId()] = $label; } $address->setDiscountDescriptionArray($descriptions); return $this; }
/** * Unserialize the conditions from the rule. * * @param Mage_SalesRule_Model_Rule $rule * @return Array of rule conditions */ protected function _getConditions($rule) { if (count($this->_conditions) == 0) { if ($rule->getId()) { $data = unserialize($rule->getData('conditions_serialized')); if (isset($data['conditions'])) { $this->_conditions = $data['conditions']; } } } return $this->_conditions; }
/** * Loads in a salesrule and returns a points salesrule * * @param Mage_SalesRule_Model_Rule $salesrule * @return TBT_Rewards_Model_Salesrule_Rule */ public static function wrap(Mage_SalesRule_Model_Rule $salesrule) { $pointsrule = Mage::getModel('rewards/salesrule_rule')->setData($salesrule->getData())->setId($salesrule->getId()); return $pointsrule; }