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);
     }
 }
Exemple #4
0
 /**
  * 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);
 }
Exemple #5
0
 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;
 }
Exemple #7
0
 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;
 }
Exemple #9
0
 /**
  * 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;
 }
Exemple #12
0
 /**
  * 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;
 }
Exemple #13
0
 /**
  * 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'));
     }
 }
Exemple #16
0
 /**
  * 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;
 }
Exemple #18
0
 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();
 }
Exemple #20
0
 /**
  * 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;
 }
Exemple #21
0
 /**
  * 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;
 }
Exemple #22
0
 /**
  * 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();
 }
Exemple #23
0
 /**
  * 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);
 }
Exemple #24
0
 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;
 }
Exemple #27
0
 protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode)
 {
     $result = parent::_prepareProduct($buyRequest, $product, $processMode);
     return $this->addGiftCardOptions($buyRequest, $product, $result);
 }