public function collect(Mage_Sales_Model_Order_Invoice $invoice) { // Changed By Adam 22/09/2014 if (!Mage::helper('affiliateplus')->isAffiliateModuleEnabled()) { return $this; } $baseDiscount = 0; $discount = 0; $order = $invoice->getOrder(); $baseOrderDiscount = $order->getBaseAffiliateCredit(); $orderDiscount = $order->getAffiliateCredit(); if ($invoice->getBaseGrandTotal() < 0.0001 || $baseOrderDiscount >= 0) { return $this; } $baseInvoicedDiscount = 0; $invoicedDiscount = 0; foreach ($order->getInvoiceCollection() as $_invoice) { $baseInvoicedDiscount += $_invoice->getBaseAffiliateCredit(); $invoicedDiscount += $_invoice->getAffiliateCredit(); } if ($invoice->isLast()) { $baseDiscount = $baseOrderDiscount - $baseInvoicedDiscount; $discount = $orderDiscount - $invoicedDiscount; } else { // edit by viet $baseOrderTotal = $order->getBaseSubtotalInclTax(); // - $baseOrderDiscount; $baseDiscount = $baseOrderDiscount * $invoice->getBaseSubtotalInclTax() / $baseOrderTotal; $discount = $orderDiscount * $invoice->getBaseSubtotalInclTax() / $baseOrderTotal; // end by viet if ($baseDiscount < $baseOrderDiscount) { $baseDiscount = $baseOrderDiscount; $discount = $orderDiscount; } } if ($baseDiscount) { $baseDiscount = Mage::app()->getStore()->roundPrice($baseDiscount); $discount = Mage::app()->getStore()->roundPrice($discount); $invoice->setBaseAffiliateCredit($baseDiscount); $invoice->setAffiliateCredit($discount); $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $baseDiscount); $invoice->setGrandTotal($invoice->getGrandTotal() + $discount); } return $this; }
public function collect(Mage_Sales_Model_Order_Invoice $invoice) { $invoice->setSveaPaymentFeeAmount(0); $invoice->setBaseSveaPaymentFeeAmount(0); $invoice->setSveaPaymentFeeTaxAmount(0); $invoice->setBaseSveaPaymentFeeTaxAmount(0); $invoice->setSveaPaymentFeeInclTax(0); $invoice->setBaseSveaPaymentFeeInclTax(0); $orderPaymentFeeAmount = $invoice->getOrder()->getSveaPaymentFeeAmount(); $baseOrderPaymentFeeAmount = $invoice->getOrder()->getBaseSveaPaymentFeeAmount(); $paymentFeeInclTax = $invoice->getOrder()->getSveaPaymentFeeInclTax(); $basePaymentFeeInclTax = $invoice->getOrder()->getBaseSveaPaymentFeeInclTax(); if ($orderPaymentFeeAmount) { foreach ($invoice->getOrder()->getInvoiceCollection() as $previousInvoice) { if ($previousInvoice->getSveaPaymentFeeAmount() && !$previousInvoice->isCanceled()) { // Payment fee has already been invoiced return $this; } } $invoice->setSveaPaymentFeeAmount($orderPaymentFeeAmount); $invoice->setBaseSveaPaymentFeeAmount($baseOrderPaymentFeeAmount); $invoice->setSveaPaymentFeeTaxAmount($invoice->getOrder()->getSveaPaymentFeeTaxAmount()); $invoice->setBaseSveaPaymentFeeTaxAmount($invoice->getOrder()->getBaseSveaPaymentFeeTaxAmount()); $invoice->setSveaPaymentFeeInclTax($paymentFeeInclTax); $invoice->setBaseSveaPaymentFeeInclTax($basePaymentFeeInclTax); $subtotal = $invoice->getSubtotal(); $baseSubtotal = $invoice->getBaseSubtotal(); $subtotalInclTax = $invoice->getSubtotalInclTax(); $baseSubtotalInclTax = $invoice->getBaseSubtotalInclTax(); $grandTotal = $invoice->getGrandTotal() + $orderPaymentFeeAmount; $baseGrandTotal = $invoice->getBaseGrandTotal() + $baseOrderPaymentFeeAmount; $totalTax = $invoice->getTaxAmount(); $baseTotalTax = $invoice->getBaseTaxAmount(); if ($invoice->isLast()) { $subtotalInclTax -= $invoice->getOrder()->getSveaPaymentFeeTaxAmount(); $baseSubtotalInclTax -= $invoice->getOrder()->getBaseSveaPaymentFeeTaxAmount(); } else { $totalTax += $invoice->getOrder()->getSveaPaymentFeeTaxAmount(); $baseTotalTax += $invoice->getOrder()->getBaseSveaPaymentFeeTaxAmount(); $subtotalInclTax += $invoice->getOrder()->getSveaPaymentFeeTaxAmount(); $baseSubtotalInclTax += $invoice->getOrder()->getBaseSveaPaymentFeeTaxAmount(); $grandTotal += $invoice->getOrder()->getSveaPaymentFeeTaxAmount(); $baseGrandTotal += $invoice->getOrder()->getBaseSveaPaymentFeeTaxAmount(); } $invoice->setSubtotal($subtotal); $invoice->setBaseSubtotal($baseSubtotal); $invoice->setSubtotalInclTax($subtotalInclTax); $invoice->setBaseSubtotalInclTax($baseSubtotalInclTax); $invoice->setTaxAmount($totalTax); $invoice->setBaseTaxAmount($baseTotalTax); $invoice->setGrandTotal($grandTotal); $invoice->setBaseGrandTotal($baseGrandTotal); } return $this; }
public function collect(Mage_Sales_Model_Order_Invoice $invoice) { $order = $invoice->getOrder(); $invoice->setServicecost($order->getServicecost()); $invoice->setBaseServicecost($order->getBaseServicecost()); $invoice->setServicecostTax($order->getServicecostTax()); $invoice->setBaseServicecostTax($order->getBaseServicecostTax()); $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $invoice->getServicecost() - $invoice->getServicecostTax()); $invoice->setGrandTotal($invoice->getGrandTotal() + $invoice->getServicecost() - $invoice->getServicecostTax()); $invoice->setSubtotalInclTax($invoice->getSubtotalInclTax() - $invoice->getServicecostTax()); $invoice->setBaseSubtotalInclTax($invoice->getBaseSubtotalInclTax() - $invoice->getServicecostTax()); $invoice->setServicecostPdf($order->getServicecostPdf()); //Magento will get the totalpaid amount and add the invoiced amount and set the totalpaid to the new value. This results in a double totalPaid value within //the order view. This happens only when auto creation of the invoice is disabled. To fix this we will set the Total Paid to 0 before the invoice is created //and the totalpaid is update again with the total invoiced. $order->setTotalPaid(0); return $this; }
/** * Weee tax collector * * @param Mage_Sales_Model_Order_Invoice $invoice * @return Mage_Weee_Model_Total_Invoice_Weee */ public function collect(Mage_Sales_Model_Order_Invoice $invoice) { $store = $invoice->getStore(); $totalTax = 0; $baseTotalTax = 0; $weeeInclTax = 0; $baseWeeeInclTax = 0; foreach ($invoice->getAllItems() as $item) { $orderItem = $item->getOrderItem(); $orderItemQty = $orderItem->getQtyOrdered(); if (!$orderItemQty || $orderItem->isDummy()) { continue; } $weeeTaxAmount = $item->getWeeeTaxAppliedAmount() * $item->getQty(); $baseWeeeTaxAmount = $item->getBaseWeeeTaxAppliedAmount() * $item->getQty(); $weeeTaxAmountInclTax = Mage::helper('weee')->getWeeeTaxInclTax($item) * $item->getQty(); $baseWeeeTaxAmountInclTax = Mage::helper('weee')->getBaseWeeeTaxInclTax($item) * $item->getQty(); $item->setWeeeTaxAppliedRowAmount($weeeTaxAmount); $item->setBaseWeeeTaxAppliedRowAmount($baseWeeeTaxAmount); $newApplied = array(); $applied = Mage::helper('weee')->getApplied($item); foreach ($applied as $one) { $one['base_row_amount'] = $one['base_amount'] * $item->getQty(); $one['row_amount'] = $one['amount'] * $item->getQty(); $one['base_row_amount_incl_tax'] = $one['base_amount_incl_tax'] * $item->getQty(); $one['row_amount_incl_tax'] = $one['amount_incl_tax'] * $item->getQty(); $newApplied[] = $one; } Mage::helper('weee')->setApplied($item, $newApplied); $item->setWeeeTaxRowDisposition($item->getWeeeTaxDisposition() * $item->getQty()); $item->setBaseWeeeTaxRowDisposition($item->getBaseWeeeTaxDisposition() * $item->getQty()); $totalTax += $weeeTaxAmount; $baseTotalTax += $baseWeeeTaxAmount; $weeeInclTax += $weeeTaxAmountInclTax; $baseWeeeInclTax += $baseWeeeTaxAmountInclTax; } /* * Add FPT to totals * Notice that we check restriction on allowed tax, because * a) for last invoice we don't need to collect FPT - it is automatically collected by subtotal/tax collector, * that adds whole remaining (not invoiced) subtotal/tax value, so fpt is automatically included into it * b) FPT tax is included into order subtotal/tax value, so after multiple invoices with partial item quantities * it can happen that other collector will take some FPT value from shared subtotal/tax order value */ $order = $invoice->getOrder(); if (Mage::helper('weee')->includeInSubtotal($store)) { $allowedSubtotal = $order->getSubtotal() - $order->getSubtotalInvoiced() - $invoice->getSubtotal(); $allowedBaseSubtotal = $order->getBaseSubtotal() - $order->getBaseSubtotalInvoiced() - $invoice->getBaseSubtotal(); $totalTax = min($allowedSubtotal, $totalTax); $baseTotalTax = min($allowedBaseSubtotal, $baseTotalTax); $invoice->setSubtotal($invoice->getSubtotal() + $totalTax); $invoice->setBaseSubtotal($invoice->getBaseSubtotal() + $baseTotalTax); } else { $allowedTax = $order->getTaxAmount() - $order->getTaxInvoiced() - $invoice->getTaxAmount(); $allowedBaseTax = $order->getBaseTaxAmount() - $order->getBaseTaxInvoiced() - $invoice->getBaseTaxAmount(); $totalTax = min($allowedTax, $totalTax); $baseTotalTax = min($allowedBaseTax, $baseTotalTax); $invoice->setTaxAmount($invoice->getTaxAmount() + $totalTax); $invoice->setBaseTaxAmount($invoice->getBaseTaxAmount() + $baseTotalTax); } if (!$invoice->isLast()) { $invoice->setSubtotalInclTax($invoice->getSubtotalInclTax() + $weeeInclTax); $invoice->setBaseSubtotalInclTax($invoice->getBaseSubtotalInclTax() + $baseWeeeInclTax); } $invoice->setGrandTotal($invoice->getGrandTotal() + $totalTax); $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal() + $baseTotalTax); return $this; }