10 use Magento\Directory\Model\CurrencyFactory;
15 use Psr\Log\LoggerInterface;
27 private $searchCriteriaBuilder;
32 private $filterBuilder;
37 private $orderRepository;
47 private $currencyFactory;
52 private $currencies = [];
57 private static $usdCurrencyCode =
'USD';
70 CurrencyFactory $currencyFactory,
74 $this->filterBuilder = $filterBuilder;
76 $this->currencyFactory = $currencyFactory;
93 'aggregateOrderCount' =>
null,
94 'aggregateOrderDollars' => null
97 $customerOrders = $this->getCustomerOrders(
$customerId);
98 if (!empty($customerOrders)) {
100 $orderTotalDollars = 0.0;
101 foreach ($customerOrders as
$order) {
102 $orderTotalDollars += $this->getUsdOrderTotal(
103 $order->getBaseGrandTotal(),
104 $order->getBaseCurrencyCode()
108 'aggregateOrderCount' => count($customerOrders),
109 'aggregateOrderDollars' => $orderTotalDollars
111 }
catch (Exception $e) {
112 $this->logger->error($e->getMessage());
130 $this->searchCriteriaBuilder->addFilters(
$filters);
134 return $searchResults->getItems();
144 private function getUsdOrderTotal(
$amount, $currency)
146 if ($currency === self::$usdCurrencyCode) {
150 $operationCurrency = $this->getCurrencyByCode($currency);
152 return $operationCurrency->convert(
$amount, self::$usdCurrencyCode);
161 private function getCurrencyByCode($currencyCode)
163 if (isset($this->currencies[$currencyCode])) {
164 return $this->currencies[$currencyCode];
168 $currency = $this->currencyFactory->create();
169 $this->currencies[$currencyCode] = $currency->load($currencyCode);
171 return $this->currencies[$currencyCode];
__construct(SearchCriteriaBuilder $searchCriteriaBuilder, FilterBuilder $filterBuilder, OrderRepositoryInterface $orderRepository, CurrencyFactory $currencyFactory, LoggerInterface $logger)
getAggregatedOrdersInfo($customerId)