Modifikace objednávky

Modifikace objednávky

Zkopírovat odkaz na sekciOrderModification

Modifikaci (změnu) u objednávky lze provést pomocí AbstractOrderService#modifyOrder. Definice modifikace je určena implementací OrderModification.

Celá modifikace (tzn. beforeModificationInterceptor, orderModification, afterModificationInterceptor, afterOrderModificationEvent) probíhá v rámci jedné transakce. Modifikace je možné provádět více najednou, ale všechny probíhají v rámci téže transakce.

Zkopírovat odkaz na sekciOrderModificationWithExecute a OrderModificationStrategy

V případě, že orderModification implementuje OrderModificationWithExecute, zajišťuje i zpracování modifikace. V ostatních případech je nutné pro orderModification zaregistrovat implementaci OrderModificationStrategy. OrderModificationWithExecute je vhodné pro jednoduché modifikace, které nepotřebují další servisní beany.

Příklad:

java
1 public class SetInternalNumberModification implements OrderModificationWithExecute<SetInternalNumberModification>, OrderStateResistantModification {2    private static final long serialVersionUID = -3019485241477923843L;3    private final String internalNumber;4
5    @Override6    public void execute(@NonNull OrderModificationContext modificationContext, @NotNull SetInternalNumberModification modification) {7        modificationContext.getOrder().setInternalNumber(modification.getInternalNumber());8    }9}

Zkopírovat odkaz na sekciOrderModificationAffectingPrices

V případě, že orderModification implementuje OrderModificationAffectingPrices, znamená to, že orderModification má vliv na celkovou cenu objednávky a je nutné např. přepočítat celkové ceny. Typickým příkladem je přidání produktu do objednávky. Modifikace, která nemá vliv na cenu, může být např. změna fakturační adresy nebo přidání poznámky k objednávce.

Zkopírovat odkaz na sekciOrderStateResistantModification

Pro modifikace, na kterých nezáleží na aktuálním stavu objednávky, lze použít interface OrderStateResistantModification. Tedy při modifikaci objednávky se nekontroluje její stav.

Zkopírovat odkaz na sekciAfterModificationInterceptor a BeforeModificationInterceptor

Do procesu modifikace lze zasáhnout pomocí implementací BeforeModificationInterceptor nebo AfterModificationInterceptor.

Zkopírovat odkaz na sekciOrderModificationException

V případě chyby při modifikaci je vyvolána OrderModificationException.

Zkopírovat odkaz na sekciAfterOrderModificationEvent

Po provedení modifikace je vyvoláno událostní AfterOrderModificationEvent.

Zkopírovat odkaz na sekciVytvoření vlastní modifikace

Pro vytvoření vlastní modifikace je nutné:

  1. Implementovat OrderModification.
  2. V případě, že OrderModification neimplementuje OrderModificationWithExecute, je nutné implementovat OrderModificationStrategy a zaregistrovat do Spring kontextu.

Zkopírovat odkaz na sekciOrderStorage

Obvykle se doporučuje upravovat objednávku pomocí OrderModification. Pokud však není možné použít OrderModification, existuje služba OrderStorage, která umožňuje načítání a ukládání objednávky. Při ukládání se však obejde všechny validace a případné automatické přepočty, které by jinak zajišťovala změna pomocí OrderModification.

Rest API a Modifikace objednávky

Zkopírovat odkaz na sekciTypy modifikací

Zkopírovat odkaz na sekciOrderContactModification

Akce pro změnu e-mailu a telefonu zákazníka uvnitř objednávky.

Payload:

json
1 [2  {3    "type": "OrderContactModification",4    "customerEmail": "email+example@fg.cz",5    "customerPhone": "+420777888999"6  }7]

Zkopírovat odkaz na sekciOrderBillingAddressModification

Akce pro změnu billing adress zákazníka u objednávky

Payload:

json
1 [2  {3    "type": "OrderBillingAddressModification",4    "billingAddress": {5      "fullName": "xxx",6      "street": "",7      "city": "",8      "postCode": "",9      "countryCode": "",10      "countryRegionCode": "",11      "companyName": "",12      "regNumber": "xxx",13      "taxRegNumber": "xxx",14      "idUserAddress": null15    }16  }17]

Zkopírovat odkaz na sekciPaidOrder

Akce pro označení objednávky jako zaplacená

Payload:

json
1 [2  {3    "type": "PaidOrder",4    "paid": null5  }6]

Zkopírovat odkaz na sekciOrderModificationAddItem

Akce pro přidání položky do objednávky

Payload:

json
1 [2  {3    "type": "OrderModificationAddItem",4    "itemCode": "pr01",5    "quantity": 5,6    "modificationDate": null,7    "adjustment": null8  }9]

Zkopírovat odkaz na sekciOrderModificationRemoveItem

Akce pro smazání položky z objednávky

Payload:

