Workflow-Sammelstelle: Teilt eure erfolgreich erstellten Workflows mit anderen JTLern

  • Wenn Ihr uns das erste Mal besucht, lest euch bitte zuerst die Foren-Regeln durch.

Rico Giesler

Administrator
Mitarbeiter
10. Mai 2017
6.604
520
#21
Wie Shopsitters richtig schreibt ist es derzeit nur über Umwege möglich.
Wir hatten die Anfrage aber schon ein paar mal und auch auf dem Schirm.
Allerdings müssen da diverse Sachen beachtet und geklärt werden, damit dann auch alles reibungslos laufen kann.
 

gnarx

Aktives Mitglied
18. Januar 2018
866
43
#22
Für Leute die nicht so gut mit SQL umgehen können habe ich mal folgenden WF gebaut. Ich meine das die Anweisungen verständlich sind und jeder seine eigenen Parameter eintragen kann.
Das ganze wird noch erweitert auf die Länder (grad in Arbeit) und mehrere verschiedene Artikel wo die höchsten Versandkosten genommen werden (da brauche ich wohl Hilfe).
Aber das Prinzip sollte so klar sein.

Der WF macht folgendes unter "Erweiterten Eigenschaften":
Wenn ein Auftrag erstellt wurde weist der WF die eigenen Versandkosten, mit den eigenen Preisen beim Dienstleister, zu ohne die von der Plattform gesendeten zu überschreiben.
Es wird abgefragt:
1. Welche Warengruppe hat der Auftrag
2. Kommt der Kunde aus Deutschland, der EU (ohne Deutschland), Europa (ohne EU) und Russland.
3. Wie viele gleiche Artikel kauft der Kunde
4. Wie hoch ist der Preis

Mit Punkt 3 bestimme ich z:B. wenn der Kunde mehr als 4 Artikel kauft dann nimm ein Paket statt eines Postbriefes.
Mit Punkt 4 bestimme ich z:B. wenn der Artikel mehr als z.B. 30,00 Euro kostet dann nimm ein Paket statt eines Postbriefes. Oder nimm versicherten Versand.

Am Ende jeder Bedingung (if, elsif) setze ich einen Begriff mit dem ich im Workflow über Versandart ändern, unsere Versandart zuweise.
Das heißt wenn z.B. in der Erweiterten Eigenschaft eine Bedingung zutrifft die z.B. POST145 heißt dann ändere die Versandart auf "Postbrief 1,45 Euro".

Ganz am Ende kommt NIXALL (else) das heißt wenn keine Bedingung zutrifft dann halte den Auftrag zurück und ein Mitarbeiter kann den bearbeiten.

VERSION 2 für kürze Abarbeitungszeiten:
Da ich ja sowie so für jede unsere Versandarten einen WF anlegen muss, habe ich jeweils die Abfrage aufgeteilt, so das nicht mehr alle Möglichkeiten abgefragt werden müssen.

Hier der Beispielcode aus den Erweiterten Eigenschaften:

Code:
{% for Item in Vorgang.AuftragsPositionen.ArtikelPositionen %}\
{% if Vorgang.Lieferung.Lieferadresse.LandISO != 'RU' and Vorgang.Lieferung.Lieferadresse.LandISO != 'DE' %}{% assign landINT = true %}{% endif %}\
{% assign preis=Vorgang.Zahlungen.GesamtbruttopreisOhneVersandart %}\
{% assign menge=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Menge %}\
{% assign waren=Item.Artikel.Warengruppe.Name %}\
{% if waren == "Retentionmodul" and landINT =="true" and menge == 1 %}GB370
    {% elsif waren == "SLI-Brücke" and landINT =="true" and menge == 1 %}GB370
    {% elsif waren == "Zubehör Sets" and landINT =="true" and menge == 1 %}GB370
    {% elsif waren == "Kabel / Adapter" and landDE =="true" and menge == 1 %}GB370
{% endif %}
{% endfor %}




