Magento Extensions Rating 2024
EXTENSIONS BY CATEGORY
B2B (Business-To-Business)
Blog
Customer
ERP (Enterprise Resource Planning)
Mega Menu
One Step Checkout
Order
POS (Point Of Sale)
Search
Shopping Cart
Sitemap
SEO
Social
Stock & Inventory Management
EXTENSIONS BY DEVELOPER
aheadWorks
Amasty
Boost My Shop
BSS Commerce
Magestore
MageWorx
Mirasvit
Templates Master
Wyomind
XTENTO
Magento 2 Documentation
Magento 2 Documentation
2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
vendor
magento
module-sales
Model
Order
InvoiceQuantityValidator.php
Go to the documentation of this file.
1
<?php
7
namespace
Magento\Sales\Model\Order
;
8
9
use
Magento\Sales\Api\Data\InvoiceInterface
;
10
use
Magento\Sales\Api\Data\InvoiceItemInterface
;
11
use
Magento\Sales\Api\Data\OrderInterface
;
12
use
Magento\Sales\Api\OrderRepositoryInterface
;
13
use
Magento\Sales\Model\ValidatorInterface
;
14
18
class
InvoiceQuantityValidator
implements
ValidatorInterface
19
{
23
private
$orderRepository;
24
29
public
function
__construct
(
OrderRepositoryInterface
$orderRepository)
30
{
31
$this->orderRepository =
$orderRepository
;
32
}
33
37
public
function
validate
(
$invoice
)
38
{
39
if
(
$invoice
->getOrderId() ===
null
) {
40
return
[
__
(
'Order Id is required for invoice document'
)];
41
}
42
$order
= $this->orderRepository->get(
$invoice
->getOrderId());
43
return
$this->checkQtyAvailability(
$invoice
,
$order
);
44
}
45
53
private
function
checkQtyAvailability(
InvoiceInterface
$invoice
,
OrderInterface
$order
)
54
{
55
$messages = [];
56
$qtys = $this->getInvoiceQty(
$invoice
);
57
58
$totalQty = 0;
59
if
($qtys) {
61
foreach
(
$order
->getItems() as
$orderItem
) {
62
if
(isset($qtys[
$orderItem
->getId()])) {
63
if
($qtys[
$orderItem
->getId()] >
$orderItem
->getQtyToInvoice() && !
$orderItem
->isDummy()) {
64
$messages[] =
__
(
65
'The quantity to invoice must not be greater than the uninvoiced quantity'
66
.
' for product SKU "%1".'
,
67
$orderItem
->getSku()
68
);
69
}
70
$totalQty += $qtys[
$orderItem
->getId()];
71
unset($qtys[
$orderItem
->getId()]);
72
}
73
}
74
}
75
if
($qtys) {
76
$messages[] =
__
(
'The invoice contains one or more items that are not part of the original order.'
);
77
}
elseif
($totalQty <= 0) {
78
$messages[] =
__
(
"The invoice can't be created without products. Add products and try again."
);
79
}
80
return
$messages;
81
}
82
87
private
function
getInvoiceQty(InvoiceInterface
$invoice
)
88
{
89
$qtys = [];
91
foreach
(
$invoice
->getItems() as
$item
) {
92
$qtys[
$item
->getOrderItemId()] =
$item
->getQty();
93
}
94
return
$qtys;
95
}
96
}
Magento\Sales\Api\Data\InvoiceItemInterface
Definition:
InvoiceItemInterface.php:17
Magento\Sales\Model\Order\InvoiceQuantityValidator\__construct
__construct(OrderRepositoryInterface $orderRepository)
Definition:
InvoiceQuantityValidator.php:29
elseif
elseif(isset( $params[ 'redirect_parent']))
Definition:
iframe.phtml:17
Magento\Sales\Model\Order
$orderItem
$orderItem
Definition:
order.php:30
$orderRepository
$orderRepository
Definition:
order.php:69
Magento\Sales\Api\Data\InvoiceInterface
Definition:
InvoiceInterface.php:15
$order
$order
Definition:
order.php:55
__
__()
Definition:
__.php:13
$item
$item
Definition:
partial_invoice.php:27
Magento\Sales\Api\Data\OrderInterface
Definition:
OrderInterface.php:17
Magento\Sales\Model\ValidatorInterface
Definition:
ValidatorInterface.php:14
$invoice
$invoice
Definition:
partial_invoice.php:22
Magento\Sales\Model\Order\InvoiceQuantityValidator
Definition:
InvoiceQuantityValidator.php:18
Magento\Sales\Model\Order\InvoiceQuantityValidator\validate
validate($invoice)
Definition:
InvoiceQuantityValidator.php:37
Magento\Sales\Api\OrderRepositoryInterface
Definition:
OrderRepositoryInterface.php:17