Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CustomerOrders.php
Go to the documentation of this file.
1 <?php
6 namespace Magento\Signifyd\Model;
7 
8 use Exception;
10 use Magento\Directory\Model\CurrencyFactory;
15 use Psr\Log\LoggerInterface;
16 
23 {
27  private $searchCriteriaBuilder;
28 
32  private $filterBuilder;
33 
37  private $orderRepository;
38 
42  private $logger;
43 
47  private $currencyFactory;
48 
52  private $currencies = [];
53 
57  private static $usdCurrencyCode = 'USD';
58 
66  public function __construct(
67  SearchCriteriaBuilder $searchCriteriaBuilder,
68  FilterBuilder $filterBuilder,
69  OrderRepositoryInterface $orderRepository,
70  CurrencyFactory $currencyFactory,
71  LoggerInterface $logger
72  ) {
73  $this->searchCriteriaBuilder = $searchCriteriaBuilder;
74  $this->filterBuilder = $filterBuilder;
75  $this->orderRepository = $orderRepository;
76  $this->currencyFactory = $currencyFactory;
77  $this->logger = $logger;
78  }
79 
91  {
92  $result = [
93  'aggregateOrderCount' => null,
94  'aggregateOrderDollars' => null
95  ];
96 
97  $customerOrders = $this->getCustomerOrders($customerId);
98  if (!empty($customerOrders)) {
99  try {
100  $orderTotalDollars = 0.0;
101  foreach ($customerOrders as $order) {
102  $orderTotalDollars += $this->getUsdOrderTotal(
103  $order->getBaseGrandTotal(),
104  $order->getBaseCurrencyCode()
105  );
106  }
107  $result = [
108  'aggregateOrderCount' => count($customerOrders),
109  'aggregateOrderDollars' => $orderTotalDollars
110  ];
111  } catch (Exception $e) {
112  $this->logger->error($e->getMessage());
113  }
114  }
115 
116  return $result;
117  }
118 
125  private function getCustomerOrders($customerId)
126  {
127  $filters = [
128  $this->filterBuilder->setField(OrderInterface::CUSTOMER_ID)->setValue($customerId)->create()
129  ];
130  $this->searchCriteriaBuilder->addFilters($filters);
131  $searchCriteria = $this->searchCriteriaBuilder->create();
132  $searchResults = $this->orderRepository->getList($searchCriteria);
133 
134  return $searchResults->getItems();
135  }
136 
144  private function getUsdOrderTotal($amount, $currency)
145  {
146  if ($currency === self::$usdCurrencyCode) {
147  return $amount;
148  }
149 
150  $operationCurrency = $this->getCurrencyByCode($currency);
151 
152  return $operationCurrency->convert($amount, self::$usdCurrencyCode);
153  }
154 
161  private function getCurrencyByCode($currencyCode)
162  {
163  if (isset($this->currencies[$currencyCode])) {
164  return $this->currencies[$currencyCode];
165  }
166 
168  $currency = $this->currencyFactory->create();
169  $this->currencies[$currencyCode] = $currency->load($currencyCode);
170 
171  return $this->currencies[$currencyCode];
172  }
173 }
$orderRepository
Definition: order.php:69
$order
Definition: order.php:55
$logger
$searchCriteria
$amount
Definition: order.php:14
$filters
Definition: uploader.phtml:11
$searchCriteriaBuilder
__construct(SearchCriteriaBuilder $searchCriteriaBuilder, FilterBuilder $filterBuilder, OrderRepositoryInterface $orderRepository, CurrencyFactory $currencyFactory, LoggerInterface $logger)