/**
  * @magentoDbIsolation enabled
  * @magentoDataFixture Magento/Catalog/_files/product_simple.php
  * @magentoDataFixture Magento/Catalog/_files/product_attribute_with_invalid_apply_to.php
  */
 public function testBeforeSave()
 {
     $repository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\ProductRepository');
     $product = $repository->get('simple');
     // fixture
     $product->setData('attribute_with_invalid_applyto', 'value');
     $this->_model->beforeSave($product);
     $this->assertTrue($product->canAffectOptions());
     $this->assertFalse($product->hasData('attribute_with_invalid_applyto'));
 }
 /**
  * @magentoDbIsolation enabled
  * @magentoDataFixture Magento/Catalog/_files/product_simple.php
  * @magentoDataFixture Magento/Catalog/_files/product_attribute_with_invalid_apply_to.php
  */
 public function testBeforeSave()
 {
     /** @var $product \Magento\Catalog\Model\Product */
     $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product');
     $product->load(1);
     // fixture
     $product->setData('attribute_with_invalid_applyto', 'value');
     $this->_model->beforeSave($product);
     $this->assertTrue($product->canAffectOptions());
     $this->assertFalse($product->hasData('attribute_with_invalid_applyto'));
 }
Пример #3
0
 /**
  * @magentoDataFixture Magento/Catalog/_files/product_simple.php
  */
 public function testBeforeSave()
 {
     $this->markTestIncomplete('MAGETWO-9199');
     /** @var $product \Magento\Catalog\Model\Product */
     $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\\Catalog\\Model\\Product');
     $product->load(1);
     // fixture
     $product->setData('links_purchased_separately', 'value');
     // this attribute is applicable only for downloadable
     $this->_model->beforeSave($product);
     $this->assertTrue($product->canAffectOptions());
     $this->assertFalse($product->hasData('links_purchased_separately'));
 }
Пример #4
0
 /**
  * Before save process
  *
  * @param  \Magento\Catalog\Model\Product $product
  * @return $this
  */
 public function beforeSave($product)
 {
     parent::beforeSave($product);
     $product->canAffectOptions(false);
     if ($product->getCanSaveConfigurableAttributes()) {
         $product->canAffectOptions(true);
         $data = $product->getConfigurableAttributesData();
         if (!empty($data)) {
             foreach ($data as $attribute) {
                 if (!empty($attribute['values'])) {
                     $product->setTypeHasOptions(true);
                     $product->setTypeHasRequiredOptions(true);
                     break;
                 }
             }
         }
     }
     foreach ($this->getConfigurableAttributes($product) as $attribute) {
         $product->setData($attribute->getProductAttribute()->getAttributeCode(), null);
     }
     return $this;
 }
Пример #5
0
 /**
  * Before save type related data
  *
  * @param \Magento\Catalog\Model\Product $product
  * @return $this|void
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  */
 public function beforeSave($product)
 {
     parent::beforeSave($product);
     // If bundle product has dynamic weight, than delete weight attribute
     if (!$product->getData('weight_type') && $product->hasData('weight')) {
         $product->setData('weight', false);
     }
     if ($product->getPriceType() == Price::PRICE_TYPE_DYNAMIC) {
         /** unset product custom options for dynamic price */
         if ($product->hasData('product_options')) {
             $product->unsetData('product_options');
         }
     }
     $product->canAffectOptions(false);
     if ($product->getCanSaveBundleSelections()) {
         $product->canAffectOptions(true);
         $selections = $product->getBundleSelectionsData();
         if ($selections && !empty($selections)) {
             $options = $product->getBundleOptionsData();
             if ($options) {
                 foreach ($options as $option) {
                     if (empty($option['delete']) || 1 != (int) $option['delete']) {
                         $product->setTypeHasOptions(true);
                         if (1 == (int) $option['required']) {
                             $product->setTypeHasRequiredOptions(true);
                             break;
                         }
                     }
                 }
             }
         }
     }
 }
Пример #6
0
 /**
  * {@inheritdoc}
  */
 public function beforeSave($product)
 {
     if ($product->hasData('product_options') && !empty($product->getData('product_options'))) {
         throw new \Exception('Custom options for grouped product type are not supported');
     }
     return parent::beforeSave($product);
 }
Пример #7
0
 /**
  * Before save type related data
  *
  * @param \Magento\Catalog\Model\Product $product
  * @return $this|void
  */
 public function beforeSave($product)
 {
     parent::beforeSave($product);
     // If bundle product has dynamic weight, than delete weight attribute
     if (!$product->getData('weight_type') && $product->hasData('weight')) {
         $product->setData('weight', false);
     }
     if ($product->getPriceType() == Price::PRICE_TYPE_DYNAMIC) {
         $product->setData('msrp_enabled', \Magento\Catalog\Model\Product\Attribute\Source\Msrp\Type\Enabled::MSRP_ENABLE_NO);
         $product->unsetData('msrp');
         $product->unsetData('msrp_display_actual_price_type');
         /** unset product custom options for dynamic price */
         if ($product->hasData('product_options')) {
             $product->unsetData('product_options');
         }
     }
     $product->canAffectOptions(false);
     if ($product->getCanSaveBundleSelections()) {
         $product->canAffectOptions(true);
         $selections = $product->getBundleSelectionsData();
         if ($selections && !empty($selections)) {
             $options = $product->getBundleOptionsData();
             if ($options) {
                 foreach ($options as $option) {
                     if (empty($option['delete']) || 1 != (int) $option['delete']) {
                         $product->setTypeHasOptions(true);
                         if (1 == (int) $option['required']) {
                             $product->setTypeHasRequiredOptions(true);
                             break;
                         }
                     }
                 }
             }
         }
     }
 }
Пример #8
0
 /**
  * Before save process
  *
  * @param  \Magento\Catalog\Model\Product $product
  * @return $this
  */
 public function beforeSave($product)
 {
     $metadata = $this->getMetadataPool()->getMetadata(ProductInterface::class);
     $productId = $product->getData($metadata->getLinkField());
     $this->getCache()->clean(\Zend_Cache::CLEANING_MODE_MATCHING_TAG, [self::TYPE_CODE . '_' . $productId]);
     parent::beforeSave($product);
     $product->canAffectOptions(false);
     if ($product->getCanSaveConfigurableAttributes()) {
         $product->canAffectOptions(true);
         $data = $product->getConfigurableAttributesData();
         if (!empty($data)) {
             foreach ($data as $attribute) {
                 if (!empty($attribute['values'])) {
                     $product->setTypeHasOptions(true);
                     $product->setTypeHasRequiredOptions(true);
                     break;
                 }
             }
         }
     }
     foreach ($this->getConfigurableAttributes($product) as $attribute) {
         $product->setData($attribute->getProductAttribute()->getAttributeCode(), null);
     }
     return $this;
 }
Пример #9
0
 /**
  * {@inheritdoc}
  */
 public function beforeSave($product)
 {
     //clear cached associated links
     $product->unsetData($this->_keyAssociatedProducts);
     if ($product->hasData('product_options') && !empty($product->getData('product_options'))) {
         throw new \Exception('Custom options for grouped product type are not supported');
     }
     return parent::beforeSave($product);
 }