Jump to content

Paypal & Prestahop berechnen anders bei Rabatt. Falsche Ergebnisse!


Recommended Posts

Hallo Miteinander

 

Presta 1.4.9.0

 

 

Wie es aussieht wird im Shop zuerst die Steuer berechnet und dann den Rabatt berechnet.

Im Paypal wird zuerst der Rabatt mitberechnet und dann die Steuer berechnet.

 

Aus dem Grund ist es im PayPal ein bisschen billiger.

 

Kann man das irgendwie beheben? Einige Käufer sind dadurch irritiert.

 

Danke schon im Voraus für die Antworten!

Link to comment
Share on other sites

Ja, da hätte ich was für dich, das mal vor anderhalb Jahren im englischen Forum als Lösung vorgeschlagen wurde und wohl auch mit PrestaShop 1.4.9 klappen sollte, da sich hier am Programmcode nichts geändert hat. Es sei denn, so etwas wie die in Frankreich geltende Ökosteuer wird auch in der Schweiz erhoben. Dann sollten diese Änderungen nicht angewandt werden oder man müsste sie zumindest abändern.

 

Die Steuerberechnung wird in /classes/Cart.php vorgenommen, und zwar in der Funktion getOrderTotal. Um die von dir monierte Berechnungsmethode zu ändern, sind zwei Schritte nötig:

 

1. Zeile 936 mit /* vorn und */ hinten auf Kommentar setzen:

 

/* $total_price = ($total_price - $total_ecotax) * (1 + (float)(Tax::getProductTaxRate((int)$product['id_product'], (int)$this->{Configuration::get('PS_TAX_ADDRESS_TYPE')})) / 100); */

 

2. Ziemlich am Ende der Funktion, bevor alle Steuerarten übergeben und der Gesamtbetrag errechnet und gerundet wird, ab Zeile Zeile 1011 (nach der geschweiften Klammer) folgenden Code einfügen:

 

if ($withTaxes) {
  $order_total = $order_total *
  (1 + (float)(Tax::getProductTaxRate((int)$product['id_product'], (int)$this->{Configuration::get('PS_TAX_ADDRESS_TYPE')})) / 100);
  }

 

Dann sieht der Schluss der Funktion so aus:

 

// Hier Steuerberechnung einfügen
if ($withTaxes) {
  $order_total = $order_total *
  (1 + (float)(Tax::getProductTaxRate((int)$product['id_product'], (int)$this->{Configuration::get('PS_TAX_ADDRESS_TYPE')})) / 100);
  }
// Jetzt mit Core fortfahren ...
 if ($type == Cart::ONLY_SHIPPING) return $shipping_fees;
 if ($type == Cart::ONLY_WRAPPING) return $wrapping_fees;
 if ($type == Cart::BOTH) $order_total += $shipping_fees + $wrapping_fees;
 if ($order_total < 0 && $type != Cart::ONLY_DISCOUNTS) return 0;
 if ($type == Cart::ONLY_DISCOUNTS && isset($order_total_discount))
  return Tools::ps_round((float)$order_total_discount, 2);
 return Tools::ps_round((float)$order_total, 2);
}
}

 

Und damit es nicht so komplizert wird und du auch nichts am Quellcode ändern musst, habe ich diesem Post ein Override für diese Funktion angehängt. ;)

 

 

Mit dieser Datei, die auch Cart.php heißt, aber nur die geänderte Funktion enthält, bitte im Verzeichnis /override/classes die dort vorhandene Cart.php überschreiben.

Edited by eleazar (see edit history)
Link to comment
Share on other sites

  • 11 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...