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é:

  1. 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ů:
  2. 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.