Checkout a objednávky — speciality vs. Sylius¶
Stav k 2026-06-21.
Sylius má kompletní checkout flow (košík → adresa → doprava → platba → potvrzení) a order state machine. Tohle neřešíme — to dostaneme zdarma. Otázka je, co se musí ohne, aby fungovaly věci specifické pro tento e-shop.
Co Sylius vyřeší bez práce¶
- Košík, checkout kroky, potvrzení objednávky
- Stavy objednávky (nová → potvrzená → expedovaná → hotová / stornovaná)
- Zákaznický účet, přihlášení, hesla
- Platební metody a dopravy jako konfigurovatelný model
- Základní slevové kupóny (fixní částka, procento, min. nákup)
- Multi-měna přes Channel (CZK / EUR)
- Multi-warehouse zásoby
Speciality — co se bude ohýbat¶
1. "Dotaz na dostupnost" místo tlačítka Koupit¶
Současný stav: Pokud je produkt nedostupný a pochází od Astry, Pelikána nebo Corfix (kontroluje od i od_puvodni), zobrazí se místo "Koupit" tlačítko "Poslat dotaz na dostupnost" → popup formulář.
Sylius: Nezná koncept "produkt je v katalogu, ale nejde koupit — jen se na něj zeptat". Sylius buď umožní přidat do košíku, nebo zobrazí "out of stock".
Řešení: Custom ProductAvailabilityChecker + custom šablona tlačítka. Podmínka musí znát od/od_puvodni → custom produkt atribut.
2. Watchdog — hlídat dostupnost¶
Současný stav: Zákazník vyplní e-mail, systém ho upozorní jakmile se produkt naskladní. Tabulka watchdog s logikou v importních skriptech.
Sylius: Neexistuje. Plugin třetí strany nebo vlastní implementace: subscriber na stock change event → odeslat notifikaci z fronty.
3. Narozeninová sleva (sleva_typ NARO)¶
Současný stav: V určité době kolem narozenin zákazníka dostane slevu. Zobrazuje se jako badge "narozeniny" na produktu a ovlivňuje cena_typ = NARO v položkách košíku.
Sylius: Promotion system nezná "birthday" jako trigger. Nutno custom PromotionRuleChecker který zkontroluje datum narození zákazníka ze zákaznického profilu.
4. Recyklační poplatek (RP/PHE) jako položka košíku¶
Současný stav: Produkt s phe_kod automaticky přidá do košíku druhý produkt (RP poplatek) jako samostatnou položku. Viditelné v košíku, faktuře i exportu do Pohody.
Sylius: Sylius OrderProcessor umí přidávat adjustment položky, ale ne plnohodnotné OrderItem. Možnosti:
- Custom CartSubscriber který při přidání produktu s RP přidá RP jako další OrderItem
- Nebo RP jako OrderAdjustment (méně viditelné na faktuře)
Pohoda export
RP položka musí mít v Pohoda exportu vlastní kód (FOXRP...) a správnou DPH sazbu. Řešení musí být konzistentní s tím, co Pohoda očekává.
5. Odhad data doručení — vypoctiDenDodani()¶
Současný stav: Na detailu produktu a v košíku se zobrazuje konkrétní datum "může být u Vás". Výpočet zohledňuje pracovní dny, státní svátky a cut-off 13:00. Dodavatelé jako Pelikán nebo Astra mají vlastní prázdniny (vánoce, letní uzávěrky) — řeší se hardcoded výjimkami v šablonách.
Sylius: Shipping estimator v Syliusu vrátí "X dní", ne konkrétní datum. A nezná výjimky per dodavatel.
Řešení: Custom shipping estimator service. Dodavatelské výjimky musí být konfigurovatelné (ne hardcoded), jinak se opakuje dnešní situace.
6. Per-prodejna dostupnost¶
Současný stav: Na detailu produktu se zobrazuje tabulka per-sklad/pobočka s přesným množstvím. Zboží na centrálním skladu = doručení zítra, na pobočce = pozítří.
Sylius: Multi-warehouse zásoby existují, ale UI per-sklad v produktovém detailu je zcela custom. Sylius admin zobrazí stock per warehouse, ale frontend šablony musí zobrazit "na prodejně Nademlejnská: 3 ks".
7. Maximální množství v objednávce (max_obj_mnozstvi)¶
Současný stav: Pole na produktu, zobrazí se "Limitovaný nákup: max. X ks" a košík hlídá toto omezení.
Sylius: ProductVariant má maximumQuantity — existuje nativně. Stačí mapovat při importu.
✅ Toto Sylius zvládne.
8. Cena na dotaz (cena_na_dotaz)¶
Současný stav: Produkt nemá zobrazenou cenu, jen tlačítko "Poptávkový formulář".
Sylius: Sylius vždy zobrazuje cenu z ChannelPricing. Nutno custom logika: pokud cena_na_dotaz = true, skrýt cenu a nahradit CTA. Custom šablona + custom atribut.
9. Slovenská DPH a B2B bez DPH¶
Současný stav: SK mutace používá EUR ale se slovenskou DPH sazbou. SK firmy s DIČ formátu SK[10 číslic] dostanou fakturu bez DPH. Logika v skCenaDPH() a objSKbezDPH flag v session.
Sylius: Tax zones + customer tax category to umí. SK Channel bude mít vlastní tax zone se SK DPH. B2B bez DPH → CustomerGroup s TaxExempt nebo custom TaxCalculator.
⚠️ Proveditelné, ale vyžaduje správné nastavení tax zones a customer groups — testovat důkladně.
10. Doprava zdarma jen pro CZ¶
Současný stav: Badge "Doprava zdarma" se zobrazuje jen pro LANG == 'cs'. Logika podmínky je v šabloně, ne v Promotion rule.
Sylius: Promotion HasChannel rule — doprava zdarma jako Promotion platná jen pro CZ Channel. ✅ Tohle Sylius umí čistě.
Shrnutí — rizika¶
| Specialita | Složitost | Sylius nativně |
|---|---|---|
| Dotaz místo Koupit | 🔴 Vysoká | ✗ |
| Watchdog | 🔴 Vysoká | ✗ |
| Narozeninová sleva | 🟡 Střední | ✗ (custom rule) |
| RP/PHE jako košíková položka | 🔴 Vysoká | ✗ (custom OrderProcessor) |
| Odhad data doručení | 🔴 Vysoká | ✗ (custom estimator) |
| Per-prodejna dostupnost | 🟡 Střední | částečně (warehouses existují) |
| Max. množství | 🟢 Nízká | ✅ maximumQuantity |
| Cena na dotaz | 🟡 Střední | ✗ (custom atribut + šablona) |
| SK DPH a B2B bez DPH | 🟡 Střední | ✅ tax zones + customer groups |
| Doprava zdarma CZ | 🟢 Nízká | ✅ HasChannel promotion rule |