Magento 1.5 Bugfix für Customer Option mit Prozent-Aufschlag


Nachdem die Steuerberechnung in magento 1.5 nun fehlerfrei funktioniert ist ein weiterer Bug aufgetaucht der aber nichts mit der Steuerberechnung zu tun hat.
Werden Customer Optionen mit prozentualem Aufschlag verwendet kommt es zu einer falschen Zwischensummen Ausgabe (subtotal) in der Cart und im Checkout. Der Fehler tritt nur bei % Angabe nicht bei Festpreisoptionen auf.
Nach einiger Ursachenforschung habe ich den vermeintlichen Fehler gefunden und hierfür einen kleinen Bugfix erstellt.

Die Fehlerursache ist, das magento die prozentualen Optionspreise ungerundet, also 4-stelling zur weiteren Berechnung übergibt. Dadurch ergeben sich bei der späteren Addition mit dem Basepreis und der Multiplikation mit der Menge Abweichungen in der Zwischensumme.
Wird der prozentual errechnete Optionspreis gerundet (auf 2 Nachkommastellen) übergeben stimmt die Ausgabe wieder.
Die entscheidende Stelle wo dies erfolgt findet man in der Datei
app/code/core/Mage/Catalog/Model/Product/Option/Type/Default.php

In der Default.php findet man ab Zeile 391 die Funktion
protected function _getChargableOptionPrice($price, $isPercent, $basePrice)
die Abfrage ob der Optionspreis prozentual oder ein Festpreis ist.
Hier erfolgt nun die Änderung den Rückgabewert bei prozentualer Berechnung auf 2 Stellen zu runden.

protected function _getChargableOptionPrice($price, $isPercent, $basePrice)
    {
        if($isPercent) {
            //return ($basePrice * $price / 100);
			// Fix wrong subtotal in card with % options - www.mageintern.de
			return round(($basePrice * ($price / 100)),2);
        } else {
            return $price;
        }
    }

}

Ergebnis: Die korrekte Anzeige der Zwischensumme in der Cart und im Checkout.

Die geänderte Default.php sollte dann auch update-sicher in
app/code/local/Mage/Catalog/Model/Product/Option/Type gespeichert werden.
Nicht vorhandene Verzeichnisse einfach erstellen.
Alternativ kann die Funktion auch mit einem Modul überlagert werden. Wenn es meine Zeit erlaubt schreibe ich noch eines und stelle es dann hier bereit.

Getestet mit magento 1.5.1.0
Ein Bugreport #25788 habe ich erstellt.

Viele Grüße
Stefan Pröhl
robin2160

Kommentar schreiben