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
395
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
Neu Freiposition auf Pickliste lässt sich nicht picken, Packtisch Gelöste Themen in diesem Bereich 2
Neu Auftrag mit Freiposition Menge 0 läßt sich nicht ausliefern + wird nicht auf Lieferschein angezeigt User helfen Usern - Fragen zu JTL-Wawi 1
Mandanten erstellen JTL-Wawi 1.8 5
Neu Wie kann ich mit der Wawi Ebay Rechnungen erstellen und nach ebay hochladen? eBay-Anbindung - Fehler und Bugs 3
Kopie Lieferschein erstellen JTL-Wawi 1.7 1
Neu leeres Textfeld erstellen für einen Hinweis auf der Rechnung User helfen Usern - Fragen zu JTL-Wawi 2
Fehler beim erstellen von Aufträgen JTL-Wawi App 2
Testmandantenumgebung in Wawi als Duplikat vom Echtzeitmandanten erstellen? JTL-Wawi 1.8 5
Neu Mehrere Sprachen aktivieren und verschiede Preise pro Land erstellen Betrieb / Pflege von JTL-Shop 1
Vorab bezahlte Rechnung erstellen JTL-Wawi 1.8 3
Neu Eigene Seiten mit Plugin erstellen Technische Fragen zu Plugins und Templates 1
JTL Shop Gutscheine über JTL-Vouchers erstellen Allgemeine Fragen zu JTL-Vouchers 2
Neu JTL Shop Gutscheine über JTL-Vouchers erstellen Allgemeine Fragen zu JTL-Shop 2
Neu Exportformate - Zeitstempel Datei automatisiert erstellen Betrieb / Pflege von JTL-Shop 1
Landingpage Header und Footer erstellen zwecks Vorbestellung Einrichtung JTL-Shop5 0
Neu Fehler beim erstellen von Aufträgen. Digitale Unterschrift im Auftrag. JTL-Wawi - Fehler und Bugs 0
Neu Erstellen eines Sets, als Variation in Zusammenhang mit einer Stückliste Arbeitsabläufe in JTL-Wawi 2
Neu Email Vorlage erstellen Wawi 1.8.12.0 User helfen Usern - Fragen zu JTL-Wawi 7
Neu Email Vorlage in Wawi 1.8 erstellen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Beantwortet #GEFUNDEN# Suche jemand , der uns eine (automatische) SQL Abfrage erstellen kann mit Mail Ausgabe Dienstleistung, Jobs und Ähnliches 2
Provisionsrechnung erstellen JTL-Wawi 1.8 0
Abhängige Variationen erstellen JTL-Wawi 1.8 1
Rechnungskorrektur in JTL bei OTTO Retoure erstellen? Otto.de - Anbindung (SCX) 1
Workflow für Amazon Zahlart erstellen JTL-Wawi 1.7 0
Neu Wie kann ich eine Inventurliste als Excel- oder csv-Datei erstellen? Gelöste Themen in diesem Bereich 3
Neu E-Rechnung erstellen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Gutscheine mit Anzahl und Code erstellen ? Allgemeine Fragen zu JTL-Shop 1
Gelöst Servicedesk Workflow Datei erstellen um einen Auftrag zu ändern Gelöste Themen in diesem Bereich 1
Neu Wareneingang gebucht ... Pickliste erstellen ... Eazyshipping und Versandboxen Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 5
Neu Neue Tab in JTL 5 Shop erstellen Allgemeine Fragen zu JTL-Shop 3
Gelöst GLS Probleme beim Erstellen von Versandetiketten Gelöste Themen in diesem Bereich 1
[JTL-WAWI API] Versandposition in Auftrag erstellen? JTL-Wawi 1.8 3
Neu Nach Update auf 1.8.11 - teilweise kein "Amazon - Neue Produkteseite erstellen" möglich Amazon-Lister - Fehler und Bugs 1
Neu Subdomain für eine Seite erstellen Allgemeine Fragen zu JTL-Shop 0
Teilrechnung Erstellen über/nach Packtisch+ JTL-Wawi 1.8 1
Neu Landingpage erstellen? User helfen Usern 2
Neu Wunschzettel von Kunden einsehen - Angebot erstellen Allgemeine Fragen zu JTL-Shop 1
Neu Zusammengesetzte Artikel erstellen Arbeitsabläufe in JTL-Wawi 1
Neu Rechnungen Sofort erstellen (ohne Auftrag!) User helfen Usern - Fragen zu JTL-Wawi 1
Workflow Bug: Rechnungskorrektur erstellen aus Retoure JTL-Wawi 1.8 4
Neu JTL-Shop oder Workflow: Artikel mit Menge > 1 sollen trotzdem als separate Einzelartikel im Auftrag aufgeführt werden User helfen Usern - Fragen zu JTL-Wawi 0
Neu Kindartikel mit Amazon-Angebot verknüpfen Amazon-Lister - Fehler und Bugs 0
Neu Artikel mit PReisabfrage Negativer Betrag für Lotto-Auszahlung Allgemeine Fragen zu JTL-POS 0
Neu BETA aktuelle Connector Version mit WPML Unterstützung WooCommerce-Connector 0
Neu Googlesuche Treffer mit falschen Angaben. Allgemeine Fragen zu JTL-Shop 8
Barcodescanner Fehler mit ein "U" am Ende JTL-Wawi 1.8 0
Neu mit FBM für Ausland User helfen Usern - Fragen zu JTL-Wawi 2
Neu Probleme mit Artikel Abgleich Shopware-Connector 2
Ausgabe des Warenbestandes mit Fulfillment Lager JTL-Wawi 1.8 0
Neu Variations Artikel mit Kindern automatisch Stücklisten zuweisen Arbeitsabläufe in JTL-Wawi 4

Ähnliche Themen