/** * @return array */ protected function prepareParameters() { $queryParameters = parent::prepareParameters(); $variantGroupId = $queryParameters['currentGroup']; if (null !== $variantGroupId) { $productIds = $this->productRepository->getEligibleProductIdsForVariantGroup($variantGroupId); if (count($productIds) === 0) { $productIds = [0]; } } else { $productIds = [0]; } $queryParameters['productIds'] = $productIds; return $queryParameters; }
/** * @param array $configuration */ public function execute(array $configuration) { $actions = $configuration['actions']; $variantGroupCode = $actions['value']; $variantGroup = $this->groupRepository->findOneByIdentifier($variantGroupCode); $axisAttributeCodes = $this->getAxisAttributeCodes($variantGroup); $eligibleProductIds = $this->productRepository->getEligibleProductIdsForVariantGroup($variantGroup->getId()); $cursor = $this->getProductsCursor($configuration['filters']); $paginator = $this->paginatorFactory->createPaginator($cursor); list($productAttributeAxis, $acceptedIds) = $this->filterDuplicateAxisCombinations($paginator, $eligibleProductIds, $axisAttributeCodes); $excludedIds = $this->addSkippedMessageForDuplicatedProducts($productAttributeAxis); $acceptedIds = array_diff($acceptedIds, $excludedIds); $configuration['filters'] = [['field' => 'id', 'operator' => 'IN', 'value' => $acceptedIds]]; if (0 === count($acceptedIds)) { $configuration = null; } $this->setJobConfiguration(json_encode($configuration)); }