/** * @param \Magento\Sales\Model\Order\Invoice $invoice * @return $this */ public function collect(\Magento\Sales\Model\Order\Invoice $invoice) { $invoice->setShippingAmount(0); $invoice->setBaseShippingAmount(0); $orderShippingAmount = $invoice->getOrder()->getShippingAmount(); $baseOrderShippingAmount = $invoice->getOrder()->getBaseShippingAmount(); $shippingInclTax = $invoice->getOrder()->getShippingInclTax(); $baseShippingInclTax = $invoice->getOrder()->getBaseShippingInclTax(); if ($orderShippingAmount) { /** * Check shipping amount in previous invoices */ foreach ($invoice->getOrder()->getInvoiceCollection() as $previousInvoice) { if ((double) $previousInvoice->getShippingAmount() && !$previousInvoice->isCanceled()) { return $this; } } $invoice->setShippingAmount($orderShippingAmount); $invoice->setBaseShippingAmount($baseOrderShippingAmount); $invoice->setShippingInclTax($shippingInclTax); $invoice->setBaseShippingInclTax($baseShippingInclTax); $invoice->setGrandTotal($invoice->getGrandTotal() + $orderShippingAmount); $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $baseOrderShippingAmount); } return $this; }