/** * @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')); }
/** * @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')); }
/** * 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; }
/** * 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; } } } } } } }
/** * {@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); }
/** * 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; } } } } } } }
/** * 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; }
/** * {@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); }