Cenotvorba¶
Stav k 2026-06-21.
Cenotvorba je napříč importy — finální cena produktu závisí na tom, odkud produkt pochází a zda je zároveň v nabídce více dodavatelů.
Kurz EUR¶
Kurz EUR/CZK se zadává ručně v administraci e-shopu (SETTING['kurz_euro']). Používají ho všechny importy, kde dodavatel poskytuje ceny v EUR.
Kurz je záměrně nastaven nižší než tržní — slouží jako pojistka marže při nákupu v EUR. Klient takto zajišťuje, že při pohybu kurzu neprodělá.
Fallback hodnota se liší skript od skriptu (starší 27, novější 25) — pokud admin kurz nevyplní, použije se fallback.
Cenová pole v eshop_produkty¶
| Pole | Popis |
|---|---|
cena_a |
prodejní cena zákazníka (s rabátem) |
cena_b |
MOC — doporučená maloobchodní cena |
cena_c |
MOC (shodné s cena_b, historický pozůstatek) |
cena_nakup |
nákupní cena / VOC (velkoobchod) |
Marže¶
Marže je klíčová pro SEO (zbožové srovnávače), sledování prodejů a rozhodování co zobrazovat v e-shopu. Produkty s příliš nízkou marží se skrývají nebo nevystavují.
Kdy je marže přesně známá — pokud dodavatel poskytne obě ceny (VOC i MOC):
marže = (MOC - VOC) / MOC × 100
Příklad: Astra počítá marži z CSV ceníku a označí nizka_marze = 1 pro produkty pod 18 %.
Kdy je marže pouze odhadnutá — pokud je k dispozici jen jedna cena (např. z Pohody bez dodavatelského ceníku), marže se přímo nepočítá. Lze ji zpětně odvodit z cena_nakup a cena_a, ale není explicitně uložena na staging úrovni.
Cenová priorita (waterfall)¶
Při Pohoda importu se cena produktu v import_produkty může projít postupnými přepsáními, než se zapíše do eshop_produkty. Pořadí:
- Pohoda nastaví základní
sellingpriceaprice. ceny-pouze-ze-zlatnicke.php(jen CZ) — sjednotí ceny na hodnoty ze skladu SZLAT/KOM. Eliminuje cenové rozdíly, pokud je tentýž produkt ve více skladech.produkty-bez-5procent.php— pro výrobce bez slevy nastavíprice = sellingprice(prodej za MOC). Viz Výrobci bez slev.srovnat-ceny-od-dodavatelu.php— pro produkty zároveň v Pohodě i v dodavatelské staging tabulce přepíše cenu z dodavatele. Zpracovává: Astra, Pelikán, Hacker, Corfix, Modelimex.nizke-marze-od-dodavatelu.php— označínizka_marze = 1dle Astry a Pelikána.- Základní import — zapíše
pricejakocena_a,sellingpricejakocena_b/cena_c.
Dodavatelské slevy (aktuální stav)¶
| Dodavatel | Koeficient | Poznámka |
|---|---|---|
| Astra | 1.0 (0 %) | dříve různé hodnoty, naposledy změna 12/2024 |
| Pelikán | 1.0 (0 %) | CZ i SK |
| Hacker | 1.0 (0 %) | |
| Corfix — Zvezda | 0.9 (−10 %) | |
| Corfix — Airfix | 0.86 (−14 %) | |
| Modelimex | výsledek roundPeckamodel() bez koeficientu |
Koeficienty jsou hardcoded v srovnat-ceny-od-dodavatelu.php.
InStock logika — vlastní zásoba má přednost¶
Corfix a Modelimex nepřepisují cenu z Pohody, pokud je produkt skladem přímo u Pecky (SZLAT + KOM). Dodavatelská cena se aplikuje pouze na zboží, které Pecka fyzicky nemá.
Týká se značek: Zvezda, Airfix (Corfix) a ICM, MINIART, ARMA HOBBY, RODEN, DORA WINGS, MODELSVIT, IBG MODELS (Modelimex).
Nízká marže — co se se skrýváním děje¶
Produkty označené nizka_marze = 1 se při plném importu schovají (zobrazovat = 0, vyrazeny = 1), ale jen pokud nejsou na skladě. Pokud produkt fyzicky leží ve skladu, zobrazí se i s nízkou marží — nelze ho schovat, dokud se neprodá.
Výrobci bez slev¶
Funkce manufacturersWithoutSales() v lib/eshop/function.eshop.php vrací natvrdo zakódovaný seznam aliasů výrobců, jejichž produkty se prodávají za plnou MOC — bez jakéhokoli rabátu.
Používají ji importy Pelikán, Astra i Pohoda import (produkty-bez-5procent.php).
Aktuální seznam¶
yuneec, dji, foxtoys, staufenbiel, jeti, bungi-bungi, dino-bikes, tamiya, eduard
Výjimka pro slevové akce¶
Funkce přijímá parametr $discountEvent. Při true se seznam zkrátí — tito výrobci mohou participovat v slevových akcích:
tamiya, foxtoys, eduard ← při akci mohou mít slevu
Zbývají jen: yuneec, dji, staufenbiel, jeti, bungi-bungi, dino-bikes
Mrtvý kód
V bloku $discountEvent = true existují dvě přiřazení $manufacturers za sebou — druhé přepíše první. První řádek (s gens-ace, acepow-electronics-co-ltd) se nikdy nepoužije.
Migrace¶
Co si pohlídat
- Cenový waterfall musí být v novém systému explicitní a konfigurovatelný — aktuálně je logika rozházená napříč 4 PHP soubory v
cron/pohoda-import/. - Koeficienty slev jsou hardcoded — v Syliusu by měly být per-dodavatel nebo per-značka v administraci.
- InStock logika — priorita vlastní zásoby před dodavatelskou cenou musí být zachována, jinak se produkty budou prodávat za nesprávné ceny.
- Marže a skrývání — logika "skryj pokud nizka_marze AND není na skladě" musí mít ekvivalent; jinak se buď zobrazí ztrátové produkty nebo zmizí i to, co je fyzicky ve skladu.
- Seznam výrobců bez slev je hardcoded v PHP — v Syliusu by mělo jít nastavit per výrobce.