Vytvoření objednávky z nákupního košíku
Vytvoření objednávky z nákupního košíku
Proces finalizace košíku a vytvoření objednávky je dvoufázový.
Zkopírovat odkaz na sekci1. 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ů.
- 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.
Zkopírovat odkaz na sekci2. 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.