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:
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é:
- Implementovat OrderModification.
- 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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
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:
1 [2 {3 "type": "CancelOrder",4 "dateOfCancel": null,5 "note": null6 }7]
Zkopírovat odkaz na sekciSetOrderState
Modifikace, která upravuje stav objednávky
Payload:
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:
1 [2 {3 "type": "ReadyForPickUpModification",4 "created": null,5 "internalNote" :null,6 "items": [{"orderLineId": 1, "quantity": 1}]7 }8]