00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 class Mage_SalesRule_Model_Observer
00029 {
00030 protected $_validator;
00031
00032 public function getValidator($event)
00033 {
00034 if (!$this->_validator) {
00035 $this->_validator = Mage::getModel('salesrule/validator')
00036 ->init($event->getWebsiteId(), $event->getCustomerGroupId(), $event->getCouponCode());
00037 }
00038 return $this->_validator;
00039 }
00040
00041 public function sales_quote_address_discount_item($observer)
00042 {
00043 $this->getValidator($observer->getEvent())
00044 ->process($observer->getEvent()->getItem());
00045 }
00046
00047 public function sales_order_afterPlace($observer)
00048 {
00049 $order = $observer->getEvent()->getOrder();
00050
00051 if (!$order) {
00052 return $this;
00053 }
00054
00055
00056 $ruleIds = explode(',', $order->getAppliedRuleIds());
00057 $ruleIds = array_unique($ruleIds);
00058
00059 $ruleCustomer = null;
00060 $customerId = $order->getCustomerId();
00061
00062
00063 foreach ($ruleIds as $ruleId) {
00064 if (!$ruleId) {
00065 continue;
00066 }
00067 $rule = Mage::getModel('salesrule/rule');
00068 $rule->load($ruleId);
00069 if ($rule->getId()) {
00070 $rule->setTimesUsed($rule->getTimesUsed() + 1);
00071 $rule->save();
00072
00073 if ($customerId) {
00074 $ruleCustomer = Mage::getModel('salesrule/rule_customer');
00075 $ruleCustomer->loadByCustomerRule($customerId, $ruleId);
00076
00077 if ($ruleCustomer->getId()) {
00078 $ruleCustomer->setTimesUsed($ruleCustomer->getTimesUsed()+1);
00079 }
00080 else {
00081 $ruleCustomer
00082 ->setCustomerId($customerId)
00083 ->setRuleId($ruleId)
00084 ->setTimesUsed(1);
00085 }
00086 $ruleCustomer->save();
00087 }
00088 }
00089 }
00090 }
00091 }