Skip to content

Dostupnost a sklad

Stav k 2026-06-21.


Dostupnostní číselník (eshop_produkty_dostupnost)

Každá hodnota dostupnosti = počet dní + titulek (např. "Skladem", "3–5 pracovních dní", "Na objednávku").

Produkt nese dvě dostupnostní hodnoty:

Pole Popis
dostupnost dostupnost z vlastního skladu Pecky
dostupnost_dodavatel dostupnost u dodavatele
na_ceste datum, kdy zboží dorazí (pro "Na cestě" stav)

Zobrazovaná dostupnost = minimum z obou hodnot (lepší z vlastního skladu vs. dodavatel).

Resetovací logika dostupnosti u dodavatele viz pole od_puvodni.


Sklady (eshop_sklady + eshop_produkty_sklady_mnozstvi)

eshop_sklady
  id, zkratka, nazev

eshop_produkty_sklady_mnozstvi
  produkt_id, sklad_id, mnozstvi

Každý produkt může mít množství ve více skladech. Klíčové sklady:

  • SZLAT — centrální sklad (zlatnická)
  • KOM — komisionální sklad

VIEW eshop_produkty_sklad_centrala = množství na SZLAT.

VIEW eshop_produkty_aktualni_dostupnost = agregovaná dostupnost + množství přes všechny sklady + dostupnostní kódy.


Zobrazení dostupnosti — rozhodovací strom

Šablony v tags/eshop/dostupnost/ — 5 variant pro různé kontexty (detail produktu, přehled, košík, blok poboček).

Společná proměnná nezobrazovat_dostupnost — pokud je nastavena, celý blok dostupnosti se nezobrazí (pro služby, produkty na dotaz apod.).

Klíčové proměnné

Proměnná Zdroj Popis
mnozstvi eshop_produkty_sklady_mnozstvi SUM celkové množství ve vlastních skladech
skladem totéž alias, používá se v přehledu
skladem_centrala VIEW eshop_produkty_sklad_centrala množství na centrále (Nademlejnská)
mnozstvi_na_skladech per-sklad join pro detail produktu — tabulka per prodejna
dostupnost eshop_produkty.dostupnost dodací lhůta z vlastního skladu (číselník)
dostupnost_dodavatel eshop_produkty.dostupnost_dodavatel dodací lhůta u dodavatele (číselník)
na_ceste eshop_produkty.na_ceste datum příjmu zboží na sklad

Rozhodovací logika (detail produktu #produkt.tpl)

nezobrazovat_dostupnost = true  →  nic nezobrazovat

mnozstvi > 5                    →  "Skladem více než 5 ks"
mnozstvi > 0                    →  "Skladem X ks"
dostupnost_dodavatel > 0
  nebo dostupnost > 0           →  "Skladem" (u dodavatele)
                                     + vypoctiDenDodani(1) "na prodejně"
                                     + vypoctiDenDodani(2) "může být u Vás"
na_ceste                        →  "Na cestě, předpoklad naskladnění DATE"
jinak                           →  "Dočasně nedostupné"

Speciální případ pro dodavatele Pelikán, Corfix, Modelimex, Special Hobby (v od nebo od_puvodni): použijí se jejich dodací lhůty místo vypoctiDenDodani.

Rozlišení centrála vs. pobočka (#produkty-prehled-2.tpl)

skladem_centrala > 0  →  vypoctiDenDodani(1)     ← zítřek (centrální sklad)
skladem > 0           →  vypoctiDenDodani(2, 2)   ← pozítří (pobočkový sklad)

max = 2 u pobočky zabrání zobrazení delšího termínu — vždy "nejpozději pozítří".

vypoctiDenDodani($diff, $max, $patch)

Funkce lib/eshop/function.eshop.php:290 — vrátí datum dodání jako string:

  • $diff = počet pracovních dní od dnes
  • přidá +1 den pokud je po 13:00 (cut-off)
  • přeskočí víkendy a státní svátky (jeStatniSvatek(), jeVolnyDen())
  • pokud $patch = true a $diff = 1 → patch pro dodavatele (+1 navíc)
  • vrátí "Zítra" / "Pondělí" / "5.6." dle lokálu a blízkosti

Reálná složitost výpočtu

vypoctiDenDodani() je netriviální — pracovní dny, cut-off 13:00, státní svátky. Ale ani to nestačí: dodavatelé jako Pelikán nebo Astra mají vlastní prázdniny (vánoční přestávky, letní uzávěrky), které se nedají obecně vyřešit. Proto jsou v šablonách hardcoded výjimky na konkrétní data (viz date('Ymd') < '20260102' v templates). V Sylius bude nutno tento mechanismus řešit per-dodavatel konfigurací nebo manuálními výjimkami.


Dopad na migraci do Sylius

Sylius StockableInterface

Sylius má nativní správu zásob per ProductVariant + Warehouse. Mapování: eshop_sklady → Sylius Warehouse, eshop_produkty_sklady_mnozstvi → Sylius ProductVariantInventory (nebo StockItem).

Dvě hodnoty dostupnosti

Sylius nerozlišuje "vlastní sklad" a "dostupnost u dodavatele" jako dvě samostatné hodnoty. Logika "zobrazuj dodavatelskou dostupnost pokud není skladem" musí být custom.

Dostupnostní číselník

eshop_produkty_dostupnost (dni → titulek) nemá přímý ekvivalent — v Sylius se dostupnostní texty řeší přes šablony nebo custom atributy.