![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/module-sales/Model/Order/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Sales\Model\Order; use Magento\Sales\Api\Data\InvoiceInterface; use Magento\Sales\Api\Data\InvoiceItemInterface; use Magento\Sales\Api\Data\OrderInterface; use Magento\Sales\Api\OrderRepositoryInterface; use Magento\Sales\Model\ValidatorInterface; /** * Interface InvoiceValidatorInterface */ class InvoiceQuantityValidator implements ValidatorInterface { /** * @var OrderRepositoryInterface */ private $orderRepository; /** * InvoiceValidator constructor. * @param OrderRepositoryInterface $orderRepository */ public function __construct(OrderRepositoryInterface $orderRepository) { $this->orderRepository = $orderRepository; } /** * @inheritdoc */ public function validate($invoice) { if ($invoice->getOrderId() === null) { return [__('Order Id is required for invoice document')]; } $order = $this->orderRepository->get($invoice->getOrderId()); return $this->checkQtyAvailability($invoice, $order); } /** * Check qty availability * * @param InvoiceInterface $invoice * @param OrderInterface $order * @return array */ private function checkQtyAvailability(InvoiceInterface $invoice, OrderInterface $order) { $messages = []; $qtys = $this->getInvoiceQty($invoice); $totalQty = 0; if ($qtys) { /** @var \Magento\Sales\Model\Order\Item $orderItem */ foreach ($order->getItems() as $orderItem) { if (isset($qtys[$orderItem->getId()])) { if ($qtys[$orderItem->getId()] > $orderItem->getQtyToInvoice() && !$orderItem->isDummy()) { $messages[] = __( 'The quantity to invoice must not be greater than the uninvoiced quantity' . ' for product SKU "%1".', $orderItem->getSku() ); } $totalQty += $qtys[$orderItem->getId()]; unset($qtys[$orderItem->getId()]); } } } if ($qtys) { $messages[] = __('The invoice contains one or more items that are not part of the original order.'); } elseif ($totalQty <= 0) { $messages[] = __("The invoice can't be created without products. Add products and try again."); } return $messages; } /** * @param InvoiceInterface $invoice * @return array */ private function getInvoiceQty(InvoiceInterface $invoice) { $qtys = []; /** @var InvoiceItemInterface $item */ foreach ($invoice->getItems() as $item) { $qtys[$item->getOrderItemId()] = $item->getQty(); } return $qtys; } }