OrderCommand.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\Order\Payment\State;
  7. use Magento\Framework\App\ObjectManager;
  8. use Magento\Sales\Api\Data\OrderInterface;
  9. use Magento\Sales\Api\Data\OrderPaymentInterface;
  10. use Magento\Sales\Model\Order;
  11. use Magento\Sales\Model\Order\StatusResolver;
  12. class OrderCommand implements CommandInterface
  13. {
  14. /**
  15. * @var StatusResolver
  16. */
  17. private $statusResolver;
  18. /**
  19. * @param StatusResolver|null $statusResolver
  20. */
  21. public function __construct(StatusResolver $statusResolver = null)
  22. {
  23. $this->statusResolver = $statusResolver
  24. ? : ObjectManager::getInstance()->get(StatusResolver::class);
  25. }
  26. /**
  27. * @param OrderPaymentInterface $payment
  28. * @param string|float $amount
  29. * @param OrderInterface $order
  30. * @return string
  31. */
  32. public function execute(OrderPaymentInterface $payment, $amount, OrderInterface $order)
  33. {
  34. $state = Order::STATE_PROCESSING;
  35. $status = null;
  36. $message = 'Ordered amount of %1';
  37. if ($payment->getIsTransactionPending()) {
  38. $state = Order::STATE_PAYMENT_REVIEW;
  39. $message = 'The order amount of %1 is pending approval on the payment gateway.';
  40. }
  41. if ($payment->getIsFraudDetected()) {
  42. $state = Order::STATE_PAYMENT_REVIEW;
  43. $status = Order::STATUS_FRAUD;
  44. $message = 'The order amount of %1 is pending approval on the payment gateway.';
  45. }
  46. if (!isset($status)) {
  47. $status = $this->statusResolver->getOrderStatusByState($order, $state);
  48. }
  49. $order->setState($state);
  50. $order->setStatus($status);
  51. return __($message, $order->getBaseCurrency()->formatTxt($amount));
  52. }
  53. /**
  54. * @deprecated 100.1.9 Replaced by a StatusResolver class call.
  55. *
  56. * @param Order $order
  57. * @param string $status
  58. * @param string $state
  59. * @return void
  60. */
  61. protected function setOrderStateAndStatus(Order $order, $status, $state)
  62. {
  63. if (!$status) {
  64. $status = $order->getConfig()->getStateDefaultStatus($state);
  65. }
  66. $order->setState($state)->setStatus($status);
  67. }
  68. }