In Diskussion Workflow für Erinnerungen an bevorstehende Lieferungen

STH

Sehr aktives Mitglied
23. Dezember 2020
190
25
Nachdem ich auf dieses Thema gestoßen bin: https://forum.jtl-software.de/threads/erinnerung-an-bevorstehende-lieferung.187237/ wollte ich ebenfalls eine Lösung für uns basteln.
Ich konnte leider keine Möglichkeit finden, alle noch offenen Aufträge mit zukünftigem Lieferdatum in einer bestimmten Zeitspanne zu finden, da immer ein einzelnes Auftragsobjekt geprüft wird in den Workflows.
Nach langem hin und her probieren, habe ich das ganze nun per direkter SQL Abfrage + Mailversand via Powershell und Windows Aufgabenplaner gelöst.

Es wäre aber schön, wenn es solch eine Möglichkeit auch WaWi nativ gäbe. Mir ist schon klar, dass es dann ein manueller Workflow dafür notwendig ist, der wieder von einem externen Tool gestartet werden muss, da Workflows für Aufträge überlicherweise einen Trigger brauchen.

Wenn jemand Interesse an der Lösung hat, dann teile ich sie hier gerne. Wird verwenden GMAIL als Mailprovider in dem Beispiel.


# --- JTL DATENBANK KONFIGURATION ---
$SQLServer = "EUERSERVERNAME\JTLWAWI"
$Database = "eazybusiness"
$SQLUser = "sa"
$SQLPassword = "EUERDBPASSWORT"

# --- ZEITSPANNE FÜR DIE PRÜFUNG ---
$DaysAhead = 14
$MaxDaysOverdue = 60

# --- E-MAIL / SMTP KONFIGURATION ---
$SMTPServer = "smtp-relay.gmail.com"
$SMTPPort = 587
$MailFrom = "ABSENDEREMAIL"
$MailTo = "EMPFAENGERMAIL1 ", "EMPFAENGERMAIL2"
$SMTPUser = "ABSENDERBENUTZERNAME"

# --- GMAIL AUTHENTIFIZIERUNG ---
$secpasswd = ConvertTo-SecureString "APPPASSWORT" -AsPlainText -Force

# --- SQL ABFRAGE (Filter: Lieferdatum in den nächsten X-definierten Tagen, maximal Y-Tage über dem Datum drüber) ---
$SqlQuery = @"
SELECT
A.cAuftragsNr AS [Auftragsnummer],
ISNULL(Adr.cFirma, '') AS [Firma],
ISNULL(Adr.cName, '') + ', ' + ISNULL(Adr.cVorname, '') AS [Kunde],
CONVERT(VARCHAR(10), A.dVoraussichtlichesLieferdatum, 104) AS [Vorauss. Lieferdatum],
DATEDIFF(day, GETDATE(), A.dVoraussichtlichesLieferdatum) AS [TageRest]
FROM
Verkauf.tAuftrag A
LEFT JOIN
Verkauf.tAuftragAdresse Adr ON A.kAuftrag = Adr.kAuftrag AND Adr.nTyp = 1
WHERE
A.nStorno = 0
AND A.nKomplettAusgeliefert = 0
-- Filtert: Von minus $MaxDaysOverdue (Vergangenheit) bis plus $DaysAhead (Zukunft)
AND DATEDIFF(day, GETDATE(), A.dVoraussichtlichesLieferdatum) BETWEEN -$MaxDaysOverdue AND $DaysAhead
ORDER BY
A.dVoraussichtlichesLieferdatum ASC
"@

# Daten abrufen
$ConnectionString = "Server=$SQLServer;Database=$Database;User Id=$SQLUser;Password=$SQLPassword;Encrypt=False"
$Connection = New-Object System.Data.SqlClient.SqlConnection($ConnectionString)
$Command = New-Object System.Data.SqlClient.SqlCommand($SqlQuery, $Connection)
$DataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($Command)
$DataTable = New-Object System.Data.DataTable

