public function checkProductBuyState($product = null) { Mage_Catalog_Model_Product_Type_Abstract::checkProductBuyState($product); $product = $this->getProduct($product); $productOptionIds = $this->getOptionsIds($product); $productSelections = $this->getSelectionsCollection($productOptionIds, $product); $selectionIds = $product->getCustomOption('bundle_selection_ids'); $selectionIds = unserialize($selectionIds->getValue()); $buyRequest = $product->getCustomOption('info_buyRequest'); $buyRequest = new Varien_Object(unserialize($buyRequest->getValue())); $bundleOption = $buyRequest->getBundleOption(); if (empty($bundleOption)) { Mage::throwException($this->getSpecifyOptionMessage()); } $skipSaleableCheck = Mage::helper('catalog/product')->getSkipSaleableCheck(); foreach ($selectionIds as $selectionId) { /* @var $selection Mage_Bundle_Model_Selection */ $selection = $productSelections->getItemById($selectionId); if (!$selection || !$selection->isSalable() && !$skipSaleableCheck) { Mage::throwException(Mage::helper('bundle')->__('Selected required options are not available.')); } } /* $product->getTypeInstance(true)->setStoreFilter($product->getStoreId(), $product); $optionsCollection = $this->getOptionsCollection($product); foreach ($optionsCollection->getItems() as $option) { if ($option->getRequired() && empty($bundleOption[$option->getId()])) { Mage::throwException( Mage::helper('bundle')->__('Required options are not selected.') ); } } */ return $this; }
public function prepareForCart(Varien_Object $buyRequest, $product = null) { if (!$product) { $product = $this->getProduct(); } return parent::prepareForCart($buyRequest, $product); }
public function hasRequiredOptions($product = null) { if (ITwebexperts_Payperrentals_Helper_Data::isReservationAndRental($this->getProduct($product))) { return false; } else { return parent::hasRequiredOptions($product); } }
/** * Initialize gift card for add to cart process * * @param Varien_Object $buyRequest * @param Mage_Catalog_Model_Product $product * @return array|string */ protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) { $product = $this->getProduct($product); $data = $buyRequest->getData(); $cardType = $product->getAttributeText('wts_gc_type'); //change delivery date to mysql format if (!empty($data['mail_delivery_date'])) { $tempDate = explode('/', $data['mail_delivery_date']); $mailDeliveryDate = $tempDate[2] . '-' . $tempDate[0] . '-' . $tempDate[1]; } else { $mailDeliveryDate = null; } /* * Validate card amount * TODO: Need options validation */ if (!$product->getPrice() || $product->getPrice() == 0) { // true only if min value is set (more than 0) and price less than min $min = Mage::getStoreConfig('giftcards/default/min_card_value') > 0 && $data['card_amount'] < Mage::getStoreConfig('giftcards/default/min_card_value'); // true only if max value is set (more than 0) and price more than max $max = Mage::getStoreConfig('giftcards/default/max_card_value') > 0 && $data['card_amount'] > Mage::getStoreConfig('giftcards/default/max_card_value'); // if one of conditions above is true than return error if ($min || $max) { return $this->getSpecifyPriceMessage(); } } /* * Validate card type * TODO: Need options validation */ /* if (!isset($data['card_type']) || !in_array($data['card_type'], array('email', 'print', 'offline'))) { return $this->getSpecifyOptionsMessage(); }*/ /* * Add gift card params as product custom options to product quote * TODO: Need options validation */ $product->addCustomOption('card_type', $cardType); $product->addCustomOption('card_amount', isset($data['card_amount']) ? $data['card_amount'] : $product->getPrice()); $product->addCustomOption('card_currency', Mage::app()->getStore()->getCurrentCurrencyCode()); $product->addCustomOption('mail_to', isset($data['mail_to']) ? $data['mail_to'] : ''); $product->addCustomOption('mail_to_email', isset($data['mail_to_email']) ? $data['mail_to_email'] : ''); $product->addCustomOption('mail_from', isset($data['mail_from']) ? $data['mail_from'] : ''); $product->addCustomOption('mail_message', isset($data['mail_message']) ? $data['mail_message'] : ''); $product->addCustomOption('offline_country', isset($data['offline_country']) ? $data['offline_country'] : ''); $product->addCustomOption('offline_state', isset($data['offline_state']) ? $data['offline_state'] : ''); $product->addCustomOption('offline_city', isset($data['offline_city']) ? $data['offline_city'] : ''); $product->addCustomOption('offline_street', isset($data['offline_street']) ? $data['offline_street'] : ''); $product->addCustomOption('offline_zip', isset($data['offline_zip']) ? $data['offline_zip'] : ''); $product->addCustomOption('offline_phone', isset($data['offline_phone']) ? $data['offline_phone'] : ''); $product->addCustomOption('mail_delivery_date', $mailDeliveryDate); //delivery date of email return parent::_prepareProduct($buyRequest, $product, $processMode); }
public function getOrderOptions($product = null) { $optionArr = parent::getOrderOptions($product); if ($product->hasCustomOptions()) { $src_option = $product->getCustomOption('src_option')->getValue(); $option['label'] = 'Personalized Image'; $option['value'] = "<img width='100' src='{$src_option}'>"; //// array order page not ok $option['print_value'] = "<img width='100' src='{$src_option}'>"; $option['custom_view'] = "<img width='100' src='{$src_option}'>"; $optionArr['options'][] = $option; } return $optionArr; }
protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) { if (version_compare(Mage::getVersion(), '1.5.0', '<')) { return parent::_prepareProduct($buyRequest, $product, $processMode); } if (is_null($product)) { $product = $this->getProduct(); } $result = parent::_prepareProduct($buyRequest, $product, $processMode); if (is_string($result)) { return $result; } reset($result); $product = current($result); $result = $this->_prepareWebPOSProduct($buyRequest, $product); return $result; }
protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) { $product = $this->getProduct($product); $servicePrice = (double) $buyRequest->getServicePrice(); $isStrictProcessMode = $this->_isStrictProcessMode($processMode); if ($buyRequest->getQty() > 1) { return Mage::helper('catalog')->__('The maximum qty of service product allowed in cart is 1.'); } if (!$isStrictProcessMode || $servicePrice > 0) { $maxPrice = Mage::helper('service_product')->getMaxPrice(); if ($maxPrice && $servicePrice > $maxPrice) { return Mage::helper('catalog')->__('Service price must not be greater than %d.', $maxPrice); } $products = parent::_prepareProduct($buyRequest, $product, $processMode); if (!isset($products[0])) { return Mage::helper('checkout')->__('Cannot process the item.'); } return $products; } return Mage::helper('catalog')->__('Please specify the product price.'); }
public function beforeSave($product = null) { parent::beforeSave($product); $this->getProduct($product)->setTypeHasOptions(true); $this->getProduct($product)->setTypeHasRequiredOptions(true); return $this; }
/** * Save type related data * * @param Mage_Catalog_Model_Product $product * @return Mage_Catalog_Model_Product_Type_Grouped */ public function save($product) { parent::save($product); $product->getLinkInstance()->saveGroupedLinks($product); return $this; }
public function prepareForCartAdvanced(Varien_Object $buyRequest, $product = null, $processMode = null) { Mage::getModel('sarp/product_type_default')->checkPeriod($product, $buyRequest); $Period = Mage::getModel('sarp/period'); /* We should add custom options that doesnt exist */ if ($buyRequest->getAwSarpSubscriptionType()) { if ($Period->load($buyRequest->getAwSarpSubscriptionType())->getId()) { $product->addCustomOption('aw_sarp_subscription_type', $Period->getId()); } } $options = $buyRequest->getOptions(); if (isset($options['aw_sarp_subscription_start']) && is_array($options['aw_sarp_subscription_start'])) { $subscriptionStart = $options['aw_sarp_subscription_start']; $date = new Zend_Date(); $date->setMinute(0)->setHour(0)->setSecond(0)->setDay($subscriptionStart['day'])->setMonth($subscriptionStart['month'])->setYear($subscriptionStart['year']); $buyRequest->setAwSarpSubscriptionStart($date->toString(Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT))); } if ($buyRequest->getAwSarpSubscriptionStart() && $Period->getId()) { $date = new Zend_Date($buyRequest->getAwSarpSubscriptionStart(), Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT)); // Check date // Never check if start date //$performDateCompare = !!Mage::getSingleton('customer/session')->getCustomer()->getId(); $performDateCompare = !AW_Sarp_Model_Cron::$isCronSession; $today = new Zend_Date(); if (!$this->isVirtual($product)) { $today->addDayOfYear($Period->getPaymentOffset()); } if ($performDateCompare && ($date->compare($today, Zend_Date::DATE_SHORT) < 0 || !$Period->isAllowedDate($date, $product))) { throw new Mage_Core_Exception(Mage::helper('sarp')->__("Selected date is not valid for specified period")); } } else { $date = Mage::app()->getLocale()->date(); } $product->addCustomOption('aw_sarp_subscription_start', $date->toString('Y-MM-dd')); if ($attributes = $buyRequest->getSuperAttribute()) { $result = Mage_Catalog_Model_Product_Type_Abstract::prepareForCartAdvanced($buyRequest, $product); if (is_array($result)) { $product = $this->getProduct($product); /** * $attributes = array($attributeId=>$attributeValue) */ if ($subProduct = $this->getProductByAttributes($attributes, $product)) { $product->addCustomOption('attributes', serialize($attributes)); $product->addCustomOption('product_qty_' . $subProduct->getId(), 1, $subProduct); $product->addCustomOption('simple_product', $subProduct->getId(), $subProduct); $_result = $subProduct->getTypeInstance(true)->prepareForCartAdvanced($buyRequest, $subProduct); if (is_string($_result) && !is_array($_result)) { return $_result; } if (!isset($_result[0])) { return Mage::helper('checkout')->__('Can not add item to shopping cart'); } /** * Adding parent product custom options to child product * to be sure that it will be unique as its parent */ if ($optionIds = $product->getCustomOption('option_ids')) { $optionIds = explode(',', $optionIds->getValue()); foreach ($optionIds as $optionId) { if ($option = $product->getCustomOption('option_' . $optionId)) { $_result[0]->addCustomOption('option_' . $optionId, $option->getValue()); } } } if ($buyRequest->getAwSarpSubscriptionType()) { if ($Period->getId()) { $_result[0]->addCustomOption('aw_sarp_subscription_start', $date->toString('Y-MM-dd')); $_result[0]->addCustomOption('aw_sarp_subscription_type', $Period->getId()); } } $_result[0]->setParentProductId($product->getId())->addCustomOption('parent_product_id', $product->getId())->setCartQty(1); $result[] = $_result[0]; return $result; } } } return $this->getSpecifyOptionMessage(); }
/** * Prepare additional options/information for order item which will be * created from this product * * @param Mage_Catalog_Model_Product $product * * @return array */ public function getOrderOptions($product = null) { $optionArr = parent::getOrderOptions($product); $optionArr['shipment_type'] = Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY; return $optionArr; }
/** * Check if product can be bought * * @param Mage_Catalog_Model_Product $product * @return Mage_Bundle_Model_Product_Type * @throws Mage_Core_Exception */ public function checkProductBuyState($product = null) { parent::checkProductBuyState($product); $product = $this->getProduct($product); $productOptionIds = $this->getOptionsIds($product); $productSelections = $this->getSelectionsCollection($productOptionIds, $product); $selectionIds = $product->getCustomOption('bundle_selection_ids'); $selectionIds = unserialize($selectionIds->getValue()); foreach ($selectionIds as $selectionId) { /* @var $selection Mage_Bundle_Model_Selection */ $selection = $productSelections->getItemById($selectionId); if (!$selection || !$selection->isSalable()) { Mage::throwException(Mage::helper('bundle')->__('Selected required options are not available.')); } } return $this; }
/** * Save configurable product depended data * * @return Mage_Catalog_Model_Product_Type_Configurable */ public function save() { parent::save(); /** * Save Attributes Information */ if ($data = $this->getProduct()->getConfigurableAttributesData()) { foreach ($data as $attributeData) { $id = isset($attributeData['id']) ? $attributeData['id'] : null; $attribute = Mage::getModel('catalog/product_type_configurable_attribute')->setData($attributeData)->setId($id)->setStoreId($this->getProduct()->getStoreId())->setProductId($this->getProduct()->getId())->save(); } } /** * Save product relations */ if ($data = $this->getProduct()->getConfigurableProductsData()) { $productIds = array_keys($data); Mage::getResourceModel('catalog/product_type_configurable')->saveProducts($this->getProduct()->getId(), $productIds); } return $this; }
/** * Check is virtual product * * @return bool */ public function isVirtual($product = null) { if ($productOption = $this->getProduct($product)->getCustomOption('simple_product')) { if ($optionProduct = $productOption->getProduct()) { /* @var $optionProduct Mage_Catalog_Model_Product */ return $optionProduct->isVirtual(); } } return parent::isVirtual($product); }
public function beforeSave($product = null) { parent::beforeSave($product); if ($product->getAwSarpEnabled() && $this->getProduct($product)->getAwSarpSubscriptionPrice() == '') { $this->getProduct($product)->setAwSarpSubscriptionPrice($product->getData('price')); } }
/** * Get sku of product * * @param Mage_Catalog_Model_Product $product * @return string */ public function getSku($product = null) { $sku = $this->getProduct($product)->getData('sku'); if ($simpleOption = $this->getProduct($product)->getCustomOption('simple_product')) { //$simple_sku = $simpleOption->getProduct($product)->getSku(); $o = $simpleOption->getProduct($product); $simple_sku = is_object($o) ? $o->getSku() : null; $sku = parent::getOptionSku($product, $simple_sku); } else { $sku = parent::getSku($product); } return $sku; }
/** * Get sku of product * * @param Mage_Catalog_Model_Product $product * @return string */ public function getSku($product = null) { $sku = $this->getProduct($product)->getData('sku'); $simpleOption = $this->getProduct($product)->getCustomOption('simple_product'); if ($simpleOption) { $optionProduct = $simpleOption->getProduct($product); $simpleSku = null; if ($optionProduct) { $simpleSku = $simpleOption->getProduct($product)->getSku(); } $sku = parent::getOptionSku($product, $simpleSku); } else { $sku = parent::getSku($product); } return $sku; }
public function isSalable($product = null) { if (!$product) { return false; } $prod = Mage::getModel('catalog/product')->load($product->getId()); if ($prod->getAttributeText('wts_gc_pregenerate') != 'Yes') { return parent::isSalable($product); } $collection = Mage::getModel('giftcards/pregenerated')->getCollection()->addFieldToFilter('product_id', $product->getId())->addFieldToFilter('card_status', 1); if (!count($collection)) { return false; } return true; }
/** * Check is virtual product * * @return bool */ public function isVirtual() { if ($productOption = $this->getProduct()->getCustomOption('simple_product')) { if ($product = $productOption->getProduct()) { /* @var $product Mage_Catalog_Model_Product */ return $product->getTypeInstance()->isVirtual(); } } return parent::isVirtual(); }
/** * Prepare additional options/information for order item which will be * created from this product * * @return array */ public function getOrderOptions() { $optionArr = parent::getOrderOptions(); $bundleOptions = array(); $product = $this->getProduct(); if ($product->hasCustomOptions()) { $customOption = $product->getCustomOption('bundle_option_ids'); $optionIds = unserialize($customOption->getValue()); $options = $this->getOptionsByIds($optionIds); $customOption = $product->getCustomOption('bundle_selection_ids'); $selectionIds = unserialize($customOption->getValue()); $selections = $this->getSelectionsByIds($selectionIds); foreach ($selections->getItems() as $selection) { if ($selection->isSalable()) { $selectionQty = $product->getCustomOption('selection_qty_' . $selection->getSelectionId()); if ($selectionQty) { $price = $product->getPriceModel()->getSelectionPrice($product, $selection, $selectionQty->getValue()); $option = $options->getItemById($selection->getOptionId()); if (!isset($bundleOptions[$option->getId()])) { $bundleOptions[$option->getId()] = array('option_id' => $option->getId(), 'label' => $option->getTitle(), 'value' => array()); } $bundleOptions[$option->getId()]['value'][] = array('title' => $selection->getName(), 'qty' => $selectionQty->getValue(), 'price' => Mage::app()->getStore()->convertPrice($price)); } } } } $optionArr['bundle_options'] = $bundleOptions; /** * Product Prices calculations save */ if ($product->getPriceType()) { $optionArr['product_calculations'] = self::CALCULATE_PARENT; } else { $optionArr['product_calculations'] = self::CALCULATE_CHILD; } $optionArr['shipment_type'] = $product->getShipmentType(); return $optionArr; }
/** * Retrieve additional searchable data from type instance * Using based on product id and store_id data * * @param Mage_Catalog_Model_Product $product * @return array */ public function getSearchableData($product = null) { $searchData = parent::getSearchableData($product); $product = $this->getProduct($product); $optionSearchData = Mage::getSingleton('bundle/option')->getSearchableData($product->getId(), $product->getStoreId()); if ($optionSearchData) { $searchData = array_merge($searchData, $optionSearchData); } return $searchData; }
/** * Check if product can be configured * * @param Mage_Catalog_Model_Product $product * @return bool */ public function canConfigure($product = null) { return $product instanceof Mage_Catalog_Model_Product && $product->isAvailable() && parent::canConfigure(); }
/** * Set image for product without image if possible * * @param Mage_Catalog_Model_Product $product * @return Mage_Catalog_Model_Product_Type_Configurable */ public function setImageFromChildProduct(Mage_Catalog_Model_Product $product) { if (!$product->getData('image') || $product->getData('image') === 'no_selection') { foreach ($this->getUsedProducts($product) as $childProduct) { if ($childProduct->getData('image') && $childProduct->getData('image') !== 'no_selection') { $product->setImage($childProduct->getData('image')); break; } } } return parent::setImageFromChildProduct($product); }
public function testCheckProductConfiguration() { $product = new Varien_Object(); $buyRequest = new Varien_Object(array('qty' => 5)); $this->_model->checkProductConfiguration($product, $buyRequest); }
/** * Copied from Peets_Catalog_Model_Product_Type_Configurable * */ protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) { $attributes = $buyRequest->getSuperAttribute(); $isConfigurable = $product->getTypeId() == parent::TYPE_CODE; if ($attributes || !$this->_isStrictProcessMode($processMode) || $isConfigurable) { if (!$this->_isStrictProcessMode($processMode)) { if (is_array($attributes)) { foreach ($attributes as $key => $val) { if (empty($val)) { unset($attributes[$key]); } } } else { $attributes = array(); } } $result = Mage_Catalog_Model_Product_Type_Abstract::_prepareProduct($buyRequest, $product, $processMode); if (is_array($result)) { $product = $this->getProduct($product); /** * $attributes = array($attributeId=>$attributeValue) */ $subProduct = true; if ($this->_isStrictProcessMode($processMode)) { foreach ($this->getConfigurableAttributes($product) as $attributeItem) { /* @var $attributeItem Varien_Object */ $attrId = $attributeItem->getData('attribute_id'); if (!isset($attributes[$attrId]) || empty($attributes[$attrId])) { $subProduct = null; break; } } } if ($subProduct) { $subProduct = $this->getProductByAttributes($attributes, $product); } if ($subProduct) { $product->addCustomOption('attributes', serialize($attributes)); $product->addCustomOption('product_qty_' . $subProduct->getId(), 1, $subProduct); $product->addCustomOption('simple_product', $subProduct->getId(), $subProduct); $_result = $subProduct->getTypeInstance(true)->_prepareProduct($buyRequest, $subProduct, $processMode); if (is_string($_result) && !is_array($_result)) { return $_result; } if (!isset($_result[0])) { return Mage::helper('checkout')->__('Cannot add the item to shopping cart'); } /** * Adding parent product custom options to child product * to be sure that it will be unique as its parent */ if ($optionIds = $product->getCustomOption('option_ids')) { $optionIds = explode(',', $optionIds->getValue()); foreach ($optionIds as $optionId) { if ($option = $product->getCustomOption('option_' . $optionId)) { $_result[0]->addCustomOption('option_' . $optionId, $option->getValue()); } } } $_result[0]->setParentProductId($product->getId())->addCustomOption('parent_product_id', $product->getId()); if ($this->_isStrictProcessMode($processMode)) { $_result[0]->setCartQty(1); } $result[] = $_result[0]; return $result; } else { if (!$this->_isStrictProcessMode($processMode) || $isConfigurable) { return $result; } } } } return $this->getSpecifyOptionMessage(); }
/** * Save type related data * * @return unknown */ public function save() { parent::save(); $this->getProduct()->getLinkInstance()->saveGroupedLinks($this->getProduct()); return $this; }
protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) { $result = parent::_prepareProduct($buyRequest, $product, $processMode); return $this->addGiftCardOptions($buyRequest, $product, $result); }