Kupóny a vouchery¶
Stav k 2026-06-21
Systém má jeden zásobník (eshop_kupony) pro dva odlišné typy kódů: dárkové vouchery a slevové kupóny.
Tabulky¶
eshop_kupony — hlavní tabulka¶
| Pole | Popis |
|---|---|
nazev |
název; vouchery mají prefix VOUCHER |
kod |
unikátní kód zadávaný zákazníkem |
kod_sklad |
kód produktu v Pohodě (SZLAT pro vouchery) |
od / do |
platnost; do = 2099-12-31 = neomezená |
cena |
hodnota v Kč (hodnotový voucher nebo fixní sleva) |
procent |
procentuální sleva (alternativa k cena) |
min_nakup |
minimální výše košíku pro uplatnění |
komu |
jméno příjemce (vouchery jsou vázány na jméno) |
uzivatel |
login zákazníka — kupón vázaný na konkrétní účet |
max_vyuziti |
max. počet uplatnění (vouchery = 1) |
vyuzit |
počítadlo uplatnění — udržuje trigger |
aktivni |
0 = neaktivovaný (předtištěné před prodejem) |
hash |
SHA512+MD5 hash pro download URL voucheru |
eshop_kupony_predtistene — zásoby předtištěných kódů¶
Kódy formátu PT + 10 znaků, generované hromadně pro tiskárnu. Čekají na prodej — po prodeji se přenesou do eshop_kupony.
eshop_kupony_vyuziti — log využití¶
Každé uplatnění = jeden řádek (kupon_id, datum, ip, uzivatel). Trigger kupony_vyuziti_ai/ad udržuje eshop_kupony.vyuzit jako counter.
eshop_kupony_log — audit log¶
Záznamy akcí: vytvoření, storno, generování, uplatnění. Pole voucher_id propojuje log na konkrétní kupón.
Typy kódů¶
Dárkové vouchery (nazev LIKE 'VOUCHER%')¶
- Hodnotové — zákazník dostane slevu rovnou hodnotě voucheru
- Platnost 3 měsíce od prodeje
- Vázány na jméno (
komu) — při uplatnění musí zákazník zadat shodné jméno max_vyuziti = 1— jednorázové
Dva způsoby vzniku:
| Způsob | Popis |
|---|---|
| Předtištěný (saleE) | kód je z eshop_kupony_predtistene (fyzická karta s čárovým kódem); obsluha vybere kód, zadá jméno → vytvoří se záznam v eshop_kupony |
| Nový (saleN) | vygeneruje se nový 10-místný kód, obsluha zadá e-mail → zákazník dostane download link na PDF/PNG |
Slevové kupóny (ostatní)¶
- Fixní částka (
cena) nebo procento (procent) - Volitelně vázány na uživatelský účet (
uzivatel) - Volitelně omezeny minimálním nákupem (
min_nakup) - Libovolná platnost a max. počet využití
Tok uplatnění¶
E-shop (košík)¶
lib/eshop/class.coupon.php — checkCode():
- Načte kupón z DB podle kódu
- Ověří: existence → aktivnost → max_vyuziti → uzivatel (session) → platnost od/do → min_nakup
- Voucher navíc ověří shodu jména (
komu) - Uloží do
$_SESSION['eshopCoupon'] - Při dokončení objednávky:
usedCoupon()→ INSERT doeshop_kupony_vyuziti
Prodejna / pobočka (admin)¶
controller.vouchery.php → akce used:
- Obsluha zadá kód voucheru
- Systém ověří existenci a využitelnost
- INSERT do
eshop_kupony_vyuzitis IP a přihlášeným uživatelem adminu
Přihlášení do adminu = identifikace obsluhy; každé uplatnění je auditováno.
Předtištěné kódy — generování¶
Admin → Vouchery → Generování:
- Obsluha zadá kolik kusů které hodnoty
- Systém generuje kódy
PT+ 10 znaků doeshop_kupony_predtistene - Ke každému kódu vygeneruje PNG čárový kód (Code 128, knihovna
Barcode128) - ZIP ke stažení (struktura:
{hodnota}/{číslo}.png) - Lze stornovat celou dávku (smaže podle
datum+datum_kod)
Dopad na migraci do Sylius¶
Sylius má odlišný model kupónů
Sylius rozlišuje Promotion (akce) a PromotionCoupon (kód). Logika vázání na jméno (vouchery) nemá nativní ekvivalent — nutno custom implementace nebo plugin.
Předtištěné vouchery — fyzický proces
Systém eshop_kupony_predtistene + generování PNG čárových kódů je vlastní workflow pro prodej na pobočkách. Sylius nemá obdobu — bude nutno celý proces reimplementovat nebo nahradit externím nástrojem.
Audit log
eshop_kupony_log obsahuje historii prodeje a uplatnění voucherů. Při migraci zachovat jako read-only archiv — Sylius nemá odpovídající tabulku.