Magento Fehler in MwSt.-Berechnung


Wendet man über eine Warenkorb-Preisregel einen Zuschlag oder Rabatt auf den Warenkorb an (Einstellungen im Magento-Adminbereich: Rabatt auf Preise ohne MwSt.

und Steuer auf Beträge nach Rabatt anwenden) und überprüft die Steuer- und Gesamt-Summe, sind Fehler in der Magento-Programmierung zu erkennen. So sieht Magento den Rabattbetrag bei MwSt.-Berechnung und Summenbildung immer als Brutto-Betrag an. D.h.: Auch bei Netto-Darstellung des Rabatt-Betrages oder des Zuschlages wird vor Steuer-Berechnung die Steuer ein zweites Mal abgezogen, die ausgewiesene MwSt. und die Gesamt-Summe sind damit bei Anwendung eines Rabattes zu hoch bzw. bei Verwendung eines Zuschlages zu niedrig. Den ausgewiesenen Steuer-Betrag kann man jedoch beispielsweise wie folgt korrigieren:

In Datei \app\code\local\Mage\Tax\Model\Sales\Total\Quote\Tax.php diese Stelle suchen:

case Mage_Tax_Model_Calculation::CALC_TAX_AFTER_DISCOUNT_ON_INCL:
if ($this->_helper->applyTaxOnOriginalPrice($this->_store)) {
$discount = $item->getOriginalDiscountAmount();
$baseDiscount = $item->getBaseOriginalDiscountAmount();
} else {
$discount = $item->getDiscountAmount();
$baseDiscount = $item->getBaseDiscountAmount();
}

und folgende Zeilen direkt dahinter einfügen:

$store = Mage::app()->getStore('default');
$request = Mage::getSingleton('tax/calculation')->getRateRequest(null, null, null, $store);
$taxclassid = Mage::helper('tax')->getShippingTaxClass();
$percent = Mage::getSingleton('tax/calculation')->getRate($request->setProductClassId($taxclassid));
$discount = $discount*(1+$percent/100);
$baseDiscount = $baseDiscount*(1+$percent/100);

Damit wird die Steuer richtig ausgewiesen. Die Gesamtsumme korrigiert man durch die Wegnahme der "hidden tax":

In oben genannter Datei suchen wir nun die Stelle:

if ($inclTax && $discount > 0) {
$hiddenTax = $this->_calculator->calcTaxAmount($discount, $rate, $inclTax, false);
$baseHiddenTax = $this->_calculator->calcTaxAmount($baseDiscount, $rate, $inclTax, false);
$this->_hiddenTaxes[] = array(
'rate_key' => $rateKey,
'qty' => 1,
'item' => $item,
'value' => $hiddenTax,
'base_value' => $baseHiddenTax,
'incl_tax' => $inclTax,
);
}

und ändern dort die 2 rot markierten Zeilen:

if ($inclTax && $discount > 0) {
$hiddenTax = $this->_calculator->calcTaxAmount($discount, $rate, $inclTax, false);
$baseHiddenTax = $this->_calculator->calcTaxAmount($baseDiscount, $rate, $inclTax, false);
$this->_hiddenTaxes[] = array(
'rate_key' => $rateKey,
'qty' => 1,
'item' => $item,
'value' => 0,
'base_value' => 0,
'incl_tax' => $inclTax,
);
}

So sollten Steuer- und Gesamt-Summen der Magento-Installation wieder korrekt angezeigt werden. Getestet in Magento 1.7.0.2.


... zurück zum Blog