some updates for schedule

add period
fetch billTo on provider change (needed for time slots)
fix if Adak Alaska on load.
This commit is contained in:
Bill Richardson 2026-02-17 16:15:58 -05:00
parent e74a998665
commit 309f08961b
4 changed files with 64 additions and 13 deletions

View file

@ -10,7 +10,7 @@
When would you like service? When would you like service?
</div> </div>
<div class="appointment-estimate-header"> <div class="appointment-estimate-header">
Your service will take approximately <span>{{ appointmentEstimate }}</span> Your service will take approximately <span>{{ appointmentEstimate }}</span>.
</div> </div>
<div <div
class="appointment-date-picker-container" class="appointment-date-picker-container"

View file

@ -232,7 +232,7 @@ export default {
const mobileFeePartPromise = getPricedMobileFeePart(serviceZipCode); const mobileFeePartPromise = getPricedMobileFeePart(serviceZipCode);
const serviceabilityDetailsPromise = getServiceabilityDetails(serviceZipCode); const serviceabilityDetailsPromise = getServiceabilityDetails(serviceZipCode);
const getGlassFeesPromise = useMainStore().getGlassFees(); const getGlassFeesPromise = useMainStore().getGlassFees();
const providersPromise = useMainStore().getSafeliteProviders(serviceZipCode); const providersPromise = useMainStore().getSafeliteProviders(serviceZipCode, 150);
const premiumFeePromise = useMainStore().getMobilePremiumFee(); const premiumFeePromise = useMainStore().getMobilePremiumFee();
const premiumFeeWithPricePromise = premiumFeePromise.then((result) => { const premiumFeeWithPricePromise = premiumFeePromise.then((result) => {
@ -276,25 +276,39 @@ export default {
// use resultMap to populate layout content. // use resultMap to populate layout content.
const resultMap = await settleAllPromises(promiseResultMap); const resultMap = await settleAllPromises(promiseResultMap);
const providersUnderOneHundredMiles = resultMap.providers?.shopProviders?.filter((provider) => provider.distanceMiles <= 100);
const serviceLocationData = { const serviceLocationData = {
defaultMobileZipCode: isMobileAppointment defaultMobileZipCode: isMobileAppointment
? storeServiceLocation?.zipCode ? storeServiceLocation?.zipCode
: '', : '',
glassFees: resultMap.glassFees, glassFees: resultMap.glassFees,
mobileFeePart: resultMap.mobileFeePart, mobileFeePart: resultMap.mobileFeePart,
providers: resultMap.providers, providers: {
...resultMap.providers,
shopProviders: providersUnderOneHundredMiles || []
},
serviceabilityDetails: resultMap.serviceabilityDetails, serviceabilityDetails: resultMap.serviceabilityDetails,
zipCodeData: resultMap.zipCodeData zipCodeData: resultMap.zipCodeData
}; };
useMainStore().updateIsSafeliteProvider(true); useMainStore().updateIsSafeliteProvider(true);
next(async (vm) => { next(async (vm) => {
const providerToUse = resultMap.providers?.shopProviders const foundProviderInFullList = resultMap.providers?.shopProviders
.find((provider) => provider.providerNumber === storeSelectedProvider?.providerNumber) || resultMap.providers?.shopProviders[0]; .find((provider) => provider.providerNumber === storeSelectedProvider?.providerNumber) || resultMap.providers?.shopProviders[0];
const foundProviderInHundredMiles = providersUnderOneHundredMiles
.find((provider) => provider.providerNumber === storeSelectedProvider?.providerNumber) || providersUnderOneHundredMiles[0];
if (!foundProviderInHundredMiles && !foundProviderInFullList) {
if (storeSelectedProvider?.providerNumber && resultMap.providers?.shopProviders) {
serviceLocationData.providers?.shopProviders.push(storeSelectedProvider);
}
} else if (!foundProviderInHundredMiles && foundProviderInFullList) {
serviceLocationData.providers?.shopProviders.push(foundProviderInFullList);
}
const initialServiceLocationObj = { const initialServiceLocationObj = {
mobileProviderNumber: isMobileAppointment mobileProviderNumber: isMobileAppointment
? storeSelectedProvider?.providerNumber ? storeSelectedProvider?.providerNumber
: null, : null,
provider: isMobileAppointment ? null : providerToUse, provider: isMobileAppointment ? null : foundProviderInFullList,
zipCode: useMainStore().order.serviceLocation.zipCode || useMainStore().order.customer.address.zipCode, zipCode: useMainStore().order.serviceLocation.zipCode || useMainStore().order.customer.address.zipCode,
zipCodeCtu: resultMap.zipCodeData?.zipCodeCtu zipCodeCtu: resultMap.zipCodeData?.zipCodeCtu
}; };
@ -524,7 +538,20 @@ export default {
preSelectedDate, preSelectedDate,
initialDaysLoaded: endDateObject.newDaysLoaded || initialDays, initialDaysLoaded: endDateObject.newDaysLoaded || initialDays,
daysFromStart: endDateObject.daysFromStart || null daysFromStart: endDateObject.daysFromStart || null
})); }))
.catch(() => {
console.warn('Error fetching initial available dates...');
return {
todayDate: todayDateString,
initialViewStartDate,
initialViewEndDate,
calendarViewDirection,
initialShopTimeSlotsResponse: { days: [] },
preSelectedDate,
initialDaysLoaded: endDateObject.newDaysLoaded || initialDays,
daysFromStart: endDateObject.daysFromStart || null
};
});
if (this.selectedAppointmentType === AppointmentTypeStrings.MOBILE if (this.selectedAppointmentType === AppointmentTypeStrings.MOBILE
|| this.selectedAppointmentType === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP) { || this.selectedAppointmentType === AppointmentTypeStrings.MOBILE_NOT_ITAC_AND_NOT_NOCOMP) {
@ -639,12 +666,20 @@ export default {
} }
} }
}, },
providerChangedFromServiceLocation(newProvider) { async providerChangedFromServiceLocation(newProvider) {
this.selectedProvider = newProvider?.provider; this.selectedProvider = newProvider?.provider;
if (newProvider?.refreshDatePicker && newProvider.provider) {
this.mainStore.updateServiceLocationProvider(newProvider.provider);
if (newProvider?.refreshDatePicker) {
showIssLoadingModal(true); showIssLoadingModal(true);
this.refreshDatePicker(); await this.mainStore.getBillToInfo(newProvider.provider?.providerNumber)
.then(() => {
this.refreshDatePicker();
})
.catch(() => {
console.warn('Error fetching bill to info...');
showIssLoadingModal(false);
});
} }
}, },
async refreshDatePicker() { async refreshDatePicker() {

View file

@ -203,7 +203,7 @@ export default {
return this.isBigTruck && !this.isServiceableInshop && !this.isServiceableMobile; return this.isBigTruck && !this.isServiceableInshop && !this.isServiceableMobile;
}, },
displayLowAvailabilityInshop() { displayLowAvailabilityInshop() {
return this.availabilityRating === 'low' && this.isInshop; return this.availabilityRating === 'low' && this.isInshop && this.selectedProvider !== null;
}, },
displayMilitaryZipAlert() { displayMilitaryZipAlert() {
return this.zipContainsMilitaryBase && this.isServiceableMobile; return this.zipContainsMilitaryBase && this.isServiceableMobile;
@ -622,5 +622,8 @@ $page-side-padding: 1.5rem;
} }
} }
} }
:deep(.alert-shop-distance) {
margin-bottom: 0;
}
} }
</style> </style>

