Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
CreateGuaranteeAbility.php
Go to the documentation of this file.
1 <?php
7 
15 
20 {
24  private $caseManagement;
25 
29  private $orderRepository;
30 
34  private $dateTimeFactory;
35 
41  private static $guarantyEligibleDays = 7;
42 
48  public function __construct(
49  CaseManagement $caseManagement,
50  OrderRepositoryInterface $orderRepository,
51  DateTimeFactory $dateTimeFactory
52  ) {
53  $this->caseManagement = $caseManagement;
54  $this->orderRepository = $orderRepository;
55  $this->dateTimeFactory = $dateTimeFactory;
56  }
57 
64  public function isAvailable($orderId)
65  {
66  $case = $this->caseManagement->getByOrderId($orderId);
67  if (null === $case) {
68  return false;
69  }
70 
71  if ($case->isGuaranteeEligible() === false) {
72  return false;
73  }
74 
75  $order = $this->getOrder($orderId);
76  if (null === $order) {
77  return false;
78  }
79 
80  if (in_array($order->getState(), [Order::STATE_CANCELED, Order::STATE_CLOSED])) {
81  return false;
82  }
83 
84  if ($this->isOrderOlderThen(static::$guarantyEligibleDays, $order)) {
85  return false;
86  }
87 
88  return true;
89  }
90 
98  private function isOrderOlderThen($days, OrderInterface $order)
99  {
100  $orderCreateDate = $this->dateTimeFactory->create($order->getCreatedAt(), new \DateTimeZone('UTC'));
101  $currentDate = $this->dateTimeFactory->create('now', new \DateTimeZone('UTC'));
102 
103  return $orderCreateDate->diff($currentDate)->days >= $days;
104  }
105 
112  private function getOrder($orderId)
113  {
114  try {
115  $order = $this->orderRepository->get($orderId);
116  } catch (InputException $e) {
117  return null;
118  } catch (NoSuchEntityException $e) {
119  return null;
120  }
121 
122  return $order;
123  }
124 }
$orderRepository
Definition: order.php:69
$case
$order
Definition: order.php:55
__construct(CaseManagement $caseManagement, OrderRepositoryInterface $orderRepository, DateTimeFactory $dateTimeFactory)