/** * get a product option based on quote option * * @param Mage_Sales_Model_Quote_Item_Option $option * @return Mage_Catalog_Model_Product_Option|null */ public function getOptionProductOption($option) { $optionId = null; if (strpos($option->getCode(), Mage_Catalog_Model_Product_Type_Abstract::OPTION_PREFIX) === 0) { $optionId = str_replace(Mage_Catalog_Model_Product_Type_Abstract::OPTION_PREFIX, '', $option->getCode()); if ((int) $optionId != $optionId) { $optionId = null; } } $productOption = null; if ($optionId) { /** @var $productOption Mage_Catalog_Model_Product_Option */ $productOption = Mage::getModel('catalog/product_option')->load($optionId); } if (!$productOption || !$productOption->getId() || $productOption->getProductId() != $option->getProductId()) { return null; } else { return $productOption; } }
/** * Register option code * * @param Mage_Sales_Model_Quote_Item_Option $option * @return Mage_Sales_Model_Quote_Item */ protected function _addOptionCode($option) { if (!isset($this->_optionsByCode[$option->getCode()])) { $this->_optionsByCode[$option->getCode()] = $option; } else { Mage::throwException(Mage::helper('Mage_Sales_Helper_Data')->__('An item option with code %s already exists.', $option->getCode())); } return $this; }
/** * Implementation of product specify logic of which product needs to be assigned to option. * For example if product which was added to option already removed from catalog. * * @param Mage_Catalog_Model_Product $optionProduct * @param Mage_Sales_Model_Quote_Item_Option $option * @param Mage_Catalog_Model_Product $product * @return Mage_Catalog_Model_Product_Type_Abstract */ public function assignProductToOption($optionProduct, $option, $product = null) { if ($optionProduct) { $option->setProduct($optionProduct); } else { $option->getItem()->setHasError('error'); $option->getItem()->addMessage(Mage::helper('catalog')->__('Selected configuration is not available.', $this->getProduct($product)->getName())); } return $this; }
/** * Implementation of product specify logic of which product needs to be assigned to option. * For example if product which was added to option already removed from catalog. * * @param Mage_Catalog_Model_Product|null $optionProduct * @param Mage_Sales_Model_Quote_Item_Option $option * @param Mage_Catalog_Model_Product|null $product * @return Mage_Catalog_Model_Product_Type_Configurable */ public function assignProductToOption($optionProduct, $option, $product) { if ($optionProduct) { $option->setProduct($optionProduct); } else { $option->getItem()->setHasConfigurationUnavailableError(true); } return $this; }
/** * Implementation of product specify logic of which product needs to be assigned to option. * For example if product which was added to option already removed from catalog. * * @param Mage_Catalog_Model_Product $optionProduct * @param Mage_Sales_Model_Quote_Item_Option $option * @param Mage_Catalog_Model_Product $product * @return Mage_Catalog_Model_Product_Type_Abstract */ public function assignProductToOption($optionProduct, $option, $product = null) { if ($optionProduct) { $option->setProduct($optionProduct); } else { $option->setProduct($this->getProduct($product)); } return $this; }
/** * Implementation of product specify logic of which product needs to be assigned to option. * For example if product which was added to option already removed from catalog. * * @param Mage_Catalog_Model_Product $optionProduct * @param Mage_Sales_Model_Quote_Item_Option $option * @param Mage_Catalog_Model_Product $product * @return Mage_Catalog_Model_Product_Type_Abstract */ public function assignProductToOption($optionProduct, $option, $product) { if ($optionProduct) { $option->setProduct($optionProduct); } else { $option->getItem()->setHasError('error'); $message = Mage::helper('Mage_Catalog_Helper_Data')->__('Selected configuration is not available.', $product->getName()); $option->getItem()->addMessage($message); } return $this; }
/** * Implementation of product specify logic of which product needs to be assigned to option. * For example if product which was added to option already removed from catalog. * * @param Mage_Catalog_Model_Product $optionProduct * @param Mage_Sales_Model_Quote_Item_Option $option * @param Mage_Catalog_Model_Product $product * @return Mage_Catalog_Model_Product_Type_Abstract */ public function assignProductToOption($optionProduct, $option, $product = null) { $option->setProduct($optionProduct ? $optionProduct : $this->getProduct($product)); return $this; }
public function afterRequest4quoteOrder($observer) { $event = $observer->getEvent(); $quote = $event->getQuote(); $cart = $event->getCart(); $optionsArr = array(); foreach ($quote->getAllVisibleItems() as $item) { $quoteOptions = Mage::getModel('request4quote/quote_item_option')->getCollection()->addFieldToFilter('item_id', $item->getId()); foreach ($quoteOptions as $quoteOption) { $optionsArr[$quoteOption->getData('product_id')][$quoteOption->getData('code')] = $quoteOption->getData('value'); } } if (count($optionsArr)) { foreach ($cart->getQuote()->getAllVisibleItems() as $item) { foreach ($optionsArr[$item->getData('product_id')] as $code => $val) { if ($code == 'info_buyRequest') { continue; } $model = new Mage_Sales_Model_Quote_Item_Option(); $model->setData('item_id', $item->getId()); $model->setData('product_id', $item->getData('product_id')); $model->setData('code', $code); $model->setData('value', $val); $model->save(); } } } }
/** * Register option code * * @param Mage_Sales_Model_Quote_Item_Option $option * @return Mage_Sales_Model_Quote_Item */ protected function _addOptionCode($option) { if (!isset($this->_optionsByCode[$option->getCode()])) { $this->_optionsByCode[$option->getCode()] = $option; } else { AO::throwException(AO::helper('sales')->__('Item option with code %s already exist', $option->getCode())); } return $this; }