| Current Path : /home/rtorresani/www/vendor/magento/module-sales/Model/Order/Invoice/Total/ |
| Current File : //home/rtorresani/www/vendor/magento/module-sales/Model/Order/Invoice/Total/Subtotal.php |
<?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;
}
}