diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue
index 3bde800bf..ee0eee749 100644
--- a/src/layouts/payment-method/payment-method.vue
+++ b/src/layouts/payment-method/payment-method.vue
@@ -33,6 +33,7 @@
class="small mt-4"
v-model="lineItems"
:availableVaps="availableVaps"
+ pageName="payment-method"
modalWidgetName="PromoModalWidget" />
diff --git a/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue b/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue
index b4b02b3ed..a68ff4dbe 100644
--- a/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue
+++ b/src/layouts/payment-method/promo-modal-question/promo-modal-question.vue
@@ -100,6 +100,7 @@ export default {
modelValue: Object,
modalWidgetName: String,
availableVaps: Object,
+ pageName: String,
},
computed: {
promoLinkText() {
@@ -253,44 +254,51 @@ export default {
this.promoCode,
this.lineItems,
this.availableVaps,
- "payment-method"
+ this.pageName
);
if (promoCodeData.isValid) {
- const pricedLineItemsToTax = [];
- pricedLineItemsToTax.push(...promoCodeData.promoCode);
- const taxedLineItems = await baseMixin.methods.dispatchStoreActionWithLogging(
- storeActions.TAX_ORDER_ITEMS_AND_SAVE_SERVER_DATA,
- {
- billToAccountNumber: "87291",
- providerNumber:
- store.getters.order.serviceLocation.provider.providerNumber,
- appointmentType: store.getters.order.serviceLocation.appointmentType,
- serviceLocationCity: store.getters.order.serviceLocation.city,
- serviceLocationState: store.getters.order.serviceLocation.state,
- serviceLocationZipCode: store.getters.order.serviceLocation.zipCode,
- pricedLineItems: pricedLineItemsToTax,
- },
- "payment-method",
- false
- );
+ if (this.pageName == "payment-method") {
+ const pricedLineItemsToTax = [];
+ pricedLineItemsToTax.push(...promoCodeData.promoCode);
+ const taxedLineItems =
+ await baseMixin.methods.dispatchStoreActionWithLogging(
+ storeActions.TAX_ORDER_ITEMS_AND_SAVE_SERVER_DATA,
+ {
+ billToAccountNumber: "87291",
+ providerNumber:
+ store.getters.order.serviceLocation.provider.providerNumber,
+ appointmentType:
+ store.getters.order.serviceLocation.appointmentType,
+ serviceLocationCity: store.getters.order.serviceLocation.city,
+ serviceLocationState: store.getters.order.serviceLocation.state,
+ serviceLocationZipCode:
+ store.getters.order.serviceLocation.zipCode,
+ pricedLineItems: pricedLineItemsToTax,
+ },
+ "payment-method",
+ false
+ );
- // Match all line items to the line items as they are in the store
- // and rebuild the original structure.
- this.lineItems = mapTaxedLineItemsToStoreFormat(taxedLineItems, this.lineItems);
- const taxedVaps = mapTaxedLineItemsToStoreFormat(
- taxedLineItems,
- this.availableVaps
- );
-
- const getVaps = getVapsThatNeedToBeAddedToSatisfyPromos(
- promoCodeData.promoCode,
- taxedVaps,
- this.lineItems
- );
+ // Match all line items to the line items as they are in the store
+ // and rebuild the original structure.
+ this.lineItems = mapTaxedLineItemsToStoreFormat(
+ taxedLineItems,
+ this.lineItems
+ );
+ const taxedVaps = mapTaxedLineItemsToStoreFormat(
+ taxedLineItems,
+ this.availableVaps
+ );
+ const getVaps = getVapsThatNeedToBeAddedToSatisfyPromos(
+ promoCodeData.promoCode,
+ taxedVaps,
+ this.lineItems
+ );
+ this.lineItems?.vaps.push(...getVaps);
+ }
this.lineItems?.promos.push(...promoCodeData.promoCode);
- this.lineItems.vaps?.push(...getVaps);
this.closeModal();
} else {
this.getErrorMessage(promoCodeData.errorCode, promoCodeData.additionalInfo);
diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue
index f26d24cf7..ff552ee82 100644
--- a/src/layouts/quote/quote.vue
+++ b/src/layouts/quote/quote.vue
@@ -39,6 +39,14 @@
cmsWidgetName="AfterpayModalWidget"
:lineItems="availableLineItems" />
+
+
{
+ const errorAlert = createPromoErrorAlert(promoCode);
+ this.$refs.funnelHeader.pushGlobalAlert(errorAlert, errorAlert.shouldAutoFade);
+ });
+ }
+ },
backButtonAction() {
vehicleQuestionsMixin.methods.navigateBack(this);
},
@@ -294,6 +341,14 @@ export default {
}
this.dispatchStoreAction(this.storeActions.SAVE_VAPS, this.selectedVaps, false);
+ this.dispatchStoreAction(
+ storeActions.SAVE_ACTIVE_AND_OR_INACTIVE_PROMOS,
+ {
+ activePromos: this.lineItems.promos,
+ inactivePromos: this.$store.getters.order.payment.inactivePromos,
+ },
+ false
+ );
const payment = this.$store.getters.payment;
if (payment.isInsurance) {
@@ -309,6 +364,37 @@ export default {
}
},
},
+ watch: {
+ lineItemsCloneForWatcher: {
+ handler(newValue, oldValue) {
+ if (
+ !oldValue ||
+ oldValue.length == 0 ||
+ !oldValue.vaps ||
+ !newValue ||
+ newValue.length == 0
+ ) {
+ return;
+ }
+ if (oldValue.promos.length < newValue.promos.length) {
+ const oldPromoCodes = oldValue.promos.map(
+ (promoObject) => promoObject.promoCode
+ );
+ const newlyActivatedPromoCodes = newValue.promos.filter(
+ (newPromo) => !oldPromoCodes.includes(newPromo.promoCode)
+ );
+ const alert = createPromoSuccessAlert(newlyActivatedPromoCodes[0].promoCode);
+ this.$refs.funnelHeader.pushGlobalAlert(alert, alert.shouldAutoFade);
+ } else if (
+ oldValue.promos.length == newValue.promos.length &&
+ oldValue.vaps.length != newValue.vaps.length
+ ) {
+ this.revalidatePromos();
+ }
+ },
+ deep: true,
+ },
+ },
components: {
funnelHeader,
navbar,
@@ -321,6 +407,7 @@ export default {
contentGroupModal,
loadingModal,
afterpayModalBanner,
+ promoModalQuestion,
},
};
diff --git a/src/layouts/quote/service-package-question/service-package-question.vue b/src/layouts/quote/service-package-question/service-package-question.vue
index 28727f155..6b84f3557 100644
--- a/src/layouts/quote/service-package-question/service-package-question.vue
+++ b/src/layouts/quote/service-package-question/service-package-question.vue
@@ -63,6 +63,9 @@ export default {
this.selectDefaultPackage();
}
},
+ activePromos() {
+ this.selectDefaultPackage();
+ },
selectedPackageName(newValue) {
const VapsProductsInSelectedPackage = this.getVapsLineItemsForSelectedPackage(newValue);
this.$emit("vapsItemsSelected", VapsProductsInSelectedPackage);