diff --git a/packages/apps/discounts/lib-mjs/apply-discount.mjs b/packages/apps/discounts/lib-mjs/apply-discount.mjs index 84e2a7d75..c72083261 100644 --- a/packages/apps/discounts/lib-mjs/apply-discount.mjs +++ b/packages/apps/discounts/lib-mjs/apply-discount.mjs @@ -280,14 +280,25 @@ export default async ({ params, application }) => { return kitDiscount; }); } - const itemsForKit = params.items.filter((item) => { - return !item.flags?.includes('freebie'); - }); - const kitDiscounts = getValidDiscountRules( - config.product_kit_discounts, - params, - itemsForKit, - ) + const freebieProductIds = []; + if (Array.isArray(config.freebies_rules)) { + config.freebies_rules.forEach((rule) => { + if ( + validateDateRange(rule) + && validateCustomerId(rule, params) + && Array.isArray(rule.product_ids) + && matchFreebieRule(rule, params) + ) { + rule.product_ids.forEach((id) => { + if (!freebieProductIds.includes(id)) freebieProductIds.push(id); + }); + } + }); + } + const kitEligibleItems = freebieProductIds.length + ? params.items.filter((item) => !freebieProductIds.includes(item.product_id)) + : params.items; + const kitDiscounts = getValidDiscountRules(config.product_kit_discounts, params, kitEligibleItems) .sort((a, b) => { if (!Array.isArray(a.product_ids) || !a.product_ids.length) { if (Array.isArray(b.product_ids) && b.product_ids.length) { @@ -339,7 +350,9 @@ export default async ({ params, application }) => { } // eslint-disable-next-line no-loop-func kitItems = kitItems.filter((item) => { - return item.quantity && discountedItemIds.indexOf(item.product_id) === -1; + return item.quantity + && discountedItemIds.indexOf(item.product_id) === -1 + && !freebieProductIds.includes(item.product_id); }); if (!kitItems.length) { continue;