Merge pull request #1581 from Safelite/feature/skiener/CSR-1845

CSR-1845 | Fix quote pricing with bundle promos
This commit is contained in:
scottkiener 2023-11-28 15:40:31 -05:00 committed by GitHub
commit 5d83ec6e65
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -213,16 +213,33 @@ export function buildToastMessagesFromRevalidateOrValidatePromoResponse(
}
export function getPromosThatMatchLineItemsOnOrder(promos, lineItemsOnOrder) {
const matchingPromoCodes = [];
const matchingPromos = [];
const consolidatedPromosWithIds = {};
// Combine bundle promos to make sure each part of the bundle is satisfied
promos.forEach((promo) => {
const cleanPromoCode = getPromoCodeWithoutBundleIdentifier(promo.promoCode);
if (consolidatedPromosWithIds[cleanPromoCode]) {
consolidatedPromosWithIds[cleanPromoCode].push(...promo.discountedLineItemIds);
} else {
consolidatedPromosWithIds[cleanPromoCode] = promo.discountedLineItemIds.slice(0);
}
});
Object.keys(consolidatedPromosWithIds).forEach((promoCode) => {
let allIdsMatch = true;
promo.discountedLineItemIds.forEach((id) => {
consolidatedPromosWithIds[promoCode].forEach((id) => {
if (lineItemsOnOrder.filter((x) => x.id === id).length === 0) {
allIdsMatch = false;
return;
}
});
if (allIdsMatch) {
matchingPromoCodes.push(promoCode);
}
});
promos.forEach((promo) => {
const cleanPromoCode = getPromoCodeWithoutBundleIdentifier(promo.promoCode);
if (matchingPromoCodes.includes(cleanPromoCode)) {
matchingPromos.push(promo);
}
});