PrestaShop Rundung für die Schweiz anpassen

PrestaShop bietet im Standard verschiedene Rundungsmöglichkeiten für Preise an. Die besondere Schweizer Rappenrundung (immer auf 5 Rappen) ist jedoch nicht berücksichtigt. Ausschlaggebend für diese Rundung ist die Mitte zwischen 0 und 5 Rappen oder zwischen 5 und 10 Rappen. Ist die zu rundende Zahl gleich oder höher als die Mitte, wird aufgerundet, ansonsten abgerundet.

Die Schweizer Rappenrundung selber programmieren

Wer gerne selbst im PrestaShop Hand anlegt, kann mit ein paar kleinen Anpassungen die Rundung einbauen. Man muss dabei beachten, dass Core-Dateien von PrestaShop geändert werden. Bei der nächsten Aktualisierung sind diese Änderung mit hoher Wahrscheinlichkeit verloren und müssen nochmals integriert werden.

Neuen Rundungstyp registrieren

Zuerst muss man einen neuen Rundungstyp anlegen.

Datei: config/defines.inc.php
define(‚PS_ROUND_HALF_EVEN‘, 4);
define(‚PS_ROUND_HALF_ODD‘, 5);
define(‚PS_ROUND_CHF‘, 150);

Jetzt kann man den neuen Rundungstyp im PrestaShop Admin registrieren.

Datei: controllers/admin/AdminPreferencesController.php
Funktion:__construct

array(
‚value‘ => PS_ROUND_DOWN,
’name‘ => $this->l(‚Round down to the nearest value‘)
),
array(
‚value‘ => PS_ROUND_CHF,
’name‘ => $this->l(‚Swiss franc round mode‘)
)
);

Rundungsfunktionen anpassen

Die bestehende Rundungsfunktion muss erweitert werden.

Datei: classes/Tools.php
Funktion: ps_round()
…..
case PS_ROUND_HALF_UP:
case PS_ROUND_CHF:
return round(20 * $value) / 20;

default:
return Tools::math_round($value, $precision, PS_ROUND_HALF_UP);

Integration ins Template

Datei: /js/tools.js
Funktion: ps_round(value, precision)

else if (method == 150)
return Math.round(20 * value) / 20;

prestashop schweiz rundung

Sofern im Order des aktiven Template ebenfalls eine tools.js vorhanden ist, muss diese auch angepasst werden.

Datei: /themes/<template>/js/tools.js
Funktion: ps_round(value, precision)

else if (method == 150)
return Math.round(20 * value) / 20;

André Rühle

Hallo, mein Name ist André Rühle, E-Commerce Freelancer aus St. Gallen, Schweiz. Ich bin spezialisiert auf Onlineshop-Lösungen mit PrestaShop.

