Pohoda — import produktů (ERP)¶
Stav k 2026-06-21.
Účel¶
Pohoda je zdrojem pravdy pro produkty vlastního skladu (od = 'Pecka'). Importuje ceny, zásoby na skladech, EAN a základní data. Běží ve dvou režimech — noční plný import a průběžný inkrementální diff každých 20 minut.
Zdroj dat¶
Pohoda sama exportuje XML soubory přes FTP do PRENOSY/Z_POHODY/. Parsovací skript si je odtamtud vyzvedne — žádné stahování, soubor je tam v momentě spuštění.
Typ importu se pozná podle názvu souboru:
| Název souboru | Režim |
|---|---|
začíná DIFF |
inkrementální — jen změny |
| ostatní | plný — celý sklad |
Spouštění¶
| Krok | Skript | Kdy |
|---|---|---|
| Parsování + import | cron/pohoda_parsovani.php |
každých 10 min, 3:00–21:00 |
| Parsování + import (plný) | cron/pohoda_parsovani_full.php |
1:15 denně |
Import (pohoda_import.php) se nevolá samostatně — parsovací skript ho includuje hned po úspěšném parsování.
Co se děje při parsování¶
- Najde XML soubor v
Z_POHODY/a rozhodne full vs. diff. - TRUNCATuje
import_produkty. - Parsuje XML přes
XML_parser_pecka(lib/eshop/class.parser.php). - Rotace záloh — drží 80 generací (
pohoda-import-00000001_…). - Loguje typ
Pdoimport_log. - Po plném importu pošle e-mail adminovi.
- Spustí import.
Co se děje při importu¶
Import je rozdělen do sady sub-skriptů v cron/pohoda-import/. Pořadí je důležité.
Přípravná fáze — úprava cen v import_produkty před zápisem¶
Probíhá vždy (diff i full):
| Skript | Co dělá |
|---|---|
ceny-pouze-ze-zlatnicke.php |
speciální logika pro zlatnický sortiment (jen CZ) |
produkty-bez-5procent.php |
vrátí cenu na MOC výrobcům bez slevy (manufacturersWithoutSales) a kódům FOX* |
srovnat-ceny-od-dodavatelu.php |
klíčový — pro produkty současně v Pohodě i u dodavatele překryje cenu v import_produkty cenou z dodavatelské staging tabulky (Astra, Pelikán, Hacker, Corfix, Modelimex) |
nizke-marze-od-dodavatelu.php |
označí nizka_marze=1 v import_produkty pro kódy s nízkou marží (z import_astra_cenik a import_pelikan_nizka_marze_kody) |
Základní import — zakladni-import.php¶
Pro každý záznam z import_produkty:
- Existující produkt → UPDATE: ceny, EAN, MJ,
import=1,od='Pecka',dostupnost=0 - Nový produkt → INSERT:
novy=1,zobrazovat=0(skrytý, dokud admin nezařadí) - Zásoby → UPDATE/INSERT do
eshop_produkty_sklady_mnozstvi
Speciální chování:
- KOM sklad — komise se přičítá k množství na SZLAT (zákazník vidí součet)
- PHE sklad — nastaví skupina_phe=1 a phe_kod
- Doprodej — pokud produkt nemá zásoby na žádném skladu, schová se (zobrazovat=0)
- U inkrementálního importu se zásoby SZLAT zpracují vždy, KOM jen pokud byl v diffu přítomen SZLAT pro daný kód
Fáze jen pro plný import¶
| Skript | Co dělá |
|---|---|
nezobrazovat-polozky-co-nejsou-ve-skladech-pohody.php |
skryje produkty, které v Pohodě vůbec nejsou |
skryt-polozky-s-nizkou-marzi.php |
skryje produkty s nizka_marze=1 |
kopie-tabulky-full-importu.php |
kopie dat pro srovnání / audit |
aktualizace-novinek.php |
označí nové produkty |
Závěrečná fáze (vždy)¶
| Skript | Co dělá |
|---|---|
srovnat-ceny-od-corfix.php |
doladění cen z Corfixu |
aktualizovat_produkty_na_ceste.php |
aktualizuje produkty označené jako „na cestě" |
aktualizace-akce-s-dostupnosti.php |
propíše dostupnost do probíhajících akcí |
Sklady (CZ)¶
| Zkratka | Popis |
|---|---|
SZLAT |
hlavní sklad (zlatnická) |
KOM |
komise — přičítá se k SZLAT |
PHE |
příslušenství (jiný typ produktu) |
Hypernova, Karolina, Letnany, SESTKA |
pobočkové sklady |
Migrace¶
Co si pohlídat
srovnat-ceny-od-dodavatelu.phpje kritický — finální cena produktu může pocházet z Pohody, Astry, Pelikána, Hackera, Corfixu nebo Modelimexu v závislosti na tom, kdo má daný kód v nabídce. Tato logika musí být v novém systému explicitní.- Inkrementální vs. plný import — diff zpracuje jen změněné zásoby SZLAT. Plný import navíc schová produkty mimo Pohodu a vyhodnotí marže. Nový systém musí oba režimy rozlišovat.
- KOM sklad má hardcoded patch
storage_id 5→555kvůli řazení zpracování. Při migraci tuto závislost eliminovat. - Celá sada skriptů v
pohoda-import/tvoří jeden logický celek — nelze je přenášet odděleně.