123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Signifyd\Model;
- use Magento\Sales\Api\OrderManagementInterface;
- use Magento\Sales\Model\Order;
- use Magento\Sales\Model\OrderFactory;
- use Magento\Signifyd\Api\Data\CaseInterface;
- /**
- * Updates order state.
- */
- class OrderStateService
- {
- /**
- * @var OrderFactory
- */
- private $orderFactory;
- /**
- * @var OrderManagementInterface
- */
- private $orderManagement;
- /**
- * @var CommentsHistoryUpdater
- */
- private $commentsHistoryUpdater;
- /**
- * @param OrderFactory $orderFactory
- * @param OrderManagementInterface $orderManagement
- * @param CommentsHistoryUpdater $commentsHistoryUpdater
- */
- public function __construct(
- OrderFactory $orderFactory,
- OrderManagementInterface $orderManagement,
- CommentsHistoryUpdater $commentsHistoryUpdater
- ) {
- $this->orderFactory = $orderFactory;
- $this->orderManagement = $orderManagement;
- $this->commentsHistoryUpdater = $commentsHistoryUpdater;
- }
- /**
- * Updates order state depending on case guarantee disposition status.
- *
- * @param CaseInterface $case
- * @return void
- */
- public function updateByCase(CaseInterface $case)
- {
- $orderId = $case->getOrderId();
- switch ($case->getGuaranteeDisposition()) {
- case CaseInterface::GUARANTEE_APPROVED:
- $this->unHold($orderId);
- break;
- case CaseInterface::GUARANTEE_DECLINED:
- $this->hold($orderId);
- break;
- case CaseInterface::GUARANTEE_PENDING:
- if ($this->hold($orderId)) {
- $this->commentsHistoryUpdater->addComment(
- $case,
- __('Awaiting the Signifyd guarantee disposition.'),
- Order::STATE_HOLDED
- );
- }
- break;
- }
- }
- /**
- * Tries to unhold the order.
- *
- * @param int $orderId
- * @return bool
- */
- private function unHold($orderId)
- {
- $order = $this->getOrder($orderId);
- if ($order->canUnhold()) {
- return $this->orderManagement->unHold($orderId);
- }
- return false;
- }
- /**
- * Tries to hold the order.
- *
- * @param int $orderId
- * @return bool
- */
- private function hold($orderId)
- {
- $order = $this->getOrder($orderId);
- if ($order->canHold()) {
- return $this->orderManagement->hold($orderId);
- }
- return false;
- }
- /**
- * Returns the order.
- *
- * @param int $orderId
- * @return Order
- */
- private function getOrder($orderId)
- {
- return $this->orderFactory->create()->load($orderId);
- }
- }
|