16 Comments

  1. netdiversays:

    guten tag
    ich habe ps 1.6.14 installiert. wie es scheint lässt sich beim template bootstrap unter /themes/template/js kein tools.js finden. bei mir liegt eine ähnliche datei unter /js/tools.php. dort aber wiederum finde ich keine Funktion: ps_round(value, precision).
    ich suche nun schon seit tagen eine verlässliche anleitung, wie ich CHF richtig runden kann. kann das denn so schwer sein, diese regel fix in das shop-system einzubauen und der schweizer währung zuzuordnen?

    • André Rühlesays:

      Ich habe die Beschreibung zur Rundung überarbeitet. Wenn das Template keine tools.js hat, muss diese auch nicht angepasst werden. Ich würde jedoch empfehlen, die tools.js im PrestaShop JavaScript Ordner („/js/“) anzupassen

  2. Jens Friedrichsays:

    ich bin derzeit dabei einen prestashop für einen kunden zu konfigurieren. ich war froh endlich die lösung gefunden zu haben, um die rundungen der schweizer rechnung in den griff zu bekommen. dies ist mein letztes übriges problem. leider hat es nicht funktioniert. zur warenkorb-ajax berechnung (teil 4) ihrer ausführung habe ich die entsprechende datei in meiner auflistung nicht finden können (/themes//js/tools.js). die ersten 3 schritte hatte ich ausgeführt. somit bin ich nicht weiter gekommen. den shop hatte es erst garnicht mehr angezeigt.
    also habe ich den ‚urzustand‘ der 3 dateien wieder hergestellt.
    der shop ist die neueste version 1.6.0.14. – schade.
    vielleicht haben sie noch einen gedanken dazu. vielen dank.
    jens

    • André Rühlesays:

      Hallo Jens, ich habe die Beschreibung angepasst. Die Funktion ps_round() in /js/tools.js sollte immer angepasst werden, diese ist im Standard enthalten. Wenn Dein aktives Template keine „tools.js“ im JavaScript Ordner hat muss es nicht angepasst werden. Viele Grüsse, André

  3. Markus Sorgsays:

    Guten Tag, kann es sein, dass ab Prestashop 1.6.1 tools.js anders aufgebaut ist? – ps_round(value, places) … Grüsse Markus Sorg

    • André Rühlesays:

      Hallo Herr Sorg
      Bei der aktuellen 1.6.1.1 habe ich es gerade probiert, dort ist die Tools.js noch genauso aufgebaut wie hier beschrieben. Ich habe einen Screenshot ergänzt, wo genau ich die Anpassungen platziert habe.
      Ich kann sonst auch gerne mal kurz drauf schauen, senden Sie mir doch einfach ein Mail.
      Viele Grüsse
      André Rühle

  4. Velle Dank för die super Beschriibig. Hed super klappet! Grüess, Armin

  5. Prestashop 1.6.1.4 mit einem bitnami image.

    Vielen Dank André für die Beschreibung. Hat alles sehr gut geklappt.

    Hat niemand Einfluss um die Anpassungen für die Schweiz bei Prestashop zu positionieren? Auch wenn wir eines der ganz wenigen Länder sind, wäre es doch genial, die Anpassungen bei einem Update nicht wieder zu integrieren.

    Ein Modul installieren nur wegen der Rundung ist auch übertrieben…..

    Nochmals Danke
    Thomas

  6. Hallo, vielen Dank für diese tolle Anleitung.
    Leider habe ich jedoch ein kleines Problem. Nach dem aktivieren des neuen Rundungsmodus im Backoffice, habe ich beim Produkt anlegen keine Möglichkeit mehr den Preis usw. einzugeben. Dort wo normalerweise die Preiseinstellungen sind, ist einfach nichts. Alles andere funktioniert.

    Habe Prestashop Version 1.6.1.4

    Beste Dank und freundliche Grüsse
    Denis

  7. Stefansays:

    Prestashop 1.6.1.5

    Vielen Dank für die ausführliche Beschreibung. Leider komme ich bei der Tools.js nicht weiter. Ich habe ps_round_half_up(value, precision) und ps_round(value, places) gefunden. Leider aber fand ich ps_round(value, precision) nicht. Eine Idee was ich falsch mache?

  8. Stefan Stadelmannsays:

    Guten Tag

    Besten Dank für die ausführliche Antwort. Ich benutze Prestashop 1.6.1.5. Kann es sein dass sich dabei die Datei tools.js geändert hat? Ich finde bei mir die Funktion ps_round(value, precision) nicht.

  9. Anettesays:

    Guten Tag, erstmals vielen Dank für die tolle Anleitung! Ich habe alles nach Ihrer Anleitung gemacht, grundsätzlich funktioniert dies auch nur wenn ich die Tools.php Datei verändert habe komme ich nicht mehr in den Admin rein. Meine Version ist 1.6.14. Haben Sie dazu evtl auch eine Idee? mfg Anette

  10. Wirklich tolle Anleitung – Danke dafür!
    Kleine Korrektur für PrestaShop 1.6.1.11
    Datei: /js/tools.js

    function ps_round(value, places)
    {
    if (typeof(roundMode) === ‚undefined‘)
    roundMode = 2;
    if (typeof(places) === ‚undefined‘)
    places = 2;

    var method = roundMode;

    if (method === 0)
    return ceilf(value, places);
    else if (method === 1)
    return floorf(value, places);
    else if (method === 2)
    return ps_round_half_up(value, places);
    else if (method == 3 || method == 4 || method == 5)
    else if (method == 150)
    return Math.round(20 * value) / 20;
    {

  11. Hallo bei mir (Version 1.6.1.11) funktioniert es aber wenn ich „Swiss franc round mode“ ausgewählt habe kommt bei editieren der Artikel bei Preise nichts mehr.

    Haben Sie eine Idee woran das leigen könnte?

    Mit freundlichen Grüssen

    • Habe auch das selbe Problem (Version 1.6.1.10), dass im BO Katalog/Produkte, beim Artikel, im Tab Preise, diese nicht angezeigt werden.
      Habe mal in der Browser-Konsole nachgeschaut: Da gibt es mehrere Fehler bezüglich jquery und dem admin/price.js (ReferenceError: ps_round is not defined) und
      admin/products.js (ReferenceError: in_array is not defined)
      So hab ich das mal ausgetestet und festgestellt, dass ich bei admin/tools.js, die ergänzenden Zeilen:
      else if (method == 150)
      return Math.round(20 * value) / 20;
      nach unten schieben muss ( ca. Zeile 178) nach den Funktionen, nach:

      else
      tmp_value = tmp_value * f1;

      return tmp_value;
      }

      aber bevor der abschliessenden Klammer der Funktion.

      So funktioniert es bei mir tipptop.

  12. Hallo

    Gibts auch eine Lösung für PS 1.5.6?

    Besten Dank im Voraus.

Kommentieren

Wir freuen und auf Ihren Kommentar! Ihre E-Mail Adresse wird nicht veröffentlicht.