Skip to content

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:

  1. Účel importu.
  2. Zdroj dat a formát.
  3. Spouštění a návaznost na další procesy.
  4. Jaké entity vytváří nebo mění.
  5. Jaká má speciální pravidla a výjimky.
  6. Rizika pro migraci.
  7. 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 1od='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:

  1. Na začátku importu načte celou tabulku eshop_vyrobci jako mapu alias → id.
  2. Při každém produktu lookupne vyrobce_id podle alias_vyrobce.
  3. Pokud výrobce neexistuje → INSERT IGNORE eshop_vyrobci SET nazev, alias, web_id, zobrazovat=1.
  4. 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