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
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
Neu Freiposition als Vorlagen speichern (neuer Artikeltyp "Freiposition") JTL-Wawi - Ideen, Lob und Kritik 1
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 JTL WaWai Artikel aus Angebote von Plattformen Amazon+Otto erstellen Einrichtung und Installation von JTL-eazyAuction 0
Teilrechnung erstellen mit JTL Packtisch JTL-Wawi 1.10 4
Neu Retourenlabel für DHL Selbstzahler über Retouren erstellen geht nicht JTL-ShippingLabels - Fehler und Bugs 0
Neu Eigene Preislisten Vorlage erstellen User helfen Usern - Fragen zu JTL-Wawi 1
Neu Zahlungszuordnung Wawi Auftrag mit Barzahlung im Laden User helfen Usern - Fragen zu JTL-Wawi 0
Neu Download-Artikel mit dem Download-Modul anbieten JTL SHOP Plugins für JTL-Shop 5
Neu Magento2 mit Synesty in JTL-Wawi verbinden Allgemeines zu den JTL-Connectoren 5
Neu Bonuspunkte sammeln mit JTL-Pos Allgemeine Fragen zu JTL-POS 0
Neu Abgleich WooCommerce / JTL mit dem Connector – Fehlermeldung WooCommerce-Connector 0
QRCode mit eigenem Feld in Druckvorlage füttern. JTL-Wawi 1.9 1
Neu Kunden mit Kundenkonto bestellen als Gast und Aufträge sind dann nicht im Konto sichtbar Allgemeine Fragen zu JTL-Shop 4
Vorlage mit Bedingung JTL-Wawi 1.9 2
Neu Die folgenden Dateien sind nicht identisch mit den Dateien der aktuellen Version von JTL-Shop. Allgemeine Fragen zu JTL-Shop 0
Artikel mit zwei Positionen JTL-Wawi 1.10 1
Neu Shopify Verkaufskanal inaktiv nach Anbindung mit Shopify App Shopify-Connector 3
Wir haben Probleme beim Abgleich mit Amazon Amazon-Anbindung - Fehler und Bugs 41
Neu Kunden mit registrierten Konto im Shop exportieren User helfen Usern - Fragen zu JTL-Wawi 2
Neu Filter Kunde mit eigenem Feld Wert "größer als"? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Google Ads Conversion Tracking mit Consent Mode v2 Plugins für JTL-Shop 0
Neu Probleme mit der Email über jtl hosting (plesk) User helfen Usern 2
Neu Massenupdate Parentartikel mit AMZ Lister 2.0 Amazon-Lister - Ideen, Lob und Kritik 0
Konfigurationsartikel mit Stückliste versucht Gewinn JTL-Wawi 1.10 0
Neu Paypal Zahlung erfolgreich, Auftrag mit Status Neu im Shop und fehlt in WAWI JTL-Shop - Fehler und Bugs 4
Neu Teilweise Probleme mit Kindartikel anlegen User helfen Usern - Fragen zu JTL-Wawi 5
JTL Wawi: Kompatibel mit WPC Product Bundles for WooCommerce JTL-Wawi 1.9 0
Neu Mit Workflow verfügbaren Bestand aller Artikel in Datei schreiben User helfen Usern - Fragen zu JTL-Wawi 8
Beantwortet Einen 2. JTL-Shop5 mit dem gleichen PayPal-Account verbinden Einrichtung JTL-Shop5 7
Neu Gutschein verkaufen - Produkt mit Preiswahl durch Kunden? User helfen Usern - Fragen zu JTL-Wawi 6
Neu Probleme mit Etikettendrucker User helfen Usern - Fragen zu JTL-Wawi 0
Neu JTL mit Shopify für Etsy anstatt JTL mit Unicorn2 - hat das jemand gemacht? Anbindung, bestehende Artikel mappen? Multishop? Shopify-Connector 2
Neu Shopify Basic mit JTL? Wie einrichten? Ist der JTL Guide noch aktuelle wegen PII Einschränkung? Shopify-Connector 2
Neu Gibt es eine Möglichkeit Copilot Studio mit der JTL-Datenbank zu verbinden? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Wann ist JTL WaWi / Connector mit Shopware 6.7 kompatibel? Shopware-Connector 5
Zahlungsmodul in Kombination mit der Deutschen Bank funktioniert nicht JTL-Wawi 1.10 3
Neu Rhewa 32 Waage mit JTL-WMS / JTL-Packtisch+ verbinden JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 2
Neu Shopabgleich mit Varianten scheitert Shopify-Connector 18
In Bearbeitung Kompakte Kasse gesucht mit der auch Kartenzahlung über 50 € funktioniert? JTL-POS - Fragen zu Hardware 4
In Diskussion Hilfe bei Verbindung von EC-Terminal (CCV A920) mit JTL-POS Allgemeine Fragen zu JTL-POS 3
API QueryItems mit Herstellern oder Kategorien bringt nichts JTL-Wawi 1.10 0
Neu JTL Shop 5: ein Kundenkonto in der WAWI mit mehreren Konten im Webshop Allgemeine Fragen zu JTL-Shop 7

Ähnliche Themen