mapper = $mapper; $this->sourceRepository = $sourceRepository; $this->searchCriteriaResolver = $searchCriteriaResolver; $this->extractor = $extractor; $this->searchResultFactory = $searchResultFactory; $this->logger = $logger; $this->customerSession = $customerSession; $this->resource = $resource; $this->sourceCustomerFactory = $sourceCustomerFactory; } /** * @return array */ protected function getPreferredSource() { if (!empty($this->sources)) { return $this->sources; } $customer = $this->customerSession->getCustomer(); if ($customer->getId()) { /* @var $model SourceInterface */ $sourceCustomer = $this->sourceCustomerFactory->create(); $this->resource->load($sourceCustomer, $customer->getId(), 'customer_id'); try { if (!$sourceCustomer->getSourceCode()) { $sourceCustomer->setSourceCode(self::DEFAULT_SOURCE); } return $this->sources = [$this->sourceRepository->get($sourceCustomer->getSourceCode())]; } catch (\Exception $e) { } } return []; } /** * @inheritdoc */ public function execute(SearchRequestInterface $searchRequest): SearchResultInterface { $searchCriteria = $this->searchCriteriaResolver->resolve($searchRequest); $searchResult = $this->sourceRepository->getList($searchCriteria); if (!empty($this->getPreferredSource())){ $sources = $this->getPreferredSource(); $searchResult->setTotalCount(1); } else { $sources = $this->extractor->getSources($searchRequest, $searchResult); } $pickupLocations = []; foreach ($sources as $source) { $pickupLocations[] = $this->mapper->map($source); } return $this->searchResultFactory->create( [ 'items' => $pickupLocations, 'totalCount' => $searchResult->getTotalCount(), 'searchRequest' => $searchRequest ] ); } }