Merge pull request #2124 from Safelite/rlsmerge/2024.11.21-to-develop

Rlsmerge/2024.11.21 to develop
This commit is contained in:
CarlNation 2024-11-15 14:37:15 -05:00 committed by GitHub
commit a1c9d904c4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 110 additions and 165 deletions

View file

@ -1,6 +1,6 @@
<template> <template>
<div class="cart"> <div class="cart">
<div class="px-0"> <div class="px-0" v-if="isCartReadyToLoad">
<div <div
class="row vin-toggle flex align-items-center pt-4" class="row vin-toggle flex align-items-center pt-4"
:class="[isExpanded ? 'expanded' : '']" :class="[isExpanded ? 'expanded' : '']"
@ -196,7 +196,7 @@ export default {
}, },
data() { data() {
return { return {
isExpanded: this.shouldHideRecalibration, isExpanded: false,
currencyFormatter: new Intl.NumberFormat("en-US", { currencyFormatter: new Intl.NumberFormat("en-US", {
style: "currency", style: "currency",
currency: "USD", currency: "USD",
@ -210,6 +210,9 @@ export default {
toggleIsExpanded() { toggleIsExpanded() {
this.isExpanded = !this.isExpanded; this.isExpanded = !this.isExpanded;
}, },
updateIsExpandedWithDefault() {
this.isExpanded = this.shouldHideRecalibration;
},
getVapsPrice(packageName) { getVapsPrice(packageName) {
const vapsItems = this.getVapsCartItemsForSelectedPackage(packageName); const vapsItems = this.getVapsCartItemsForSelectedPackage(packageName);
@ -313,6 +316,11 @@ export default {
}, },
}, },
computed: { computed: {
isCartReadyToLoad() {
var myReturn = this.shouldHideRecalibration !== null;
this.updateIsExpandedWithDefault();
return myReturn;
},
lineItems: { lineItems: {
get: function () { get: function () {
return this.modelValue; return this.modelValue;

View file

@ -30,11 +30,14 @@ export async function getPageToRouteExistingOrderTo(toRoute = {}) {
export async function getDirectNavigation(toRoute) { export async function getDirectNavigation(toRoute) {
const fmgPageValue = toRoute.query[queryStrings.FMG_PAGE]; const fmgPageValue = toRoute.query[queryStrings.FMG_PAGE];
// Verified insurance users need to be routed around some pages // Verified insurance users need to be routed around some pages. Same goes for C&C unverified 6 digit referrals
// vehicle -> vehicle-damage // vehicle -> vehicle-damage
// quote -> vin-lookup/estimate // quote -> vin-lookup/estimate
// insurance-company -> vin-lookup/estimate // insurance-company -> vin-lookup/estimate
if (store.getters.payment?.insuranceCoverage?.isVerified) { if (
store.getters.payment?.insuranceCoverage?.isVerified ||
store.getters.order?.referralNumber?.length === 6
) {
if (fmgPageValue === fmgPageValues.VEHICLE) { if (fmgPageValue === fmgPageValues.VEHICLE) {
return fmgPageValues.VEHICLE_DAMAGE; return fmgPageValues.VEHICLE_DAMAGE;
} }
@ -108,7 +111,7 @@ export async function getImplicitNavigation(toRoute) {
export async function navigateToHeritageFunnel({ shouldSaveSession, pageNameToLog }) { export async function navigateToHeritageFunnel({ shouldSaveSession, pageNameToLog }) {
const log = getQuerystringParameter(queryStrings.LOG); const log = getQuerystringParameter(queryStrings.LOG);
if (eval(log)) { if (log === "true") {
console.log("------------- Navigate to heritage start -----------------"); console.log("------------- Navigate to heritage start -----------------");
console.log(new Date() + " applicationConfig: " + JSON.stringify(applicationConfig)); console.log(new Date() + " applicationConfig: " + JSON.stringify(applicationConfig));
console.log(new Date() + " navigateToHeritageFunnel: " + applicationConfig.HERITAGE_FUNNEL); console.log(new Date() + " navigateToHeritageFunnel: " + applicationConfig.HERITAGE_FUNNEL);

View file

@ -559,140 +559,6 @@ describe("computed properties...", () => {
// Assert // Assert
expect(testValue).toEqual("Duration: Overnight"); expect(testValue).toEqual("Duration: Overnight");
}); });
test("NoComp should return false for shouldHideRecalibration", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isNoComp: true,
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(false);
});
test("Itac should return false for shouldHideRecalibration", () => {
//Arrange
const { wrapper } = setupMocks({});
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isItac: true,
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.vm.submittedOrder.serviceLocation.appointmentType = AppointmentTypeStrings.MOBILE;
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(false);
});
test("Not Itac/NoComp with Recal should return true for shouldHideRecalibration", async () => {
//Arrange
const { wrapper } = setupMocks({});
const lineItems = {
glassParts: [
{
partType: "RECALIBRATION",
},
],
};
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isItac: false,
isNoComp: false,
},
lineItems: {
glassParts: {
partType: "Recalibration",
},
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.setData({ lineItems: lineItems });
await wrapper.vm.$nextTick();
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(true);
});
test("Itac/NoComp with Recal should return false for shouldHideRecalibration", async () => {
//Arrange
const { wrapper } = setupMocks({});
const lineItems = {
glassParts: [
{
partType: "RECALIBRATION",
},
],
};
wrapper.vm.submittedOrder = {
vehicle: {
imageUrl: "",
},
schedule: {
endTime: "10:00",
date: "2024-09-28",
jobMaxMinutes: 120,
jobMinMinutes: 60,
routeCode: "",
},
policy: {
isItac: true,
isNoComp: false,
},
serviceLocation: store.getters.order.serviceLocation,
};
wrapper.setData({ lineItems: lineItems });
await wrapper.vm.$nextTick();
// Act
const testValue = wrapper.vm.shouldHideRecalibration;
// Assert
expect(testValue).toEqual(false);
});
}); });
function setupMocks({ customMountOptions }) { function setupMocks({ customMountOptions }) {

View file

@ -103,6 +103,7 @@ import { get12HourTimeFormat, get12HourTimeMobileFormat } from "@/helpers/date-h
import { coverageStatus } from "@/constants/insurance"; import { coverageStatus } from "@/constants/insurance";
import { getDisplayTextForDurationLength } from "@/helpers/duration-length-helper"; import { getDisplayTextForDurationLength } from "@/helpers/duration-length-helper";
import { experimentSettings } from "@/constants/experiments"; import { experimentSettings } from "@/constants/experiments";
import experimentMixin from "@/mixins/experiment-mixin.js";
import { partTypeStrings } from "@/constants/part-type-strings"; import { partTypeStrings } from "@/constants/part-type-strings";
import { containsLineItemWithPartType } from "@/helpers/service-package-helper"; import { containsLineItemWithPartType } from "@/helpers/service-package-helper";
import { containsRecalParts } from "@/helpers/recal-helper.js"; import { containsRecalParts } from "@/helpers/recal-helper.js";
@ -151,12 +152,29 @@ export default {
const availableVaps = [resultMap.rainDefense, ...resultMap.wipers]; const availableVaps = [resultMap.rainDefense, ...resultMap.wipers];
const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems); const lineItemsFromSubmittedOrder = deepClone(submittedOrder.lineItems);
const isNoComp = submittedOrder?.policy?.isNoComp;
const isItac = submittedOrder?.policy?.isItac;
const isRecalibrationOnOrder = containsRecalParts(lineItemsFromSubmittedOrder);
const hasRecalPriceRemoveExperiment =
experimentMixin.methods
.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)
?.toLowerCase() === "true";
const shouldHideRecalibration = () => {
if (isNoComp || isItac) {
return false;
}
return hasRecalPriceRemoveExperiment && isRecalibrationOnOrder;
};
// Call the "next" function to complete the transition to this page. // Call the "next" function to complete the transition to this page.
next((vm) => { next((vm) => {
vm.setCmsContent(resultMap.cmsContent); vm.setCmsContent(resultMap.cmsContent);
vm.lineItems = lineItemsFromSubmittedOrder; vm.lineItems = lineItemsFromSubmittedOrder;
vm.vaps = availableVaps; vm.vaps = availableVaps;
vm.submittedOrder = submittedOrder; vm.submittedOrder = submittedOrder;
vm.shouldHideRecalibration = shouldHideRecalibration();
}); });
}, },
data() { data() {
@ -164,22 +182,13 @@ export default {
lineItems: [], lineItems: [],
vaps: [], vaps: [],
submittedOrder: null, submittedOrder: null,
shouldHideRecalibration: null,
}; };
}, },
computed: { computed: {
isRecalibrationOnOrder() { isRecalibrationOnOrder() {
return containsRecalParts(this?.lineItems); return containsRecalParts(this?.lineItems);
}, },
shouldHideRecalibration() {
if (this.isNoComp || this.isItac) {
return false;
}
return (
this.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)?.toLowerCase() ===
"true" && this.isRecalibrationOnOrder
);
},
ShowCart() { ShowCart() {
if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) { if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) {
// settleTenderAmount always shows 0 via localhost or dev. // settleTenderAmount always shows 0 via localhost or dev.
@ -332,11 +341,17 @@ export default {
return `Between ${get12HourTimeMobileFormat( return `Between ${get12HourTimeMobileFormat(
this.ScheduleStartTime this.ScheduleStartTime
)} - ${get12HourTimeMobileFormat(this.ScheduleEndTime)}`; )} - ${get12HourTimeMobileFormat(this.ScheduleEndTime)}`;
} else if (this.AppointmentType == AppointmentTypeStrings.DROP_OFF) {
return `Drop off before 9:30 AM`;
} else {
return `at ${get12HourTimeFormat(this.ScheduleStartTime)}`;
} }
if (this.AppointmentType == AppointmentTypeStrings.DROP_OFF) {
if (
this.submittedOrder?.schedule?.routeCode.includes(RouteCodeFlags.OVERNIGHT_DROP_OFF)
) {
return `Drop off before 5:30 PM`;
} else {
return `Drop off before 9:30 AM`;
}
}
return `at ${get12HourTimeFormat(this.ScheduleStartTime)}`;
}, },
vehicleBannerImageUrl() { vehicleBannerImageUrl() {
return this.submittedOrder?.vehicle.imageUrl; return this.submittedOrder?.vehicle.imageUrl;

View file

@ -113,5 +113,7 @@ function setupMocks() {
const wrapper = shallowMount(customerDetails, mountOptions); const wrapper = shallowMount(customerDetails, mountOptions);
wrapper.vm.$refs.loadingModal.showModal = jest.fn();
return { wrapper }; return { wrapper };
} }

View file

@ -525,6 +525,8 @@ export default {
async forwardButtonAction() { async forwardButtonAction() {
this.forwardClicked = true; this.forwardClicked = true;
this.$refs.loadingModal.showModal();
await this.dispatchStoreAction( await this.dispatchStoreAction(
storeActions.SAVE_PAYMENT_METHOD_CHOICE, storeActions.SAVE_PAYMENT_METHOD_CHOICE,
this.paymentMethod, this.paymentMethod,
@ -575,7 +577,6 @@ export default {
} }
}, },
async setupPia() { async setupPia() {
this.$refs.loadingModal.showModal();
// we need a work order number for pia so we can pass it to safeliteHop. // we need a work order number for pia so we can pass it to safeliteHop.
// this will create one in delete substatus. // this will create one in delete substatus.
try { try {

View file

@ -348,7 +348,7 @@ export default {
// prettier-ignore // prettier-ignore
{ {
const log = getQuerystringParameter(queryStrings.LOG); const log = getQuerystringParameter(queryStrings.LOG);
if (eval(log)) { if (log === "true") {
console.log("------------- quote.vue thresholds start -----------------"); console.log("------------- quote.vue thresholds start -----------------");
console.log(new Date() + " isExternalParameter: " + isExternalParameter); console.log(new Date() + " isExternalParameter: " + isExternalParameter);
console.log(new Date() + " internalThreshold: " + internalThreshold); console.log(new Date() + " internalThreshold: " + internalThreshold);
@ -436,8 +436,15 @@ export default {
(!this.isRecalibrationOnOrder || !this.shouldHideRecalibration) (!this.isRecalibrationOnOrder || !this.shouldHideRecalibration)
); );
}, },
isRecalPriceRemove() {
return (
experimentMixin.methods
.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)
?.toLowerCase() === "true"
);
},
showRecalDisclaimer() { showRecalDisclaimer() {
return this.isRecalibrationOnOrder && this.shouldHideRecalibration; return this.isRecalibrationOnOrder && this.isRecalPriceRemove;
}, },
}, },
methods: { methods: {
@ -459,7 +466,7 @@ export default {
// prettier-ignore // prettier-ignore
{ {
const log = getQuerystringParameter(queryStrings.LOG); const log = getQuerystringParameter(queryStrings.LOG);
if (eval(log) || !preReqResult) { if (log === "true" || !preReqResult) {
console.log("------------- quote.vue pagePrereqs start -----------------"); console.log("------------- quote.vue pagePrereqs start -----------------");
console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + store.getters.order.serviceLocation?.zipCode); console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + store.getters.order.serviceLocation?.zipCode);
console.log(new Date() +" store.getters.order.serviceLocation.zipCodeCtu: " + store.getters.order.serviceLocation?.zipCodeCtu); console.log(new Date() +" store.getters.order.serviceLocation.zipCodeCtu: " + store.getters.order.serviceLocation?.zipCodeCtu);

View file

@ -326,7 +326,7 @@ export default {
// prettier-ignore // prettier-ignore
{ {
const log = getQuerystringParameter(queryStrings.LOG); const log = getQuerystringParameter(queryStrings.LOG);
if (eval(log) || !preReqResult) { if (log === "true" || !preReqResult) {
console.log("------------- schedule.vue pagePrereqs start -----------------"); console.log("------------- schedule.vue pagePrereqs start -----------------");
console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + serviceLocation.zipCode); console.log(new Date() + " store.getters.order.serviceLocation.zipCode: " + serviceLocation.zipCode);
console.log(new Date() + " store.getters.order.serviceLocation.zipCodeCtu: " + serviceLocation.zipCodeCtu); console.log(new Date() + " store.getters.order.serviceLocation.zipCodeCtu: " + serviceLocation.zipCodeCtu);

View file

@ -122,7 +122,7 @@ export default {
async beforeRouteEnter(to, from, next) { async beforeRouteEnter(to, from, next) {
const log = getQuerystringParameter(queryStrings.LOG); const log = getQuerystringParameter(queryStrings.LOG);
if (eval(log)) { if (log === "true") {
console.log("----------------- applicationConfig start -----------------"); console.log("----------------- applicationConfig start -----------------");
console.log(new Date() + JSON.stringify(applicationConfig)); console.log(new Date() + JSON.stringify(applicationConfig));
console.log("----------------- applicationConfig end -----------------"); console.log("----------------- applicationConfig end -----------------");

View file

@ -50,15 +50,21 @@ const routes = [
async beforeEnter(to, from, next) { async beforeEnter(to, from, next) {
// If we have no query string, or we don't have the FmgPage query string. // If we have no query string, or we don't have the FmgPage query string.
try { try {
log("------------- router index.js beforeEnter start -----------------");
log(" --to: ", to);
log(" --cookie: ", getFunnelCookie());
await analyticsMixin.methods.validateSession(); await analyticsMixin.methods.validateSession();
if (getFunnelCookie()?.SuppressConceptFunnel) { if (getFunnelCookie()?.SuppressConceptFunnel) {
log(" --go to heritage suppressConceptFunnel: ");
await navigateToHeritageFunnel({ shouldSaveSession: false }); await navigateToHeritageFunnel({ shouldSaveSession: false });
return next(false); return next(false);
} }
// If the saved session has timed out, clear the session, execute 404 logic. // If the saved session has timed out, clear the session, execute 404 logic.
if (getFunnelCookie() !== null && !isSavedSessionStillActive()) { if (getFunnelCookie() !== null && !isSavedSessionStillActive()) {
log(" --save session timeout go to start");
await baseMixin.methods.dispatchStoreAction(storeActions.RESET_STATE); await baseMixin.methods.dispatchStoreAction(storeActions.RESET_STATE);
deleteFunnelCookie(); deleteFunnelCookie();
GoToFunnelStartOn404(next); GoToFunnelStartOn404(next);
@ -68,12 +74,14 @@ const routes = [
if (window.sessionStorage.getItem("submittedOrder") !== null) { if (window.sessionStorage.getItem("submittedOrder") !== null) {
if (to.query.fmgPage !== funnelStartPageName) { if (to.query.fmgPage !== funnelStartPageName) {
to.query.fmgPage = fmgPageValues.CONFIRMATION; to.query.fmgPage = fmgPageValues.CONFIRMATION;
log(" --has submittedOrder go to confirmation");
} }
} }
// On entering the funnel "fresh", read cookie information, decide what to do next. // On entering the funnel "fresh", read cookie information, decide what to do next.
else if (from.redirectedFrom === undefined) { else if (from.redirectedFrom === undefined) {
// clear the saveSessionPromise - if it exists in the vuex store but a new instance was created // clear the saveSessionPromise - if it exists in the vuex store but a new instance was created
// the saveSessionPromise will no longer point to a valid promise // the saveSessionPromise will no longer point to a valid promise
log(" --clear promise");
baseMixin.methods.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); baseMixin.methods.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE);
if (!to.query.fmgPage?.startsWith("payment")) { if (!to.query.fmgPage?.startsWith("payment")) {
@ -95,6 +103,7 @@ const routes = [
storeMutations.UPDATE_REFERRAL_CORRELATION_ID, storeMutations.UPDATE_REFERRAL_CORRELATION_ID,
correlationId correlationId
); );
log(" --update cookie");
updateOrCreateFunnelCookie(); updateOrCreateFunnelCookie();
} }
@ -127,15 +136,19 @@ const routes = [
} }
const pageToRedirectTo = await getPageToRouteExistingOrderTo(to); const pageToRedirectTo = await getPageToRouteExistingOrderTo(to);
log(" --pageToRedirectTo ", JSON.stringify(pageToRedirectTo));
// This logic may determine that the user should be sent to heritage -- if so, do that here. // This logic may determine that the user should be sent to heritage -- if so, do that here.
if (pageToRedirectTo === fmgPageValues.HERITAGE) { if (pageToRedirectTo === fmgPageValues.HERITAGE) {
// prettier-ignore
log(" --go to heritage pageToRedirectTo ", JSON.stringify(pageToRedirectTo));
await navigateToHeritageFunnel({ shouldSaveSession: false }); await navigateToHeritageFunnel({ shouldSaveSession: false });
return next(false); return next(false);
} }
// Assign our fmgPage so it will load normally like the other pages. // Assign our fmgPage so it will load normally like the other pages.
to.query.fmgPage = pageToRedirectTo; to.query.fmgPage = pageToRedirectTo;
log(" --assign to: ", JSON.stringify(pageToRedirectTo));
} }
} }
@ -149,6 +162,7 @@ const routes = [
to.query.fmgPage === fmgPageValues.QUOTE || to.query.fmgPage === fmgPageValues.QUOTE ||
to.query.fmgPage === fmgPageValues.INSURANCE_COMPANY to.query.fmgPage === fmgPageValues.INSURANCE_COMPANY
) { ) {
log(" --block quote page for integrated clients - go to heritage");
// Push to heritage if going to quote & integrated. // Push to heritage if going to quote & integrated.
await navigateToHeritageFunnel({ shouldSaveSession: false }); await navigateToHeritageFunnel({ shouldSaveSession: false });
return next(false); return next(false);
@ -183,6 +197,7 @@ const routes = [
GoToFunnelStartOn404(next); GoToFunnelStartOn404(next);
} }
log(" --has route:", to.query.fmgPage);
return next({ name: to.query.fmgPage, query: to.query, params: to.params }); return next({ name: to.query.fmgPage, query: to.query, params: to.params });
} }
@ -210,12 +225,13 @@ const routes = [
.components.default(); .components.default();
if (!arePagePrerequisitesValid(nextComponent)) { if (!arePagePrerequisitesValid(nextComponent)) {
console.log( // prettier-ignore
"Page Prereqs not valid for next component: " + nextComponent.default.name console.log("Page Prereqs not valid for next component: " + nextComponent.default.name);
);
GoToFunnelStartOn404(next); GoToFunnelStartOn404(next);
} }
log("------------- router index.js beforeEnter end -----------------");
// Assign current query string parameters, as well as our fmgPage one. // Assign current query string parameters, as well as our fmgPage one.
next({ next({
name: routeData[0].name, name: routeData[0].name,
@ -230,6 +246,8 @@ const routes = [
await baseMixin.methods.dispatchStoreAction(storeActions.RESET_STATE); await baseMixin.methods.dispatchStoreAction(storeActions.RESET_STATE);
} }
console.log(new Date() + " Exception in beforeEnter:" + JSON.stringify(error));
// If we don't have a route, go to our 404 page. // If we don't have a route, go to our 404 page.
GoToFunnelStartOn404(next); GoToFunnelStartOn404(next);
} }
@ -441,7 +459,15 @@ async function navigate(
const zip = getQuerystringParameter(queryStrings.ZIP_CODE); const zip = getQuerystringParameter(queryStrings.ZIP_CODE);
const promo = getQuerystringParameter(queryStrings.PROMO); const promo = getQuerystringParameter(queryStrings.PROMO);
const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR); const pageError = getQuerystringParameter(queryStrings.PAGE_ERROR);
const log = getQuerystringParameter(queryStrings.LOG); const logQs = getQuerystringParameter(queryStrings.LOG);
log("------------- router index.js navigate start -----------------");
log(" --scenario: ", scenario);
log(" --isSavingNavigation: ", isSavingNavigation);
log(" --optionalQuery: ", optionalQuery);
log(" --optionalParams: ", optionalParams);
log(" --optionalPageData: ", optionalPageData);
log(" --nextPageName: ", nextPageName);
if ( if (
hasZip && hasZip &&
@ -461,10 +487,13 @@ async function navigate(
queryStringsObject[queryStrings.PAGE_ERROR] = pageError; queryStringsObject[queryStrings.PAGE_ERROR] = pageError;
} }
if (log) { if (logQs) {
queryStringsObject[queryStrings.LOG] = log; queryStringsObject[queryStrings.LOG] = logQs;
} }
log(" querystrings: ", queryStringsObject);
log("------------- router index.js navigate end -----------------");
router.push({ router.push({
name: "root", name: "root",
query: Object.assign(optionalQuery, queryStringsObject), query: Object.assign(optionalQuery, queryStringsObject),
@ -490,6 +519,16 @@ function getNavigationMap(scenario, currentRoute) {
return matchedQueryValue[0]; return matchedQueryValue[0];
} }
function log(message, data) {
const log = getQuerystringParameter(queryStrings.LOG);
data = data ?? "";
const outData = typeof data === "object" ? JSON.stringify(data) : data;
if (log === "true") {
console.log(new Date() + message + outData);
}
}
//---------------------------------------------------------- Private Functions ---------------------------------------------------------- //---------------------------------------------------------- Private Functions ----------------------------------------------------------
// Navigate to an external url. // Navigate to an external url.

View file

@ -826,6 +826,10 @@ export const getters = {
order = state.order; order = state.order;
} }
if (order.payment.isInsurance) {
return false;
}
return ( return (
experimentMixin.methods experimentMixin.methods
.getSettingValue(experimentSettings.RECAL_PRICE_REMOVE) .getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)