390 lines
33 KiB
Markdown
390 lines
33 KiB
Markdown
# PompoBundle
|
|
|
|
Bundle, který obsahuje všechny pompo customizace. Spoustu dokumentace se nachází už i přímo v jednotlivách třídách, kde
|
|
je popsaných spousta věcí, aby bylo jasný jak to funguje.
|
|
|
|
Bundle je použit na shopech `prod/pompo` a `prod/nejhracka`, kdy na nejhračce se používá méně věcí, protože tam nejsou prodejny
|
|
a je to celkově jednodušší verze pompa.
|
|
|
|
Obecný popis pro `prod/pompo`
|
|
- Produkty - produkty se zakládájí a aktualizují z DataGo (pouze některé parametry a obrázky), zbytek potom upravují na e-shopu.
|
|
- Ceny - ceny se tahají z DRSu. Tahají se ceny ze specifického ceníku pro pompo.
|
|
- Sklad
|
|
- DataGo - centrální sklad a sklad dodavatele.
|
|
- DRS - sklad prodejen.
|
|
- Objednávky
|
|
- DataGo - zapisují se objednávky s přepravou, tedy objednávky přes přepravce a případně rezervace na prodejně, kam je nutný
|
|
závoz z centrálního skladu.
|
|
- DRS - zapisují se rezervační objednávky, rezervační objednávka s přepravou (závoz s prodejny) se zapisuje nejříve do DataGo
|
|
a do DRSu se zapíše až ve chvíli, kdy je objednávka v DataGo přepnuta do stavu "převoz".
|
|
|
|
Obecný popis pro `prod/nejhracka`
|
|
- Produkty - stejné produkty jako na `prod/pompo`.
|
|
- Ceny - ceny se tahají z DRSu, stejně jako na `prod/pompo`, ale používá se jiný ceník, který je určen pro nejhračku.
|
|
- Sklad - nejsou prodejny, takže se tahá pouze centrální sklad a sklad dodavatele z DataGo.
|
|
- Objednávky - objednávky pouze přes přepravce, takže se zapisují do DataGo, zpětně se stahuje a aktualizuje stav objednávek.
|
|
|
|
## Popis PompoAPI
|
|
|
|
Kvůli DRS pokladnám bylo vytvořeno PompoAPI, které muselo zůstat kompatibilní se starým API, které používali na starém řešení.
|
|
Všechny routy okolo API jsou umístěny v `Controller/PompoApiController.php` a funkcionalita API je umístěna v `Util/Api/ApiUtil.php`.
|
|
Pokladny k API přistupují přes doménu `api-pompo.wpjshop.cz`, která je ručně přidaná do ingressu v kubernetes. Je tomu tak hlavně kvůli
|
|
tomu, že pokladny nějak nedávali komunikaci přes novější TLS (HTTPS), takže takhle doména běží na HTTP.
|
|
V budoucnu by třeba DRS měl být schopen provést nějakou aktualizaci na pokladnách a začít k API přistupovat přes klasickou
|
|
doménu https://pompo.cz, ale je to asi o domluvě s DRSem.
|
|
|
|
## Specifikace
|
|
|
|
### Customizace administrace `PompoBundle/Admin`
|
|
|
|
- **Objednávky** (`Actions/UpdateDataGoOrderAction.php`) - akce, která po spuštění provede aktualizaci objednávky v DataGo.
|
|
- **Produkty** (`Actions/UpdateNejhrackaProductAction.php`) - akce, která po spuštění přenese data produktu na nejhračku. Přenesou se popisky a parametry. Komunikace probíhá pomocí GraphQL API.
|
|
- **Seznam generovaných kódů** (`lists/OrderDiscountsGeneratedCouponsList.php`) - přidáváme sloupec s prodejnou, na které byl poukaz uplatněn.
|
|
- **Seznam objednávek** (`lists/OrdersList.php`) - přidáváme custom sloupečky (ID cílové prodejny v DRSu, ID zákazníka v DRSu, datum závozu u rezervací s přepravou, odbavuje)
|
|
- **Seznam uživatelů** (`lists/UsersList.php`) - přidáváme sloupec s ID uživatele z DRSu. Zároveň se ještě rozšiřuje filtr podle ID zákazníka, aby hledal i podle DRS ID zákazníka.
|
|
- **Přidáno do hlavního menu** (`StoreManagement.php`) - správa skladů přes kterou je možné odpojit sklad - FE potom nebere v potaz skladovost odpojených skladů. V adminu v menu pod Sklad / Sklady / Správa skladů.
|
|
- **Záložky** (`Tabs`)
|
|
- **Dopravy a platby** (`DeliveryPaymentTab.php`) - přidává záložku "Synchronizace" k dopravám a k platbám. Plní si tam mapování vůči DataGo.
|
|
- **Způsob doručení** (`DeliveryTypeTab.php`) - přidává záložku "Synchronizace" k způsobům doručení. Plní si tam mapování vůči DRSu.
|
|
- **Nastavení e-shopu** (`PompoSettingsTab.php`) - přidává záložku "Pompo do nastavení e-shopu, na které jsou obecná nastavení specifická pro pompo. Z téhle záložky je možné taky ručně spustit synchronizaci obrázků nebo produktů.
|
|
- **Výrobci** (`ProducersTab.php`) - nahrání custom HTML obsahu k výrobci/sekci. Aktuálně se to už nejspíš nepoužívá, protože se to nakonec udělalo jinak.
|
|
- **Sekce** (`SectionsTab.php`) - možnost nastavení "Neoblíbenější licence" a nahrání custom HTML obsahu k výrobci/sekci. Aktuálně se to už nejspíš nepoužívá, protože se to nakonec udělalo jinak.
|
|
- **Prodejci** (`SellersTab.php`) - přidává záložku k prodejci. Zložka přidává ruzná nastavení okolo prodejce - mapování na DRS a DataFo, kraje, omezení...
|
|
- **Produkty dodavatelů** (`SuppliersTab.php`) - přidává záložku k dodavateli, kde je možné nastavit objednací dny - kdy se na straně pompa provádí objednávka k dodavateli. Slouží to primárně ke správnému výpočtu data doručení.
|
|
- **Exporty**
|
|
- **Objednávky** (`Util/Export/OrdersExcelExport.php`) - přidáváme custom sloupečky stejně jako na `OrdersList.php`
|
|
|
|
### Přílohy `PompoBundle/Attachment`
|
|
|
|
- `ReceiptPDFAttachment.php` - účtenka k nákupu na prodejně. Je možné si ji zobrazít v účtu.
|
|
- `InvoicePDFAttachment.php` - faktura z DataGo. Posílá se v OrderSentEmail, který se posílá ze synchronizace.
|
|
|
|
### Věrnostní program `PompoBundle/BonusProgram`
|
|
|
|
Customizace okolo věrnostního programu.
|
|
|
|
- `BonusComputer.php`
|
|
- **Funkce**:
|
|
- `createBonusPoints` - ignoruju osobní odběry, protože tam body počítám až když objednávku v synchronizaci páruju s prodejkou.
|
|
- `activatePoints` - body se aktivujou pouze u objednávek, které jsou vyřízené (nedělám to tedy standartně po počtu X dnů).
|
|
- `getNewPointsStatus` - všechny body jsou při vytvoření automaticky neaktivní.
|
|
- `BonusExchangeUtil.php` - customizace výměny bodů kvůli partnerským poukazům, které jsou předgenerované a tímpádem nemůžu generovat pokaždý nový.
|
|
- **Funkce**:
|
|
- `generateUserCoupon` - pokud je výměna bodů nastavená jako partnerský kupón, tak tak najde dostupný kupón z již vygenerovaných a ten to přiděli uživateli.
|
|
- `PointEvaluator.php`
|
|
- **Funkce**:
|
|
- `calculatePointsFromPrice` - customizace, aby se 1 bod rovnal 30 Kč
|
|
|
|
### Command `PompoBundle/Command`
|
|
|
|
- `StockSynchronizationCommand.php` - synchronizace skladu - je potřeba, aby byla synchronizace skladu rychlá a běžela prakticky furt, a k
|
|
tomu slouží tenhle command, který každou minutu spouší synchronizaci skladu (v kubernetes běží command pod, kde je tenhle command spuštěný).
|
|
Deployne se to vždycky automaticky s nasazením shopu díky `COMMAND_POD` proměnné v `.gitlab-ci.yml` na shopu.
|
|
|
|
### Controller `PompoBundle/Controller`
|
|
- `DataGoController.php` - přístupný pouze pro zalogované administrátory, obsahuje debug routy.
|
|
- `/sync/{type}/` - spustí synchronizaci daného typu.
|
|
- `/dump_order/{id}/` - zobrazí JSON pro zadané ID objednávky. Stejná data se potom používají při vytváření objednávky.
|
|
- `DRSController.php` - přístupný pouze pro zalogované administrátory, obsahuje debug routy.
|
|
- `/sync/{type}/` - spustí synchronizaci daného typu.
|
|
- `/sync/user/{drsId}/` - spustí synchronizaci uživatele podle zadaného ID (DRS -> shop).
|
|
- `/sync/prices/{productCode}/` - spustí synchronizaci cen pro daný produkt.
|
|
- `/sync/pos_order/{drsId}/` - spustí synchronizaci prodejky podle ID v DRSu.
|
|
- `/dump_order/{id}/` - zobrazí XML pro zadané ID objednávky. Stejná data se potom používají pro vytváření objednávky.
|
|
- `/dump_user/{id}/` - zobrazí XML pro zadané ID uživatele. Stejná data se potom používají pro založení a aktualizaci zákazníka.
|
|
- `PompoApiController.php` - Základní adresa je `/_pompo/api/TenantPublicAPI/v1/{endpoint}`. Obsahuje routy přes které komunikují pokladny. Celé PompoAPI je kompatibilní se starým API od AirMe, aby
|
|
se na straně pokladny nemuselo nic měnit. Celé API je case-insensitive, i routy.
|
|
- `/PAAuth` - slouží k získání API tokenu podle přihlašovacího jména a hesla do administrace.
|
|
- `/PAVouchers/UseVoucher` - uplatnění poukazu, označí poukaz jako uplatněný
|
|
- `/PAVouchers/TryUseVoucher` - vrací stejná data jako `UseVoucher`, jen poukaz ještě neuplatní
|
|
- `/PAVouchers/RechargeVoucher` - nastaví uplatněný poukaz jako neuplatněný, tímpádem je možné ho znovu použít
|
|
- `/PAVouchers/{coupon}` - vrátí informace o daném poukazu, nebo 404 pokud nebyl voucher nalezen.
|
|
- `PompoController.php` - routy specifické pro pompo.
|
|
- `/_pompo/export/oss/` - jednoduchý export produktů a jejich DPH.
|
|
- `/_pompo/sellers/` - ajax načítání focusu s prodejnama (změna prodejny v hlavičce, na produktu...).
|
|
- `/#account#/#user_cards#/` - seznam zákazníckých karet v uživatelském účtu.
|
|
- `/#orderView#/{orderId}/receipt/` - PDF s účtenkou z prodejny.
|
|
|
|
### Customizace dropshipmentu `PompoBundle/Dropship`
|
|
|
|
- `PompoExpandoTransfer.php`
|
|
- **Funkce**:
|
|
- `modifyInsertedOrder` - importovat objednávky jako zaplacené.
|
|
|
|
### DataGo `PompoBundle/DataGo`
|
|
|
|
Synchronizace e-shopu s DataGo. DataGo je systém pro správu hlavního skladu a expedice z něj.
|
|
|
|
Většina spouštění synchronizace je zaregistrována v `SynchronizationRegister\DataGoSynchronizationRegister.php`.
|
|
|
|
#### Synchronizace
|
|
|
|
Synchronizace je rozdělená na dvě části. Jedna část se provádí v cronech a druhá část se provádí přes synchronization eventu.
|
|
V synchronizační eventě se provádí věci, které je potřeba provádět často - objednávky a sklad. V cronu se potom provádí synchronizace
|
|
produktů z CSV, skladu z CSV a obrázků produktů.
|
|
|
|
- Objednávky - do DataGo odesíláme objednávky přes dopravce, případně objednávky se závozem na prodejnu, které se odešlou i do DRSu
|
|
potom, co se přepnou do stavu "Převoz"
|
|
- `Synchronizers/OrderSynchronizer.php` - odesílá objednávky do DataGo a potom zpětne stahuje jejich stavy z DataGo do e-shopu.
|
|
- Sklad - z DataGo stahujeme skladovost produktů na hlavním skladu.
|
|
- `Synchronizers/StockSynchronizer.php` - aktualizuje hlavní sklad v e-shopu podle DataGo.
|
|
- Typ CSV (`MODE_CSV`) - sesynchronizuje sklad podle CSV souboru, který DataGo jednou za cca 20 minut aktualizuje.
|
|
- Typ ZMĚNY (`MODE_NORMAL`) - rozdílová synchronizace, kdy si e-shop řekne o změny za posledních X vteřin a sesynchronizuje. Lze si říct o změny max 600s zpátky.
|
|
- Produkty - zakládá a aktualizuje produkty (název, kód, viditelnost, parametry...).
|
|
- `PROCESS_TYPE_FULL` - import ze souboru, kde jsou všechny produkty - plný import, který pouze zakládá nové produkty.
|
|
- `PROCESS_TYPE_FULL_UPDATE` - import ze souboru, kde jsou všechny produkty - plný import, který pouze aktualizuje existující produktu (aktualizuje se jen pár údajů, parametrů).
|
|
- `PROCESS_TYPE_NEW` - import ze souboru, kde jsou pouze nové produkty za posledních několik hodin - pouze zakládá produkty
|
|
- `PROCESS_TYPE_DIFF` - import ze souboru, kde jsou pouze změněné produkty - pouze aktualizace již existujících.
|
|
- Obrázky produktů - synchronizují se v NORMAL cronu. Synchronizují se pouze změněné obrázky, které se nejdříve načtou z API a pak stáhnou / aktualizujou.
|
|
Synchronizace obrázku jde spustit i ručně z administrace (Nastaveni e-shopu, záložka pompo).
|
|
|
|
#### Soubory
|
|
|
|
Popis souborů souvisejících s věcma okolo DataGo.
|
|
|
|
- `EventSubscriber\CronSubscriber`
|
|
- **FREQUENT**
|
|
- zpětná synchronizace stavů z DataGo
|
|
- **NORMAL**
|
|
- částečná synchronizace z CSV souborů - vytváření a aktualizace produktů, synchronizace skladu
|
|
- synchronizace změněných obrázků
|
|
- **EXPENSIVE**
|
|
- plná synchronizace z CSV souborů - produkty
|
|
- `EventSubscriber\OrderSubscriber`
|
|
- **ORDER_STORNO**
|
|
- v případě storna objednávky provést storno i v DataGo
|
|
- `Synchronizer\OrderSynchronizer` - zapisování objednávek do DataGo a zpětné stahování stavů z DataGo do e-shopu
|
|
- `Synchronizer\ProductSynchronizer` - zakládání a aktualizace produktů
|
|
- `Synchronizer\StockSynchronizer` - synchronizace skladu - dva typy:
|
|
- **CSV** - synchronizace z velkého CSV souboru, který obsahuje všechny produkty a jejich sklad na centrále + sklad dodavatele
|
|
- **JSON** - rozdílová synchronizace skladu - ptáme se vždycky na změny za posledních 10 minut a podle toho aktualizujeme hlavní sklad
|
|
- `Util\DataGoApi` - komunikace s DataGo
|
|
- `Util\PhotoDownloader` - stahování fotek
|
|
- `Util\PhotoUpdater` - aktualizace fotek
|
|
|
|
### DRS `PompoBundle/DRS`
|
|
|
|
Synchronizace e-shopu s DRSem. DRS je systém pro správu pokladen/prodejen a jejich skladu.
|
|
|
|
Pro nějakou komunikaci se připojujeme se napřímo k MSSQL databázi a pak třeba pro zápis
|
|
objednávek, zápis uživatelů používáme SOAP API. Vešketá tahle komunikace se najde v `DRSApi.php` classe.
|
|
|
|
Konfigurace připojení se nachází v `Resources/config/parameters.yml`.
|
|
|
|
Většina spouštění synchronizace je zaregistrována v `SynchronizationRegister\DRSSynchronizationRegister.php`.
|
|
|
|
#### Synchronizace
|
|
|
|
S DRSem synchronizujeme sklady prodejen, ceny, objednávky včetně prodejek (nákupy na prodejně) a uživatelé.
|
|
|
|
- Objednávky - do DRSu jdou objednávky, které mají osobní odběr (vyzvednutí na prodejně).
|
|
Pokud je objednávka na osobní odběr, ale zboží je skladem pouze na centrálním skladě, tak
|
|
jde objednávka nejdříve do DataGo a po přepnutí do stavu "převoz" se objednávka odešle do DRSu.
|
|
- `Synchronizers/OrderSynchronizer.php` - odesílá objednávky do DRSu a zpětně zpracovává stavy.
|
|
- `Synchronizers/POSOrderSynchronizer.php` - zakládá prodejky do e-shopu. Použilo se to i k doimportování objednávek
|
|
ze starého e-shopu (proto tam jsou ify na `$oldOrder`, které by mělo být možné do budoucna odebrat).
|
|
- Ceny - synchronizujeme rozdílově. V DRSu existují dvě tabulky s cenama: `PricesGlobal` - globální ceny podle měny,
|
|
a pak `PricesLocal` - ceny konkrétních shopů (mutací).
|
|
- `Synchronizers/PriceSynchronizer.php`
|
|
- Sklad - synchronizujeme pohyby na skladech. Do tabulky `eshop.ChangedItems` (MSSQL) se nám generují čísla produktů, kde proběhl nějaký pohyb
|
|
a tuhle tabulku si potom načítáme a aktualizujeme podle ní skladovost u produktů, kde proběhl nějaký pohyb. Tahle synchronizace se spouští v
|
|
samostatném threadu (`StockSynchronizationCommand.php`).
|
|
- `Synchronizers/StockSynchronizer.php`
|
|
- Uživatelé - synchronizujeme uživatele z e-shopu do DRSu a zároveň provádíme i zpětnou aktualizaci uživatelů z DRSu do e-shopu.
|
|
Zakládáme také nové uživatele, kteří vzniknou v DRSu, protože někdo může přijít na prodejnu a chtít věrnostní
|
|
kartu, kterou dostane a musí se mu na ní začít přičítat body. Takže i když je v DRSu uživatel s prázdným mailem,
|
|
tak na e-shopu uživatele založíme a nastavíme mu dočasný e-mail ve formátu `{drsId}@pompo.cz`.
|
|
Pokud uživateli někdy v budoucnu doplní mail v DRSu, tak se aktualizuje i na e-shopu + se uživateli odešlě e-mail
|
|
aby dokončil registraci na e-shopu (protože je potřeba nastavit heslo atd...). Další způsob registrace je, že na
|
|
e-shopu vyplní číslo zákazníka + číslo věrnostní kartičky, díky čemuž je schopen se zaregistrovat a spárovat si učet
|
|
s existujícím účtem, kde se mu už počítaly body.
|
|
- `Synchronizers/UserSynchronizer.php` - synchronizace uživatelů do DRSu a zpětně k nám
|
|
- `Synchronizers/UserCouponSynchronizer.php` - synchronizuje uživatelských kupónů do DRSu, aby na pokladnách viděli,
|
|
že uživatel má tyhle kupóny a mohli mu tímpádem nabídnout jejich uplatnění
|
|
|
|
#### Soubory
|
|
|
|
Popis souborů souvisejících s věcma okolo DRSu.
|
|
|
|
- `EventSubscriber\CronSubscriber`
|
|
- **FREQUENT**
|
|
- Synchronizace prodejek z DRSu - vytváření nákupů na prodejně (kvůli bodům, a aby byly vidět v účtu zákazníka) a párování rezervací vytvořených na e-shopu s nákupem na prodejně.
|
|
- Synchronizace uživatelských kupónů do DRSu - aby bylo na pokladně vidět, jaké kupóny má uživatel v účtu a případně mu tak mohli připomenout, že tam nějaký má.
|
|
- **EXPENSIVE**
|
|
- Synchronizace akčních cen - sesynchronizujou se ceny, u kterých bude začínat nebo končit platnost.
|
|
- `Synchronizers/OrderSynchronizer.php` - synchronizace objednávek
|
|
- `Synchronizers/POSOrderSynchronizer.php` - synchronizace prodejek
|
|
- `Synchronizers/PriceSynchronizer.php` - synchronizace cen
|
|
- `Synchronizers/StockSynchronizer.php` - synchornizace skladu prodejen
|
|
- `Synchronizers/UserCouponSynchronizer.php` - synchronizace uživatelských kupónů
|
|
- `Synchronizers/UserSynchronizer.php` - synchronizace kupónů
|
|
- `Util/DRSApi.php` - komunikace s DRS API / databází
|
|
|
|
### E-maily `PompoBundle/Email`
|
|
|
|
Custom e-maily, které se odesílají ze synchronizace.
|
|
|
|
- `OrderInPersonReadyEmail.php` - objednávka připravena k osobnímu převzení. Odesílá DRS synchronizace když nastaven stav.
|
|
- `OrderInProgressEmail.php` - objednávka se zpracovává. Odesílá jak DRS, tak DataGo synchronizace.
|
|
- `OrderNotCompleteEmail.php` - objednávka je nekompletní. Objednavka je pripravena k osobnimu prevzeti, ale neni kompletni, protoze nejake zbozi chybi.
|
|
- `OrderSentEmail.php` - objednávka odeslána. Odesíla DataGo synchronizace, když byla objednávka poslána dopravcem.
|
|
- `OrderShopTransportEmail.php` - objednávka se převáží na prodejnu. Odesílá DataGo synchronizace, když nastane stav "převoz".
|
|
- `UserPOSRegistrationEmail.php` - zákazník se registroval na prodejně a je potřeba, aby dokončil registraci na e-shopu. Posílá DRS synchronizace uživatelů.
|
|
|
|
### EventSubscribers `PompoBundle/EventSubscriber`
|
|
|
|
- `Ordering`
|
|
- `CartSubscriber.php`
|
|
- **Funkce**:
|
|
- `checkItemsStock` - kontrola skladovosti v DataGo nebo v DRSu před odesláním objednávky, abych si nemohl objednat např. produkt, který jsem dal do košíku, ale mezitím ho někdo koupil na prodejně a nestihlo se to ještě přenést na shop.
|
|
- `DeliveryCheckSubscriber.php` - validace doprav.
|
|
- **Funkce**:
|
|
- `checkDelivery` - validace košíku vůči dopravě, zda se třeba nesnažím rezervovat zboží, které není dostupné na centrálním skladě a vybrané prodejně.
|
|
- `checkZasilkovnaDelivery` - vlastní validace zásilkovny, přes kterou umožnují poslat pouze jednokusovou zásilku.
|
|
- `InvoicesOrderEventSubscriber.php` - nastavení fakturační řady pro Slovensko.
|
|
- `OrderingCronSubscriber.php` - customizace notifikace nezaplacených objednávek.
|
|
- `OrderItemInfoSubscriber.php` - zobrazení poznámky u objednané položky - výběr varianty formou textového pole.
|
|
- `OrderSubscriber.php`
|
|
- **Funkce**:
|
|
- `doOrderSplit` - rozdělení objednávky na rezervační objednávku a rezervaci se závozem.
|
|
- `logDeliveryDate` - zaloguje k objednávce s osobním odběrem datum vyzvednutí, který se zobrazoval v košíku.
|
|
- `setOrderType` - uloží k objednávce typ (rezervace, rezervace s přepravou, dopravce) a zároveň nastaví flag objednávce.
|
|
- `PurchaseStateSubscriber.php`
|
|
- `purchaseStateCreated` - nafetchuje skladové dostupnosti k jednotlivým produktům, abych v košíku mohl správně zobrazovat, co je skladem, co je potřeba zavézt na prodejnu, co skladem není...
|
|
- `ProductList/CatalogSubscriber.php` - nafetchovaní informací o skladech na ProductList.
|
|
- `User`
|
|
- `UserSubscriber.php`
|
|
- po zaregistrování uživatele se provede synchronizace s DRSem - pokud se uživatel registroval na prodejně, tak se díky tomu rovnou dotáhnou data k němu.
|
|
- vygenerování zákaznícké karty u nové registrovaného uživatele.
|
|
- `CronSubscriber.php` - generování narozeninových poukazů, odesílaní notifikací o docházejících poukazech.
|
|
|
|
### Custom triggery pro slevy `PompoBundle/Ordering`
|
|
|
|
- `Triggers/POSTrigger.php` - podmínka, která umožní slevu uplatnit na pokladně. Uplatnění na pokladně == uplatnění slevy přes vlastní API (PompoAPI).
|
|
- `Triggers/TransportChargeTrigger.php` - podmínka, která říká, zda se má v košíku učtovat manipulační poplatek - pokud je to odběr na prodejně, kam se musí provést závoz.
|
|
|
|
### Smarty plugins `PompoBundle/Resources/smarty_plugins`
|
|
|
|
- `function.get_delivery_date_incremented.php` - vrací předpokládáný datum doručení pro produkt a dopravu, nebo pro celý košík a konkrétní dopravu.
|
|
- `function.get_drs_customer_id.php` - vrátí ID uživatele v DRSu podle e-shopového ID uživatele.
|
|
- `function.get_dynamic_filter.php` - vytvoří prázdnej dynamic filter, abysme byli schopni vytvořit formulář pro výběr hračky na homepage.
|
|
- `function.get_formatted_receipt.php` - zformátuje účtenku z DRSu, aby vypadalo aspoň trochu normálně v PDF, kde ji zobrazujeme.
|
|
- `function.get_pompo_content.php` - vrací cestu ke custom contentu pro sekci nebo výrobce. Pravděpodobně se nepoužívá, protože se to později vyřešilo jinak.
|
|
- `function.get_pompo_delivery_charge.php` - vrací cenu manipulačního polatku, která je pevná a je potřeba ji zobrazovat v košíku u osobních odběrů, kde je potřeba provést závoz z centrálního skladu.
|
|
- `function.get_pompo_product_availability.php` - vytáhne dostupnost z ProductPurchaseItemu, která by tam měla být nafetchovaná z PurchaseStateEventy.
|
|
- `function.get_pompo_sellers.php` - vrátí všechny prodejny, ke kterým to nafetchuje i potřebné info (dostupnost, datum doručení) a zároveň to ještě prodejny zgroupuje podle krajů.
|
|
- `function.get_price_action_end_date.php` - vrací datum konce platnostni akční ceny.
|
|
- `function.get_product_deliverytime_info.php` - vrací skladové informace o produktu. Používá se to na detailu produktu, abysme správně zobrazili zda je skladem online, zda je skladem na moji prodejně, jiné prodejně, u dodavatele...
|
|
- `function.get_reservation_order.php` - vrací druhou (rezervační) objednávku, která vznikla při rozdělení objednávek.
|
|
- `function.get_section_licences.php` - vrací licence pro danou sekci. V administraci lze u každé sekce nastavovat "Neoblíbenější licence".
|
|
|
|
### Utility `PompoBundle/Util`
|
|
|
|
Pomocné funkce a předefinování některých engine servis.
|
|
|
|
- `Api/ApiUtil.php` - veškeré logika, která se týká **PompoAPI**, se kterým komunikují DRS poklady. Používá se kvůli uplatnění poukazů na pokladně.
|
|
- `auth` - pokladna volá auth metodu, aby získala Bearer token pro komunikaci s API.
|
|
- `useVoucher` - použítí voucheru a zároveň "zkouška" (try) použítí, která voucher ještě neuplatní, ale vrátí stejná data, jako kdyby ho uplatnila.
|
|
- `rechargeVoucher` - reaktivuje kupón - změní stav z Uplatněno na Neuplatněno.
|
|
- `Email/Preprocessor.php` - u e-mailu pro dokončení registrace potřebuju přidávat na konec URL #user-register-form, aby se zascrollovalo na formulář.
|
|
- `Export/OSSExport.php` - custom export pro OSS, aby si mohli opravit v DataGo CN kódy. Pravděpodobně ho už nepoužívájí, protože by už neměl být potřeba.
|
|
- `Import/PompoImport.php` - import dat před spuštěním, jinak se nikde nepoužívá. Už by neměl být potřeba.
|
|
- `Incomaker` - customizace Incomakeru
|
|
- `PompoContactXMLElement.php` - customizace kvůli věrnostním kartám a dětem, aby se odesílaly i do Incomakeru.
|
|
- `PompoProductXMLElement.php` - customizace kvůli flagům u produktu, protože do Incomakeru chceme posílat víc flagů než se posílá v defaultu.
|
|
- `Order` - úpravy týkající se objednávek
|
|
- `OrderInfo.php` - předefinovaná `OrderInfo.php` z `OrderingBundle`, kde je akorát upravená metoda `getDeliveryDate`, aby se datum doručení vracel správně
|
|
na základě customizací okolo data doručení.
|
|
- `OrderSynchronizerTrait.php` - společné funkce pro synchronizaci objednávek (DRS a DataGo společné funkce).
|
|
- `Ordering` - úpravy a customizace týkající se objednávání (košík, objednávka, datum doručení)
|
|
- `OrderingUtil.php` - obsahuje všechny věci, které se týkají košíku (dostupnosti, validace, datum doručení...). Hodně dokumentace se najde přimo uvnitř třídy.
|
|
- **Funkce**:
|
|
- `orderSplitTransportReservation` - rozdělí objednávku typu ORDER_TRANSPORT_RESERVATION na dvě objednávky.
|
|
- `getOrderType` - vrátí typ objednávky podle objednávky.
|
|
- `getPurchaseStateOrderType` - vrátí typ objednávky pro PurchaseState.
|
|
- `fetchPurchaseStateProductsAvailability` - načte skladovou dostupnost k produktům v purchase statu. Například: skladem, potřeba zavézt na prodejnu, není skladem...
|
|
- `validatePurchaseStateByDelivery` - zvaliduje PurchaseState. Validace na straně e-shopu, že je pro dopravu/prodejnu vše skladem.
|
|
- `fetchSellersCartInfo` - načte skladovou dostupnost k jednotlivým prodejnám na základě produktů v purchase statu, abych u prodejny mohl zobrazit, zda je všechno v košíku na
|
|
dané prodejně dostupné, je potřeba závoz, není dostupné nebo třeba zda si můžu všechno v košíku vyzvednout na prodejně ve stejný čas, nebo se musí nějaká část zavézt.
|
|
Zároveň si k prodejnám načtu a uložim datum doručení, který je potřeba počítat právě i na základě dostupnosti.
|
|
- `getSellerAvailability` - vrátí konstantu, která určitě dostupnost pro konkrétní prodejnu. Funkci musím předat hodnoty skladu a počet kusů pro které chci dostupnost vrátit.
|
|
- `getPurchaseStateProducts` - načte k produktům v purchase statu potřebné informace (skladovosti podle mojí prodejny).
|
|
- `isOrderInPerson` - vrací, zda je objednávka na osobní odběr nebo ne.
|
|
- `isTransportChargeInOrder` - vrací, zda je v objednávce obsažen "Manipulační příplatek" - za převoz na prodejnu.
|
|
- `getOrderSeller` - vrátí prodejnu pro danou objednávku (prodejna vybraná v košíku při tvorbě objednávky).
|
|
- `getPurchaseStateProductsGrouped` - kvůli variantám, které jsou dělané pouze přes poznámku se může stát, že v košíku jsou dva a více stejných produktů, jen s jinou poznámkou.
|
|
V purchase statu se potom všechny tváří jako samostatné produkty, ale pro ProductList a skladovost je to furt stejný produkt, takže to v některých případech potřebuju zgroupovat
|
|
do jedné položky, a k tomu přesně slouží tahle funkce.
|
|
- `copyOrderItem` - zkopíruje položku objednávky do jiné objednávky.
|
|
- `getSellerDeliveryDate` - spočítá datum doručení pro prodejnu (prodejce) na základě dostupnosti a dalších nastavení, které je v administraci možné provést.
|
|
- `getSellerClosestShipmentDate` - vrací nejbližší datum závozu z centrálního skladu na prodejnu. Závozy prodejen se nastavují v administraci u konkrétní prodejny.
|
|
- `checkPurchaseStateStockDataGo` - zvaliduje skladovost produktu vůči DataGo. Před odesláním objednávky se ještě provádí online kontrola skladovosti.
|
|
- `checkPurchaseStateStock` - zvaliduje skladovost vůči DRSu a DataGo.Před odesláním objednávky se ještě provádí online kontrola skladovosti.
|
|
- `getPurchaseItemKey` - vrací ID PurchaseItemu složené z ID produktu a ID varianty.
|
|
- `getDaysOfWeek` - pomocná funkce, která vrací dny v týdnu.
|
|
- `activateSeller` - pomocná funkce, která slouží k aktivaci konkrétní prodejny.
|
|
- `OrderType.php` - třída která obsahuje pouze konstanty s typem objednávky.
|
|
- `ProductAvailability.php` - třída která obsahuje pouze konstanty s typem dostupnosti.
|
|
- `User` - utility, které souvisejí s uživatelem.
|
|
- `PompoUserUtil.php` - pomocná utilita pro nějaké custom fce okolo uživatele.
|
|
- **Funkce**:
|
|
- `generateBirthdayDiscountCoupons` - funkce, která uživatelům generuje narozeninové kupóny. Každý uživatel může mít v účtu přidané
|
|
svoje děti a pokud nějaké dítě má narozeniny, tak se 14 dní dopředu vygeneruje narozeninový poukaz.
|
|
- `synchronizeRegisteredUser` - metoda, která natvrdo natáhne k uživateli data z DRSu.
|
|
- `getDaysParameter` - pomocná funkce při generování poukazů. Vrací pole s datumama dnů ode dneška až po den za 14 dní.
|
|
- `getNextYearDays` - pomocná funkce, která vrací mezi dneškem a datem za 14 dnů všechny dny, které jsou v dalším roce. Používá se při generování poukazů abych správně generoval u konce roku.
|
|
- `getDatePeriod` - vrací datumy ode dneška až po datum za 14 dní.
|
|
- `getBirthdayDiscountIdByLanguage` - vrací ID generovaného poukazu podle jazyka.
|
|
- `UserCardUtil.php` - utilita, které slouží pro práci s věrnostníma kartama.
|
|
- **Funkce**:
|
|
- `getUserCards` - vrací všechny věrnostní kartičky daného uživatele.
|
|
- `generateUserCard` - vygeneruje novou věrnostní kartu k danému uživateli.
|
|
- `generateCardCode` - vygeneruje kód, který se potom přiřadí k nově vytvořené kartě.
|
|
- `Watchdog` - customizace hlídacího psa
|
|
- `PompoWatchdog.php` - předefinováváme `getInStoreField` tak, aby se pro hlídacího psa brala v potaz pouze skladovost z centrálního skladu.
|
|
- `Configuration.php` - třida s konfigurací, která je načtená z YML konfigurace + obsahuje pomocné funkce pro získaní některých informací z konfigurace.
|
|
- `OrdersListFilter.php` - předefinovaný `OrdersListFilter.php` z jádra kvůli filtrování podle kódu objednávky. Z kódu objednávky se zkouší oříznout první znak.
|
|
- `PompocontentUtil.php` - slouží pro práci s custom HTML obsahem, který se připravoval pro sekce a výrobce. Nakonec se to nepoužilo, takže aktuálně by se to nemělo nikde používat.
|
|
- `PompoGraphQLClient.php` - slouží pro přenos dat na `prod/nejhracka` pomocí našeho GraphQL API.
|
|
- `PompoLogger.php` - slouží pro logování chyb do ActivityLogu, případně do Sentry.
|
|
- `PompoUtil.php` - pomocné funkce pro obecné věci týkající primárně synchronizace.
|
|
- **Funkce**:
|
|
- `getDataGoCredentialsByOrder` - vrací jméno a heslo pro zápis objednávek do DataGo, protože každá prodejna nebo jazyková mutace má jiné údaje.
|
|
- `getDataGoDefaultCredentials` - vrací výchozí jméno a heslo pro zápis objednávek podle jazykové mutace.
|
|
- `recalculateStores` - přepočítání skladu. Přenese sklad ze `stores_items` na produkt, aby seděla zásoba podle `stores_items`.
|
|
- `getIgnoredStores` - vrací sklady, které se mají ignorovat. Nemá se přenášet jejich skladovost na produkt.
|
|
- `synchronizeDataGoProducts` - spustí synchronizaci produktů s DataGo.
|
|
- `synchronizeDataGo` - spustí synchronizaci zadaných typů s DataGo.
|
|
- `synchronizeDRS` - spustí synchronizaci zadaných typů s DRSem.
|
|
- `synchronizeDataGoProducts` - spustí synchronizaci produktů s DataGo.
|
|
- `ProductUtil.php` - pomocné funkce kolem produktů.
|
|
- **Funkce**:
|
|
- `fetchStoreInfo` - multifetch pro načtení skladovosti rozdělené podle skladu - jde o centrální sklad, sklad aktuálně vybrané prodejny a součet kusů na ostatních prodejnách.
|
|
- `getDeliveryDateIncremented` - vrátí datum dopravy navýšený a potřebný počet dnů pro dané položky.
|
|
- `getDateIncrement` - vrací date increment - počet dní o kolik se má navýšit datum doručení pro dané položky.
|
|
- `getMainStoreClosedDates` - vrací datumy, kdy je hlavní sklad uzavřen a tímpádem je uzavčena i expedice z něj.
|
|
- `getMainStoreDeliveryDateIncrement` - vrací počet dní, o které je potřeba navýšit datum doručení pokud je expedice z centrály uzavřena.
|
|
- `getDateIncrementWithoutWorkdays` - odečte od incrementu nepracovní dny, aby když se pak zavolá `DateUtil::calcWorkingDays` nebylo datum o ty nepracovní dny posunutý.
|
|
- `getSupplierOrderIncrement` - vrátí počet dnů do dalšího objednávacího dne od dodavatele.
|
|
- `recursivelyGetClosestDeliveryDateIncrement` - rekurzivně prochází objednací časy nastavené u dodavatele, aby se našel nejbližší den, kdy se od dodavatele bude objednávat.
|
|
- `fetchProductsSupplierDeliveryDateIncrement` - mutlifetch načte k produktům increment podle záznamu v `products_of_suppliers` - každý produkt může mít totiž delivery increment ještě povýšený speciálně u dodavatele.
|
|
- `getSellersByStoreId` - vrací prodejce indexované podle ID skladu.
|
|
- `getProducts` - vrací `ProductCollection` podle zadaných ID produktů
|
|
- `PompoNotifier.php` - emailové notifikace.
|
|
- **Funkce**:
|
|
- `notifyLowPartnerCoupons` - notifikace o docházejících poukazech.
|
|
- `PompoOrderUtil.php` - pomocné funkce pro práci s objednávkama
|
|
- `getOrderSynchronizerType` - vrátí zdroj remote objednávky (DataGo nebo DRS)
|
|
- `getOrderItemDifference` - vrací seznam položek s počtama kusů v DRSu / DataGo. Podle toho se potom generuje block.incomplete-items.tpl, který
|
|
se posílá v mailu.
|
|
|
|
### Customizace view `PompoBundle/View`
|
|
|
|
- `BonusProgramExchangeView.php` - customizace kvůli partnerským poukazům, abych nezobrazoval partnerské poukazy, pokud tam už není dostupný žádný předvygenerovaný poukaz.
|
|
- `PageView.php` - customizace kvůli zaheslování stránky.
|
|
- `UserCardsView.php` - custom view pro zobrazení zákaznických karet uživatele.
|
|
- `UserView.php` - customizace kvůli registraci / dokončení registrace uživatelů, které si vytvořili účet na pokladně / mají zákazníckou kartu. Pokud uživatel má zákazníckou
|
|
kartu, tak může pomocí čísla karty a čísla uživatele provést registraci na e-shopu a tím si účet automaticky spáruje s již existující zákaznickou kartou.
|
|
- `getBodyVariables` - pokud je v requestu číslo zákazníka v DRSu, tak předvyplním formulář datama z DRSu.
|
|
- `handleSubmit` - handlování odeslání formuláře, kde se vyplňuje číslo zákazníka a karty - pokud se vyplní existující, tak se předvyplní formulář pro registraci datama z DRSu.
|