/** * @inheritdoc */ public function getList(array $numbers, Struct\ProductContextInterface $context) { $products = $this->productGateway->getList($numbers, $context); $covers = $this->mediaService->getCovers($products, $context); $graduatedPrices = $this->graduatedPricesService->getList($products, $context); $cheapestPrices = $this->cheapestPriceService->getList($products, $context); $voteAverages = $this->voteService->getAverages($products, $context); $result = []; foreach ($numbers as $number) { if (!array_key_exists($number, $products)) { continue; } $product = $products[$number]; if (isset($covers[$number])) { $product->setCover($covers[$number]); } if (isset($graduatedPrices[$number])) { $product->setPriceRules($graduatedPrices[$number]); } if (isset($cheapestPrices[$number])) { $product->setCheapestPriceRule($cheapestPrices[$number]); } if (isset($voteAverages[$number])) { $product->setVoteAverage($voteAverages[$number]); } $product->addAttribute('marketing', $this->marketingService->getProductAttribute($product)); $this->priceCalculationService->calculateProduct($product, $context); if ($this->isProductValid($product, $context)) { $result[$number] = $product; } } return $result; }
/** * @param ListProduct[] $products * @param int $shopId * @return array[] */ private function getCheapestPrices($products, $shopId) { $keys = $this->identifierSelector->getCustomerGroupKeys(); $prices = []; foreach ($keys as $key) { $context = $this->contextService->createProductContext($shopId, null, $key); $customerPrices = $this->cheapestPriceService->getList($products, $context); foreach ($customerPrices as $number => $price) { $prices[$number][$key] = $price; } } return $prices; }