View file

@ -1848,7 +1848,20 @@ export const useMainStore = defineStore({
} }
this.order.serviceLocation.tpaSearchRadius = serviceLocationInfo.tpaSearchRadius; this.order.serviceLocation.tpaSearchRadius = serviceLocationInfo.tpaSearchRadius;
}, },
updateServiceLocationProvider(providerInfo) {
this.order.serviceLocation.provider = {
providerNumber: providerInfo?.providerNumber,
address: {
streetAddress: providerInfo?.address?.streetAddress,
city: providerInfo?.address?.city,
state: providerInfo?.address?.state,
zipCode: providerInfo?.address?.zipCode,
zipCodeCtu: providerInfo?.address?.zipCodeCtu
},
companyName: providerInfo?.companyName,
phoneNumber: providerInfo?.phoneNumber
};
},
resetState() { resetState() {
Object.assign(this, getDefaultState()); Object.assign(this, getDefaultState());
}, },
@ -2684,12 +2697,12 @@ export const useMainStore = defineStore({
} }
}, },
async getBillToInfo() { async getBillToInfo(componentProviderNumber = null) {
const { order, issConfig } = this; const { order, issConfig } = this;
try { try {
const params = new URLSearchParams({ const params = new URLSearchParams({
parentAccountNumber: order.parentAccountNumber.toString(), parentAccountNumber: order.parentAccountNumber.toString(),
providerNumber: this.providerNumber, providerNumber: componentProviderNumber || this.providerNumber,
typeOfClaim: 'GLASS ONLY', typeOfClaim: 'GLASS ONLY',
lineOfBusiness: 'PERSONAL', lineOfBusiness: 'PERSONAL',
isItac: this.isITAC isItac: this.isITAC