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;
 }
Example #2
0
 /**
  * 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;
 }