try {
$Connection.Open()
$null = $DataAdapter.Fill($DataTable)
$Connection.Close()

if ($DataTable.Rows.Count -gt 0) {
Write-Host "$($DataTable.Rows.Count) Aufträge gefunden. Bereite E-Mail vor..." -ForegroundColor Green

$HTMLRows = ""
foreach ($Row in $DataTable.Rows) {
$tageRest = [int]$Row['TageRest']

# Standard-Style für normale Zeilen
$rowStyle = ""
$statusErgaenzung = ""

# WENN DIE TAGE NEGATIV SIND -> ROT MARKIEREN
if ($tageRest -lt 0) {
$rowStyle = "style='background-color: #ffe6e6; color: #b30000; font-weight: bold;'"
$verspaetung = [math]::Abs($tageRest)
$statusErgaenzung = " <span style='font-size: 11px; color: #cc0000; font-weight: normal;'><br>⚠️ SEIT $verspaetung TAGEN ÜBERFÄLLIG</span>"
}

# HTML-Zeile zusammenbauen (Style wird dynamisch angewendet)
$HTMLRows += "<tr $rowStyle>
<td>$($Row['Auftragsnummer'])</td>
<td>$($Row['Firma'])</td>
<td>$($Row['Kunde'])</td>
<td>$($Row['Vorauss. Lieferdatum'])$statusErgaenzung</td>
</tr>"
}

# HTML-Mail-Inhalt
$MailBody = @"
<html>
<head>
<style>
table { border-collapse: collapse; width: 100%; font-family: Arial, sans-serif; margin-top: 15px; }
th { background-color: #1c64a3; color: white; padding: 10px; text-align: left; font-size: 14px; }
td { border: 1px solid #dddddd; padding: 8px; font-size: 13px; }
tr:nth-child(even) { background-color: #f9f9f9; }
body { font-family: Arial, sans-serif; color: #333333; line-height: 1.5; }
</style>
</head>
<body>
<p>Hallo SHOP-Team,</p>
<p>Folgende terminisierte Aufträge stehen zur Auslieferung an oder sind bereits <strong>überfällig</strong>. Bitte prüft die Rechnungserstellung und bereite den Versand vor:</p>
<table>
<tr>
<th>Auftragsnummer</th>
<th>Firma</th>
<th>Kunde</th>
<th>Vorauss. Lieferdatum</th>
</tr>
$HTMLRows
</table>
<br>
<p><i>Dies ist eine automatische Benachrichtigung aus der JTL-Datenbank.</i></p>
</body>
</html>
"@

$gmailCred = New-Object System.Management.Automation.PSCredential ($SMTPUser, $secpasswd)

$SendParams = @{
SmtpServer = $SMTPServer
Port = $SMTPPort
From = $MailFrom
To = $MailTo
Subject = "Erinnerung: Fällige JTL-Auslieferungen"
Body = $MailBody
BodyAsHtml = $true
Encoding = [System.Text.Encoding]::UTF8
UseSsl = $true
Credential = $gmailCred
}

Send-MailMessage @SendParams
Write-Host "E-Mail erfolgreich gesendet!" -ForegroundColor Green

} else {
Write-Host "Keine fälligen oder überfälligen Aufträge gefunden. Keine Mail gesendet." -ForegroundColor Yellow
}
}
catch {
Write-Error "Fehler beim Ablauf: $_"
}
 
Ähnliche Themen
Titel Forum Antworten Datum
In Diskussion Kundengruppe nach Umsatz (SQL in Workflow) JTL-Workflows - Ideen, Lob und Kritik 5
In Diskussion Workflow bei fehlerhaften Bankabgleich JTL-Workflows - Ideen, Lob und Kritik 4
Neu Lagerkommentar 1 per Workflow füllen User helfen Usern - Fragen zu JTL-Wawi 6
Neu Suche Workflow: Erstbestellung Shop auf Rechnung -> Auftrag Zurückhalten JTL-Wawi - Ideen, Lob und Kritik 1
1.11.7 Workflow versendet soll Rechnung 1x drucken, druckt aber 2x JTL-Wawi 1.11 1
Neu Auftrag - Lieferstatus mit Workflow exportieren Arbeitsabläufe in JTL-Wawi 3
In Diskussion Workflow mit UND / ODER - Bedingung erstellen JTL-Workflows - Ideen, Lob und Kritik 7
Using short screen recordings for JTL-Wawi workflow documentation – anyone doing this? JTL-Wawi 2.0 3
Neu Werte erhöhen per Workflow User helfen Usern - Fragen zu JTL-Wawi 4
In Diskussion Workflow OpenAI JTL-Workflows - Ideen, Lob und Kritik 1
Neu PPWR für Importeure aus dem Nicht-EU-Ausland Business Jungle 2
Neu 🚨 Sicherheitswarnung für JTL-Shop-Betreiber: Manipulation des Checkout-Prozesses durch externes JavaScript (Magecart- / Payment-Skimmer) Betrieb / Pflege von JTL-Shop 2
Neu Abschaltung Bewertungserinnerung für spezifische Kunden Allgemeine Fragen zu JTL-Shop 0
Neu Suche 10–15 JTL-Shops für kostenlose JTL-Shop-Analyse (verschiedene Branchen) Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt User helfen Usern - Fragen zu JTL-Wawi 7
Neu Wie stelle ich Retouren in JTL für DPD ein? JTL-ShippingLabels - Ideen, Lob und Kritik 1
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
Wroker macht keinen abgleich für Kaufland JTL-Wawi 2.0 8
Neu Beta-Tester gesucht: Produktdaten aus Artikelfotos schneller für JTL/CSV vorbereiten Dienstleistung, Jobs und Ähnliches 0
Neu Kundengruppeneinstellungen für Mindestabnahme und Abnahmeintervall löschen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Wie lange braucht ihr aktuell für die Anlage eines neuen Artikels? JTL-Wawi App 3
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
In Diskussion Tool für Abrechnung von Fulfillment Dienstleistungen Arbeitsabläufe im Fulfillment Network 0
Neu Widerrufsbutton für JTL-Shop 4 Allgemeine Fragen zu JTL-Shop 17
Neu Keine Labels für Warenpost international über Packtisch JTL-ShippingLabels - Fehler und Bugs 8
Neu Laut Backend Shop Update für Shop 5.71 - Download nicht zu finden? Betrieb / Pflege von JTL-Shop 3
Neu Meta Shop seit September 2025: JTL-Lösung für neue Checkout-URL gesucht Allgemeine Fragen zu JTL-Shop 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
Neu Artikelname & Beschreibung angepasst für jeweiligen Marktplatz Arbeitsabläufe in JTL-Wawi 1
Neu OnFinds: KI-Suche für JTL-Shop mit fairer Abrechnung nach Artikelanzahl. 30 Tage kostenlos testen Plugins für JTL-Shop 10
API 2.1 für OnPrem? JTL-Wawi 2.0 6
Neu Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu Neue Kennzeichnungspflicht für Elektrogeräte (Altgeräterücknahme) Betrieb / Pflege von JTL-Shop 4
Neu Freelancer für JTL-Wawi, Shop & Prozessautomatisierung Dienstleistung, Jobs und Ähnliches 2
Neu Exportgenehmigung / Ausfuhrgenehmigung automatisch für Auslandskunden als Aufpreis Allgemeine Fragen zu JTL-Shop 2
Für Ihren SQL-Server wurde ein Service Pack zur Verfügung gestellt - nö, gelogen, wie kriege ich die Meldung weg? JTL-Wawi 1.11 15
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Neu Seller2Go – Mobile App & JTL-Plugin für Bestellungen, Support und Produktmanagement Plugins für JTL-Shop 0
Neu Neues Plugin: Erweiterter Widerrufsbutton für JTL-Shop Plugins für JTL-Shop 9
JTL-Worker 2.0 - Einrichtung als Dienst - Auffälligkeiten und Problemlösungen für manche JTL-Wawi 2.0 3
Neu Muss man für DHL Versenden 4.0 einen neuen Benutzer bei DHL anlegen? JTL-ShippingLabels - Ideen, Lob und Kritik 2
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 6
Neu Neue Tracking-URL für DPD JTL-ShippingLabels - Fehler und Bugs 4
AboutYou keine Felder für GPSR Daten SCX-(Ninepoint)-Anbindungen 0
globale Angebotsvorlage anpassen für eBay Angebote "Artikelspezifisch" JTL-Wawi 1.11 0

Ähnliche Themen