getEvent()->getOrder(); if (!$order->getPayment()) { throw new \Magento\Framework\Exception\LocalizedException( __('Please provide payment for the order.') ); } if ($order->getPayment()->getMethodInstance()->getCode() != 'free') { return $this; } if ($order->canUnhold()) { return $this; } if ($order->isCanceled() || $order->getState() == \Magento\Sales\Model\Order::STATE_CLOSED) { return $this; } /** * Allow forced creditmemo just in case if it wasn't defined before */ if (!$order->hasForcedCanCreditmemo()) { $order->setForcedCanCreditmemo(true); } return $this; } }