json
1 [2  {3    "type": "OrderModificationRemoveItem",4    "orderItemId": 1,5    "modificationDate": null6  }7]

Zkopírovat odkaz na sekciOrderModificationSetBookingExpiration

Akce která upravuje datum, kdy došlo k rezervaci zboží v primárním systému skladové evidence a je následně možné uvolnit rezervace, které si drží e-shop.

Payload:

json
1 [2  {3    "type": "OrderModificationSetBookingExpiration",4    "bookingExpiration": null5  }6]

Zkopírovat odkaz na sekciOrderModificationSetItem

Akce která dává možnost upravení položky objednávky.

Payload:

json
1 [2  {3    "type": "OrderModificationSetItem",4    "itemId": "%s",5    "quantity": 7,6    "modificationDate": null7  }8]

Zkopírovat odkaz na sekciSetDateOfTaxableSupplyModification

Akce pro nastavení Datumu zdanitelného plnění.

Payload:

json
1 [2  {3    "type": "SetDateOfTaxableSupplyModification",4    "dateOfTaxableSupply": null5  }6]

Zkopírovat odkaz na sekciSetInternalNumberModification

Akce pro nastavení Interní čísla objednávky, které v základu nebude používáno, ale je připraveno custom využití na projektech především pro B2B e-shopy.

Payload:

json
1 [2  {3    "type": "SetDateOfTaxableSupplyModification",4    "dateOfTaxableSupply": null5  }6]

Zkopírovat odkaz na sekciSetItemStatusModification

Akce pro nastavení stavu řádku objednávky. Jedná se o libovolnou textovou informaci, se kterou se nijak dál nepracuje. Hodnotu lze pouze upravit a zobrazit na FE.

Payload:

json
1 [2  {3    "type": "SetItemStatusModification",4    "itemId": 123,5    "status": "whatever"6  }7]

Zkopírovat odkaz na sekciAffiliateOrderModification

Modifikace upravující záznam o odeslání objednávky do Affiliate služby.

Payload:

json
1 [2  {3    "type": "AffiliateOrderModification",4    "status": "%s",5    "firstAttempt": "",6    "exported": "",7    "attemptCount": 1,8    "error": null9  }10]

Zkopírovat odkaz na sekciOrderModificationPayment

Modifikace objednávky, která provede změnu platební metody.

Aby mohla být změna platby provedena musí být splněny následující předpoklady:

  • Uplatnění poukazů, kreditů, dopravy zdarma apod není podmíněnou cenou za platbu.
  • Nově zvolená platba musí být validní pro zvolenou dopravu, měnu, katalog. Tedy stejně jako by byla nabízena v košíku.
  • Pokud se změní platba, musí se odeslat znovu notifikace o aktuálním stavu, kde jsou informace o platbě. Tedy v případě, že je ve stavu nová, odešle se notifikace o stavu nová.
  • V případě jiné ceny za platbu se musí přepočítat celková částka k úhradě a výše uplatněných dárkových poukazů.
  • Zaokrouhlení ceny k úhradě musí zohlednit nastavení nově zvolené platby.
  • Platbu lze změnit pouze v případě, že objednávka je ve stavu nová nebo zpracovává se.

Payload:

json
1 [2  {3    "type": "OrderModificationPayment",4    "newPaymentCode": "CASH_ON_DELIVERYDefault",5    "priceWithTax": 100,6    "priceWithoutTax": 82.64,7    "taxRate": 218  }9]

Zkopírovat odkaz na sekciOrderDeliveryAddressModification

Modifikace aktualizuje dodací adresu u objednávky.

V případě, že fakturační a dodací adresa je stejná, tak se vytvoří nová dodací adresa a fakturační zůstane nezměněná.

Payload:

json
1 [2  {3    "type": "OrderDeliveryAddressModification",4    "deliveryAddress": {5      "fullName": "xxx",6      "street": "",7      "city": "",8      "postCode": "",9      "countryCode": "",10      "countryRegionCode": "",11      "companyName": "",12      "phone": "",13      "idUserAddress": null14    }15  }16]

Zkopírovat odkaz na sekciCancelOrder

Modifikace, která stornuje objednávku.

Payload:

json
1 [2  {3    "type": "CancelOrder",4    "dateOfCancel": null,5    "note": null6  }7]

Zkopírovat odkaz na sekciSetOrderState

Modifikace, která upravuje stav objednávky

Payload:

json
1 [2  {3    "type": "SetOrderState",4    "nextState": "processing-order",5    "dateOfState": null,6    "note": null,7    "checkIfNStateIsRequired": true8  }9]

Zkopírovat odkaz na sekciReadyForPickUpModification

Payload:

json
1 [2  {3    "type": "ReadyForPickUpModification",4    "created": null,5    "internalNote" :null,6    "items": [{"orderLineId": 1, "quantity": 1}]7  }8]