/** * {@inheritdoc} */ public function apply(ProductTemplateInterface $template, array $products) { $this->templateUpdater->update($template, $products); $results = $this->validateProducts($products); $validProducts = $results['products']; $violations = $results['violations']; $this->productSaver->saveAll($validProducts); return $violations; }
/** * {@inheritdoc} */ public function process($product) { $actions = $this->getConfiguredActions(); $variantGroup = $actions['value']; $variantGroup = $this->groupRepository->findOneByIdentifier($variantGroup); $variantGroup->addProduct($product); if (null !== $variantGroup->getProductTemplate()) { $this->templateUpdater->update($variantGroup->getProductTemplate(), [$product]); } if (null === $product || null !== $product && !$this->isProductValid($product)) { $this->stepExecution->incrementSummaryInfo('skipped_products'); return null; } return $product; }
/** * @param ProductInterface $product */ protected function setProductValuesFromVariantGroup(ProductInterface $product) { $variantGroup = $product->getVariantGroup(); if ($variantGroup !== null && $variantGroup->getProductTemplate() !== null) { $template = $variantGroup->getProductTemplate(); $this->templateUpdater->update($template, [$product]); } }
/** * {@inheritdoc} */ public function process($product) { $configuration = $this->getJobConfiguration(); if (!array_key_exists('actions', $configuration)) { throw new InvalidArgumentException('Missing configuration for \'actions\'.'); } $actions = $configuration['actions']; $variantGroup = $actions['value']; $variantGroup = $this->groupRepository->findOneByIdentifier($variantGroup); $variantGroup->addProduct($product); if (null !== $variantGroup->getProductTemplate()) { $this->templateUpdater->update($variantGroup->getProductTemplate(), [$product]); } if (null === $product || null !== $product && !$this->isProductValid($product)) { $this->stepExecution->incrementSummaryInfo('skipped_products'); return null; } return $product; }
/** * Updates product with its variant group values to ensure that values coming from variant group are always * applied after the product values (if a product value is updated and should come from variant group) * * @param ProductInterface $product * @param array $data */ protected function updateProductVariantValues(ProductInterface $product, array $data) { $variantGroup = $product->getVariantGroup(); $shouldEraseData = false; if (null !== $variantGroup && null !== $variantGroup->getProductTemplate()) { $template = $variantGroup->getProductTemplate(); foreach (array_keys($data) as $field) { if ($template->hasValueForAttributeCode($field) || null === $product->getValue($field)) { $shouldEraseData = true; } } if ($shouldEraseData) { $this->templateUpdater->update($template, [$product]); } } }