123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Model\Order\Invoice\Total;
- class Subtotal extends AbstractTotal
- {
- /**
- * Collect invoice subtotal
- *
- * @param \Magento\Sales\Model\Order\Invoice $invoice
- * @return $this
- */
- public function collect(\Magento\Sales\Model\Order\Invoice $invoice)
- {
- $subtotal = 0;
- $baseSubtotal = 0;
- $subtotalInclTax = 0;
- $baseSubtotalInclTax = 0;
- $order = $invoice->getOrder();
- foreach ($invoice->getAllItems() as $item) {
- if ($item->getOrderItem()->isDummy()) {
- continue;
- }
- $item->calcRowTotal();
- $subtotal += $item->getRowTotal();
- $baseSubtotal += $item->getBaseRowTotal();
- $subtotalInclTax += $item->getRowTotalInclTax();
- $baseSubtotalInclTax += $item->getBaseRowTotalInclTax();
- }
- $allowedSubtotal = $order->getSubtotal() - $order->getSubtotalInvoiced();
- $baseAllowedSubtotal = $order->getBaseSubtotal() - $order->getBaseSubtotalInvoiced();
- //Note: The $subtotalInclTax and $baseSubtotalInclTax are not adjusted from those provide by the line items
- //because the "InclTax" is displayed before any tax adjustments based on discounts, shipping, etc.
- if ($invoice->isLast()) {
- $subtotal = $allowedSubtotal;
- $baseSubtotal = $baseAllowedSubtotal;
- } else {
- $subtotal = min($allowedSubtotal, $subtotal);
- $baseSubtotal = min($baseAllowedSubtotal, $baseSubtotal);
- }
- $invoice->setSubtotal($subtotal);
- $invoice->setBaseSubtotal($baseSubtotal);
- $invoice->setSubtotalInclTax($subtotalInclTax);
- $invoice->setBaseSubtotalInclTax($baseSubtotalInclTax);
- $invoice->setGrandTotal($invoice->getGrandTotal() + $subtotal);
- $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $baseSubtotal);
- return $this;
- }
- }
|