DiscountCalculation
Bei kleinen Beträgen macht es einen Unterschied, ob der Rabatt vom Einzelpreis abgezogen und dann der Gesamtpreis durch Multiplikation mit der Menge errechnet wird (standardmäßig) oder ob der Einzelpreis mit der Bestellmenge multipliziert wird und davon der Rabatt abgezogen wird.
Der Unterschied entsteht durch die Rundung auf 2 Nachkommastellen nach Abziehen des Rabattes in Prozent. Gerade bei kleinen Beträgen ist diese Abweichung merkbar.
Ist der Parameter auf den String unitprice oder gar nicht gesetzt, wird der Rabatt immer sofort auf den Einzelpreis angewendet.
Ist der Parameter auf den String total gesetzt, wird der Rabatt erst auf das Produkt von Einzelpreis mal Menge angewendet.
Beispiel für die Berechnung
100 Stück eines Artikels zum Preis von 0,11 Euro mit 10% Rabatt (10% = Multiplikation mit 0,9)
Methode unitprice
100 x Runden( 0,12 x 0,90 ) = 100x Runden( 0,108 ) = 100 x 0,11 = 11,00
Methode total
Runden( 100 x 0,12 x 0,90 ) = Runden( 12,00 x 0,90 ) = 12,00 x 0,90 = 10,80
Problem bei der Methode unitprice
Wird mit dem Kunden z.B. ein 10% Rabatt vereinbart, dann entsteht ein gerundeter Einzelpreis, der bei kleinen Beträgen gegenüber dem Listenpreis nicht exakt dem vereinbarten Rabatt entspricht.
Beispiel:
Artikel zum Preis von 0,12 mit 10% ergibt einen angezeigten Einzelpreis von 0,11. Setzt man 0,11 aber in Relation zum Listenpreis 0,12 ergibt das einen Rabatt von 8,3333% - ohne Nachkommastellen wird dann ein Rabatt von 8% angezeigt. Ein Kunde könnte also den zu geringen Rabatt urgieren.
Probleme bei der Methode total
Auch bei der Methode total wird bei einem Einzelpreis von 0,09 Euro ein Einzelpreis von 0,08 angezeigt. Für die Bestellmenge 100 steht dann aber der Betrag 8,10 im Warenkorb, womit die Preisauszeichnung in den Artikeldetails falsch ist. Ein Kunde könnte als urgieren, warum er nicht 100 x den angezeigten Einzelpreis bekommt.