caseManagement = $caseManagement; $this->orderRepository = $orderRepository; $this->dateTimeFactory = $dateTimeFactory; } /** * Checks if it is possible to create Guarantee for order and case. * * @param int $orderId * @return bool */ public function isAvailable($orderId) { $case = $this->caseManagement->getByOrderId($orderId); if (null === $case) { return false; } if ($case->isGuaranteeEligible() === false) { return false; } $order = $this->getOrder($orderId); if (null === $order) { return false; } if (in_array($order->getState(), [Order::STATE_CANCELED, Order::STATE_CLOSED])) { return false; } if ($this->isOrderOlderThen(static::$guarantyEligibleDays, $order)) { return false; } return true; } /** * Checks if Guarantee submit is applicable for order. * * @param OrderInterface $order * @param int $days number of days from the order creation date to submit a case for Guarantee. * @return bool */ private function isOrderOlderThen($days, OrderInterface $order) { $orderCreateDate = $this->dateTimeFactory->create($order->getCreatedAt(), new \DateTimeZone('UTC')); $currentDate = $this->dateTimeFactory->create('now', new \DateTimeZone('UTC')); return $orderCreateDate->diff($currentDate)->days >= $days; } /** * Returns order by id * * @param int $orderId * @return OrderInterface|null */ private function getOrder($orderId) { try { $order = $this->orderRepository->get($orderId); } catch (InputException $e) { return null; } catch (NoSuchEntityException $e) { return null; } return $order; } }