Hallo,
mir ist ein Fehler in einem unserer Shops aufgefallen.
Es handelt sich um Shopware 5.6.10 CE zusammen mit dem Marketplace Connector 6.3.35 und Amazon Marketplace 6.3.32.
Das Problem tritt z.B. bei einer Bestellung aus Österreich auf. Der Shop bzw. die Kundengruppe ist auf Bruttopreise eingestellt, in der Steuer 19% ist eine Steuerregel für Österreich mit 20 % hinterlegt.
Die Bestellungen kommen vom Seller-Central mit Bruttopreisen rein, die Steuerbeträge sind bei Österreich mit „0.00“ hinterlegt, was das Amazon Plugin dazu veranlasst, den Steuersatz selber zu schätzen
Wenn nun eine Bestellung getätigt wird, werden alle Positionen mit den default 19% Mehrwertssteuer gerechnet und dieser Wert in die invoiceAmountNet auf Kopfebene geschrieben, anschließend wird die Steuer der Positionen auf korrekte 20% korrigiert, aber ohne den Nettowert anzupassen.
In dem nachfolgenden Beispiel z.B.
Preis netto pro Position Soll: 89,90 / 1,2 = 74,916666 ~ 74,92
Addiere ich da die 8,2916 Euro netto vom Versand drauf, komme ich auf 83,21 Euro anstatt 83,41 Euro
Rechne ich allerdings 89,90 / 1,19 = 75,55 + 8,29 = 83,8416
Es sieht für mich somit so aus, als ob die 20% Steuer in der Position gesetzt werden, ohne die Gesamtsumme neu zu berechnen
Ich konnte es schon mal so weit eingrenzen, dass bei reinen Webshop-Bestellungen alles korrekt läuft, also kann ich doch alle anderen Plugins ausschließen, oder ?
{
"data": {
"id": 11431,
"invoiceAmount": 99.85,
"invoiceAmountNet": 83.841666666667,
"invoiceShipping": 9.95,
"invoiceShippingNet": 8.2916666666667,
"invoiceShippingTaxRate": "20",
"details": [
{
"id": 9407,
"orderId": 11431,
"articleId": 128,
"taxId": 8, // Steuer 19%
"taxRate": 20,
"price": 89.9,
"quantity": 1
}
],
"paymentStatusId": 12,
"orderStatusId": 0
},
"success": true
}
in der Datei WebCuAmazonMarketplace/Components/OrderImportTrait.php Methode prepareOrderData ist mir nur folgende Stelle aufgefallen, aber ist das schon der Fehler ?
Das positionStruct wird in der 1. Zeile schon dem Array hinzugefügt, aber danach noch die setTaxRate Methode aufgerufen, was dann natürlich für die Position keinen Effekt mehr hat.
Falls ein Steuerbetrag aus der Amazon-Bestellung gesetzt ist, z.B. bei Lieferadresse DE, wird dann die Steuerrate gar nicht gesetzt, aber da stimmen die Zahlen (vielleicht passiert dort der gleiche Fehler, aber es fällt nicht auf, da die Steuer sich nicht ändert)
$positions[] = $positionStruct;
if ((float)$lineItem->{'ItemTax'}->{'Amount'} < 0.01 ||
(string)$lineItem->{'ItemTax'}->{'Amount'} === '0.00') {
// If there are tax rules defined then fetch those, otherwise take the default ones
$taxRate = ((100.0 + $tax->getTax()) / 100.0); // e.g. 1.19
$positionStruct->setTaxRate((float)$tax->getTax()); // e.g. 19
$totalWithoutTax += ($positionStruct->getTotal() / $taxRate);
} else {
$totalWithoutTax += $positionStruct->getTotal() - ((float)$lineItem->{'ItemTax'}->{'Amount'});
}
Kann mir jemand einen Tipp geben, wo ich anfangen soll zu suchen ? Es muss ja noch irgendeine Methode geben, die nach prepareOrderData und vor dem Anlegen der Bestellungen die TaxRate auf Positionsebene setzt, sonst würde es ja für deutsche Bestellungen auch nicht funktionieren bzw. TaxRate 0 ausweisen