Merge remote-tracking branch 'origin/develop' into feature/skiener/INSR-2124
This commit is contained in:
commit
5fa9aba5fd
8 changed files with 100 additions and 10 deletions
|
|
@ -244,6 +244,11 @@ stages:
|
||||||
Contents: '**'
|
Contents: '**'
|
||||||
TargetFolder: 'public/.well-known'
|
TargetFolder: 'public/.well-known'
|
||||||
CleanTargetFolder: true
|
CleanTargetFolder: true
|
||||||
|
- task: CopyFiles@2
|
||||||
|
inputs:
|
||||||
|
SourceFolder: 'public/apple-pay/non-prod'
|
||||||
|
Contents: '**'
|
||||||
|
TargetFolder: 'public/.well-known'
|
||||||
- task: DeleteFiles@1
|
- task: DeleteFiles@1
|
||||||
inputs:
|
inputs:
|
||||||
SourceFolder: 'public/apple-pay'
|
SourceFolder: 'public/apple-pay'
|
||||||
|
|
@ -309,6 +314,11 @@ stages:
|
||||||
Contents: '**'
|
Contents: '**'
|
||||||
TargetFolder: 'public/.well-known'
|
TargetFolder: 'public/.well-known'
|
||||||
CleanTargetFolder: true
|
CleanTargetFolder: true
|
||||||
|
- task: CopyFiles@2
|
||||||
|
inputs:
|
||||||
|
SourceFolder: 'public/apple-pay/non-prod'
|
||||||
|
Contents: '**'
|
||||||
|
TargetFolder: 'public/.well-known'
|
||||||
- task: DeleteFiles@1
|
- task: DeleteFiles@1
|
||||||
inputs:
|
inputs:
|
||||||
SourceFolder: 'public/apple-pay'
|
SourceFolder: 'public/apple-pay'
|
||||||
|
|
@ -374,6 +384,11 @@ stages:
|
||||||
Contents: '**'
|
Contents: '**'
|
||||||
TargetFolder: 'public/.well-known'
|
TargetFolder: 'public/.well-known'
|
||||||
CleanTargetFolder: true
|
CleanTargetFolder: true
|
||||||
|
- task: CopyFiles@2
|
||||||
|
inputs:
|
||||||
|
SourceFolder: 'public/apple-pay/non-prod'
|
||||||
|
Contents: '**'
|
||||||
|
TargetFolder: 'public/.well-known'
|
||||||
- task: DeleteFiles@1
|
- task: DeleteFiles@1
|
||||||
inputs:
|
inputs:
|
||||||
SourceFolder: 'public/apple-pay'
|
SourceFolder: 'public/apple-pay'
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -19,9 +19,18 @@ const experimentSettings = Object.freeze({
|
||||||
ISS_ENABLE_ADYEN_V1: 'ISS_Enable_Adyen_V1'
|
ISS_ENABLE_ADYEN_V1: 'ISS_Enable_Adyen_V1'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const experimentTest = Object.freeze({
|
||||||
|
ISS_MOBILE_FIRST_POPUP_V3: 'ISS_Mobile_First_Popup_V3'
|
||||||
|
});
|
||||||
|
|
||||||
|
const experimentVariation = Object.freeze({
|
||||||
|
ISS_MOBILE_FIRST_CONTROL_V3: 'NoShowMobileFirstPopUp_V3_CONTROL',
|
||||||
|
ISS_MOBILE_FIRST_TEST_V3: 'YesShowMobileFirstPopUp_V3_TEST'
|
||||||
|
});
|
||||||
|
|
||||||
const experimentTriggers = Object.freeze({
|
const experimentTriggers = Object.freeze({
|
||||||
SITE_ENTRY: 'SiteEntry',
|
SITE_ENTRY: 'SiteEntry',
|
||||||
PAGE_ENTRY: 'PageEntry'
|
PAGE_ENTRY: 'PageEntry'
|
||||||
});
|
});
|
||||||
|
|
||||||
export { experimentUniverses, experimentSettings, experimentTriggers };
|
export { experimentUniverses, experimentSettings, experimentTest, experimentVariation, experimentTriggers };
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,21 @@ export async function getZipCodeData(zipCode) {
|
||||||
return await processZipCodeResults(useMainStore().validateZip({ zip: zipCode }));
|
return await processZipCodeResults(useMainStore().validateZip({ zip: zipCode }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isServiceableMobileWithData(isGlassServiceableMobile, isRecalibrationServiceableMobile) {
|
||||||
|
const isBigTruck = useMainStore().order.serviceLocation.isBigTruck;
|
||||||
|
if (isBigTruck) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRecalibrationServiceableMobile === true || isRecalibrationServiceableMobile === false) {
|
||||||
|
return (
|
||||||
|
isGlassServiceableMobile
|
||||||
|
&& isRecalibrationServiceableMobile
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return !!isGlassServiceableMobile;
|
||||||
|
}
|
||||||
|
|
||||||
export function mapTimeSlot(timeSlot, timeOfDay) {
|
export function mapTimeSlot(timeSlot, timeOfDay) {
|
||||||
return {
|
return {
|
||||||
...timeSlot,
|
...timeSlot,
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ import siteFooter from '@/iss-components/site-footer/site-footer.vue';
|
||||||
import suggestTimeslotModal from '@/layouts/schedule-page/suggest-timeslot-modal/suggest-timeslot-modal.vue';
|
import suggestTimeslotModal from '@/layouts/schedule-page/suggest-timeslot-modal/suggest-timeslot-modal.vue';
|
||||||
|
|
||||||
// Supporting files
|
// Supporting files
|
||||||
import { experimentSettings, experimentUniverses } from '@/constants/experiments';
|
import { experimentSettings, experimentTest, experimentVariation, experimentUniverses } from '@/constants/experiments';
|
||||||
import {
|
import {
|
||||||
AppointmentTypeStrings,
|
AppointmentTypeStrings,
|
||||||
GET_MOBILE_TIME_SLOTS,
|
GET_MOBILE_TIME_SLOTS,
|
||||||
|
|
@ -99,6 +99,7 @@ import {
|
||||||
getPricedMobileFeePart,
|
getPricedMobileFeePart,
|
||||||
getMobileZipCodeData,
|
getMobileZipCodeData,
|
||||||
getZipCodeData,
|
getZipCodeData,
|
||||||
|
isServiceableMobileWithData,
|
||||||
mapTimeSlot
|
mapTimeSlot
|
||||||
} from '@/helpers/service-location-helper';
|
} from '@/helpers/service-location-helper';
|
||||||
import { Form } from 'vee-validate';
|
import { Form } from 'vee-validate';
|
||||||
|
|
@ -337,7 +338,7 @@ export default {
|
||||||
mobileProviderNumber: resultMap.providers?.mobileProviderNumber,
|
mobileProviderNumber: resultMap.providers?.mobileProviderNumber,
|
||||||
serviceabilityDetails: resultMap.serviceabilityDetails,
|
serviceabilityDetails: resultMap.serviceabilityDetails,
|
||||||
zipCode: initialServiceLocationObj.zipCode
|
zipCode: initialServiceLocationObj.zipCode
|
||||||
}
|
};
|
||||||
|
|
||||||
vm.setCmsContent(resultMap.cmsContent);
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
vm.$refs.serviceLocation.initializeComponent(serviceLocationData);
|
vm.$refs.serviceLocation.initializeComponent(serviceLocationData);
|
||||||
|
|
@ -492,13 +493,18 @@ export default {
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
async checkMobileFirstExperience(mobileFirstObject = {}) {
|
async checkMobileFirstExperience(mobileFirstObject = {}) {
|
||||||
|
const mobileFirstExperimentVariation = this.getExperimentVariationNameByTestName(experimentTest.ISS_MOBILE_FIRST_POPUP_V3);
|
||||||
|
const isMobileFirstTestVariation = mobileFirstExperimentVariation === experimentVariation.ISS_MOBILE_FIRST_TEST_V3;
|
||||||
const showMobileFirst = this.getSettingValue(experimentSettings.ISS_MOBILE_FIRST_SHOW_FIRST_MOBILE_APPOINTMENT);
|
const showMobileFirst = this.getSettingValue(experimentSettings.ISS_MOBILE_FIRST_SHOW_FIRST_MOBILE_APPOINTMENT);
|
||||||
if (showMobileFirst) {
|
if (showMobileFirst) {
|
||||||
const pmMobileDaysLimit = this.getSettingValue(experimentSettings.ISS_MOBILE_FIRST_MAX_PM_MOBILE_DAYS);
|
const pmMobileDaysLimit = this.getSettingValue(experimentSettings.ISS_MOBILE_FIRST_MAX_PM_MOBILE_DAYS);
|
||||||
const mobileDaysLimit = this.getSettingValue(experimentSettings.ISS_MOBILE_FIRST_MAX_MOBILE_DAYS);
|
const mobileDaysLimit = this.getSettingValue(experimentSettings.ISS_MOBILE_FIRST_MAX_MOBILE_DAYS);
|
||||||
const hasSelectedDate = !!this.getSelectedDate();
|
const hasSelectedDate = !!this.getSelectedDate();
|
||||||
const isServicableMobile = mobileFirstObject.serviceabilityDetails?.isGlassServiceableMobile;
|
const isServiceableMobile = isServiceableMobileWithData(
|
||||||
if (!hasSelectedDate && isServicableMobile && mobileFirstObject.mobileProviderNumber && mobileFirstObject.zipCode) {
|
mobileFirstObject.serviceabilityDetails?.isGlassServiceableMobile ?? null,
|
||||||
|
mobileFirstObject.serviceabilityDetails?.isRecalibrationServiceableMobile ?? null
|
||||||
|
);
|
||||||
|
if (!hasSelectedDate && isServiceableMobile && mobileFirstObject.mobileProviderNumber && mobileFirstObject.zipCode) {
|
||||||
const todayDateObject = new Date();
|
const todayDateObject = new Date();
|
||||||
const todayDateString = convertDateToDateString(todayDateObject);
|
const todayDateString = convertDateToDateString(todayDateObject);
|
||||||
const calendarViewDirection = 'future';
|
const calendarViewDirection = 'future';
|
||||||
|
|
@ -624,7 +630,11 @@ export default {
|
||||||
this.mainStore.logMobileFirstExperimentExposure();
|
this.mainStore.logMobileFirstExperimentExposure();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$refs[SUGGEST_TIMESLOT_MODAL_REF_NAME].openModal(timeSlotForAutoSelectionMobile);
|
if (isMobileFirstTestVariation) {
|
||||||
|
this.$refs[SUGGEST_TIMESLOT_MODAL_REF_NAME].openModal(timeSlotForAutoSelectionMobile);
|
||||||
|
} else {
|
||||||
|
console.log('In Control group or experiment not found, skip showing popup');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -252,7 +252,7 @@ export default {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isRecalibrationServiceableMobile !== null) {
|
if (this.isRecalibrationServiceableMobile === true || this.isRecalibrationServiceableMobile === false) {
|
||||||
return (
|
return (
|
||||||
this.isGlassServiceableMobile
|
this.isGlassServiceableMobile
|
||||||
&& this.isRecalibrationServiceableMobile
|
&& this.isRecalibrationServiceableMobile
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,17 @@ export default {
|
||||||
const experiment = useMainStore().applicationUser.experiments.find((e) => e.universeName === experimentName);
|
const experiment = useMainStore().applicationUser.experiments.find((e) => e.universeName === experimentName);
|
||||||
return experiment ? experiment : null;
|
return experiment ? experiment : null;
|
||||||
},
|
},
|
||||||
|
getExperimentByTestName(testName) {
|
||||||
|
const experiment = useMainStore().applicationUser.experiments.find((experiment) => experiment.testName === testName);
|
||||||
|
return experiment ? experiment : null;
|
||||||
|
},
|
||||||
|
getExperimentVariationNameByTestName(testName) {
|
||||||
|
const experimentByTestName = this.getExperimentByTestName(testName);
|
||||||
|
if (!experimentByTestName) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return experimentByTestName.variationName;
|
||||||
|
},
|
||||||
getSettingValue(settingName) {
|
getSettingValue(settingName) {
|
||||||
return this.hasSetting(settingName)
|
return this.hasSetting(settingName)
|
||||||
? useMainStore().experimentSettings[settingName]
|
? useMainStore().experimentSettings[settingName]
|
||||||
|
|
|
||||||
|
|
@ -1346,8 +1346,22 @@ export const useMainStore = defineStore({
|
||||||
endpoint: `${endpoints.GetMobileFeePart.url}?${params.toString()}`
|
endpoint: `${endpoints.GetMobileFeePart.url}?${params.toString()}`
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
getServiceabilityDetails(serviceZipCode) {
|
getServiceabilityDetails(serviceZipCode) {
|
||||||
|
console.log('BEEP BOOP');
|
||||||
|
console.log('--ENVIRONMENT DETECTOR ROBOT ENGAGED--');
|
||||||
|
const currentEnvironment = applicationConfig.CURRENT_ENVIRONMENT;
|
||||||
|
console.log('I HAVE DETERMINED THAT THE CURRENT ENVIRONMENT IS:', currentEnvironment);
|
||||||
|
console.log('---');
|
||||||
|
console.log('---');
|
||||||
|
if (currentEnvironment === 'Localhost' || currentEnvironment === 'Dev') {
|
||||||
|
console.log('NEW SERVICEABILITY DETAILS METHOD ACTIVATED');
|
||||||
|
return this.getServiceabilityDetailsNewMethod(serviceZipCode);
|
||||||
|
} else {
|
||||||
|
console.log('OLD SERVICEABILITY DETAILS METHOD ACTIVATED');
|
||||||
|
return this.getServiceabilityDetailsOldMethod(serviceZipCode);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getServiceabilityDetailsOldMethod(serviceZipCode) {
|
||||||
const { vehicle, damage, parentAccountNumber, referralSequenceNumber, lineItems } = this.order;
|
const { vehicle, damage, parentAccountNumber, referralSequenceNumber, lineItems } = this.order;
|
||||||
const { carId } = vehicle;
|
const { carId } = vehicle;
|
||||||
const glassArray = convertGlassPieceNamingForApi(damage.glassToReplace);
|
const glassArray = convertGlassPieceNamingForApi(damage.glassToReplace);
|
||||||
|
|
@ -1371,6 +1385,22 @@ export const useMainStore = defineStore({
|
||||||
endpoint: `${endpoints.GetServiceabilityDetails.url}?${params.toString()}`
|
endpoint: `${endpoints.GetServiceabilityDetails.url}?${params.toString()}`
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
getServiceabilityDetailsNewMethod(serviceZipCode) {
|
||||||
|
const { damage, lineItems, parentAccountNumber, vehicle } = this.order;
|
||||||
|
const { carId } = vehicle;
|
||||||
|
const flattenedGlassParts = getLineItemsFlattened(lineItems.glassParts);
|
||||||
|
const lineItemsList = flattenedGlassParts.map((part) => part.partNumber).join(',');
|
||||||
|
|
||||||
|
let endPoint = `${endpoints.GetServiceabilityDetails.url}?zip=${serviceZipCode}&carId=${carId}&parentAccountNumber=${parentAccountNumber}&isRepair=${damage.isRepair}`;
|
||||||
|
if (lineItemsList) {
|
||||||
|
endPoint += `&lineItems=${lineItemsList}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return globalMethods.callHttpClient({
|
||||||
|
method: endpoints.GetServiceabilityDetails.method,
|
||||||
|
endpoint: endPoint
|
||||||
|
});
|
||||||
|
},
|
||||||
lookupVehicleByVin(vin) {
|
lookupVehicleByVin(vin) {
|
||||||
return globalMethods.callHttpClient({
|
return globalMethods.callHttpClient({
|
||||||
method: endpoints.LookupVehicleByVin.method,
|
method: endpoints.LookupVehicleByVin.method,
|
||||||
|
|
@ -2800,7 +2830,6 @@ export const useMainStore = defineStore({
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
updateContactInfo(contactInfo) {
|
updateContactInfo(contactInfo) {
|
||||||
this.order.customer.firstName = contactInfo?.firstName ?? this.order.customer.firstName;
|
this.order.customer.firstName = contactInfo?.firstName ?? this.order.customer.firstName;
|
||||||
this.order.customer.lastName = contactInfo?.lastName ?? this.order.customer.lastName;
|
this.order.customer.lastName = contactInfo?.lastName ?? this.order.customer.lastName;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue