Skip to content

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.phpcheckCode():

  1. Načte kupón z DB podle kódu
  2. Ověří: existence → aktivnost → max_vyuziti → uzivatel (session) → platnost od/do → min_nakup
  3. Voucher navíc ověří shodu jména (komu)
  4. Uloží do $_SESSION['eshopCoupon']
  5. Při dokončení objednávky: usedCoupon() → INSERT do eshop_kupony_vyuziti

Prodejna / pobočka (admin)

controller.vouchery.php → akce used:

  1. Obsluha zadá kód voucheru
  2. Systém ověří existenci a využitelnost
  3. INSERT do eshop_kupony_vyuziti s 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í:

  1. Obsluha zadá kolik kusů které hodnoty
  2. Systém generuje kódy PT + 10 znaků do eshop_kupony_predtistene
  3. Ke každému kódu vygeneruje PNG čárový kód (Code 128, knihovna Barcode128)
  4. ZIP ke stažení (struktura: {hodnota}/{číslo}.png)
  5. 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.