Gutscheinprobleme in WooCommerce 2.3.6
Gesetzliche Bestimmungen machten die Anpassung der Gutscheinlogik in WooCommerce 2.3 nötig. Die ehemalige Möglichkeit sogenannte Coupons vor oder nach der Mehrwertsteuerberechnung anzuwenden wurde abgeschafft. Das alleine führte bereits bei vielen Shopbetreibern zu Kopfschmerzen. Hinzu kamen aber weitere Probleme bei der Berechnung, gerade im Zusammenhang mit der Mehrwertsteuer. WooCommerce 2.3.6 verspricht endlich Abhilfe, verursacht dafür aber ein neues Problem.
Gutscheine erscheinen mit einem falschen Betrag
Die meisten Onlineshops in Europa zeigen aufgrund der europäischen und nationalen Gesetze Preise inklusive Mehrwertsteuer an. Das führt im Regelfall dazu, dass die Händler die Preise auch inklusive Mehrwertsteuer eingeben. Die entsprechende Einstellung finden Sie in WordPress im Backend im Menü WooCommerce – Einstellungen und dort auf dem Karteikartenreiter Mehrwertsteuer.
Wer diese Einstellung nutzt wird feststellen, dass Gutscheine in WooCommerce 2.3.6 auf der Rechnung mit einem falschen Wert angezeigt werden und zwar zuzüglich der eigenen Mehrwertsteuer.
Keine Probleme bis zum Checkout
Der Fehler fällt zunächst auch nicht auf, denn die Berechnung der Coupons läuft tatsächlich richtig ab. Ein Gutschein, der z.B. mit einem Wert in Höhe von 10,00 € angelegt wurde, wird zunächst bei Eingabe im Warenkorb mit dem richtigen Wert abgezogen
Auch beim anschließenden Gang zur Kasse und im Checkout ist alles wie gewohnt. Der Gutscheinrabatt wird in diesem Beispiel richtig mit 10,00 € ausgegeben und abgezogen.
Erst mit Absenden der Bestellung offenbart sich das Problem. In diesem Fall wird der Wert nun mit 11,60 € angegeben anstatt mit 10,00 €. Die Berechnung bleibt allerdings richtig, wie man unschwer erkennen kann, denn 100,00 € abzüglich 10,00 € Rabatt ergibt 90,00 € Endpreis:
Woher kommen die fehlerhaften Beträge für Gutscheine?
Irritierend ist im ersten Moment aber nicht nur die Tatsache, dass der Wert an sich falsch angezeigt wird, sondern auch der Wert selbst. Im Zusammenhang mit der Mehrwertsteuer hätte man wohl eher mit 11,90 € also 10,00 € zzgl. 19% Mwst. gerechnet. Bei genauer Betrachtung und einem zweiten Blick in das Changelog für WooCommerce 2.3.6 fallen folgende Punkte ins Auge
Saving an order needs to save the discount amount ex. tax like the cart.
Show discounts inc. tax when showing order totals inc. tax.
Ein Blick in den Quellcode und die Bestelldaten offenbart das Problem. In der aktuellen Version wurde die Logik für die Anzeige des Wertes eines Gutscheins umgedreht. Man geht also bei der Berechnung zunächst immer von einem Nettowert aus, während man in den vorherigen Versionen von einem Bruttowert ausgegangen ist:
WooCommerce 2.3.6
public function get_total_discount( $ex_tax = true ) { if ( $ex_tax ) { return apply_filters( 'woocommerce_order_amount_total_discount', (double) $this->cart_discount, $this ); } else { return apply_filters( 'woocommerce_order_amount_total_discount', (double) $this->cart_discount + (double) $this->cart_discount_tax, $this ); } }
WooCommerce 2.3.5
public function get_total_discount( $ex_tax = true ) { if ( $ex_tax ) { return apply_filters( 'woocommerce_order_amount_total_discount', (double) $this->cart_discount - (double) $this->cart_discount_tax, $this ); } else { return apply_filters( 'woocommerce_order_amount_total_discount', (double) $this->cart_discount, $this ); } }
Wurden die Gutscheine also inklusive Mehrwertsteuer eingetragen, wird selbige aufgeschlagen. In meinem Beispiel werden vom Bruttowert 10,00 € korrekt 1,60 € als 19% Mehrwertsteuerbetrag errechnet. Der Nettowert des Coupons ist also 8,40 €. Mit diesem Betrag rechnet WooCommerce auch korrekt weiter, nur für die Anzeige auf der Rechnung werden wieder die 10,00 € herangezogen und gemäß neuer Logik die 1,60 € addiert. Somit erklären sich dann auch die 11,60 €.
Einen entsprechenden Fehlerreport habe ich Woothemes, das sind die Entwickler von WooCommerce, bereits auf Github zukommen lassen. Da ich aber ein wenig Zweifel daran habe, dass der Bugfix in den nächsten 2-3 Tagen erfolgen wird und viele meiner Kunden auf Gutscheine angewiesen sind, habe ich auch gleich eine Lösung entwickelt. Wer also WooCommerce 2.3.6 im Einsatz hat und das Anzeigeproblem der Coupons lösen muss, kann folgende Funktion in die functions.php seines Themes einbauen:
/* Fix discount display in invoices if prices are entered inclusive tax For Woocommerce 2.3.6 only! */ function mmx_display_coupon_incl_tax( $discount, $order ) { if ( get_option( 'woocommerce_prices_include_tax' ) == true ) { $discount = get_post_meta( $order->id, '_cart_discount', true ); return wc_price( $discount ); } return $discount; } add_filter( 'woocommerce_order_discount_to_display', 'mmx_display_coupon_incl_tax', 10, 2 );
Gewerbliche Anwender, Selbständige und Unternehmer können mich auch mit den notwendigen Anpassungen beauftragen.
Update vom 16.3.2015
Die Entwickler von WooCommerce haben den Fehler am 16.3.2015 bestätigt und einen Fix für die kommende Version 2.3.7 eingebaut:
Woocommerce 2.3.6 Coupon Display Issue
If you came here because you use WooCommerce 2.3.6 and have an issue with coupon amounts displaying a wrong value on invoices please check my posting at wordpress.org.
Dieser Beitrag ist älter als 6 Monate. Die enthaltenen Informationen sind möglicherweise nicht mehr gültig!