SalesOrderBeforeSaveObserver.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Payment\Observer;
  7. use Magento\Framework\Event\ObserverInterface;
  8. /**
  9. * Verify order payment observer
  10. */
  11. class SalesOrderBeforeSaveObserver implements ObserverInterface
  12. {
  13. /**
  14. * Set forced canCreditmemo flag
  15. *
  16. * @param \Magento\Framework\Event\Observer $observer
  17. * @return $this
  18. * @throws \Magento\Framework\Exception\LocalizedException in case order has no payment specified.
  19. */
  20. public function execute(\Magento\Framework\Event\Observer $observer)
  21. {
  22. /** @var \Magento\Sales\Model\Order $order */
  23. $order = $observer->getEvent()->getOrder();
  24. if (!$order->getPayment()) {
  25. throw new \Magento\Framework\Exception\LocalizedException(
  26. __('Please provide payment for the order.')
  27. );
  28. }
  29. if ($order->getPayment()->getMethodInstance()->getCode() != 'free') {
  30. return $this;
  31. }
  32. if ($order->canUnhold()) {
  33. return $this;
  34. }
  35. if ($order->isCanceled() || $order->getState() == \Magento\Sales\Model\Order::STATE_CLOSED) {
  36. return $this;
  37. }
  38. /**
  39. * Allow forced creditmemo just in case if it wasn't defined before
  40. */
  41. if (!$order->hasForcedCanCreditmemo()) {
  42. $order->setForcedCanCreditmemo(true);
  43. }
  44. return $this;
  45. }
  46. }