isStateReadyForInvoice($entity)) { $messages[] = __('An invoice cannot be created when an order has a status of %1', $entity->getStatus()); } elseif (!$this->canInvoice($entity)) { $messages[] = __('The order does not allow an invoice to be created.'); } return $messages; } /** * Is state ready for invoice * * @param OrderInterface $order * @return bool */ private function isStateReadyForInvoice(OrderInterface $order) { if ($order->getState() === Order::STATE_PAYMENT_REVIEW || $order->getState() === Order::STATE_HOLDED || $order->getState() === Order::STATE_CANCELED || $order->getState() === Order::STATE_COMPLETE || $order->getState() === Order::STATE_CLOSED ) { return false; } return true; } /** * Can invoice * * @param OrderInterface $order * @return bool */ private function canInvoice(OrderInterface $order) { /** @var \Magento\Sales\Model\Order\Item $item */ foreach ($order->getItems() as $item) { if ($item->getQtyToInvoice() > 0 && !$item->getLockedDoInvoice()) { return true; } } return false; } }