diff --git a/src/assets/img/icons/info-circle-blue.svg b/src/assets/img/icons/info-circle-blue.svg
new file mode 100644
index 000000000..fca619fb0
--- /dev/null
+++ b/src/assets/img/icons/info-circle-blue.svg
@@ -0,0 +1,5 @@
+
+
+
diff --git a/src/constants/experiments.js b/src/constants/experiments.js
index f81484058..c76b1ea1c 100644
--- a/src/constants/experiments.js
+++ b/src/constants/experiments.js
@@ -41,6 +41,8 @@ const experimentSettings = {
SHOW_MOBILE_FIRST_POPUP_REPLACE_WITH_MSR: "Show_Mobile_First_Popup_Replace_With_MSR",
OFFER_OEM: "OfferOem",
USE_ADYEN_PAYMENT: "UseAdyenPayment",
+ SHOW_UNVERIFIED_DEDUCT_ENTRY: "ShowUnverifiedDeducEntry",
+ SERVICE_PACKAGE_ORDER: "ServicePackageOrder",
};
const experimentTriggers = {
diff --git a/src/layouts/payment-method/payment-method.spec.js b/src/layouts/payment-method/payment-method.spec.js
index 76d4daa1e..1bc123d3f 100644
--- a/src/layouts/payment-method/payment-method.spec.js
+++ b/src/layouts/payment-method/payment-method.spec.js
@@ -94,6 +94,9 @@ function setupMocks() {
vehicle: { year: 2020, make: "Toyota", model: "Camry", carId: "12345" },
damage: { isRepair: false },
},
+ applicationUser: {
+ experiments: [],
+ },
policy: {
currentDeductible: 123,
},
diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue
index 2a6d1d9ed..4d80f84c0 100644
--- a/src/layouts/payment-method/payment-method.vue
+++ b/src/layouts/payment-method/payment-method.vue
@@ -53,6 +53,17 @@
v-bind:isDismissible="false" />
+
+
@@ -865,6 +876,13 @@ export default {
shouldDisplayPiaAlert() {
return getBoolFromString(this.$route?.query?.piaError);
},
+ shouldDisplayUnverifiedInsuranceAlert() {
+ const shouldDisplayUnverifiedDeduct = experimentMixin.methods.hasSettingEqualTo(
+ experimentSettings.SHOW_UNVERIFIED_DEDUCT_ENTRY,
+ "true"
+ );
+ return shouldDisplayUnverifiedDeduct;
+ },
// 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.
// This creates a separate location for oldValue/newValue so they can be compared
@@ -1033,7 +1051,15 @@ export default {
}
}
}
+
+ .alert.alert-info.widget-name-UnverifiedInsuranceAlertWidget {
+ :deep(.alert-heading) {
+ color: $black;
+ font-weight: 600;
+ }
+ }
}
+
:deep(span.label),
:deep(span) {
font-family: UrbanistSemibold, Arial, Helvetica, sans-serif;
diff --git a/src/layouts/quote/service-package-question/service-package-question.spec.js b/src/layouts/quote/service-package-question/service-package-question.spec.js
index a44dc463c..b3e4742e7 100644
--- a/src/layouts/quote/service-package-question/service-package-question.spec.js
+++ b/src/layouts/quote/service-package-question/service-package-question.spec.js
@@ -35,6 +35,11 @@ jest.mock("@/mixins/experiment-mixin.js", () => ({
return true;
}
},
+ hasSetting(settingName) {
+ if (settingName === mockExperimentSettings.PROMO_ON_PACKAGE) {
+ return false;
+ }
+ },
hasSettingEqualTo(settingName, settingValue) {
return false;
},
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 436e98b24..72472e195 100644
--- a/src/layouts/quote/service-package-question/service-package-question.vue
+++ b/src/layouts/quote/service-package-question/service-package-question.vue
@@ -163,6 +163,16 @@ export default {
}));
this.$emit("currentNumberOfPackages", modifiedAnswers.length);
+
+ if (this.experimentPackageOrder()) {
+ const orderedKeys = this.experimentPackageOrder()
+ .split(",")
+ .map((key) => key.trim());
+ modifiedAnswers.sort(
+ (a, b) => orderedKeys.indexOf(a.value) - orderedKeys.indexOf(b.value)
+ );
+ }
+
return modifiedAnswers;
},
isDiscountOnOrder() {
@@ -235,6 +245,11 @@ export default {
)
);
},
+ experimentPackageOrder() {
+ return experimentMixin.methods.hasSetting(experimentSettings.SERVICE_PACKAGE_ORDER)
+ ? experimentMixin.methods.getSettingValue(experimentSettings.SERVICE_PACKAGE_ORDER)
+ : false;
+ },
getButtonTypeObject() {
if (this.isAfterpayBreakoutDisplay()) {
return this.servicePackageRadioAfterpayExperiment;
diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue
index e20c025fb..adc85ef2a 100644
--- a/src/layouts/schedule/schedule.vue
+++ b/src/layouts/schedule/schedule.vue
@@ -28,7 +28,6 @@
cmsWidgetName="ScheduleYourServiceWidget"
id="schedule-your-service" />
0;
} else {
return this.selectableDatesInshop?.days?.length > 0;
@@ -1842,10 +1840,13 @@ export default {
} else {
this.appointmentType = null;
}
- this.setSelectedDateToFirstAvailable(); // v-if on appointmentTypeQuestion ensures dates have been loaded by now
+ this.setSelectedDateToFirstAvailable();
},
setSelectedDateToFirstAvailable() {
- this.selectedDate = this.getFirstAvailableDate();
+ if (this.hasSelectableDatesLoaded) {
+ // ensure dates have been loaded by now
+ this.selectedDate = this.getFirstAvailableDate();
+ }
},
showRecalAcknowledgementModal() {
if (this.shouldShowRecalAckModal()) {
@@ -2069,7 +2070,7 @@ export default {
watch: {
appointmentTypeFromAppointmentTypeQuestion: {
handler(newValue, oldValue) {
- this.handleAppointmentTypeChange(newValue); // v-if on appointmentTypeQuestion ensures dates have been loaded by now
+ this.handleAppointmentTypeChange(newValue);
},
},
},
diff --git a/src/layouts/vehicle-damage/vehicle-damage.vue b/src/layouts/vehicle-damage/vehicle-damage.vue
index 7b313dbf7..5e128e867 100644
--- a/src/layouts/vehicle-damage/vehicle-damage.vue
+++ b/src/layouts/vehicle-damage/vehicle-damage.vue
@@ -200,6 +200,13 @@ export default {
}
}
baseMixin.methods.ResetExternalParamsAndHideModal();
+
+ //clear any validation errors for external parameter flow
+ const form = vm.$refs.theForm;
+ if (form) {
+ form.setFieldError("DamageLocationQuestion", undefined);
+ form.setFieldTouched("DamageLocationQuestion", false, false);
+ }
}
} else {
baseMixin.methods.ResetExternalParamsAndHideModal();
diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js
index 238bed59d..316553548 100644
--- a/src/mixins/analytics-mixin.js
+++ b/src/mixins/analytics-mixin.js
@@ -291,6 +291,7 @@ export default {
sessionData.isPia = order?.payment?.isPia ?? false;
sessionData.piaType = order?.payment?.piaType;
sessionData.parentAccountNumber = order?.payment?.parentAccountNumber;
+ sessionData.billToAccountNumber = order?.payment?.billToAccountNumber;
sessionData.settledTenderAmount = order?.settledTenderAmount;
sessionData.recalRequired = containsRecalParts(order?.lineItems);
sessionData.recalType = getRecalPartNumbers(order?.lineItems?.glassParts);
diff --git a/src/store/index.js b/src/store/index.js
index 1c83807a1..9ddd011bd 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1645,6 +1645,7 @@ export const actions = {
isPia,
piaType,
parentAccountNumber,
+ billToAccountNumber,
settledTenderAmount,
recalRequired,
recalType,
@@ -1718,6 +1719,7 @@ export const actions = {
totalPrice: totalPrice,
userAgent: userAgent,
cashPriceSubTotal: cashPriceSubTotal,
+ billToAccountNumber: billToAccountNumber,
};
return globalMethods.callHttpClient({
diff --git a/src/ux-components/alert/alert.vue b/src/ux-components/alert/alert.vue
index cccab36f0..5c78853d4 100644
--- a/src/ux-components/alert/alert.vue
+++ b/src/ux-components/alert/alert.vue
@@ -8,7 +8,11 @@
this.alertClass,
this.cssClassNameForCmsWidget,
]">
- {{ alertHeadline }}
+
+
+ {{ alertHeadline }}
+
+