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.295
407
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 Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu DHL Versenden 4.0 HS Code-Fehler bei Freiposition JTL-ShippingLabels - Fehler und Bugs 20
Neu Saft-pt Datei Portugal erstellen Schnittstellen Import / Export 2
Neu Produktionsdatenblatt erstellen nicht möglich JTL-Plan&Produce - Fehler und Bugs 0
Angebliche externe Aufträge "für Rechnungserstellung freigeben" und Rechnungen erstellen. Gibt es dazu eine akzeptable Erklärung von JTL? JTL-Wawi 1.11 1
Fehlermeldung beim Artikel erstellen JTL-Wawi 1.11 3
Neu Update von Modul DHL 3.0 aud 4.0 - Versandlabels lassen sich nicht erstellen JTL-ShippingLabels - Fehler und Bugs 17
In Diskussion Workflow mit UND / ODER - Bedingung erstellen JTL-Workflows - Ideen, Lob und Kritik 7
Neu Probleme beim Erstellen von Artikeln aus Angeboten von eBay User helfen Usern - Fragen zu JTL-Wawi 1
Neu Klarna konnte mit den angegebenen Daten keine Sitzung erstellen. Einige Feldbedingungen wurden verletzt. Betrieb / Pflege von JTL-Shop 0
Neu Nettopreis mit rabbatt Allgemeine Fragen zu JTL-Shop 1
Neu Canonical-Tag bei Merkmalwert-URLs mit Parameter "m" Betrieb / Pflege von JTL-Shop 11
Neu Übertragung an AMAZON (versendet) - Probleme mit Großbriefen JTL-ShippingLabels - Fehler und Bugs 0
Neu Gesucht: JTL-Systempartner/Freelancer mit Erfahrung in Personalisierungs-/Gravur-Fulfillment Dienstleistung, Jobs und Ähnliches 2
Neu Wird irgendwo in der Datenbank geloggt welcher WMS-Mobile Benutzer mit dem MDE-Gerät einen Auftrag, bzw. Pickliste gepickt hat? User helfen Usern - Fragen zu JTL-Wawi 1
Rechnung mit CC verschicken Vorlagen 2.0 JTL-Wawi 1.11 12
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Neu Versanddatenimport in Packtisch nicht automatisch (DPD Österreich mit WEB.omat) JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 2
Neu Anzeige Alle Artikel mit Kategorieanzeige linke Menüleiste Allgemeine Fragen zu JTL-Shop 9
Neu GLS Privatlabels mit Packtisch verknüpfen JTL-ShippingLabels - Ideen, Lob und Kritik 0
Neu oAuth Credentials Login mit JTL .. WO? User helfen Usern 1
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
Neu Konfigurationsgruppe mit Auslesen Arbeitsabläufe in JTL-Wawi 1
Neu Ist es ohne Probleme möglich Cloudflare in der Free Version mit JTL zu nutzen? Allgemeine Fragen zu JTL-Shop 7
Neu Nach Wawi Update Probleme mit Rechnungsdrucker JTL-POS - Fehler und Bugs 4
Neu Mariadb 12 mit 5.7.1 Allgemeine Fragen zu JTL-Shop 0
Neu Pickliste mit maximaler SKU-Anzahl – gibt es eine Lösung? Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 4
Neu Mit Fehlern beendet - Object reference not set to an instance of an object. JTL-Track&Trace - Fehler und Bugs 0
ändern von Servernamen nach Neuinstallation von SQL und Verbindung mit neuem Server in der Wawi JTL-Wawi 2.0 2
Probleme mit Artikelansicht oder Verkauf, etc. JTL-Wawi 2.0 0
Fehler mit Zahlungsabgleich JTL-Wawi 1.11 11
Eigener Drittshop-Connector (jtl/connector 5.3): valide Variationskombinationen werden mit „besitzt keine Variationen" nicht gesendet JTL-Wawi 1.11 1
Neu Problem mit dem JTL-Connector – Invalid Shopify connection credentials. Shopify-Connector 3
Neu Arbeiten mit Lieferanten EKs - Workflows und SQL User helfen Usern - Fragen zu JTL-Wawi 6
Neu JTL Artikelanlage mit KI beschleunigen User helfen Usern - Fragen zu JTL-Wawi 2
Neu DHL 4.0 mit JTL-ShippingLabels funktioniert nicht JTL-ShippingLabels - Fehler und Bugs 2
Neu Amazon FBA Bestellungen doppelt mit _1 Amazon-Anbindung - Fehler und Bugs 5
Fehler beim Abgleich mit Amazon JTL-Wawi 2.0 10
Abgleich Amazon mit Fehlern beendet 1.11.08 JTL-Wawi 1.11 14
Rabatt Coupons in Verbindung mit Staffelpreisen - JTL 1.11.9, JTL Shop JTL-Wawi 1.11 0
Worker 2.0 starten mit deak. Abgleichen? JTL-Wawi 2.0 6
Fehler beim Abgleich mit dem JTL-Shop JTL-Wawi 2.0 12
Neu OnFinds: KI-Suche für JTL-Shop mit fairer Abrechnung nach Artikelanzahl. 30 Tage kostenlos testen Plugins für JTL-Shop 0
Neu Abrechnung / Auslieferung von Aufträgen mit Gutschriftverfahren Arbeitsabläufe in JTL-Wawi 3
Neu JTL Shop 5.7.1 mit Fehlern - versandarten zahlungsarten nicht änderbar, leere weiße Seite JTL-Shop - Fehler und Bugs 5
JTL Ameise Lieferantenbestellung mit VPE importieren oder umrechnen JTL-Wawi 1.11 0
Jtl pos Einstellungen mit wiwa 2.02 JTL-Wawi 1.11 0
Anmeldung mit OAuth bei Versanddienstleister notwendig JTL-Wawi 1.10 5
Problem mit Hermes Österreich Sendungsnummern – Fehler beim Amazon-Abgleich in JTL-Wawi JTL-Wawi 1.10 0
Bestellabgleich mit JTL Wawi und WooCommerce 1h verzögert JTL-Wawi 2.0 0

Ähnliche Themen