Example #1
0
 /**
  * Save model plus its options
  * Ensures saving options in case when resource model was not changed
  */
 public function save()
 {
     $hasDataChanges = $this->hasDataChanges();
     $this->_flagOptionsSaved = false;
     parent::save();
     if ($hasDataChanges && !$this->_flagOptionsSaved) {
         $this->_saveItemOptions();
     }
 }
Example #2
0
 /**
  * Assign options to item
  *
  * @param Mage_Sales_Model_Quote_Item $item
  * @param array $options
  */
 protected function _assignOptionsToItem(Mage_Sales_Model_Quote_Item $item, $options)
 {
     if ($optionIds = $item->getOptionByCode('option_ids')) {
         foreach (explode(',', $optionIds->getValue()) as $optionId) {
             $item->removeOption('option_' . $optionId);
         }
         $item->removeOption('option_ids');
     }
     if ($item->getOptionByCode('additional_options')) {
         $item->removeOption('additional_options');
     }
     $item->save();
     if (!empty($options['options'])) {
         $item->addOption(new Varien_Object(array('product' => $item->getProduct(), 'code' => 'option_ids', 'value' => implode(',', array_keys($options['options'])))));
         foreach ($options['options'] as $optionId => $optionValue) {
             $item->addOption(new Varien_Object(array('product' => $item->getProduct(), 'code' => 'option_' . $optionId, 'value' => $optionValue)));
         }
     }
     if (!empty($options['additional_options'])) {
         $item->addOption(new Varien_Object(array('product' => $item->getProduct(), 'code' => 'additional_options', 'value' => serialize($options['additional_options']))));
     }
     return $this;
 }
Example #3
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;
     }
 }