Example #1
0
 /**
  * Quote address gift creation process
  *
  * @param Mage_Sales_Model_Quote_Address $address
  * @return Ionoi_Gift_Model_Rule_Validator
  * @todo Labels and stop rules processing flag
  */
 public function process($address)
 {
     $this->_reset($address);
     /* @var $quote Mage_Sales_Model_Quote */
     $quote = $address->getQuote();
     $added = array();
     $messages = array();
     /* @var $session Mage_Checkout_Model_Session */
     $session = Mage::getSingleton('checkout/session');
     /* @var $rule Ionoi_Gift_Model_Rule */
     foreach ($this->_getRules() as $rule) {
         // check rule
         if (array_key_exists($rule->getId(), $this->_appliedRules[$quote->getId()]) || !$this->_canProcessRule($rule, $address)) {
             continue;
         }
         // dispatch event
         Mage::dispatchEvent('gift_rule_validator_process', array('rule' => $rule, 'address' => $address));
         // create gifts
         foreach ($rule->getProductIds() as $productId) {
             // load gift
             $product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($productId);
             // check availability
             if (!$product->getId() || !is_array($product->getWebsiteIds()) || !in_array($this->getWebsiteId(), $product->getWebsiteIds())) {
                 Mage::throwException(Mage::helper('gift')->__('The gift could not be found.'));
             }
             // set option
             $product->addCustomOption('gift', serialize(array('rule_id' => $rule->getId())));
             // add to quote
             if (false == $product->isSalable()) {
                 continue;
             }
             $result = $quote->addProduct($product, $rule->getQty());
             // check result
             if (is_string($result)) {
                 // something went wrong
                 Mage::throwException($result);
             } else {
                 // successfully added
                 /* @var $item Mage_Sales_Model_Quote_Item */
                 $item = $result;
                 // set price
                 $item->setCustomPrice(0);
                 $item->setOriginalCustomPrice(0);
                 $item->getProduct()->setIsSuperMode(true);
                 // set messages
                 if (strlen($rule->getStoreLabel($address->getQuote()->getStore())) > 0) {
                     $item->setMessage($rule->getStoreLabel($address->getQuote()->getStore()));
                 }
                 if (!array_key_exists($rule->getId(), $this->_resetRules[$quote->getId()])) {
                     $message = new Mage_Core_Model_Message_Success(Mage::helper('gift')->__('%s was added as a gift to your shopping cart.', Mage::helper('core')->escapeHtml($product->getName())));
                     $message->setIdentifier(Mage::helper('gift')->__('gift-rule-%s', $rule->getId()));
                     $messages[] = $message;
                     $session->getMessages()->add($message);
                 }
             }
         }
         $this->_appliedRules[$quote->getId()][$rule->getId()] = $rule->getId();
         // $this->_addGiftDescription($address, $rule);
         if ($rule->getStopRulesProcessing()) {
             break;
         }
     }
     $address->setGiftRuleIds($this->mergeIds($address->getGiftRuleIds(), $this->_appliedRules[$quote->getId()]));
     $quote->setGiftRuleIds($this->mergeIds($quote->getGiftRuleIds(), $this->_appliedRules[$quote->getId()]));
     if (count($messages) > 0 && !Mage::registry('gift_added_success_messages')) {
         Mage::register('gift_added_success_messages', $messages);
     }
     return $this;
 }
Example #2
0
 /**
  * Quote address gift creation process
  *
  * @param Mage_Sales_Model_Quote_Address $address
  * @return Ionoi_Gift_Model_Rule_Validator
  * @todo Labels and stop rules processing flag
  */
 public function process($address)
 {
     $this->_reset($address);
     /* @var $quote Mage_Sales_Model_Quote */
     $quote = $address->getQuote();
     $messages = array();
     /* @var $session Mage_Checkout_Model_Session */
     $session = Mage::getSingleton('checkout/session');
     /* @var $rule Ionoi_Gift_Model_Rule */
     foreach ($this->_getRules() as $rule) {
         // check rule
         if (array_key_exists($rule->getId(), $this->_appliedRules[$quote->getId()]) || !$this->_canProcessRule($rule, $address)) {
             continue;
         }
         // dispatch event
         Mage::dispatchEvent('gift_rule_validator_process', array('rule' => $rule, 'address' => $address));
         // create gifts
         foreach ($rule->getProductIds() as $productId) {
             // load gift
             $product = $this->_getProduct($productId);
             $product->addCustomOption('gift', serialize(array('rule_id' => $rule->getId())));
             // check availability
             if ($product->getStatus() != Mage_Catalog_Model_Product_Status::STATUS_ENABLED) {
                 continue;
             }
             if (!$product->isVisibleInSiteVisibility() && $product->getStoreId() == Mage::app()->getStore()->getId()) {
                 continue;
             }
             if (!$product->isSalable()) {
                 continue;
             }
             // check if gift already exists in cart
             $item = false;
             foreach ($quote->getAllItems() as $_item) {
                 if ($_item->getParentItem() && $_item->getParentItem()->getProductId() == $productId) {
                     $this->_resetRules[$quote->getId()][$rule->getId()] = $rule->getId();
                     $item = $_item;
                     $item->setData('gift', array('rule_id' => $rule->getId()));
                     break;
                 }
             }
             if (!$item) {
                 // prepare request
                 $request = $this->_getProductRequest($rule->getQty());
                 // add gift
                 try {
                     $result = $quote->addProduct($product, $request);
                 } catch (Mage_Core_Exception $e) {
                     $session->setUseNotice(false);
                     $result = $e->getMessage();
                 }
                 // check result
                 if (is_string($result)) {
                     Mage::throwException($result);
                 }
                 $item = $result;
             }
             // ??
             /* @var $item Mage_Sales_Model_Quote_Item */
             $item = $item->getParentItem() ? $item->getParentItem() : $item;
             $item->setCustomPrice(0);
             $item->setOriginalCustomPrice(0);
             $item->getProduct()->setIsSuperMode(true);
             // set gift message
             $message = $rule->getStoreLabel($address->getQuote()->getStore());
             if (!empty($message)) {
                 $item->setMessage($message);
             }
             // add success message
             if (!array_key_exists($rule->getId(), $this->_resetRules[$quote->getId()])) {
                 $message = new Mage_Core_Model_Message_Success(Mage::helper('gift')->__('%s was added as a gift to your shopping cart.', Mage::helper('core')->escapeHtml($product->getName())));
                 $message->setIdentifier(Mage::helper('gift')->__('gift-rule-%s', $rule->getId()));
                 $messages[] = $message;
                 $session->getMessages()->add($message);
             }
         }
         $this->_appliedRules[$quote->getId()][$rule->getId()] = $rule->getId();
         // $this->_addGiftDescription($address, $rule);
         if ($rule->getStopRulesProcessing()) {
             break;
         }
     }
     $address->setGiftRuleIds($this->mergeIds($address->getGiftRuleIds(), $this->_appliedRules[$quote->getId()]));
     $quote->setGiftRuleIds($this->mergeIds($quote->getGiftRuleIds(), $this->_appliedRules[$quote->getId()]));
     if (count($messages) > 0 && !Mage::registry('gift_added_success_messages')) {
         Mage::register('gift_added_success_messages', $messages);
     }
     return $this;
 }