Questions:
...
Create a feature flag;
The first step to use the loyalty promo code at checkout will be to change the validation promo code flow.
On promo code component field, we will need to add a feature flag:
When this flag is enabled: The promo code flow will be LOYALTY OFFER
When this flag is disabled: The promo code flow will be CBA OFFER (current flow)
We will create a new hook to contain all the rules of this flow
We can use the same hook used to offer page flow.
intl-whitelabel-app/workspaces/frontend/src/state/loyalty/hooks/use-redeem-promo-codes.ts
...
Currently, we already sent the sanityId offer to the backend (
intl-partners-service
);Then, we need to send the discount information to Winrest;
With the
sanityId
that we have, we will find the discount values bygetOffers(sanityId: string)
path:
intl-partners-service/src/modules/orders/cart-total.service.ts
We will add a new attribute
orderDiscounts
on the webhook payload;We will send it to Winrest always in percentage (requested to Winrest, 'cause will be easier for them);
The
orderDiscounts
object would be in each cart object;If the discount is
amount
type, we will transform it topercentage
type;E.g: If the total cart is 10 euros and
amount
discount is 5 euros;We will calculate the discount:
Code Block discount = (100 * 5) / 100; discount = 50%;
So the payload will be:
Code Block language json "orderDiscounts": [ { "type": "percentage", "value": 50 } ]
...
title | Payload JSON |
---|
...
language | json |
---|
...
1 - TASK: Create a method to calculate the percentage offer;
Create a feature flag;
Create a method to calculate the percentage offer.
path:
intl-partners-service/src/modules/orders/orders.service.ts
We will send the discount values per cart item to Winrest, but the calculation of the discount percentage will be based on the cart total, which will be easier to calculate and in the end will have the same result if we calculate the discount per item.
The method will receive two params:
appliedOffers: IAppliedOffer[] | null | undefined
Offer applied on the cart;
total: number | undefined
total cart value;
The method return will be:
Promise<IOrderDiscounts[] | undefined>
Where the
IOrderDiscounts
.type will be always a percentage;
To discover the discount values we will need to use the method
getOffers
path:
intl-partners-service/src/modules/orders/cart-total.service.ts
This method is
private
, so we will update it topublic
;
If the discount offer is a type
amount
we will calculate the percentage over the total cart value;E.g: If the total cart is 10 euros and
amount
discount is 5 euros;We will calculate the discount:
Code Block discount = Math.round((5 * 100) / 10) discount = 50%;
So the payload will be:
Code Block language json "orderDiscounts": [ {
...
"
...
type": "
...
percentage",
...
...
"
...
value":
...
50
...
} ]
Expand | |||||
---|---|---|---|---|---|
| |||||
|
1 - TASK: Create a method to calculate the percentage offer;
...
Create a feature flag;
Create a method to calculate the percentage offer.
...
path: intl-partners-service/src/modules/orders/orders.service.ts
...
We will send the discount values per cart item to Winrest, but the calculation of the discount percentage will be based on the cart total, which will be easier to calculate and in the end will have the same result if we calculate the discount per item.
...
The method will receive two params:
appliedOffers: IAppliedOffer[] | null | undefined
Offer applied on the cart;
total: number | undefined
total cart value;
...
The method return will be:
Promise<IOrderDiscounts[] | undefined>
Where the
IOrderDiscounts
.type will be always a percentage;
...
To discover the discount values we will need to use the method getOffers
path:
intl-partners-service/src/modules/orders/cart-total.service.ts
This method is
private
, so we will update it topublic
;
If the discount offer is a type amount
we will calculate the percentage over the total cart value;
E.g: If the total cart is 10 euros and amount
discount is 5 euros;
We will calculate the discount:
...
|
If the discount offer is a type
percentage
we will return the percentage value;The method example is on branch poc: https://github.com/rbilabs/intl-partners-service/tree/poc/IBFEC-934-send-discount-offers-to-winrest
path:
intl-partners-service/src/modules/orders/orders.service.ts
method name:
mapOffersDiscounts
2 - TASK: Update the calculated total card;
...