Zum Inhalt springen

Regeln und Feiertage

Die beiden wichtigsten Konfigurationsfelder des Plugins — Working days rule und Holidays rule — sind Zeiger auf Shopware Rule-Entitäten. Dadurch bleibt Ihre Datums-Logik am gleichen Ort wie jede andere Versand-/Zahlungs-/Checkout-Regel, und Sie können dieselbe Regel über Plugins hinweg wiederverwenden.

Intern baut das Plugin einen Custom-Rule-Scope (P2Lab\EstimatedDelivery\Rule\Scope\DateRuleScope), der den passenden Bedingungen ein konkretes Datum preisgibt. Dann läuft es durch die nächsten ~100 Kalendertage und fragt für jeden Tag die Regel: “matchst du dieses Datum?”.

  • Bei der Werktagsregel ist ein Tag, der die Regel matcht, ein Werktag.
  • Bei der Feiertagsregel ist ein passender Tag ein Feiertag und wird ausgeschlossen, selbst wenn er an einem Werktag liegt.

Die resultierende Liste gesperrter Tage wird beim Addieren von “1 Werktag” oder “3 Werktagen” zum Bestelldatum verwendet.

Bedingungen, die mit der Werktagsregel funktionieren

Abschnitt betitelt „Bedingungen, die mit der Werktagsregel funktionieren“

Jede Bedingung, die gegen ein Datum auswertbar ist, funktioniert. Die häufigsten:

  • Wochentag ist einer von — der Standardweg für Mo–Fr (oder Mo–Sa für Kuriere).
  • Datumsbereich — bestimmte Datumsbereiche ausschließen (Werks-Shutdown, Sommerurlaub).
  • Customer rules / Cart rulesnicht nützlich hier, weil die Regel gegen ein hypothetisches zukünftiges Datum ausgewertet wird, nicht gegen einen echten Warenkorb.

Eine typische Werktagsregel:

ANY of
- Wochentag ist einer von: Montag
- Wochentag ist einer von: Dienstag
- Wochentag ist einer von: Mittwoch
- Wochentag ist einer von: Donnerstag
- Wochentag ist einer von: Freitag

oder äquivalent mit Multi-Select Wochentag ist einer von:

Wochentag ist einer von [Mo, Di, Mi, Do, Fr]

Bedingungen, die mit der Feiertagsregel funktionieren

Abschnitt betitelt „Bedingungen, die mit der Feiertagsregel funktionieren“

Die Feiertagsregel wird fast immer aus Datumsbereich-Bedingungen mit OR aufgebaut:

ANY of
- Datumsbereich = 2026-01-01 .. 2026-01-01 # Neujahr
- Datumsbereich = 2026-04-06 .. 2026-04-06 # Ostermontag
- Datumsbereich = 2026-05-01 .. 2026-05-01 # Tag der Arbeit
- Datumsbereich = 2026-12-25 .. 2026-12-26 # Weihnachten

Sie können Regeln pro Land gruppieren und je nach Versandherkunft die passende laden. Weil die Regel nur ein Zeiger ist, können Sie pro Sales Channel zwischen ihnen wechseln.

Der Installations-Hilfetext schlägt einen Workflow vor, aber das Plugin liefert keine länderspezifischen Regeln out of the box — jeder Shop definiert seine eigenen. Das ist Feature: Sie versenden vielleicht aus einem Land mit anderen Feiertagen als dem Verkaufsland, oder wollen auch firmeninterne Urlaubstage blockieren.

Die zwei Regeln werden sequenziell angewendet:

  1. Beginne bei heute + 1 Tag.
  2. Prüfe für jeden zukünftigen Tag, ob es ein Feiertag ist. Falls ja, überspringen.
  3. Sonst prüfe, ob es ein Werktag ist. Falls nicht, überspringen.
  4. Zähle die überlebenden Tage, bis Sie shippingMinDays Werktage gezählt haben — das ist das früheste Versanddatum.
  5. Weiter bis shippingMaxDays — das ist das späteste Versanddatum.
  6. Wiederhole den Prozess ab dem frühesten Versanddatum, mit der Delivery-Regel und ihren min/max Tagen, um das Lieferfenster zu erhalten.

Deshalb sind Versand- und Lieferregel getrennt: Ihr Lager schließt vielleicht samstags, der Kurier liefert aber samstags.

Die Regel wird einmal pro Request geladen, und das Locked-Days-Array wird einmal pro Sales Channel berechnet. Wiederholte Widget-Renderings auf derselben Seite verwenden dieselbe Kalkulation, sodass der Regel-Lookup günstig ist. Bei ungewöhnlich langem min/max-Fenster (über ~100 Tagen) und Bedarf nach mehr Vorausschau bitte melden.

Der einfachste Sanity-Check ist die Live-Vorschau in der Tab Widget. Ändern Sie Cutoff oder Feiertagsregel, speichern, neu laden — die angezeigten Daten springen entsprechend. Edge-Cases, die einen Test wert sind:

  • Bestellung Freitag 14:00, Freitag-Cutoff 13:00 — sollte auf Montag rollen.
  • Bestellung Freitag 14:00, Freitag-Cutoff 13:00 und Montag als Feiertag — sollte auf Dienstag rollen.
  • Bestellung an einem Feiertag — egal welcher Wochentag — sollte auf den nächsten Nicht-Feiertag-Werktag rollen.