Пример #1
0
 /**
  * Removes all applicable rules to the item's rule hash.
  * Returns false if no changes were made.
  *
  * @param Mage_Sales_Model_Quote_Item $item
  * @param array $rule_id_list
  * @param integer $inst_id redemption instance id (this comes out of the item redemptions hash)
  * @return boolean
  */
 public function removeCatalogRedemptionsFromItem(&$item, $rule_id_list, $inst_id = 0)
 {
     //Check to make sure we can load the redeem points hash alright
     if (!$item->getRedeemedPointsHash()) {
         throw new Exception($this->__("Unable to load the redeem points hash"));
     }
     $catalog_redemptions = Mage::helper('rewards')->unhashIt($item->getRedeemedPointsHash());
     foreach ($catalog_redemptions as $key => $redemption) {
         $catalog_redemptions[$key] = (array) $redemption;
     }
     $doSave = false;
     foreach ($rule_id_list as $rule_id) {
         $rule = Mage::getModel('rewards/catalogrule_rule')->load($rule_id);
         $foundRuleIdIndex = false;
         foreach ($catalog_redemptions as $index => $redemption) {
             $rule_id_is_same = $redemption[TBT_Rewards_Model_Catalogrule_Rule::POINTS_RULE_ID] == $rule_id;
             $inst_id_is_same = $inst_id == 0 ? true : $redemption[TBT_Rewards_Model_Catalogrule_Rule::POINTS_INST_ID] == $inst_id;
             if ($rule_id_is_same && $inst_id_is_same) {
                 $foundRuleIdIndex = $index;
             }
         }
         if ($foundRuleIdIndex === false) {
             throw new Exception("The rule entitled '" . $rule->getName() . "' is not applied to this product.");
         } else {
             unset($catalog_redemptions[$foundRuleIdIndex]);
             $item->setRedeemedPointsHash(Mage::helper('rewards')->hashIt($catalog_redemptions));
             $doSave = true;
         }
     }
     if ($doSave) {
         $item->save();
         return true;
     } else {
         return false;
     }
 }