Importy - přehled¶
Tato sekce bude sloužit jako rozcestník pro jednotlivé importy. Každý import bude popsán samostatně, protože:
- má vlastní zdroj dat
- má vlastní mapování polí a výjimky
- může mít vlastní přepisová pravidla
- může ovlivňovat cenu, sklad, viditelnost i texty produktů
Jak budeme importy popisovat¶
Každý import by měl mít vlastní stránku se stejnou osnovou:
- Účel importu.
- Zdroj dat a formát.
- Spouštění a návaznost na další procesy.
- Jaké entity vytváří nebo mění.
- Jaká má speciální pravidla a výjimky.
- Rizika pro migraci.
- Návrh, jak tuto logiku převést do nového řešení.
Identita produktu — kod vs ean¶
Kritické pro migraci
Dodavatelé se dělí na dvě skupiny podle toho, jak párují produkt na eshop_produkty. Nelze předpokládat jediný universal identifikátor.
Párování podle kod¶
Tito dodavatelé mají v importovaném feedu vlastní kód produktu, který odpovídá eshop_produkty.kod:
| Dodavatel | Matching |
|---|---|
| JKModel | JOIN import_jkmodel i ON i.code = p.kod |
| Astra | JOIN import_astra i ON i.code = p.kod |
| Pelikan | JOIN import_pelikan i ON i.code = p.kod |
| Modelimex | WHERE kod = '$modelimex->code' |
| Pohoda | páruje přes kod (zakladni-import.php) |
Párování podle ean¶
Tito dodavatelé nemají vlastní produktový kód — párují se přes EAN:
| Dodavatel | Matching |
|---|---|
| Corfix | WHERE ean = ? AND web_id = ? |
| Eduard | WHERE web_id = ? AND ean = ? |
| Hacker | WHERE ean = ? AND web_id = ? |
| Conquest | WHERE ean = ? AND web_id = ? |
| MPM | WHERE ean = ? AND web_id = ? |
| Proxxon | WHERE ean = ? AND web_id = ? |
| Special Hobby | WHERE ean = ? AND web_id = ? |
Produkty párované přes EAN existují v eshop_produkty jako samostatné záznamy — mohou mít od='Pecka' i od='<dodavatel>'.
Pole od — vlastnictví produktu¶
Každý produkt má pole od určující, kdo ho "vlastní":
od = 'Pecka'— produkt spravovaný ručně redakcí; má prioritu při konfliktu (viz níže)od = 'Corfix',od = 'Hacker', … — produkt vytvořený importem daného dodavatele
Při párování přes EAN může nastat kolize (stejný EAN od dvou zdrojů). Import ji řeší: ORDER BY od LIMIT 1 — od='Pecka' se abecedně řadí za ostatní, ale kód obsahuje explicitní komentář "vezme se od='Pecka'" → Pecka-produkt vyhrává.
Speciální případ: Cherks¶
Cherks posílají v poli ean kód produktu (ne skutečný EAN). Import to ví a prohodí pole: p.code = p.ean; p.ean = ''. Párování pak probíhá přes kod.
Sdílené mechanismy importů¶
Výrobci (eshop_vyrobci)¶
Každý importer (Pelikan, Modelimex, Hacker, Conquest, Proxxon, MPM, SpecialHobby, Corfix, Astra, Eduard, Cherks) řeší výrobce stejným vzorem:
- Na začátku importu načte celou tabulku
eshop_vyrobcijako mapualias → id. - Při každém produktu lookupne
vyrobce_idpodlealias_vyrobce. - Pokud výrobce neexistuje →
INSERT IGNORE eshop_vyrobci SET nazev, alias, web_id, zobrazovat=1. - Pokud INSERT selže (např. duplicita na jiném
web_id) →vyrobce_id = 0.
Tabulka eshop_vyrobci má sloupec lokalni — výrobci označeni jako lokální nejsou přepisováni importy (příznak existuje, ale viz kód konkrétního importeru).
Migrace: vyrobce_id je FK do eshop_vyrobci. V Syliusu odpovídá konceptu Taxon nebo samostatná entita Brand — nutno namapovat.
Sklady (eshop_sklady)¶
Sklady používá výhradně Pohoda import. Ostatní importery sklady neřeší — nastavují jen pole skladem (boolean) přímo na produktu.
Pohoda XML obsahuje storage_ids (zkratka skladu). Importer načte celou tabulku eshop_sklady jako mapu zkratka → id a pak zapisuje do eshop_produkty_sklady_mnozstvi.
Definované sady skladů (v pohoda_import.php):
| Zkratka | Typ | Poznámka |
|---|---|---|
SZLAT |
základní sklad | $skladZaklad — součet množství ze SZLAT a KOM určuje celkové skladem |
KOM |
komise | $skladKomise — přičítá se k SZLAT s patchem (KOM se zpracovává jako poslední) |
PHE |
— | vedlejší sklad |
Hypernova |
— | vedlejší sklad |
Karolina |
— | vedlejší sklad |
Letnany |
— | vedlejší sklad |
SESTKA |
— | vedlejší sklad |
Alternativní sada (druhé prostředí): Sklad, KOMISE.
eshop_produkty_sklad_centrala je VIEW (ne tabulka) — SUM(mnozstvi) ze skladů SZLAT.
Migrace: Sylius má vlastní Stock Location API. Mapování zkratek skladů → Sylius Location musí být explicitní; KOM patch logika (zpracovat jako poslední, přičíst k SZLAT) nemá v Syliusu přímou analogii.
Zamýšlené, zatím neaktivní¶
| Dodavatel | Stav |
|---|---|
| Olymptoy | Adresář PRENOSY/_OLYMPTOY/ existuje, žádný cron skript ani import není — připraveno, nespuštěno |