Vytvoření objednávky z nákupního košíku
Proces finalizace košíku a vytvoření objednávky je dvoufázový.
1. Finalizace košíku
!!! Důležité: Tento proces probíhá synchronně po stisknutí tlačítka "Dokončit objednávku". Je tedy nezbytné, aby celý proces byl co nejrychlejší a minimalizoval dotazy do databáze. Je vhodné zvážit, zda by funkcionalita neměla být zpracována až v druhé fázi.
Proces je vyvolán událostí ConfirmOrder.
V této fázi se objednávka ještě nevytváří; košík se pouze označuje jako "dokončený" (obdrží číslo objednávky). Celý proces probíhá v rámci jedné transakce.
Standardně dochází k těmto procesům:
- Přiřazení čísla objednávky
- Rezervace produktů na skladech (viz 'ProductQuantityConfirmInterceptor').
- Po vytvoření rezervace se označí produkty pro přepočet viditelnosti (
ProductData#getDiscoverable). - Spuštění úlohy pro vytvoření požadavků na publikaci rezervovaných produktů.
- Po vytvoření rezervace se označí produkty pro přepočet viditelnosti (
- Uplatnění voucheru - použité vouchery se musí označit jako uplatněné.
- Uplatnění kreditu - uplatněný kredit se musí strhnout z účtu zákazníka.
- Spuštění se úlohy, která asynchronně spustí druhou fázi vytvoření objednávky.
V případě, že je nezbytné do této fáze vstoupit (a nelze to řešit až v druhé asynchronní fázi), je možné:
- Přidat informace k objednávce, které nemusí být dostupné později nebo se zobrazují na potvrzovací stránce (např. název produktu, affiliate parametry, variabilní symbol atd.), pomocí implementací některých z těchto populatorů:
- Interceptorů navěšených na
ConfirmOrder.
2. Vytvoření objednávky
Druhá fáze dokončení objednávky se spouští asynchronně na pozadí.
V této fázi standardně dochází k následujícím krokům:
- Vytvoření objednávky z dokončeného košíku. Konverzi zajištuje OrderCartConversion. V případě, že automatická konverze nestačí, je možné ji rozšířit pomocí OrderCartConversionSnippet.
- Odeslání notifikací o vytvoření objednávky.
- Požadavek na přepočet prodejnosti (
com.fg.cps.eshop.crosssale.service.CrossSaleService#processCrossSaleByOrders). - Generování zakoupených dárkových poukazů.
- Pro registrovaného zákazníka se zpracují zadané adresy.
- Další procesy, které reagují na událost
AfterNewOrderCreatedEvent, která se vypaluje v rámci této fáze.
Poznámka: Dvoufázové vytvoření objednávky je nutné vzít v úvahu na potvrzovací stránce, kde může být k dispozici vytvořená objednávka nebo pouze dokončený košík (pokud objednávka ještě nebyla vytvořena). Tento fakt je třeba brát v úvahu i v dalších procesech, například při uhrazení objednávky/košíku.
