Merge branch 'release/2025.02.27' into feature/CASH-151

This commit is contained in:
hiteshkumar87 2025-02-21 18:17:57 +05:30 committed by GitHub
commit e9c6c0e6f4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 89 additions and 49 deletions

View file

@ -99,8 +99,16 @@
// Supporting files // Supporting files
import loader from "@/ux-components/loader/loader"; import loader from "@/ux-components/loader/loader";
import store from "@/store"; import store from "@/store";
import { TIMINGFUNC_MAP, BUFFER_OFFSET, MONTHS_OF_YEAR } from "@/digital-components/date-picker/mixins/constants"; import {
import { selectableDaysOptions, requiredParameter, forceTwoDigitString } from "@/digital-components/date-picker/mixins/helpers"; TIMINGFUNC_MAP,
BUFFER_OFFSET,
MONTHS_OF_YEAR,
} from "@/digital-components/date-picker/mixins/constants";
import {
selectableDaysOptions,
requiredParameter,
forceTwoDigitString,
} from "@/digital-components/date-picker/mixins/helpers";
import { import {
convertDateToDateString, convertDateToDateString,
convertDateStringToDate, convertDateStringToDate,
@ -111,7 +119,7 @@ import { deepClone } from "@/helpers/object-helper";
import { v4 as uuidv4 } from "uuid"; import { v4 as uuidv4 } from "uuid";
export default { export default {
name: "datePicker2", name: "datePickerForPricingByDay",
data() { data() {
return { return {
isLoading: true, isLoading: true,

View file

@ -58,3 +58,15 @@ export function getTopLevelPartsWithRecal(lineItems) {
return lineItems.filter((li) => isRecalPartOrHasChildRecalPart(li)); return lineItems.filter((li) => isRecalPartOrHasChildRecalPart(li));
} }
export function getRecalPartNumbers(glassPartsArray) {
if (glassPartsArray && glassPartsArray.length > 0) {
const topLevel = glassPartsArray.filter((gp) => isRecalPart(gp)).map((gp) => gp.partNumber);
const children = glassPartsArray.map((gp) => getRecalPartNumbers(gp.childParts)).flat();
return [...topLevel, ...children];
} else {
return [];
}
}

View file

@ -357,15 +357,18 @@ export default {
false false
); );
if (vinPagesMixin.methods.isPhoneNumber(this.customerQuestions.emailOrSms)) { // if no value due to field being optional, blank both phone and email address
const phone = this.customerQuestions.emailOrSms.replace(/[()]/g, ""); if (!this.customerQuestions.emailOrSms) {
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false); await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
} else { await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
await this.dispatchStoreAction( }
storeActions.SAVE_EMAIL, else {
this.customerQuestions.emailOrSms, if (vinPagesMixin.methods.isPhoneNumber(this.customerQuestions.emailOrSms)) {
false const phone = this.customerQuestions.emailOrSms.replace(/[()]/g, "");
); await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
} else {
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.customerQuestions.emailOrSms, false);
}
} }
await this.dispatchStoreAction( await this.dispatchStoreAction(

View file

@ -311,11 +311,18 @@ export default {
false false
); );
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) { // if no value due to field being optional, blank both phone and email address
const phone = this.emailOrSms.replace(/[()]/g, ""); if (!this.emailOrSms) {
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false); await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
} else { await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false); }
else {
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) {
const phone = this.emailOrSms.replace(/[()]/g, "");
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
} else {
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false);
}
} }
await this.dispatchStoreAction( await this.dispatchStoreAction(

View file

@ -18,8 +18,8 @@
marginTopSizeOverride="1" /> marginTopSizeOverride="1" />
</template> </template>
<locationAlerts cmsWidgetPrefix="LocationAlert-" ref="locationAlerts" /> <locationAlerts cmsWidgetPrefix="LocationAlert-" ref="locationAlerts" />
<datePicker <datePickerForPricingByDay
v-if="!isPricingByDayExperiment" v-if="isPricingByDayExperiment"
customComponentId="dateQuestion" customComponentId="dateQuestion"
selectableDatesSetting="custom" selectableDatesSetting="custom"
ref="datePicker" ref="datePicker"
@ -28,8 +28,8 @@
:customSelectableDatesCallback="getAvailableDatesMethod" :customSelectableDatesCallback="getAvailableDatesMethod"
validationRules="date-required" validationRules="date-required"
@date-clicked="openInshopTimeSlotsModal" /> @date-clicked="openInshopTimeSlotsModal" />
<datePicker2 <datePicker
v-if="isPricingByDayExperiment" v-else
customComponentId="dateQuestion" customComponentId="dateQuestion"
selectableDatesSetting="custom" selectableDatesSetting="custom"
ref="datePicker" ref="datePicker"
@ -81,7 +81,7 @@ import funnelSubHeader from "@/fmg-components/funnel-sub-header/funnel-sub-heade
import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue"; import loadingModal from "@/fmg-components/loading-modal/loading-modal.vue";
import { Form, defineRule } from "vee-validate"; import { Form, defineRule } from "vee-validate";
import datePicker from "@/digital-components/date-picker/date-picker"; import datePicker from "@/digital-components/date-picker/date-picker";
import datePicker2 from "@/experiment-components/date-picker-2"; import datePickerForPricingByDay from "@/experiment-components/date-picker-for-pricing-by-day";
import locationAlerts from "@/layouts/schedule/location-alerts/location-alerts"; import locationAlerts from "@/layouts/schedule/location-alerts/location-alerts";
import timeSlotModalQuestion from "./time-slot-modal-question/time-slot-modal-question"; import timeSlotModalQuestion from "./time-slot-modal-question/time-slot-modal-question";
import textBlock from "@/digital-components/text-block/text-block"; import textBlock from "@/digital-components/text-block/text-block";
@ -227,13 +227,15 @@ export default {
preSelectedDate = null; preSelectedDate = null;
} }
const datePickerInitialDataPromise = await datePicker2.methods.loadInitialData({ const datePickerInitialDataPromise = await datePicker.methods.loadInitialData({
// setup config options for date-picker // setup config options for date-picker
selectableDatesSetting: "custom", selectableDatesSetting: "custom",
initialViewRowsToShow: 5, initialViewRowsToShow: 5,
customSelectableDatesCallback: getAvailableDates, customSelectableDatesCallback: getAvailableDates,
preSelectedDate: preSelectedDate, preSelectedDate: preSelectedDate,
}); });
// TODO - ONCE A DATEPICKER VERSION IS FINALIZED,
// MAKE SURE THE ABOVE METHOD loadInitialData POINTS TO THE RIGHT FILE
const premiumFeePromise = baseMixin.methods.dispatchStoreActionWithLogging( const premiumFeePromise = baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.GET_MOBILE_PREMIUM_FEE, storeActions.GET_MOBILE_PREMIUM_FEE,
@ -559,7 +561,7 @@ export default {
Form, Form,
loadingModal, loadingModal,
datePicker, datePicker,
datePicker2, datePickerForPricingByDay,
locationAlerts, locationAlerts,
timeSlotModalQuestion, timeSlotModalQuestion,
textBlock, textBlock,

View file

@ -330,11 +330,18 @@ export default {
false false
); );
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) { // if no value due to field being optional, blank both phone and email address
const phone = this.emailOrSms.replace(/[()]/g, ""); if (!this.emailOrSms) {
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false); await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
} else { await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false); }
else {
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) {
const phone = this.emailOrSms.replace(/[()]/g, "");
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
} else {
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false);
}
} }
await this.dispatchStoreAction( await this.dispatchStoreAction(
@ -380,11 +387,18 @@ export default {
); );
} }
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) { // if no value due to field being optional, blank both phone and email address
const phone = this.emailOrSms.replace(/[()]/g, ""); if (!this.emailOrSms) {
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false); await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, "", false);
} else { await this.dispatchStoreAction(storeActions.SAVE_EMAIL, "", false);
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false); }
else {
if (vinPagesMixin.methods.isPhoneNumber(this.emailOrSms)) {
const phone = this.emailOrSms.replace(/[()]/g, "");
await this.dispatchStoreAction(storeActions.SAVE_PHONE_NUMBER, phone, false);
} else {
await this.dispatchStoreAction(storeActions.SAVE_EMAIL, this.emailOrSms, false);
}
} }
await this.dispatchStoreAction( await this.dispatchStoreAction(

View file

@ -45,6 +45,7 @@ import {
containsRecalParts, containsRecalParts,
getTopLevelPartsWithRecal, getTopLevelPartsWithRecal,
isRecalPartOrHasChildRecalPart, isRecalPartOrHasChildRecalPart,
getRecalPartNumbers,
} from "@/helpers/recal-helper"; } from "@/helpers/recal-helper";
import { externalParameterStatus } from "@/constants/external-parameters"; import { externalParameterStatus } from "@/constants/external-parameters";
import { experimentSettings } from "@/constants/experiments"; import { experimentSettings } from "@/constants/experiments";
@ -1712,10 +1713,15 @@ export const actions = {
var endPoint = `${endpoints.GetMobileFeePart.url}/?serviceType=${serviceType}&facilityType=${facilityType}&parentAccountNumber=${parentAccountNumber}&billToAccountNumber=${billToAccountNumber}&providerNumber=${providerNumber}&isItacOptimized=${isItacOptimized}&zipCode=${zipCode}`; var endPoint = `${endpoints.GetMobileFeePart.url}/?serviceType=${serviceType}&facilityType=${facilityType}&parentAccountNumber=${parentAccountNumber}&billToAccountNumber=${billToAccountNumber}&providerNumber=${providerNumber}&isItacOptimized=${isItacOptimized}&zipCode=${zipCode}`;
const recalPartNumber = getRecalPartNumber(order.lineItems?.glassParts[0]); const recalPartNumbers = getRecalPartNumbers(order.lineItems?.glassParts);
const carId = order.vehicle?.carId; const carId = order.vehicle?.carId;
if (recalPartNumber && carId) { if (recalPartNumbers && recalPartNumbers.length > 0 && carId) {
endPoint = `${endPoint}&partNumbers=${recalPartNumber}&carId=${carId}`; let additionalQueryParams = ``;
for (let i = 0; i < recalPartNumbers.length; i++) {
additionalQueryParams += `&partNumbers[${i}]=${recalPartNumbers[i]}`;
}
additionalQueryParams += `&carId=${carId}`;
endPoint += additionalQueryParams;
} }
if (coverageStatus) { if (coverageStatus) {
@ -3760,15 +3766,3 @@ function getExternalParameterDefaultState() {
function saveExternalParameterState(externalParameterState) { function saveExternalParameterState(externalParameterState) {
window.sessionStorage.setItem("externalParameterState", JSON.stringify(externalParameterState)); window.sessionStorage.setItem("externalParameterState", JSON.stringify(externalParameterState));
} }
//This function finds the recalibration part and returns the part number for it.
function getRecalPartNumber(glassPartsArray) {
const recalPart = glassPartsArray.childParts.find(
(item) => item.partType === partTypeStrings.ADAS_RECALIBRATION
);
if (recalPart) {
return recalPart.partNumber;
} else {
return null;
}
}