diff --git a/src/helpers/promotions-helper.js b/src/helpers/promotions-helper.js index a592a6d9d..ecdb433ff 100644 --- a/src/helpers/promotions-helper.js +++ b/src/helpers/promotions-helper.js @@ -149,16 +149,25 @@ export async function revalidatePromosAndValidateQueryStringPromo( } else if (!excludeFromInactivePromoErrorCodes.includes(validatePromoResponse.errorCode)) { // Save any valid query string promoCode (not applied) to inactivePromos // in order to not lose the query string promoCode if back button is pressed - const inactivePromoCodes = store.getters.payment.inactivePromos ?? []; - if (!inactivePromoCodes.includes(newPromo)) { - inactivePromoCodes.push(newPromo); - baseMixin.methods.dispatchStoreAction( - storeActions.SAVE_ACTIVE_AND_OR_INACTIVE_PROMOS, - { - inactivePromos: inactivePromoCodes, - }, - false - ); + const activePromoCodes = store.getters.order.lineItems.promos.map((promoObject) => { + return promoObject.promoCode.toUpperCase(); + }); + const isErrorPromoAlreadyOnOrder = activePromoCodes.includes( + validatePromoResponse.promoCode.toUpperCase() + ); + // Do not save an inactivePromo if it is already active on the order + if (!isErrorPromoAlreadyOnOrder) { + const inactivePromoCodes = store.getters.payment.inactivePromos ?? []; + if (!inactivePromoCodes.includes(newPromo)) { + inactivePromoCodes.push(newPromo); + baseMixin.methods.dispatchStoreAction( + storeActions.SAVE_ACTIVE_AND_OR_INACTIVE_PROMOS, + { + inactivePromos: inactivePromoCodes, + }, + false + ); + } } } }