WordPress

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.

Optionsfeld für Preisangaben

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

Gutscheine im Warenkorb

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.

Gutscheine im Checkout

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:

Gutscheine auf der Rechnung

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:

[2.3] Fix – get_total_discount() function with certain tax setups.

Revised how discounts/discount taxes are stored for consistency. Always store ex. tax to make data retrieval easier, and to ensure totals are correct after settings changes. Backwards compatibility maintained through use of order versioning.

 

 

WordPress Experte und SpezialistAls WordPress Entwickler mit 17 Jahren Erfahrung unterstütze ich Unternehmer bei der Erstellung von Applikationen und Webseiten auf der Basis von WordPress. Als WooCommerce Spezialist konzentriere ich mich auf e-Commerce Anwendungen mit WordPress. Auf meiner Know-How Seite erfahren Sie mehr über mich.

Dieser Beitrag ist älter als 6 Monate. Die enthaltenen Informationen sind möglicherweise nicht mehr gültig!