Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
LastCreatedPaymentTokenChooser.php
Go to the documentation of this file.
1 <?php
7 
18 
25 {
29  private $paymentTokenRepository;
30 
34  private $integrationsManager;
35 
39  private $sortOrderBuilder;
40 
44  private $searchCriteriaBuilder;
45 
49  private $dateTimeFactory;
50 
59  public function __construct(
60  PaymentTokenRepositoryInterface $paymentTokenRepository,
61  IntegrationsManager $integrationsManager,
62  SortOrderBuilder $sortOrderBuilder,
63  SearchCriteriaBuilder $searchCriteriaBuilder,
64  DateTimeFactory $dateTimeFactory
65  ) {
66  $this->paymentTokenRepository = $paymentTokenRepository;
67  $this->integrationsManager = $integrationsManager;
68  $this->sortOrderBuilder = $sortOrderBuilder;
69  $this->searchCriteriaBuilder = $searchCriteriaBuilder;
70  $this->dateTimeFactory = $dateTimeFactory;
71  }
72 
76  public function choose(Store $store, Customer $customer)
77  {
78  $searchCriteria = $this->buildSearchCriteria($store->getId(), $customer->getId());
79  $searchResult = $this->paymentTokenRepository->getList($searchCriteria);
80  $tokens = $searchResult->getItems();
81  $lastCreatedToken = array_shift($tokens);
82  return $lastCreatedToken;
83  }
84 
92  private function buildSearchCriteria(int $storeId, int $customerId): SearchCriteriaInterface
93  {
94  $this->searchCriteriaBuilder->addFilter(
97  );
98  $this->searchCriteriaBuilder->addFilter(
100  1
101  );
102  $this->searchCriteriaBuilder->addFilter(
104  1
105  );
106  $this->searchCriteriaBuilder->addFilter(
108  $this->getSupportedPaymentMethodCodes($storeId),
109  'in'
110  );
111  $this->searchCriteriaBuilder->addFilter(
113  $this->dateTimeFactory->create('now', new \DateTimeZone('UTC'))
114  ->format('Y-m-d 00:00:00'),
115  'gt'
116  );
117 
118  $creationReverseOrder = $this->sortOrderBuilder->setField(PaymentTokenInterface::CREATED_AT)
119  ->setDescendingDirection()
120  ->create();
121  $this->searchCriteriaBuilder->addSortOrder($creationReverseOrder);
122  $this->searchCriteriaBuilder->setPageSize(1);
123 
124  $searchCriteria = $this->searchCriteriaBuilder->create();
125 
126  return $searchCriteria;
127  }
128 
135  private function getSupportedPaymentMethodCodes(int $storeId)
136  {
137  $integrations = $this->integrationsManager->getList($storeId);
138  $integrations = array_filter($integrations, function (Integration $integration) {
139  return $integration->isAvailable();
140  });
141  $paymentMethodCodes = array_map(function (Integration $integration) {
142  return $integration->getVaultProviderCode();
143  }, $integrations);
144  return $paymentMethodCodes;
145  }
146 }
$customer
Definition: customers.php:11
$searchCriteria
$searchCriteriaBuilder
__construct(PaymentTokenRepositoryInterface $paymentTokenRepository, IntegrationsManager $integrationsManager, SortOrderBuilder $sortOrderBuilder, SearchCriteriaBuilder $searchCriteriaBuilder, DateTimeFactory $dateTimeFactory)
$tokens
Definition: cards_list.phtml:9