State.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\ResourceModel\Order\Handler;
  7. use Magento\Sales\Model\Order;
  8. /**
  9. * Class State
  10. */
  11. class State
  12. {
  13. /**
  14. * Check order status and adjust the status before save
  15. *
  16. * @param Order $order
  17. * @return $this
  18. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  19. * @SuppressWarnings(PHPMD.NPathComplexity)
  20. */
  21. public function check(Order $order)
  22. {
  23. $currentState = $order->getState();
  24. if ($currentState == Order::STATE_NEW && $order->getIsInProcess()) {
  25. $order->setState(Order::STATE_PROCESSING)
  26. ->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_PROCESSING));
  27. $currentState = Order::STATE_PROCESSING;
  28. }
  29. if (!$order->isCanceled() && !$order->canUnhold() && !$order->canInvoice()) {
  30. if (in_array($currentState, [Order::STATE_PROCESSING, Order::STATE_COMPLETE])
  31. && !$order->canCreditmemo()
  32. && !$order->canShip()
  33. ) {
  34. $order->setState(Order::STATE_CLOSED)
  35. ->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_CLOSED));
  36. } elseif ($currentState === Order::STATE_PROCESSING && !$order->canShip()) {
  37. $order->setState(Order::STATE_COMPLETE)
  38. ->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_COMPLETE));
  39. }
  40. }
  41. return $this;
  42. }
  43. }