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
Freiposition Beschreibungstext wird nicht gedruckt Druckvorlage JTL-Wawi 2.0 1
Neu Google Pay und Konfiguration mit Freiposition stürzt ab *Hotfix* Technische Fragen zu Plugins und Templates 0
Neu Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu Eigenen JTL-SCX-Marktplatzkanal für Multi-Vendor-Marktplatz erstellen – Erfahrungen gesucht Einrichtung und Installation von JTL-eazyAuction 3
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
„Wer hat Lust auf einen Erfahrungsaustausch bei Kaffee und Kuchen?“ – aber mit JTL-Wawi als Dessert? Starten mit JTL: Projektabwicklung & Migration 0
Neu Rezeptura – Rezeptur-, Produktions- und Kalkulationssoftware mit JTL-Wawi-Anbindung Business Jungle 0
„Wer hat Lust auf einen Erfahrungsaustausch bei Kaffee und Kuchen?“ – aber mit JTL-Wawi als Dessert? Starten mit JTL: Projektabwicklung & Migration 0
Neu Amazon Lister 2.0 (DE) Hose mit Variation Größe listen? Wie? Amazon-Lister - Fehler und Bugs 1
Neu Biete: KI-gestützte Produktdatenoptimierung für JTL-Wawi (Zero-Touch, mit Faktencheck) Dienstleistung, Jobs und Ähnliches 2
Neu POS mit 1.8.12.4 Einrichtung / Updates von JTL-POS 2
Neu Ringscanner mit Akku zu verkaufen (für das WMS) Smalltalk 1
Neu Bondrucker mit TSE JTL-POS - Fragen zu Hardware 1
Neu Erfahrungen mit DHL Paket International Premium Tarife in der JTL-Shipping-Cloud ? JTL-ShippingLabels - Ideen, Lob und Kritik 1
REST API (eazybusiness): POST/PATCH /items/{id}/suppliers lehnt jeden Payload mit HTTP 400 ab JTL-Wawi 2.0 2
[PowerShell] USt-IdNr. (VAT-ID) Massenprüfung gegen VIES – mit Auto-Retry, HTML-Report, Mailversand JTL-Wawi 1.11 3
Mehrere Probleme mit Update auf 2.0.5 JTL-Wawi 2.0 6
Neu onpage SEO auf SW - Was ist mit der Wawi? Shopware-Connector 1
Neu Shipping 2.0 ist ein Grund für kleine Shops JTL zu verlassen bzw. gar nicht erst mit JTL anzufangen JTL-ShippingLabels - Ideen, Lob und Kritik 43
Neu Stücklistenartikel mit Differenzbesteuerung + 19 % USt. – Komponenten getrennt auf Rechnung ausweisen? User helfen Usern - Fragen zu JTL-Wawi 3
Neu Shop rechnet Sa+So bei Lieferzeit mit ein Betrieb / Pflege von JTL-Shop 0
Neu Amazon Rechnungen aus v1.9x können nicht gedruckt gemailt oder sonnst noch was mit gemacht werden. Amazon-Anbindung - Fehler und Bugs 2
Weiter gehts....Kein Anlegen von Artikel mit Fotos mehr möglich, seit Update auf 2.06 JTL-Wawi 2.0 14
Mehrere Probleme mit JTL-Wawi und JTL-POS – hängen diese zusammen? JTL-Wawi 2.0 1
Neu Fehler Datenbank auf neuem Server mit Wawi 2.0.6 JTL-Wawi - Fehler und Bugs 5
Neu Stripe plugin mit JTL SHOP Error 500 Plugins für JTL-Shop 2
JTL-Wawi 2.0.6.0 sendet fehlerhafte multipart/form-data-Requests – ModSecurity blockt Datenabgleich mit 403 (scheinbar hosterabhängig) JTL-Wawi 2.0 20
Neu Variationen (Deutsch) mit Ameise aktualisieren JTL-Ameise - Ideen, Lob und Kritik 1
Neu Preise im Shop mit 4 Stellen hintern dem Komma Allgemeine Fragen zu JTL-Shop 5
Neu Erfahrungen mit Amazon Pay Smalltalk 0
Neu Amazon Artikel ist mit Vaterartikel verknüpft Amazon-Anbindung - Fehler und Bugs 1
Verbesserungsvorschlag: JTL-POS – Artikel mit Preisabfrage und vollständiger Wawi-Statistik JTL-Wawi 2.0 4
Wawi 1.11.11 Shopabgleich mit 5.72 JTL-Wawi 1.11 17
Neu Sicherheitslücke, geprüft mit EcomSec Allgemeine Fragen zu JTL-Shop 3
Neu POS Server crashed mit Wawi Version 1.11.10 JTL-POS - Fehler und Bugs 3
Neu Plugin trotz Hinweis Kompatibel mit JTL-Shop bis 5.6.* auch unter 5.7.2 nutzen Plugins für JTL-Shop 2
Webinar am 04.08. eBay Live: So startest du mit Live Commerce Messen, Stammtische und interessante Events 0
Neu Mail mit Plugin zum testen der Sicherheitslücke echt? Allgemeine Fragen zu JTL-Shop 47
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 1
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

Ähnliche Themen