123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Signifyd\Model\SignifydGateway\Request;
- use Magento\Sales\Model\Order;
- use Magento\Signifyd\Model\CustomerOrders;
- /**
- * Prepares details based on registered user account info
- */
- class UserAccountBuilder
- {
- /**
- * @var \Magento\Customer\Api\CustomerRepositoryInterface
- */
- private $customerRepository;
- /**
- * @var \Magento\Framework\Intl\DateTimeFactory
- */
- private $dateTimeFactory;
- /**
- * @var CustomerOrders
- */
- private $customerOrders;
- /**
- * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
- * @param CustomerOrders $customerOrders
- * @param \Magento\Framework\Intl\DateTimeFactory $dateTimeFactory
- */
- public function __construct(
- \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
- CustomerOrders $customerOrders,
- \Magento\Framework\Intl\DateTimeFactory $dateTimeFactory
- ) {
- $this->customerRepository = $customerRepository;
- $this->dateTimeFactory = $dateTimeFactory;
- $this->customerOrders = $customerOrders;
- }
- /**
- * Returns user account data params.
- * Only for registered customers.
- *
- * @param Order $order
- * @return array
- */
- public function build(Order $order)
- {
- $result = [];
- $customerId = $order->getCustomerId();
- if (null === $customerId) {
- return $result;
- }
- $customer = $this->customerRepository->getById($customerId);
- $result = [
- 'userAccount' => [
- 'email' => $customer->getEmail(),
- 'username' => $customer->getEmail(),
- 'phone' => $order->getBillingAddress()->getTelephone(),
- 'accountNumber' => $customerId,
- 'createdDate' => $this->formatDate($customer->getCreatedAt()),
- 'lastUpdateDate' => $this->formatDate($customer->getUpdatedAt())
- ]
- ];
- $ordersInfo = $this->customerOrders->getAggregatedOrdersInfo($customerId);
- if (isset($ordersInfo['aggregateOrderCount'])) {
- $result['userAccount']['aggregateOrderCount'] = $ordersInfo['aggregateOrderCount'];
- }
- if (isset($ordersInfo['aggregateOrderDollars'])) {
- $result['userAccount']['aggregateOrderDollars'] = $ordersInfo['aggregateOrderDollars'];
- }
- return $result;
- }
- /**
- * Returns date formatted according to ISO8601.
- *
- * @param string $date
- * @return string
- */
- private function formatDate($date)
- {
- $result = $this->dateTimeFactory->create(
- $date,
- new \DateTimeZone('UTC')
- );
- return $result->format(\DateTime::ATOM);
- }
- }
|