diff --git a/src/constants/query-strings.js b/src/constants/query-strings.js index 40f3a2242..5c056c934 100644 --- a/src/constants/query-strings.js +++ b/src/constants/query-strings.js @@ -19,6 +19,7 @@ const queryStrings = { AUTH_CODE: "auth_code", TRANSACTION_ID: "transaction_id", TRANS_REFERENCE_NUMBER: "auth_trans_ref_no", + DISPLAY_PIA_ALERT: "displayPiaAlert", }; export { queryStrings }; diff --git a/src/helpers/promotions-helper.js b/src/helpers/promotions-helper.js index f37a78e71..3968248d6 100644 --- a/src/helpers/promotions-helper.js +++ b/src/helpers/promotions-helper.js @@ -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); } }); diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 6fa1b02a6..e13f62590 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -103,6 +103,7 @@ import { getNewlyInactivatedPromos, } from "@/helpers/promotions-helper"; import { queryStrings } from "@/constants/query-strings"; +import { routerParams } from "@/router/router-constants/router-params"; import { getQuerystringParameter } from "@/helpers/querystring-helper"; import { deepClone } from "@/helpers/object-helper"; @@ -421,7 +422,7 @@ export default { } catch (error) { console.log("error: response from pia submit work order:" + error.message); this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); - this.$route.params[this.routerParams.DISPLAY_PIA_ALERT] = true; + this.$route.params[routerParams.DISPLAY_PIA_ALERT] = true; return; } } @@ -469,7 +470,10 @@ export default { return this.paymentMethodInternalModel; }, shouldDisplayPiaAlert() { - return this.$route.params[this.routerParams.DISPLAY_PIA_ALERT]; + return ( + this.$route.query[queryStrings.DISPLAY_PIA_ALERT] || + this.$route.params[routerParams.DISPLAY_PIA_ALERT] + ); }, // Necessary to make the watcher of lineItems work // JavaScript does not keep a record of the old value, only a reference to it's location in the memory. diff --git a/src/layouts/payment-pia-return/payment-pia-return.vue b/src/layouts/payment-pia-return/payment-pia-return.vue index 8088cbb06..d12e45705 100644 --- a/src/layouts/payment-pia-return/payment-pia-return.vue +++ b/src/layouts/payment-pia-return/payment-pia-return.vue @@ -24,12 +24,9 @@ export default { if (piaError) { console.log("Error during payment: " + piaError); - this.$router.navigateWithoutSaving( - this.navigationScenarios.PIA_ERROR, - this.$route, - {}, - { [routerParams.DISPLAY_PIA_ALERT]: true } - ); + this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_ERROR, this.$route, { + [queryStrings.DISPLAY_PIA_ALERT]: true, + }); } else { switch (store.getters.order.payment.piaType) { case paymentMethods.CREDIT_CARD: