Warenkorb: falsche MwSt.-Summe wenn ein Produkt mehrfach bestellt

  • Ich habe folgendes festgestellt. Geht es jemanden auch so und hat jemand eine Lösung, ohne den Code von VM zu ändern.


    Ein Produkt hat einen Nettopreis von 3.50 und dann eine 7%-ige MwSt. von EUR 0.245. Leider wird im Helper für die Berechnungen dieser MwSt.-Betrag als gerundeter Wert von EUR 0.25 genutzt wird. Das führt bei der Berechnung des Gesamt-MwSt.-Betrages zu einem Fehlbetrag, sobald mehr als ein Stück im Warenkorb ist.


    Der entsprechende Code findet sich in der folgenden Datei:
    \administrator\components\com_virtuemart\helpers\calculationh.php


    Dort findet sich folgender Code:

    PHP
    1. if($this->_currencyDisplay->_priceConfig['taxAmount']){
    2. $this->_cart->products[$cprdkey]->allPrices[$selectedPrice]['subtotal_tax_amount'] = self::roundInternal($this->_cart->products[$cprdkey]->allPrices[$selectedPrice]['taxAmount'],'taxAmount') * $this->_cart->products[$cprdkey]->quantity;
    3. ...
    4. }


    Der Wert für ...->allPrices[$selectedPrice]['taxAmount'] ist schon auf zwei Stellen nach dem Komma gerundet. Aber selbst wenn dem nicht so wäre, so wird ja dieser Wert erst mittels self::roundInternal(...) gerundet und dann mit der Stückzahl (quantity) multipliziert. Richtig wäre aber nach meinem Verständnis erst zu runden, nachdem mit der Stückzahl multipliziert wurde. Und dann allerdings auch vorausgesetzt, der Wert in ...->allPrices[$selectedPrice]['taxAmount'] wäre nicht auch schon auf 2 Stellen nach dem Komma gerundet.


    Meine Zwischenlösung ist momentan folgende.
    Die folgende Zeile ausdokumentieren:

    PHP
    1. $this->_cart->products[$cprdkey]->allPrices[$selectedPrice]['subtotal_tax_amount'] = self::roundInternal($this->_cart->products[$cprdkey]->allPrices[$selectedPrice]['taxAmount'],'taxAmount') * $this->_cart->products[$cprdkey]->quantity;


    und durch folgende Zeile ersetzen:

    PHP
    1. self::roundInternal(($this->_cart->products[$cprdkey]->allPrices[$selectedPrice]['salesPrice'] - $this->_cart->products[$cprdkey]->allPrices[$selectedPrice]['priceBeforeTax']) * $this->_cart->products[$cprdkey]->quantity, 'taxAmount');
  • Ok ich konnte das klären.
    In den Einstellungen von Virtuemart findet sich unter Preisangaben die Einstellung Rundung nur auf die Anzeige anwenden. Wenn die aktiviert wird, dann wird der genaue Wert in der Datenbank gespeichert und nicht der gerundete.