102 lines
2.9 KiB
JavaScript
102 lines
2.9 KiB
JavaScript
import { ChangeFreeProductList, ChangeOfferAppliedProducts, ClearOfferAppliedProducts } from "../../../../Features/Offer/Offernew/BookingOffernew";
|
|
|
|
// codewiseOfferLogic.js
|
|
export const codewiseOfferLogic = (
|
|
CodeOfferData,
|
|
cartItems,
|
|
OverAllproductBasedOfferDatas,
|
|
OfferAppliedProduct,
|
|
dispatch,
|
|
multipleNotApply = true
|
|
) => {
|
|
const NetAmt = cartItems?.reduce((sum, item) => sum + (item.TotalAmt || 0), 0) || 0;
|
|
const CodeData = CodeOfferData?.[0];
|
|
|
|
if (!CodeData) {
|
|
throw new Error("No offer data found");
|
|
}
|
|
|
|
if (NetAmt < CodeData.MinPurchase) {
|
|
throw new Error(`User must have a minimum purchase of ${CodeData.MinPurchase}`);
|
|
}
|
|
|
|
let Multiple = false;
|
|
Multiple && dispatch(ClearOfferAppliedProducts())
|
|
|
|
if (CodeData?.ProdOfferDetails?.length > 0) {
|
|
|
|
CodeData.ProdOfferDetails.forEach((freeProd) => {
|
|
const freeProdObj = {
|
|
OfferId: CodeData.OfferCodeId,
|
|
FreeProdId: freeProd.ProdId,
|
|
FreeProdName: freeProd.ProdName,
|
|
isCodeBase: "Y",
|
|
OfferMode: CodeData.OfferType || "",
|
|
TableName: CodeData.TableName,
|
|
TableUniqueName: CodeData.TableUniqueName,
|
|
OverAllFreeQty: 1,
|
|
UsedFreeQty: 0,
|
|
RemainingQty: 1,
|
|
ProdVariantDetails: freeProd.ProdVariantDetails?.map((variant) => ({
|
|
FreeProdVariantName: variant.ProdVariantName,
|
|
|
|
StockDetails: variant.StockDetails?.map((stock) => ({
|
|
FreeInwardDtlId: stock.InwardDtlId,
|
|
ProdOfferId: stock.ProdOfferId,
|
|
ActiveStatus: stock.ActiveStatus,
|
|
EligibleFree: 1,
|
|
UsedFree: 0,
|
|
RemainingFree: 1
|
|
}))
|
|
}))
|
|
};
|
|
|
|
dispatch(ChangeFreeProductList(freeProdObj));
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
else {
|
|
const OfferAmount = CodeData.RewardType === "F"
|
|
? CodeData.RewardValue
|
|
: CodeData.RewardType === "P"
|
|
? (CodeData.RewardValue * NetAmt) / 100
|
|
: null;
|
|
const base = {
|
|
OfferId: CodeData.OfferCodeId || "",
|
|
OfferAmount: OfferAmount || 0,
|
|
OfferMode: CodeData.OfferType || "",
|
|
ActualOfferAmount: OfferAmount || 0,
|
|
OfferValue: OfferAmount || 0,
|
|
TableName: CodeData.TableName || "",
|
|
TableUniqueName: CodeData.TableUniqueName || "",
|
|
TableUniqueId: CodeData.UniqueId || "",
|
|
ActualFreeQty: 0,
|
|
OfferType: CodeData.RewardType || "",
|
|
Detail: [],
|
|
OfferCode: CodeData.OfferCode || "",
|
|
CustId: CodeData.CustId || "",
|
|
UsedCount: null,
|
|
AppliesTo: null,
|
|
isCodeBase: "Y",
|
|
|
|
BookingType: "DineIn",
|
|
FreeProductsList: (CodeData.ProdOfferDetails || []).map((fp) => ({
|
|
FreeProdId: fp.ProdId || "",
|
|
FreeQty: 1,
|
|
FreeProdName: fp.ProdName || "",
|
|
ProdVariantDetails: fp.ProdVariantDetails || [],
|
|
OfferId: CodeData.OfferCodeId
|
|
})),
|
|
};
|
|
|
|
dispatch(ChangeOfferAppliedProducts(base));
|
|
}
|
|
|
|
|
|
|
|
return { success: true };
|
|
};
|