10. Januar 2011

Magento bietet mit den bundle products eine hervorragende Möglichkeit, zusammengesetzte Produkte abzubilden. In den von uns betreuten eBook-Shops (http://ebooks.informit.de, http://ebooks.addison-wesley.de, http://ebooks.mut.de, http://ebooks.pearson-studium.de)  wurde eine neue Produktklasse eingeführt, die aus gedrucktem Buch und zusätzlich einem Online-Lesezugang besteht.

Gedruckte Bücher haben einen Mehrwertsteuersatz von 7%, der Online-Lesezugang einen von 19%. Es war also nicht möglich, einen Mehrwertsteuersatz auf das gesamte bundle product anzuwenden. Wir entschieden uns für ein Konstrukt aus Einzelprodukten mit Mehrwertsteuer und einem dynamischen Preis des bundle product, der sich aus den Preisen der Einzelprodukte zusammensetzt.

 Leider ist die Magento-Implementierung von bundle products nicht optimal: Die Mehrwertsteuer wurde doppelt berechnet, einmal für die Einzelprodukte und dann noch einmal für das bundle product, so dass der Gesamtpreis des bundle products am Ende zu hoch war. Da half es auch nichts, die Steuerklasse für das bundle product auf „keine“ zu setzen. Die Lösung besteht darin, die Mehrwertsteuer bei der Preisberechung des bundle product wieder abzuziehen. Die entsprechende Klasse ist:

 app/code/core/Mage/Sales/Model/Quote/Item/Abstract.php

 Wir kopierten diese Klasse in den app/code/local-Ordner und änderten den Code wie folgt:

 

Vorher:

protected function _calculatePrice($value, $saveTaxes = true)
    {    
        $store = $this->getQuote()->getStore();
....

Nachher:

protected function _calculatePrice($value, $saveTaxes = true)
    {
        
        if($this->getProduct()->getTypeId() == 'bundle') {
            $value = $value - ($this->getTaxAmount() / $this->getQty());
        }
        $store = $this->getQuote()->getStore();
...

Damit haben wir eine korrekte Mehrwertsteuerberechnung mit dem Vorteil, dass sogar im Warenkorb die unterschiedlichen Mehrwertsteuersätze mit jeweils anfallendem Betrag einzeln angezeigt werden.

Kommentare, Lob, Kritik? Kommentar schreiben