Neu Freiposition erstellen mit variablem Preis (Versandkosten) - effiziente Dotliquid-Anweisung gesucht

Mander

Aktives Mitglied
25. Oktober 2016
42
1
Guten Morgen,

wir importieren Aufträge über die Ameise und haben einige Workflows zur Weiterverarbeitung erstellt. Unter anderem muss eine Freiposition erstellt werden, deren Preis abhängig vom Lieferland und vom Versandgewicht des Auftrags ist.
Dank Dotliquid-Abfrage kein Problem, allerdings ist unser Ansatz etwas umständlich. So sieht die Dotliquid-Anweisung beispielsweise aus:

{% if Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' or Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < 1 %}
2
{% elsif Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' or Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < 2 %}
3
{% elsif Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' or Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < 3 %}
4
{% elsif Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' or Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < 4 %}
5
.
.
.
{% elsif Vorgang.Lieferung.Lieferadresse.LandISO == 'IT' or Vorgang.Lieferung.Lieferadresse.LandISO == 'ES' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < 2 %}
4
{% elsif Vorgang.Lieferung.Lieferadresse.LandISO == 'IT' or Vorgang.Lieferung.Lieferadresse.LandISO == 'ES' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < 3 %}
6
.
.
{% endif %}

Der Aufbau ist relativ simpel. Wenn das Lieferland Frankreich oder Österreich ist, setzt er abhängig vom Gesamtgewicht einen Preis (beispielsweise 3 EUR für ein Paket, das 5,5kg wiegt). Das ganze Spiel dann noch mit weiteren Ländern, wie in diesem Beispiel mit Italien und Spanien. Für diese beiden Länder gelten andere Preise.

Die Anweisung macht, was sie soll, allerdings ist sie nicht sehr effizient. Insgesamt werden über 50 Länder berücksichtigt, die sich teilweise zusammenfassen lassen (wie im Beispiel Frankreich und Österreich oder Italien und Spanien), allerdings ist die Anweisung trotzdem extrem aufgebläht. Weiteres Problem: Die Liste arbeitet natürlich nur mit Gewichten, die wir hier auch eintragen. Wenn das Versandgewicht für einen Auftrag mal exorbitant hoch sein sollte, wird u.U. kein Preis mehr berechnet.

Frage: Gibt es die Möglichkeit, eine Art FOR-Schleife zu schreiben, die beispielsweise für jedes Kilogramm Versandgewicht einen Wert von 1,00 aufsummiert und den Vorgang theoretisch bis ins Unendliche wiederholt?

Beispielweise so:
{% if Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' or Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' and Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt < n %}
n+1
{% endif %}

Viele lieben Dank!

Mander
 

Mander

Aktives Mitglied
25. Oktober 2016
42
1
Hat niemand eine konkrete Idee?

Ich habe es schon mit FOR-Schleifen versucht, allerdings komme ich nicht ansatzweise an eine Lösung :/
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
402
Hallo Mander,

Dein Vorschlag, eine For-Schleife einzusetzen, sagt eigentlich schon, dass es zwischen Gewicht und dem zurückzugebenden Wert eine wie auch immer geartete Beziehung gibt und die Werte, die Du oben angibst sind sogar linear verbunden. Die gute Nachricht ist dann aber, dass man dafür nicht einmal eine For-Schleife braucht... ;)

Dein Beispiel oben sagt zum Beispiel folgendes ...

- Für AT und FR kostet alles unterhalb von einem Kilo 2€ kostet und dann kostet es für jedes Kilo 1€ mehr.
- Für IT und ES kostet alles unterhalb von zwei Kilo 4€ kostet und dann kostet es für jedes Kilo 2€ mehr.

Du kannst also einfach pro Land oder Länderkombi einen Basiswert setzen und den dann einfach basierend auf dem KiloGewicht*GewichtsWert erhöhen. Das klingt erst einmal super-einfach, aber leider muss man in DotLiquid immer mal wieder ein paar Klimmzüge mehr machen. In der Summe sieht das Ganze dann für Deine beiden Ländergruppen von oben so aus ...
Code:
{% assign KilosGanze = Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt -%}
{% assign KilosTeile = KilosGanze | Modulo: 1 -%}
{% assign KiloGewicht = KilosGanze | Minus: KilosTeile -%}
{% if Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' or Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' -%}
{% assign BasisKosten = 2 -%}
{% assign KiloKosten = 1 -%}
{% elseif Vorgang.Lieferung.Lieferadresse.LandISO == 'IT' or Vorgang.Lieferung.Lieferadresse.LandISO == 'ES' -%}
{% assign BasisKosten = 4 -%}
{% assign KiloKosten = 2 -%}
{% assign KiloGewicht = KiloGewicht | Minus: 1 -%}
{% endif -%}
{{ KiloGewicht | Times: KiloKosten | Plus: BasisKosten | FormatNumber: 'N2', 'de-DE' }}
Die ersten drei Zeilen werden gebraucht, um das tatsächlich Versandgewicht auf seine ganzen Kilos einzudampfen, denn leider kennt die JTL DotLiquid Implementierung keinen der Standard Liquid Tags round oder floor. Dann legt man innerhalb jeder Länderkombi nur noch die BasisKosten und die KiloKosten an und korrigiert ggfls. das Gewicht, ab dem erhöht werden soll, bei IT und ES also um ein Kilo nach unten, denn dort kostet ja alles bis 2 kg die gleichen 4€. Am Ende, außerhalb des If-Konstrukts wird der Wert dann für alle Länderkombis gleichermaßen berechnet und ausgegeben, denn diese Formel ändert sich ja nicht.

Und falls Du bei irgendeiner Länderkombi keinen pro-Kilo-Zuwachs der gewichtsabhängigen Kosten hast, dann kannst Du dann ganz einfach abbilden, indem Du innerhalb des Länderkombi-Zweigs einfach noch eine If-Bedingung reinhängst.

Sagen wir mal bei IT und ES wäre es so, dass sich der Wert nicht pro 1kg Versandgewicht, sondern pro 10 kg Versandgewicht erhöht und ab 30 kg dann ein Festwert wird. Dann würde der Code von oben wie folgt aussehen (können) ...
Code:
{% assign KilosGanze = Vorgang.AuftragsPositionen.ArtikelPositionen.GewichtGesamt -%}
{% assign KilosTeile = KilosGanze | Modulo: 1 -%}
{% assign KiloGewicht = KilosGanze | Minus: KilosTeile -%}
{% if Vorgang.Lieferung.Lieferadresse.LandISO == 'AT' or Vorgang.Lieferung.Lieferadresse.LandISO == 'FR' -%}
{% assign BasisKosten = 2 -%}
{% assign KiloKosten = 1 -%}
{% elseif Vorgang.Lieferung.Lieferadresse.LandISO == 'IT' or Vorgang.Lieferung.Lieferadresse.LandISO == 'ES' -%}
{% assign BasisKosten = 4 -%}
{% if KiloGewicht < 10 -%}
{% assign KiloKosten = 5 -%}
{% elseif KiloGewicht < 20 %}
{% assign KiloKosten = 10 -%}
{% elseif KiloGewicht < 30 %}
{% assign KiloKosten = 20 -%}
{% else %}
{% assign KiloKosten = 50 -%}
{% endif -%}
{% endif -%}
{{ KiloGewicht | Times: KiloKosten | Plus: BasisKosten | FormatNumber: 'N2', 'de-DE' }}
... die KiloKosten verdoppeln sich also pro 10 kg und gehen ab 30kg auf fixe 50€.

Das sieht zwar schon nicht mehr so schön klar aus, wie der Code darüber, zeigt aber, dass man auch innerhalb der Länderkombis nicht mit Schleifen arbeiten muss, um andere Stufen abzubilden, sondern dass auch hier mit Logik gearbeitet werden kann.

Gruß,
Ingmar
 
Zuletzt bearbeitet:
Ähnliche Themen
Titel Forum Antworten Datum
Freiposition auf Rechnung ohne Preise anzeigen JTL-Wawi 1.6 7
Suche mittels einer Freiposition Bezeichnung JTL-Wawi 1.10 1
Artikel im Auftrag nicht verschiebbar. Freiposition automatisch gesetzt in jedem Auftrag als 1. Position. JTL-Wawi 1.10 1
Ticket erstellen bei einer Fehlermeldung mit JTL-Start ??? JTL-Wawi 1.9 1
Neu SEO title tag Artikel dynamisch erstellen Allgemeine Fragen zu JTL-Shop 3
Neu Nach Update auf 1.10.14.1 - Zahlungsart wird beim Auftrag erstellen nicht mit übernommen + Sepa Eingänge JTL-Wawi - Fehler und Bugs 0
Geschenke erstellen - geht das überhaupt? Rabatt? JTL-Wawi 1.10 2
Issue angelegt [WAWI-44314] Workflow automatisch 2 Pakete erstellen bei bestimmen Produkten? JTL-Workflows - Ideen, Lob und Kritik 2
Neu Vater Kind Artikel erstellen User helfen Usern - Fragen zu JTL-Wawi 3
Neu Lister 1.0 Produktseiten erstellen nicht mehr möglich? Amazon-Lister - Fehler und Bugs 2
Neu Mittels Ameise Aufträge aus 2 einzelnen CSV Dateien erstellen Schnittstellen Import / Export 5
Neu CustomGPT - Workflows bzw. DotLiquid erstellen mit ChatGPT User helfen Usern 16
Kann keinen neuen Export für Google Shopping mehr erstellen Allgemeine Fragen zu JTL-Shop 4
Neu FBA-Artikel lässt sich nicht mit Stücklistenartikel verknüpfen – Workaround? Arbeitsabläufe in JTL-Wawi 0
Neu Kartenzahlung mit Zettle / Wo finde ich einen Transaktionscode in der Datenbank? Allgemeine Fragen zu JTL-POS 0
Neu Probleme mit Pixel-Code eines Drittanbieters in Templatedatei Betrieb / Pflege von JTL-Shop 1
Neu Wer hat 2025 mit Xentral Erfahrungen gesammelt? Wechsel von JTL‑Wawi in Sicht Smalltalk 2
Funktion mit welchem Konnektor? JTL-Wawi 1.11 0
Kann ich mit dieser SQL Version die neue WaWi 1.11.1 installieren? JTL-Wawi 1.11 2
Neu Übergabe Versandlaber an Fulfiller möglich über FFN standallone aber nicht über FFN mit angebundeener JTL-WAWI Arbeitsabläufe in JTL-Wawi 0
Umlaute in Städtenamen werden mit � dargestellt JTL-Wawi 1.11 2
Neu Problem mit Drucker User helfen Usern - Fragen zu JTL-Wawi 0
Artikelstatistik funktioniert nicht mehr mit 1.11 JTL-Wawi 1.11 2
Studio-Webcast E-Com Insights mit JTL: Black Friday Edition am 30.10.25 Messen, Stammtische und interessante Events 0
Neu JTL Shop Versand Preisstaffel mit negativen Werten?? Allgemeine Fragen zu JTL-Shop 0
Neu Zeiterfassung Tablett Terminal - mit Hinweis: Arbeitszeit heute nicht erreicht User helfen Usern 3
Neu Artikelsuche mit % Platzhalter funktioniert nicht mehr (wie früher) JTL-Wawi - Fehler und Bugs 6
Problem mit API Anbindung JTL-Wawi 1.11 2
Neu Leere Suche – Ergebnis definieren mit Doofinder User helfen Usern - Fragen zu JTL-Wawi 0
Neu Artikel mit gleichem Namen werden bei Shopify zu einem Artikel Shopify-Connector 2
Kein E-Mail-Versand mit Anhängen möglich JTL-Wawi 1.11 21
Neu Falscher E-Mail-Absender beim Arbeiten mit mehrere Firmen JTL-Wawi - Fehler und Bugs 0
Neu Abgleich bricht mit Fehler 503 ab Shopware-Connector 3
Neu Neues PLugin: DITH Lieferantenbestand – realistische Lieferzeiten mit Lieferanten- + Eigenbestand Plugins für JTL-Shop 0
Rechnungen mit Differenzbesteuerung JTL-Wawi 1.9 7
In Diskussion Etikett mit Warnung bei Versand drucken JTL-Workflows - Ideen, Lob und Kritik 9
1.11 mit 2 Mandanten - Dashboard bei Advanced Wawi zerschossen - JTL Start funktioniert JTL-Wawi 1.11 1
Was ist mit der Wawi 1.11.0? JTL-Wawi 1.11 20
Neu PC-Umzug mit Datenbanksicherung von JTL-Wawi 1.5.48 User helfen Usern - Fragen zu JTL-Wawi 5
Neu JTL Shop Update von 5.3.3 auf 5.6 mit der Community Free Edition - WaWi funktion weiter gegeben? User helfen Usern - Fragen zu JTL-Wawi 1
Probleme mit dem Einstellen von Artikeln auf Amazon über JTL Wawi mit dem Lister 2.0 Amazon-Lister - Fehler und Bugs 6
Neu JTL-Shop TECHNIK (SalePix) – Problem mit Render Blocking Requests User helfen Usern - Fragen zu JTL-Wawi 2
Neu Ladenpreis auf Etikett mit Bedingung verknüpfen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Greyhound Erfahrungen mit Marktplätzen User helfen Usern - Fragen zu JTL-Wawi 6
Produkt-API v4 Support bei OTTO läuft aus (10.12.2025) – Zukunft mit JTL Wawi unklar Otto.de - Anbindung (SCX) 25
Neu Temu-Anbindung mit JTL / Fehlermeldung beim Hochladen Onlineshop-Anbindung 1
Neu Unzufriedenheit mit dem JTL-Support Smalltalk 62
Neu Stückzahl lässt sich mit [+] und [-] Buttons nicht ändern JTL-Shop - Fehler und Bugs 6
Beantwortet Slider nur noch mit Bild gefüllt Installation / Updates von JTL-Shop 1
Neu Encoding-Probleme mit dem Proto-Template Templates für JTL-Shop 7

Ähnliche Themen