Files
2025-08-02 16:30:27 +02:00

33 KiB

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.