Hier der Beispielcode aus den Erweiterten Eigenschaften:
Code:
{% if Vorgang.AuftragsPositionen.ArtikelPositionen.Anzahl == 1 %}
{% for Item in Vorgang.AuftragsPositionen.ArtikelPositionen %}
    {% if Vorgang.Lieferung.Lieferadresse.LandISO == 'DE' %}{% assign landDE = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.Land.IstEU == 'true' and Vorgang.Lieferung.Lieferadresse.LandISO != 'DE' %}{% assign landEU = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.Land.Kontinent == 'Europa' and Vorgang.Lieferung.Lieferadresse.LandISO != 'DE' %}{% assign landEU_NONEU = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.Land.Kontinent == 'Europa' and Vorgang.Lieferung.Lieferadresse.Land.IstEU != 'true' %}{% assign landNONEU = true %}{% endif %}
    {% if Vorgang.Lieferung.Lieferadresse.LandISO == 'RU' %}{% assign landRU = true %}{% endif %}    
 
    {% assign preis=Vorgang.Zahlungen.GesamtbruttopreisOhneVersandart %}
    {% assign menge=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Menge %}
    {% assign waren=Item.Artikel.Warengruppe.Name %}
    {% assign marke=Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.Marke %}

       {% comment %} Post 1,45 Euro {% endcomment %}
        {% if waren == "MAC" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Arbeitsspeicher (RAM)" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST145
        {% elsif waren == "Controller" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST145
        {% elsif waren == "Prozessor (CPU)" and marke == "Intel" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST145
        {% elsif waren == "Gehäuselüfter" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Kabel / Adapter" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Lüftersteuerung" and landDE =="true" and menge == 1 preis <= 10,00 %}POST145
        {% elsif waren == "Blende" and landEU =="true" and menge == 1 %}POST145
        {% elsif waren == "Zubehör Sets" and landEU =="true" and menge == 1 %}POST145    
        {% elsif waren == "Retentionmodul" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "SLI-Brücke" and landDE =="true" and menge == 1 %}POST145
        {% elsif waren == "Soundkarte" and landDE =="true" and menge == 1 and preis <= 20,00 %}POST145
        {% elsif waren == "TV-Karte" and landDE =="true" and menge == 1 and preis <= 20,00 %}POST145

       {% comment %} Post 1,90 Euro {% endcomment %}
        {% elsif waren == "Prozessor (CPU)" and marke != "Intel" and landDE =="true" and menge == 1 and preis <= 30,00 %}POST190
        {% elsif waren == "Blende" and landDE =="true" and menge == 1 %}POST190
        {% elsif waren == "Zubehör Sets" and landDE =="true" and menge == 1 %}POST190    


       {% comment %} Paket 5,00 Euro bis 1kg {% endcomment %}        
        {% elsif waren == "Arbeitsspeicher (RAM)" and landDE =="true" and menge == 1 and preis > 30,00 %}PAKET501
        {% elsif waren == "Bundle" and landDE =="true" menge == 1 %}PAKET501
        {% elsif waren == "Betriebssystem" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Controller" and landDE =="true" and menge == 1 and preis > 30,00 %}PAKET501
        {% elsif waren == "CPU-Kühler" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Prozessor (CPU)" and landDE =="true" and menge == 1 and preis > 30,00 %}PAKET501
        {% elsif waren == "Tastatur / Maus" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Festplatte" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Gehäuselüfter" and landDE =="true" and menge > 1 %}PAKET501
        {% elsif waren == "Grafikkarte" and landDE =="true" and menge > 1 %}PAKET501
        {% elsif waren == "Sonstige Kühler" and landDE =="true" and menge == 1 %}PAKET501    
        {% elsif waren == "Laufwerk" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Lüftersteuerung" and landDE =="true" and menge == 1 preis > 10,00 %}PAKET501
        {% elsif waren == "Mainboard" and landDE =="true"" and menge == 1 %}PAKET501
        {% elsif waren == "Netzteil" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Software" and landDE =="true" and menge == 1 %}PAKET501
        {% elsif waren == "Soundkarte" and landDE =="true" and menge == 1 and preis > 20,00 %}PAKET501
        {% elsif waren == "TV-Karte" and landDE =="true" and menge == 1 and preis > 20,00 %}PAKET501
        {% elsif waren == "CPU-Wasserkühlung" and landDE =="true" and menge == 1 %}PAKET501
         
       {% comment %} Paket 10,00 Euro bis 10kg {% endcomment %}
        {% elsif waren == "Gehäuse" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Monitor" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "PC / Server" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Bundle-PC" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Komplett-PC´s" and landDE =="true" and menge == 1 %}PAKET100
        {% elsif waren == "Komplett-PC" and landDE =="true" and menge == 1" %}PAKET100
     
        {% else %}NIXALL
        {% endif %}
       
{% endfor %}
{% endif %}
Im Workflow selber kann es dann so aussehen:
WF_Versand.jpg

ACHTUNG: Hier hat JTL einen kleinen Fehler, sobald man Versandart ändern auswählt und man keinen Hacken rechts setzt, meldet JTL einen Fehler.
Das kann man umgehen in dem man einmal einen Hacken setzt und den wieder rausnimmt.
 
Zuletzt bearbeitet:
Zustimmungen: Shopküche.de

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
2.713
303
Berlin
#23
Was besser wäre, wenn du das ganze in einem capture Block machen würdest und so wie ich es gezeigt habe das nach einem if, mit einem assign einer Variable zuzuordnen, die du dann am ende ausgibst.

Du siehst das ganz gut wenn du das anhand eines Aufteages testest, dann gast du haufenweise returns und leerzeichen drin und musst deshalb auch auf enthält prüfen.

Du könntest das auch mit einem \ am Ende umgehen und alle Leerzeichen weglassen aber schöner wäre es mit einem capture Block.
 

elevennerds.de

Gut bekanntes Mitglied
23. September 2015
740
69
#24
Problem: Bei einem Kunden setzen wir die Versandarten mittels Workflows anhand der Artikelpositionen im Auftrag. Nun kann ja in einem Auftrag jeweils ein Artikel mit Briefversand und einer mit Paketversand enthalten sein. Um so etwas abzufangen, habe ich folgenden Workflow entwickelt. Dieser prüft auf unterschiedliche Versandklassen aller Artikelpositionen eines Auftrages außer Stücklistenkomponenten (dafür die Stückliste selber) und entfernt dann die Versandart. Diese wird dann einfach am Packtisch neu ausgewählt.

Auftrag > Erstellt > Neue Bedingung > Erweiterte Eigenschaften verwalten > Hinzufügen > Code einfügen
Code:
{% capture countquery %}
SELECT COUNT(DISTINCT a.kVersandklasse) FROM dbo.tArtikel AS a \
JOIN dbo.tbestellpos AS bp ON tArtikel_kArtikel = a.kArtikel \
JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
LEFT JOIN dbo.tStueckliste AS s ON s.kStueckliste = a.kStueckliste \
WHERE a.kArtikel NOT IN \
    (SELECT kArtikel FROM dbo.tStueckliste \
    WHERE a.kStueckliste != 0 AND kStueckliste = a.kStueckliste) \
AND b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}'
{% endcapture -%}
{% assign result = countquery | DirectQueryScalar -%}
{{ result }}
Dieser Snippet gibt die Anzahl unterschiedlicher Versandklassen eines Auftrages zurück. Danach einfach prüfen, ob die zurückgegebene Anzahl größer als 1 ist und die entsprechende Aktion ausführen.

Hier kann natürlich als Aktion auch gleich Paketversand gesetzt werden.
 
Zuletzt bearbeitet:

elevennerds.de

Gut bekanntes Mitglied
23. September 2015
740
69
#25
Query Update:
Code:
{% capture countquery %}
SELECT COUNT(DISTINCT kVersandklasse) FROM dbo.tArtikel \
WHERE kArtikel IN ( \
    SELECT bp.tArtikel_kArtikel FROM dbo.tbestellpos AS bp \
        JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
        WHERE b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}' AND bp.kBestellStueckliste = 0 \
    UNION \
    SELECT bp.tArtikel_kArtikel FROM dbo.tbestellpos AS bp \
        JOIN dbo.tBestellung AS b ON bp.tBestellung_kBestellung = b.kBestellung \
        JOIN dbo.tArtikel AS a ON a.kArtikel = bp.tArtikel_kArtikel \
        JOIN dbo.tStueckliste AS s ON s.kStueckliste = a.kStueckliste \
        WHERE b.cBestellNr = '{{ Vorgang.Stammdaten.Auftragsnummer | SqlEscape}}' \
);
{% endcapture -%}
{% assign result = countquery | DirectQueryScalar -%}
{{ result }}
  • Es wird jetzt nur noch die Versandklasse der Stückliste und nicht die der Stücklistenkomponenten in der Auswertung berücksichtigt.
 
Zustimmungen: gnarx und _simone_

gnarx

Aktives Mitglied
18. Januar 2018
866
43
#25
Moin, ich habe das nun mal getestet, Rückgabe wert ist 4 (4 Artikel enthalten). Muss ich jetzt als Aktion erstmal die Versandarten löschen, können ja mehrere drinne sein? Und dann eine Versandart setzen als 2. Aktion?