OrderStateService.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Signifyd\Model;
  7. use Magento\Sales\Api\OrderManagementInterface;
  8. use Magento\Sales\Model\Order;
  9. use Magento\Sales\Model\OrderFactory;
  10. use Magento\Signifyd\Api\Data\CaseInterface;
  11. /**
  12. * Updates order state.
  13. */
  14. class OrderStateService
  15. {
  16. /**
  17. * @var OrderFactory
  18. */
  19. private $orderFactory;
  20. /**
  21. * @var OrderManagementInterface
  22. */
  23. private $orderManagement;
  24. /**
  25. * @var CommentsHistoryUpdater
  26. */
  27. private $commentsHistoryUpdater;
  28. /**
  29. * @param OrderFactory $orderFactory
  30. * @param OrderManagementInterface $orderManagement
  31. * @param CommentsHistoryUpdater $commentsHistoryUpdater
  32. */
  33. public function __construct(
  34. OrderFactory $orderFactory,
  35. OrderManagementInterface $orderManagement,
  36. CommentsHistoryUpdater $commentsHistoryUpdater
  37. ) {
  38. $this->orderFactory = $orderFactory;
  39. $this->orderManagement = $orderManagement;
  40. $this->commentsHistoryUpdater = $commentsHistoryUpdater;
  41. }
  42. /**
  43. * Updates order state depending on case guarantee disposition status.
  44. *
  45. * @param CaseInterface $case
  46. * @return void
  47. */
  48. public function updateByCase(CaseInterface $case)
  49. {
  50. $orderId = $case->getOrderId();
  51. switch ($case->getGuaranteeDisposition()) {
  52. case CaseInterface::GUARANTEE_APPROVED:
  53. $this->unHold($orderId);
  54. break;
  55. case CaseInterface::GUARANTEE_DECLINED:
  56. $this->hold($orderId);
  57. break;
  58. case CaseInterface::GUARANTEE_PENDING:
  59. if ($this->hold($orderId)) {
  60. $this->commentsHistoryUpdater->addComment(
  61. $case,
  62. __('Awaiting the Signifyd guarantee disposition.'),
  63. Order::STATE_HOLDED
  64. );
  65. }
  66. break;
  67. }
  68. }
  69. /**
  70. * Tries to unhold the order.
  71. *
  72. * @param int $orderId
  73. * @return bool
  74. */
  75. private function unHold($orderId)
  76. {
  77. $order = $this->getOrder($orderId);
  78. if ($order->canUnhold()) {
  79. return $this->orderManagement->unHold($orderId);
  80. }
  81. return false;
  82. }
  83. /**
  84. * Tries to hold the order.
  85. *
  86. * @param int $orderId
  87. * @return bool
  88. */
  89. private function hold($orderId)
  90. {
  91. $order = $this->getOrder($orderId);
  92. if ($order->canHold()) {
  93. return $this->orderManagement->hold($orderId);
  94. }
  95. return false;
  96. }
  97. /**
  98. * Returns the order.
  99. *
  100. * @param int $orderId
  101. * @return Order
  102. */
  103. private function getOrder($orderId)
  104. {
  105. return $this->orderFactory->create()->load($orderId);
  106. }
  107. }