Przejdź do głównej zawartości

Reguły i święta

Dwa najważniejsze pola konfiguracji pluginu — Working days rule i Holidays rule — to wskaźniki na encje Shopware Rule. Logika dat zostaje w tym samym miejscu co każda inna reguła shipping/payment/checkout, a Ty możesz reużywać tej samej reguły między pluginami.

Wewnątrz plugin buduje customowy rule scope (P2Lab\EstimatedDelivery\Rule\Scope\DateRuleScope), który eksponuje konkretną datę do dopasowanych warunków. Następnie przechodzi przez następne ~100 dni kalendarzowych i dla każdego dnia pyta regułę “czy pasujesz do tej daty?”.

  • Dla reguły dni roboczych, dzień który pasuje to dzień roboczy.
  • Dla reguły świąt, dzień który pasuje to święto i jest wykluczony, nawet jeśli wypada w dzień roboczy.

Wynikowa lista zablokowanych dni jest tym, czego plugin używa dodając “1 dzień roboczy” lub “3 dni robocze” do daty zamówienia.

Każdy warunek, który da się ewaluować względem daty, działa. Najczęstsze:

  • Day of the week is one of — standardowy sposób zaznaczenia Pon–Pt (lub Pon–Sob dla kurierów).
  • Date range — wyklucz konkretne zakresy dat (przerwa fabryczna, urlop letni).
  • Customer rules / Cart rulesnie przydatne tutaj, bo reguła jest ewaluowana wobec hipotetycznej przyszłej daty, nie wobec realnego koszyka.

Typowa reguła dni roboczych:

ANY of
- Day of the week is one of: Monday
- Day of the week is one of: Tuesday
- Day of the week is one of: Wednesday
- Day of the week is one of: Thursday
- Day of the week is one of: Friday

albo równoważnie z warunkiem Day of the week is one of (multi-select):

Day of the week is one of [Mon, Tue, Wed, Thu, Fri]

Reguła świąt prawie zawsze zbudowana jest z warunków Date range połączonych OR-em:

ANY of
- Date range = 2026-01-01 .. 2026-01-01 # Nowy Rok
- Date range = 2026-04-06 .. 2026-04-06 # Poniedziałek Wielkanocny
- Date range = 2026-05-01 .. 2026-05-01 # Święto Pracy
- Date range = 2026-12-25 .. 2026-12-26 # Boże Narodzenie

Możesz grupować reguły per kraj i ładować tę, która pasuje do origin wysyłki. Ponieważ reguła to po prostu wskaźnik, można przełączać między nimi per kanał sprzedaży.

Tekst pomocy podpowiada workflow, ale plugin nie dostarcza reguł specyficznych dla kraju — każdy sklep definiuje swoje. To feature: możesz wysyłać z kraju o innych świętach niż kraj sprzedaży, albo blokować też święta firmowe.

Reguły są stosowane sekwencyjnie:

  1. Zacznij od dzisiaj + 1 dzień.
  2. Dla każdego dnia w przyszłości sprawdź czy to święto. Jeśli tak — pomiń.
  3. W przeciwnym razie sprawdź czy to dzień roboczy. Jeśli nie — pomiń.
  4. Licz dni które przeżyły, aż policzysz shippingMinDays dni roboczych — to najwcześniejsza data wysyłki.
  5. Kontynuuj do shippingMaxDays — to najpóźniejsza data wysyłki.
  6. Powtórz proces zaczynając od najwcześniejszej daty wysyłki, używając reguły delivery i jej min/max, by uzyskać okno dostawy.

Dlatego reguły wysyłki i dostawy są osobne: Twój magazyn może być zamknięty w soboty, ale kurier może dostarczać w soboty.

Reguła ładuje się raz na request, a tablica zablokowanych dni jest liczona raz na kanał sprzedaży. Wielokrotne renderowania widgetu na tej samej stronie reużywają tej samej kalkulacji, więc lookup reguły jest tani. Jeśli masz nietypowo długie okno min/max (powyżej ~100 dni), daj znać.

Najprostszy sposób sprawdzenia reguły to live preview w zakładce Widget. Zmień cut-off time lub przełącz regułę świąt, zapisz, odśwież — wyświetlane daty od razu się zmienią. Edge cases warte testu:

  • Zamówienie złożone w piątek o 14:00 z cut-offem piątkowym 13:00 powinno przesunąć się na poniedziałek.
  • Zamówienie złożone w piątek o 14:00 z cut-offem piątkowym 13:00 i poniedziałkiem oznaczonym jako święto powinno przesunąć się na wtorek.
  • Zamówienie złożone w święto — niezależnie od dnia tygodnia — powinno przejść na następny nie-święty dzień roboczy.