public function collect(Mage_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 previus invoices */ foreach ($invoice->getOrder()->getInvoiceCollection() as $previusInvoice) { if ($previusInvoice->getShippingAmount() && !$previusInvoice->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; }
/** * Collect shipping amount to be invoiced based on already invoiced amount * * @param Mage_Sales_Model_Order_Invoice $invoice * @return $this */ public function collect(Mage_Sales_Model_Order_Invoice $invoice) { $previousInvoices = $invoice->getOrder()->getInvoiceCollection(); if ($invoice->getShippingAmount() > 0) { return $this; } $order = $invoice->getOrder(); $shippingAmount = $order->getShippingAmount() - $order->getShippingInvoiced() - $order->getShippingRefunded(); $baseShippingAmount = $order->getBaseShippingAmount() - $order->getBaseShippingInvoiced() - $order->getBaseShippingRefunded(); $invoice->setShippingAmount($shippingAmount); $invoice->setBaseShippingAmount($baseShippingAmount); $invoice->setGrandTotal($invoice->getGrandTotal() + $shippingAmount); $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $baseShippingAmount); return $this; }