Przejdź do głównej zawartości

Reguły i święta

Dwa pola reguł pluginu — Working days rule i Additional holidays rule — to wskaźniki na encje Shopware Rule. Święta i własne dni wolne sklepu znajdują się na zakładce Calendar; reguła świąt dodaje do nich kolejne daty. 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 rules — nie 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. Warunek Date range zawsze zawiera rok, więc taka reguła wymaga co roku nowych warunków; zakładka Calendar sama powtarza coroczne święta.

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.

Plugin zawiera święta Niemiec: dziewięć świąt ogólnokrajowych oraz święta krajów związkowych. Import public holidays na zakładce Calendar dodaje wybrane święta do dni wolnych kanału sprzedaży. Święta zależne od Wielkanocy, takie jak Wielki Piątek albo Boże Ciało, są zapisywane względem Wielkanocy i w każdym roku wypadają we właściwym dniu.

Ta sama zakładka zawiera własne dni wolne sklepu, np. urlop zakładowy, i przenosi dni wolne między kanałami sprzedaży i sklepami w postaci pliku. Zobacz Calendar.

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.