diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js
index 594227f7b..aa0643821 100644
--- a/src/constants/endpoints.js
+++ b/src/constants/endpoints.js
@@ -192,6 +192,14 @@ const endpoints = {
url: "/account/api/v1/account/bill-to-account-number",
method: "GET",
},
+ ClosestApplicableShops: {
+ url: "/location/api/v1/location/closest-applicable-shops",
+ method: "GET",
+ },
+ AddDonationPart: {
+ url: "/order/api/v1/order/add-donation-part",
+ method: "POST",
+ },
};
export { endpoints };
diff --git a/src/constants/session-storage.js b/src/constants/session-storage.js
new file mode 100644
index 000000000..589dd6b71
--- /dev/null
+++ b/src/constants/session-storage.js
@@ -0,0 +1,3 @@
+export const sessionStorageKeyConstants = {
+ SUBMITTED_STATE: "submittedState",
+};
diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js
index e7cb38953..7b76d4064 100644
--- a/src/constants/store-actions.js
+++ b/src/constants/store-actions.js
@@ -55,6 +55,7 @@ const storeActions = {
GET_INSURANCE_COMPANY_LIST: "getInsuranceCompanyList",
GET_BILL_TO_ACCOUNT_NUMBER: "getBillToAccountNumber",
GET_RECAL_PARTS_AND_SAVE_TO_LINE_ITEMS: "getRecalPartsAndSaveToLineItems",
+ GET_CLOSEST_APPLICABLE_SHOPS: "getClosestApplicableShops",
// Analytics
LOG_EXPERIMENT_EXPOSURE_AND_UPDATE_STORE: "logExperimentExposureAndUpdateStore",
@@ -109,9 +110,9 @@ const storeActions = {
SAVE_IS_RECAL_ACK_OPT_IN: "saveIsRecalAckOptIn",
SAVE_IS_MSR_FEE_APPLICABLE: "saveIsMSRFeeApplicable",
- CREATE_SUBMITTED_ORDER: "createSubmittedOrder",
- RESET_SUBMITTED_ORDER: "resetSubmittedOrder",
- ADD_DONATION_TO_SUBMITTED_ORDER: "addDonationToSubmittedOrder",
+ CREATE_SUBMITTED_STATE: "createSubmittedState",
+ RESET_SUBMITTED_STATE: "resetSubmittedState",
+ ADD_DONATION_TO_SUBMITTED_STATE: "addDonationToSubmittedState",
RESET_EXTERNAL_PARAMETER_STATE: "resetExternalParameterState",
UPDATE_EXTERNAL_PARAMETER_MMS: "updateExternalParameterMMS",
diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js
index 69e78138b..2f53d8133 100644
--- a/src/constants/store-mutations.js
+++ b/src/constants/store-mutations.js
@@ -9,6 +9,9 @@ const storeMutations = {
UPDATE_MAKE: "updateMake",
UPDATE_MODEL: "updateModel",
UPDATE_STYLE: "updateStyle",
+ UPDATE_VEHICLE_SUBTYPE: "updateVehicleSubType",
+ UPDATE_VEHICLE_SPECIAL_CLASS: "updateVehicleSpecialClass",
+ UPDATE_IS_BIGTRUCK: "updateIsBigTruck",
UPDATE_CAR_ID: "updateCarId",
UPDATE_VEHICLE_CATEGORY: "updateVehicleCategory",
UPDATE_VEHICLE_IMAGE_URL: "updateVehicleImageUrl",
@@ -16,6 +19,7 @@ const storeMutations = {
UPDATE_VEHICLE_IMAGE_COLOR: "updateVehicleImageColor",
UPDATE_VEHICLE_VIN: "updateVehicleVin",
UPDATE_VEHICLE: "updateVehicle",
+ UPDATE_VEHICLE_CAN_SAFELITE_SERVICE: "updateVehicleCanSafeliteService",
UPDATE_IS_REPAIR: "updateIsRepair",
UPDATE_NUMBER_OF_CHIPS: "updateNumberOfChips",
diff --git a/src/experiment-components/donation-block.vue b/src/experiment-components/donation-block.vue
index c90e6af14..1710440d6 100644
--- a/src/experiment-components/donation-block.vue
+++ b/src/experiment-components/donation-block.vue
@@ -62,11 +62,11 @@
-
+
@@ -261,6 +261,8 @@ export default {
}
.alert {
border: 1px solid $red;
+ margin-top: 0.5rem;
+ margin-bottom: 0.5rem;
}
.btn-success {
background: $green-100;
diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue
index 1cc1bb484..2a715bc93 100644
--- a/src/fmg-components/cart/cart.vue
+++ b/src/fmg-components/cart/cart.vue
@@ -401,11 +401,15 @@ export default {
if (!this.lineItems || this.lineItems.length < 1) {
return [];
}
+ let supportingItemsToAdd = [];
+ if (this.lineItems.supportingItems) {
+ supportingItemsToAdd = this.lineItems.supportingItems.filter(
+ (item) => item.partType !== partTypeStrings.DONATION
+ );
+ }
return [
...(this.lineItems.glassParts ?? []),
- ...(this.lineItems.supportingItems.filter(
- (item) => item.partType !== partTypeStrings.DONATION
- ) ?? []),
+ ...supportingItemsToAdd,
...(this.availableVaps ?? []),
];
},
@@ -1074,11 +1078,7 @@ export default {
const donationLineItem = this.lineItems.supportingItems.find(
(item) => item.partType === partTypeStrings.DONATION
);
- if (donationLineItem?.sellingPrice !== 0) {
- return true;
- } else {
- return false;
- }
+ return !!donationLineItem;
},
donationCartItemName() {
return this.getCmsContent("DonationCartTextWidget", "Text");
@@ -1092,7 +1092,7 @@ export default {
(item) => item.partType === partTypeStrings.DONATION
);
- if (donationLineItem?.sellingPrice > 0) {
+ if (donationLineItem) {
return {
name: this.donationCartItemName,
category: cartItemCategories.SUPPORTING_ITEMS,
diff --git a/src/helpers/experiment-helper.js b/src/helpers/experiment-helper.js
new file mode 100644
index 000000000..c0c094529
--- /dev/null
+++ b/src/helpers/experiment-helper.js
@@ -0,0 +1,20 @@
+export function getExperimentSettingsFromExperimentList(experimentList) {
+ return (
+ experimentList
+ .filter((x) => !!x.isActive)
+ .map((x) => x.settings)
+ .reduce((r, c) => Object.assign(r, c), {}) ?? {}
+ );
+}
+
+export function getSettingValue(settingName, experimentSettings) {
+ return hasSetting(settingName, experimentSettings) ? experimentSettings[settingName] : null;
+}
+
+export function hasSettingEqualTo(settingName, settingValue, experimentSettings) {
+ return experimentSettings[settingName] == settingValue;
+}
+
+export function hasSetting(settingName, experimentSettings) {
+ return Object.hasOwn(experimentSettings, settingName);
+}
diff --git a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue
index 1fef02247..c986e0366 100644
--- a/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue
+++ b/src/layouts/confirmation/add-to-calendar/add-to-calendar.vue
@@ -115,7 +115,7 @@ export default {
},
ServiceType() {
const isRepair = this.getSubmittedOrder()?.damage.isRepair;
- const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedOrder;
+ const funnelHasRecalibrationPart = store.getters.isRecalibrationOnSubmittedState;
if (!isRepair) {
if (funnelHasRecalibrationPart) {
return serviceType.REPLACEMENT_AND_RECALIBRATION;
diff --git a/src/layouts/confirmation/confirmation.vue b/src/layouts/confirmation/confirmation.vue
index 12415226b..af6f9e5ab 100644
--- a/src/layouts/confirmation/confirmation.vue
+++ b/src/layouts/confirmation/confirmation.vue
@@ -63,11 +63,9 @@
:isExpandedOnLoad="false"
:isItac="isItac"
:isNoComp="isNoComp"
- :isMSRFeeApplicable="isMSRFeeApplicable"
- :donationAmount="donationAmount"
- @update-donation-amount="updateDonationAmount" />
+ :isMSRFeeApplicable="isMSRFeeApplicable" />
-
+
item.partType === partNumberStrings.DONATION
+ );
});
},
data() {
@@ -240,28 +248,20 @@ export default {
vaps: [],
submittedOrder: null,
shouldHideRecalibration: null,
+ shouldDisplayFosterLove: null,
donationAmount: 0,
showDonationSuccess: null,
showDonationError: null,
};
},
computed: {
- DisplayFosterLove() {
- return experimentMixin.methods.hasSettingEqualTo(
- experimentSettings.FOSTER_LOVE,
- "true"
- );
- },
isRecalibrationOnOrder() {
return containsRecalParts(this?.lineItems);
},
ShowCart() {
if (this.isPia && this.submittedOrder?.settledTenderAmount == 0) {
- // settleTenderAmount always shows 0 via localhost or dev.
- // Temporarily set return true to see cart in localhost or dev environment
return false;
}
-
return true;
},
ScheduleConfirmationText() {
@@ -539,7 +539,7 @@ export default {
this.showDonationSuccess = true;
this.showDonationError = false;
await baseMixin.methods.dispatchStoreAction(
- storeActions.ADD_DONATION_TO_SUBMITTED_ORDER,
+ storeActions.ADD_DONATION_TO_SUBMITTED_STATE,
parseInt(this.donationAmount),
false
);
diff --git a/src/layouts/payment-pia-return/payment-pia-return.vue b/src/layouts/payment-pia-return/payment-pia-return.vue
index b9f19f64a..f0b4433ea 100644
--- a/src/layouts/payment-pia-return/payment-pia-return.vue
+++ b/src/layouts/payment-pia-return/payment-pia-return.vue
@@ -192,7 +192,7 @@ export default {
}
this.$refs.loadingModal.isModalVisible = false;
- await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER);
+ await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE);
this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_SUCCESS, this.$route);
},
},
diff --git a/src/layouts/payment/payment.vue b/src/layouts/payment/payment.vue
index abf06927b..3c87f85f2 100644
--- a/src/layouts/payment/payment.vue
+++ b/src/layouts/payment/payment.vue
@@ -683,7 +683,7 @@ export default {
submitAfterSave: true,
});
- await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_ORDER);
+ await baseMixin.methods.dispatchStoreAction(storeActions.CREATE_SUBMITTED_STATE);
window.location = applicationConfig.CONFIRMATION_URL;
} catch (error) {
console.log("error: response from submit work order(payment pg):" + error.message);
diff --git a/src/layouts/schedule/schedule.spec.js b/src/layouts/schedule/schedule.spec.js
index 3344e3d27..3a389aec5 100644
--- a/src/layouts/schedule/schedule.spec.js
+++ b/src/layouts/schedule/schedule.spec.js
@@ -7,7 +7,6 @@ import { getMountOptions } from "@/helpers/unit-test-helper.js";
import store from "@/store";
import router from "@/router";
import baseMixin from "../../mixins/base-mixin";
-import { experimentSettings } from "../../constants/experiments";
// Mock basemixin
jest.mock("@/mixins/base-mixin.js", () => ({
@@ -147,6 +146,9 @@ beforeEach(() => {
jest.restoreAllMocks();
jest.clearAllMocks();
store.getters = {
+ applicationUser: {
+ experiments: [],
+ },
order: {
schedule: {
date: "2019-01-01",
diff --git a/src/layouts/schedule/schedule.vue b/src/layouts/schedule/schedule.vue
index fcd20ace1..2fd06d312 100644
--- a/src/layouts/schedule/schedule.vue
+++ b/src/layouts/schedule/schedule.vue
@@ -269,6 +269,8 @@ export default {
const priceString = getAmountDue(lineItemsToBePriced, false); // pass the IncludeTax param as false
const priceStringIntegerRoundedDown = priceString?.split(".")[0]; // same method used as getDisplayPrice() in service-package-radio used on /quote
const pricingByDayBasePrice = parseInt(priceStringIntegerRoundedDown);
+ const payment = store.getters.order.payment;
+ const isInsurance = payment?.isInsurance;
// Check to see if includePricingByDayUpcharge should already be set (based on order lineItems)
let includePricingByDayUpcharge = false;
@@ -276,7 +278,7 @@ export default {
const pricingByDayUpchargeFeeIndex = supportingItemsFromStore?.findIndex(
(item) => item.partType == PRICING_BY_DAY_PART_TYPE
);
- if (pricingByDayUpchargeFeeIndex > -1) {
+ if (pricingByDayUpchargeFeeIndex > -1 && !isInsurance) {
includePricingByDayUpcharge = true;
}
}
@@ -630,26 +632,25 @@ export default {
const supportingItems = this.getSupportingItems();
// if we have a pricing by day upcharge, then save/update supporting items with it
- if (this.showPricingByDay) {
- const pricingByDayUpchargeFeeIndex = supportingItems?.findIndex(
- (item) => item.partType == PRICING_BY_DAY_PART_TYPE
- );
+ const pricingByDayUpchargeFeeIndex = supportingItems?.findIndex(
+ (item) => item.partType == PRICING_BY_DAY_PART_TYPE
+ );
- if (this.includePricingByDayUpcharge) {
- if (pricingByDayUpchargeFeeIndex > -1) {
- supportingItems[pricingByDayUpchargeFeeIndex].laborAmount =
- this.pricingByDayUpchargeLineItem.laborAmount;
- supportingItems[pricingByDayUpchargeFeeIndex].sellingPrice =
- this.pricingByDayUpchargeLineItem.sellingPrice;
- supportingItems[pricingByDayUpchargeFeeIndex].kitPrice =
- this.pricingByDayUpchargeLineItem.kitPrice;
- } else {
- supportingItems.push(this.pricingByDayUpchargeLineItem);
- }
+ if (this.includePricingByDayUpcharge && this.showPricingByDay) {
+ if (pricingByDayUpchargeFeeIndex && pricingByDayUpchargeFeeIndex > -1) {
+ supportingItems[pricingByDayUpchargeFeeIndex].laborAmount =
+ this.pricingByDayUpchargeLineItem.laborAmount;
+ supportingItems[pricingByDayUpchargeFeeIndex].sellingPrice =
+ this.pricingByDayUpchargeLineItem.sellingPrice;
+ supportingItems[pricingByDayUpchargeFeeIndex].kitPrice =
+ this.pricingByDayUpchargeLineItem.kitPrice;
} else {
- if (pricingByDayUpchargeFeeIndex >= 0) {
- supportingItems.splice(pricingByDayUpchargeFeeIndex, 1);
- }
+ supportingItems.push(this.pricingByDayUpchargeLineItem);
+ }
+ } else {
+ if (pricingByDayUpchargeFeeIndex >= 0) {
+ // remove pricing by day upcharge if it already was in store
+ supportingItems.splice(pricingByDayUpchargeFeeIndex, 1);
}
}
diff --git a/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js b/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js
index 7a9ac00d0..106ed892c 100644
--- a/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js
+++ b/src/layouts/service-location/helpers/service-location-helper/service-location-helper.js
@@ -149,6 +149,23 @@ export async function getAvailabilityRating(
return shopStatus;
}
+export async function getClosestApplicableShops(serviceZipCode, carId, pageNameToLog) {
+ if (!serviceZipCode) {
+ return null;
+ }
+
+ const closestShops = await baseMixin.methods.dispatchStoreActionWithLogging(
+ storeActions.GET_CLOSEST_APPLICABLE_SHOPS,
+ {
+ zip: serviceZipCode,
+ carId: carId,
+ },
+ pageNameToLog
+ );
+
+ return closestShops.data;
+}
+
export async function getZipCodeData(serviceZipCode) {
return await baseMixin.methods.getZipCodeData(serviceZipCode, "service-location");
}
diff --git a/src/layouts/service-location/service-location.spec.js b/src/layouts/service-location/service-location.spec.js
index fb34f3921..7dccc1b1e 100644
--- a/src/layouts/service-location/service-location.spec.js
+++ b/src/layouts/service-location/service-location.spec.js
@@ -174,6 +174,7 @@ const mockMixin = {
beforeEach(() => {
store.getters = {
+ applicationUser: { experiments: [] },
lineItems: {
supportingItems: [
{
diff --git a/src/layouts/service-location/service-location.vue b/src/layouts/service-location/service-location.vue
index 56c76bb2d..a85a5bd17 100644
--- a/src/layouts/service-location/service-location.vue
+++ b/src/layouts/service-location/service-location.vue
@@ -15,6 +15,8 @@
editScreenReaderTextCmsWidgetName="ScreenReaderZipEditWidget"
v-model="serviceZipCodeQuestion"
ref="serviceZipCodeQuestion"
+ :carId="carId"
+ :isVehicleHeavyTruck="isVehicleHeavyTruck"
:mobileFeePart="mobileFeePart"
@updated-mobile-fee-part="setMobileFeePart"
@updated-recycle-fee-part="setRecycleFeePart"
@@ -186,9 +188,11 @@ export default {
return {
streetAddress: this.getServiceAddressFromStore(),
apartmentNumberOrBusinessName: this.getServiceAddress2FromStore(),
+ carId: this.getCarIdfromStore(),
city: this.getServiceCityFromStore(),
state: this.getServiceStateFromStore(),
zipCode: this.getServiceZipCodeFromStore(),
+ isVehicleHeavyTruck: this.getIsVehicleHeavyTruckFromStore(),
isVehicleProtected: this.getIsVehicleProtectedFromStore(),
isGlassServiceableInshop: null,
isRecalibrationServiceableInshop: null,
@@ -514,6 +518,9 @@ export default {
});
}
},
+ getCarIdfromStore() {
+ return store.getters.vehicle.carId;
+ },
getServiceAddressFromStore() {
return store.getters.order.serviceLocation.address;
},
@@ -529,6 +536,9 @@ export default {
getServiceZipCodeFromStore() {
return store.getters.order.serviceLocation.zipCode;
},
+ getIsVehicleHeavyTruckFromStore() {
+ return store.getters.order.vehicle?.isBigTruck ?? false;
+ },
getIsVehicleProtectedFromStore() {
return store.getters.order.serviceLocation.isVehicleProtected;
},
diff --git a/src/layouts/service-location/service-zip-modal-question/service-zip-modal-question.vue b/src/layouts/service-location/service-zip-modal-question/service-zip-modal-question.vue
index a2ab4134e..5e7aa73e4 100644
--- a/src/layouts/service-location/service-zip-modal-question/service-zip-modal-question.vue
+++ b/src/layouts/service-location/service-zip-modal-question/service-zip-modal-question.vue
@@ -33,6 +33,13 @@
cmsWidgetName="AlertInvalidZipWidget"
alertClass="alert-danger"
v-bind:isDismissible="false" />
+
@@ -48,6 +55,7 @@ import {
getPricedRecycleFeePart,
getServiceabilityDetails,
getBillToAccountNumber,
+ getClosestApplicableShops,
} from "@/layouts/service-location/helpers/service-location-helper/service-location-helper";
export default {
@@ -63,6 +71,7 @@ export default {
internalModel: this.copyModel(this.modelValue),
serviceZipCodeTextInputId: "",
displayInvalidZipAlert: false,
+ displayNoServiceAlert: false,
};
},
props: {
@@ -73,6 +82,11 @@ export default {
zipCode: "",
}),
},
+ carId: String,
+ isVehicleHeavyTruck: {
+ type: Boolean,
+ default: false,
+ },
mobileFeePart: {
type: Object,
default: () => ({}),
@@ -107,6 +121,7 @@ export default {
methods: {
resetAlerts() {
this.displayInvalidZipAlert = false;
+ this.displayNoServiceAlert = false;
},
resetsOnZipInput() {
this.resetAlerts();
@@ -155,6 +170,22 @@ export default {
this.focusOnZipInput();
this.resetModalButtonStyle();
} else {
+ if (this.isVehicleHeavyTruck) {
+ // check the location endpoint to verify this zip can service a heavy truck
+ const closestShops = await getClosestApplicableShops(
+ this.internalModel.zipCode,
+ this.carId,
+ "service-location"
+ );
+
+ if (!closestShops || closestShops.providers?.length === 0) {
+ this.displayNoServiceAlert = true;
+ this.focusOnZipInput();
+ this.resetModalButtonStyle();
+ return null;
+ }
+ }
+
this.internalModel.state = zipCodeData.state;
this.internalModel.zipCodeCtu = zipCodeData.zipCodeCtu;
diff --git a/src/layouts/service-location/shop-question/shop-question.vue b/src/layouts/service-location/shop-question/shop-question.vue
index 4a7818834..417a3b4c4 100644
--- a/src/layouts/service-location/shop-question/shop-question.vue
+++ b/src/layouts/service-location/shop-question/shop-question.vue
@@ -179,12 +179,12 @@ export default {
}
});
- this.pushEventToGA(
- this.GaCategories.SERVICE_LOCATION,
- gaAction,
- shops.join(","),
- true
- );
+ var joinedShops = shops.join(",");
+ if (!joinedShops) {
+ joinedShops = "no-shops";
+ }
+
+ this.pushEventToGA(this.GaCategories.SERVICE_LOCATION, gaAction, joinedShops, true);
}
if (this.answers.length === 0) {
diff --git a/src/layouts/service-zip/service-zip.spec.js b/src/layouts/service-zip/service-zip.spec.js
index 773157980..3346970cf 100644
--- a/src/layouts/service-zip/service-zip.spec.js
+++ b/src/layouts/service-zip/service-zip.spec.js
@@ -173,9 +173,14 @@ function resetMockStoreData() {
};
}
+const applicationUser = {
+ experiments: [],
+};
+
function applyMockStoreDataToGetters() {
store.getters = {
experimentSettings: mockExperimentSettings,
+ applicationUser: applicationUser,
order: mockStoreData,
damage: mockStoreData.damage,
payment: mockStoreData.payment,
diff --git a/src/layouts/vehicle/vehicle.vue b/src/layouts/vehicle/vehicle.vue
index 12e7268fa..bad52fb02 100644
--- a/src/layouts/vehicle/vehicle.vue
+++ b/src/layouts/vehicle/vehicle.vue
@@ -48,6 +48,19 @@
validationRules="style-required"
placeHolderText="Select style"
customDropdownId="styleQuestionField" />
+
+
+
@@ -557,4 +636,9 @@ export default {
margin-top: 1.5rem;
margin-bottom: 0;
}
+.separator-line {
+ grid-area: 2/1/2/8;
+ border-top: 1px solid $gray-500;
+ margin: 0.5rem 0;
+}
diff --git a/src/mixins/analytics-mixin.js b/src/mixins/analytics-mixin.js
index e59ec5039..d6e608d4b 100644
--- a/src/mixins/analytics-mixin.js
+++ b/src/mixins/analytics-mixin.js
@@ -337,7 +337,7 @@ export default {
// Recalibration
if (hasSubmittedOrder) {
- payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnSubmittedOrder;
+ payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnSubmittedState;
} else {
payload.isRecalibrationOnOrder = store.getters.isRecalibrationOnOrder;
}
diff --git a/src/mixins/analytics-mixin.spec.js b/src/mixins/analytics-mixin.spec.js
index a4b4672bb..711702c4a 100644
--- a/src/mixins/analytics-mixin.spec.js
+++ b/src/mixins/analytics-mixin.spec.js
@@ -425,7 +425,7 @@ describe("analyticsMixin.js", () => {
workOrderId: "222222222222",
};
store.getters.isRecalibrationOnOrder = true;
- store.getters.isRecalibrationOnSubmittedOrder = false;
+ store.getters.isRecalibrationOnSubmittedState = false;
});
test("Pushes to data layer if nominal", () => {
diff --git a/src/mixins/base-mixin.js b/src/mixins/base-mixin.js
index 151d17dd9..b29eae8c1 100644
--- a/src/mixins/base-mixin.js
+++ b/src/mixins/base-mixin.js
@@ -1,6 +1,7 @@
import store from "@/store";
import { storeActions } from "@/constants/store-actions.js";
import { storeMutations } from "@/constants/store-mutations.js";
+import { sessionStorageKeyConstants } from "@/constants/session-storage.js";
import { navigationScenarios } from "@/router/router-constants/navigation-scenarios";
import { vehicleCategories } from "@/constants/vehicle-categories.js";
import { routerParams } from "@/router/router-constants/router-params";
@@ -198,10 +199,26 @@ export default {
}
},
getSubmittedOrder() {
- return JSON.parse(window.sessionStorage.getItem("submittedOrder"));
+ return JSON.parse(
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)
+ )?.order;
},
hasSubmittedOrder() {
- return window.sessionStorage.getItem("submittedOrder") !== null;
+ const submittedState = window.sessionStorage.getItem(
+ sessionStorageKeyConstants.SUBMITTED_STATE
+ );
+ return submittedState !== null && submittedState.order !== null;
+ },
+ getSubmittedApplicationUser() {
+ return JSON.parse(
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)
+ )?.applicationUser;
+ },
+ hasSubmittedApplicationUser() {
+ const submittedState = window.sessionStorage.getItem(
+ sessionStorageKeyConstants.SUBMITTED_STATE
+ );
+ return submittedState !== null && submittedState.applicationUser !== null;
},
},
computed: {
diff --git a/src/mixins/experiment-mixin.js b/src/mixins/experiment-mixin.js
index 11b573683..474945a54 100644
--- a/src/mixins/experiment-mixin.js
+++ b/src/mixins/experiment-mixin.js
@@ -1,17 +1,36 @@
import store from "@/store";
+import * as experimentHelper from "../helpers/experiment-helper";
+
+/*
+ This is a wrapper around experiment-helper.js methods that allows an override
+ to provide a custom list of experiments. At the time of implementation this
+ was necessary for checking submittedState for experiments
+*/
export default {
methods: {
- hasSettingEqualTo(settingName, settingValue) {
- return store.getters.experimentSettings[settingName] == settingValue;
+ hasSettingEqualTo(
+ settingName,
+ settingValue,
+ experimentList = store.getters.applicationUser.experiments
+ ) {
+ const experimentSettings =
+ experimentHelper.getExperimentSettingsFromExperimentList(experimentList);
+ return experimentHelper.hasSettingEqualTo(
+ settingName,
+ settingValue,
+ experimentSettings
+ );
},
- hasSetting(settingName) {
- return Object.hasOwn(store.getters.experimentSettings, settingName);
+ hasSetting(settingName, experimentList = store.getters.applicationUser.experiments) {
+ const experimentSettings =
+ experimentHelper.getExperimentSettingsFromExperimentList(experimentList);
+ return experimentHelper.hasSetting(settingName, experimentSettings);
},
- getSettingValue(settingName) {
- return this.hasSetting(settingName)
- ? store.getters.experimentSettings[settingName]
- : null;
+ getSettingValue(settingName, experimentList = store.getters.applicationUser.experiments) {
+ const experimentSettings =
+ experimentHelper.getExperimentSettingsFromExperimentList(experimentList);
+ return experimentHelper.getSettingValue(settingName, experimentSettings);
},
},
};
diff --git a/src/mixins/experiment-mixin.spec.js b/src/mixins/experiment-mixin.spec.js
index 1b2bff2f5..8dc3df2b6 100644
--- a/src/mixins/experiment-mixin.spec.js
+++ b/src/mixins/experiment-mixin.spec.js
@@ -135,6 +135,15 @@ function setupMocks({ experimentSettings }) {
store.getters = {
experimentSettings: experimentSettings ?? testExperimentSettings,
+ applicationUser: {
+ experiments: [
+ {
+ isActive: true,
+ isExposed: true,
+ settings: experimentSettings ?? testExperimentSettings,
+ },
+ ],
+ },
};
const mockComponent = {
diff --git a/src/router/index.js b/src/router/index.js
index 668a18217..d421ea4ad 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -2,6 +2,7 @@
import { createWebHistory, createRouter } from "vue-router";
import { storeActions } from "@/constants/store-actions";
import { storeMutations } from "../constants/store-mutations";
+import { sessionStorageKeyConstants } from "@/constants/session-storage.js";
import { lazyLoadComponent } from "@/router/dynamic-routing/component-loader.js";
import { routingTable } from "@/router/router-constants/routing-table.js";
import { globalEvents, globalEventTypes } from "@/constants/events";
@@ -98,10 +99,15 @@ const routes = [
log(" --to.query.fmgPage ", to.query?.fmgPage);
// Intercept all navigation if a submitted order exists in storage
- if (window.sessionStorage.getItem("submittedOrder") !== null) {
+ if (
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !==
+ null
+ ) {
if (to.query.fmgPage !== funnelStartPageName) {
to.query.fmgPage = fmgPageValues.CONFIRMATION;
- log(" --has submittedOrder go to confirmation");
+ log(
+ ` --has ${sessionStorageKeyConstants.SUBMITTED_STATE} go to confirmation`
+ );
}
}
// On entering the funnel "fresh", read cookie information, decide what to do next.
diff --git a/src/store/index.js b/src/store/index.js
index 032660c6f..9fec43a77 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,6 +1,7 @@
import { createStore } from "vuex";
import { endpoints } from "@/constants/endpoints.js";
import { storeMutations } from "@/constants/store-mutations";
+import { sessionStorageKeyConstants } from "@/constants/session-storage.js";
import { getDateForSavedSessionTimeout } from "@/helpers/heritage-integration/session-helper";
import createPersistedState from "vuex-persistedstate";
import globalMethods from "@/global-methods";
@@ -20,6 +21,10 @@ import {
} from "@/constants/schedule-constants";
import { getQuerystringParameter } from "@/helpers/querystring-helper";
import { deepClone } from "@/helpers/object-helper";
+import {
+ getExperimentSettingsFromExperimentList,
+ hasSettingEqualTo,
+} from "../helpers/experiment-helper";
import { queryStrings } from "@/constants/query-strings";
import { partTypeStrings } from "@/constants/part-type-strings";
import {
@@ -61,9 +66,13 @@ const getDefaultState = () => {
make: null,
model: null,
style: null,
+ vehicleSubType: null,
+ vehicleSpecialClass: null,
+ isBigTruck: false,
carId: null,
category: null,
vin: null,
+ canSafeliteService: null,
imageUrl: null,
imageVifNumber: null,
imageColor: null,
@@ -211,12 +220,24 @@ export const mutations = {
updateStyle(state, style) {
state.order.vehicle.style = style;
},
+ updateVehicleSubType(state, vehicleSubType) {
+ state.order.vehicle.vehicleSubType = vehicleSubType;
+ },
+ updateVehicleSpecialClass(state, vehicleSpecialClass) {
+ state.order.vehicle.vehicleSpecialClass = vehicleSpecialClass;
+ },
+ updateIsBigTruck(state, isBigTruck) {
+ state.order.vehicle.isBigTruck = isBigTruck;
+ },
updateCarId(state, carId) {
state.order.vehicle.carId = carId;
},
updateVehicleCategory(state, category) {
state.order.vehicle.category = category;
},
+ updateVehicleCanSafeliteService(state, canSafeliteService) {
+ state.order.vehicle.canSafeliteService = canSafeliteService;
+ },
updateVehicleImageUrl(state, imageUrl) {
state.order.vehicle.imageUrl = imageUrl;
},
@@ -822,8 +843,10 @@ export const getters = {
},
coverageIsVerified: (state) => {
let order;
- if (window.sessionStorage.getItem("submittedOrder") !== null) {
- order = JSON.parse(window.sessionStorage.getItem("submittedOrder"));
+ if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) {
+ order = JSON.parse(
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)
+ ).order;
} else {
order = state.order;
}
@@ -850,31 +873,34 @@ export const getters = {
isRecalibrationOnOrder: (state) => {
return getHasRecalibrationPart(state);
},
- isRecalibrationOnSubmittedOrder: (state) => {
- if (window.sessionStorage.getItem("submittedOrder") !== null) {
+ isRecalibrationOnSubmittedState: (state) => {
+ if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) {
return getHasRecalibrationPart({
- order: JSON.parse(window.sessionStorage.getItem("submittedOrder")),
+ order: JSON.parse(
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)
+ ).order,
});
}
-
return false;
},
shouldHideRecalibration: (state) => {
- var order;
- if (window.sessionStorage.getItem("submittedOrder") !== null) {
- order = JSON.parse(window.sessionStorage.getItem("submittedOrder"));
- } else {
- order = state.order;
+ if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) {
+ state = JSON.parse(
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)
+ );
}
-
+ let order = state.order;
+ let applicationUser = state.applicationUser;
if (order.payment.isInsurance) {
return false;
}
return (
- experimentMixin.methods
- .getSettingValue(experimentSettings.RECAL_PRICE_REMOVE)
- ?.toLowerCase() === "true" && getters.isRecalibrationOnOrder(state)
+ hasSettingEqualTo(
+ experimentSettings.RECAL_PRICE_REMOVE,
+ "true",
+ getExperimentSettingsFromExperimentList(applicationUser.experiments)
+ ) && getters.isRecalibrationOnOrder(state)
);
},
areRearWipersOnOrder: (state) => {
@@ -974,10 +1000,7 @@ export const getters = {
};
},
experimentSettings: (state) =>
- state.applicationUser.experiments
- .filter((x) => !!x.isActive)
- .map((x) => x.settings)
- .reduce((r, c) => Object.assign(r, c), {}) ?? {},
+ getExperimentSettingsFromExperimentList(state.applicationUser.experiments),
isVerifiedAndDeductibleZeroConfirmed: (state) => {
// used in CMS on /payment-method in Header Sub Text, for FunnelSubHeaderWidget on cart pages
@@ -1241,6 +1264,15 @@ export const actions = {
});
},
+ getClosestApplicableShops(context, { payload: { zip, carId }, pageNameToLog }) {
+ return globalMethods.callHttpClient({
+ methods: endpoints.ClosestApplicableShops.method,
+ endpoint: `${endpoints.ClosestApplicableShops.url}/${zip}/${carId}`,
+ logApiCall: true,
+ pageNameToLog: pageNameToLog,
+ });
+ },
+
// Dependency Actions
resetVehicleStateAndDependencies(context) {
context.commit(storeMutations.RESET_VEHICLE_STATE);
@@ -1828,6 +1860,8 @@ export const actions = {
endPoint += `&${glassPieces}`;
}
+ endPoint += `&isHeavyTruckVehicle=${context.getters.order.vehicle.isBigTruck}`;
+
return globalMethods.callHttpClient({
method: endpoints.GetServiceabilityDetails.method,
endpoint: endPoint,
@@ -1854,6 +1888,8 @@ export const actions = {
if (windshieldPartWithRecal) {
url += `/${windshieldPartWithRecal.partNumber}`;
}
+ //heavy truck vehicle
+ url += `/${context.getters.order.vehicle.isBigTruck}`;
return globalMethods.callHttpClient({
method: endpoints.GetProviders.method,
@@ -1892,96 +1928,48 @@ export const actions = {
pageNameToLog: pageNameToLog,
});
},
- submitDonationPartToSV2(
+ async submitDonationPartToSV2(
context,
{ payload: { donationAmount, submittedOrder }, pageNameToLog }
) {
- donationAmount = parseInt(donationAmount);
- /* Request contract
- {
- "donationAmount": 5,
- "savedSessionId": "96b1a16e-410a-4d08-8421-fe36e82b2275",
- "paymentInfo": {
- "parentAccountNumber": 167132,
- "billToAccountNumber": 87291,
- "providerNumber": "005819",
- "carId": "CR00069266",
- "make": "Acura",
- "model": "MDX",
- "year": 2020,
- "eon": "S1820397",
- "zipCode": "43015",
- "state": "OH",
- "referralNumber": "1821895",
- "referralDate": "2025-03-20T16:27:38.93",
- "referralSequenceNumber": "1821895",
- "serviceZipCode": "43015",
- "isReplacement": true,
- "deductible": 0,
- "coverageStatus": null,
- "coverageSubStatus": null,
- "serverData": "ZtCNOF1tCLQBAx2NRKHE/n/fqD8zUxRfYtDuTu7uUiPpeg7i6TmwXwggssX5KsXVQbeft+PN+vXYfBFJytLVYgbafNDR0JH3izVTIOh7KGTeB6YaPuCJmodF4SfgVVDHD9LEmEH9wNzM9j3pFjgfXehOFH11SH9dNwTkXIbsGzAeu64DRyJsDdpamM/BPOxlJj60S/R8vnUM8mjyM7B9a63NskFI6BCVIh5mxDE4cSMUgb4zFtwvDgTPxJSwXqKShtoY6ryB8n5UPNkG/Z5tjVuJ7/8RV7WrURM7PN7xLfp6pVEeipWyeFnVEK33G9JOuB6yH75jPO6vMCYRNi0p0pg6laasFDy3hmfuy2W/N0qtcJLVa5N0bUMFFuPQusyEeqsEZ/zx1Srlvsk7i0DF8pTyBcm3JTF5BOWm60wg3ntEOqfRuQqzFc5updILwLAIp39CwJG/fs5Mj3HCDcUKwYlK70fAARtJwFu7wI0vqW5bUSUvJkvm1JRPlyWJ8JNY4Oq1apYqhZS9bps5ofgiOYJbBhPEboEnVukoTkQiYjgbMtBwVGKGL2nNEd77osoEg1KXhEQS+0KD3PoUu/bZkGub6FNGE6iKeFPt9gDSs+S21s22rVSaZkgaoC6SkufPpN6aV78Jx69nMIDd4go4pj2IJX4kS1pD1NEOSWjN4bgVKAtV6/bxBvhNJwnqUE+mE8eAmULsezub4LMhPqA58y/ZlO44jt/qkAw9nuVDRPBve+TdJTotID5dIqJJd6/vkDoHTVaSrbkCBbdG6d9By8AEbKuVrQS/+VurUnYEd2TGahPbOyRdNlud8RB4+4af0ZRFmiKkr6ppa5IbHbTIZ2qtyeOSbIOkv8O7xK/GL6e6Iaaz0wDHaQZC4Ea8FczjpFOlQgixfYcYJBb/W2db+uRvZ3lftVyJ/d082CGbYplOa+aTxymVcQSjBRbXzs6GZ2ytDqRYcRe94F9x/XSVj7g+mih7VS+YH0eOEp0ViTuWP8B1dVnOV5yTkdMbr8n9Q82G4v5brtQdiMDMY3HS6mxPb1IiKiqFX6Jgju8sIMxkJFZQ3iIkAJuOqUYkG1ZW7s4uI6hT46bRqzYaQA18CFu56qaMblOBFuxlJIsYsnMePh2xAH89oay5Kc88xwT2T/4+dzYQ0CqhQ4MTBB7nXelav2rMCjaLQ/V/a5r1TnLr2n0GbvODQeNl97qzi5lDYKlnuF8nOfOqZNOsPSsrsk3UZJJYZwNxDZaweHIeeg5P2ZW5agswPx/U5DkU1MzE1VAQ+DQAenaE2SLo4dSPBHMmt2gLpgu0LaCuzTR2IL/EM+Tpdn/Pcv1E7lPJIycIIwO7QGJcVkwCx8CJ/WCo6xDMq+9zjSVbqAaL5MzySZCeFCMyZxvEk7qXig6rflB3K3Jay4qSFjBxBXhOEuT6zKXyhR41IXRtZRmtPkscypFEUXvR5nJV7AQUIbljGEcikOLmSiCEnl8dI2Ny9xCHLOro8UXqVUy8dHGmTRGTE/mS1JNZ3y4XaZSyHcABVWbZcR3KIXVxd6rtUA/pBvWpbq8nH3WWlJGqkoxUVEridtXqcBuzTKg3/i6vLs0/pHGwdM38XizKcIxykvJrur3vEQ=="
- }
- }
- */
+ const state = JSON.parse(
+ window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE)
+ );
+ const order = state.order;
+ const payload = {
+ donationAmount: parseInt(donationAmount),
+ savedSessionId: state.applicationUser.savedSessionId,
+ paymentInfo: {
+ parentAccountNumber: order.payment.parentAccountNumber,
+ billToAccountNumber: order.payment.billToAccountNumber,
+ providerNumber: order.serviceLocation.provider.providerNumber,
+ carId: order.vehicle.carId,
+ make: order.vehicle.make,
+ model: order.vehicle.model,
+ year: order.vehicle.year,
+ eon: order.eon,
+ zipCode: order.serviceLocation.zipCode,
+ state: order.serviceLocation.state,
+ referralNumber: order.referralNumber,
+ referralDate: order.referralDate,
+ referralSequenceNumber: order.referralSequenceNumber,
+ serviceZipCode: order.serviceLocation.zipCode,
+ isReplacement: !order.damage.isRepair,
+ deductible: order.policy.currentDeductible,
+ coverageStatus: order.payment.insuranceCoverage.coverageStatus,
+ coverageSubStatus: order.payment.insuranceCoverage.coverageSubStatus,
+ serverData: order.lineItems.serverData,
+ },
+ };
- /* Uncomment and use when endpoint integration is finalized
- return globalMethods.callHttpClient({
+ const response = await globalMethods.callHttpClient({
method: endpoints.AddDonationPart.method,
endpoint: endpoints.AddDonationPart.url,
- payload: {
- donationAmount: donationAmount,
- savedSessionId: "96b1a16e-410a-4d08-8421-fe36e82b2275",
- paymentInfo: {
- parentAccountNumber: submittedSessionData.parentAccountNumber,
- billToAccountNumber: submittedSessionData.billToAccountNumber,
- providerNumber: submittedSessionData.providerNumber,
- carId: "CR00069266",
- make: "Acura",
- model: "MDX",
- year: 2020,
- eon: "S1820397",
- zipCode: "43015",
- state: "OH",
- referralNumber: "1821895",
- referralDate: "2025-03-20T16:27:38.93",
- referralSequenceNumber: "1821895",
- serviceZipCode: "43015",
- isReplacement: true,
- deductible: 0,
- coverageStatus: null,
- coverageSubStatus: null,
- serverData: "ZtCNOF1tCLQBAx2NRKHE/n/fqD8zUxRfYtDuTu7uUiPpeg7i6TmwXwggssX5KsXVQbeft+PN+vXYfBFJytLVYgbafNDR0JH3izVTIOh7KGTeB6YaPuCJmodF4SfgVVDHD9LEmEH9wNzM9j3pFjgfXehOFH11SH9dNwTkXIbsGzAeu64DRyJsDdpamM/BPOxlJj60S/R8vnUM8mjyM7B9a63NskFI6BCVIh5mxDE4cSMUgb4zFtwvDgTPxJSwXqKShtoY6ryB8n5UPNkG/Z5tjVuJ7/8RV7WrURM7PN7xLfp6pVEeipWyeFnVEK33G9JOuB6yH75jPO6vMCYRNi0p0pg6laasFDy3hmfuy2W/N0qtcJLVa5N0bUMFFuPQusyEeqsEZ/zx1Srlvsk7i0DF8pTyBcm3JTF5BOWm60wg3ntEOqfRuQqzFc5updILwLAIp39CwJG/fs5Mj3HCDcUKwYlK70fAARtJwFu7wI0vqW5bUSUvJkvm1JRPlyWJ8JNY4Oq1apYqhZS9bps5ofgiOYJbBhPEboEnVukoTkQiYjgbMtBwVGKGL2nNEd77osoEg1KXhEQS+0KD3PoUu/bZkGub6FNGE6iKeFPt9gDSs+S21s22rVSaZkgaoC6SkufPpN6aV78Jx69nMIDd4go4pj2IJX4kS1pD1NEOSWjN4bgVKAtV6/bxBvhNJwnqUE+mE8eAmULsezub4LMhPqA58y/ZlO44jt/qkAw9nuVDRPBve+TdJTotID5dIqJJd6/vkDoHTVaSrbkCBbdG6d9By8AEbKuVrQS/+VurUnYEd2TGahPbOyRdNlud8RB4+4af0ZRFmiKkr6ppa5IbHbTIZ2qtyeOSbIOkv8O7xK/GL6e6Iaaz0wDHaQZC4Ea8FczjpFOlQgixfYcYJBb/W2db+uRvZ3lftVyJ/d082CGbYplOa+aTxymVcQSjBRbXzs6GZ2ytDqRYcRe94F9x/XSVj7g+mih7VS+YH0eOEp0ViTuWP8B1dVnOV5yTkdMbr8n9Q82G4v5brtQdiMDMY3HS6mxPb1IiKiqFX6Jgju8sIMxkJFZQ3iIkAJuOqUYkG1ZW7s4uI6hT46bRqzYaQA18CFu56qaMblOBFuxlJIsYsnMePh2xAH89oay5Kc88xwT2T/4+dzYQ0CqhQ4MTBB7nXelav2rMCjaLQ/V/a5r1TnLr2n0GbvODQeNl97qzi5lDYKlnuF8nOfOqZNOsPSsrsk3UZJJYZwNxDZaweHIeeg5P2ZW5agswPx/U5DkU1MzE1VAQ+DQAenaE2SLo4dSPBHMmt2gLpgu0LaCuzTR2IL/EM+Tpdn/Pcv1E7lPJIycIIwO7QGJcVkwCx8CJ/WCo6xDMq+9zjSVbqAaL5MzySZCeFCMyZxvEk7qXig6rflB3K3Jay4qSFjBxBXhOEuT6zKXyhR41IXRtZRmtPkscypFEUXvR5nJV7AQUIbljGEcikOLmSiCEnl8dI2Ny9xCHLOro8UXqVUy8dHGmTRGTE/mS1JNZ3y4XaZSyHcABVWbZcR3KIXVxd6rtUA/pBvWpbq8nH3WWlJGqkoxUVEridtXqcBuzTKg3/i6vLs0/pHGwdM38XizKcIxykvJrur3vEQ=="
- }
- },
+ payload: payload,
logApiCall: true,
pageNameToLog: pageNameToLog,
});
- */
-
- /* Response contract
- {
- "wasSuccessful": true,
- "wasLocked": true
- }
- */
- let result;
-
- switch (donationAmount) {
- case 1:
- result = { wasSuccessful: true, wasLocked: false };
- break;
- case 3:
- result = { wasSuccessful: false, wasLocked: true };
- break;
- case 5:
- result = { wasSuccessful: false, wasLocked: false };
- break;
- default:
- result = { wasSuccessful: null, wasLocked: null }; // Default case if amount doesn't match
- }
-
- return result;
+ return response.data;
},
getPartFromCapabilityQuestionAnswer(context, { payload, pageNameToLog }) {
@@ -2176,6 +2164,9 @@ export const actions = {
year: vehicle.year,
make: vehicle.make,
model: vehicle.model,
+ subType: vehicle.vehicleSubType,
+ specialClass: vehicle.vehicleSpecialClass,
+ isBigTruck: vehicle.isBigTruck,
isInsurance: order.payment.isInsurance ?? false,
isVerified: order.payment.insuranceCoverage.isVerified ?? false,
lineItems: {
@@ -2229,6 +2220,9 @@ export const actions = {
model: vehicle.model,
style: vehicle.style,
vin: vehicle.vin,
+ vehicleSubType: vehicle.vehicleSubType,
+ vehicleSpecialClass: vehicle.vehicleSpecialClass,
+ isBigTruck: vehicle.isBigTruck,
registration: {
firstName: vehicle.registration.firstName,
lastName: vehicle.registration.lastName,
@@ -2439,7 +2433,21 @@ export const actions = {
// Vehicle
saveVehicle(
context,
- { year, make, model, style, carId, category, imageUrl, imageVifNumber, imageVifColor }
+ {
+ year,
+ make,
+ model,
+ style,
+ vehicleSubType,
+ vehicleSpecialClass,
+ isBigTruck,
+ carId,
+ category,
+ canSafeliteService,
+ imageUrl,
+ imageVifNumber,
+ imageVifColor,
+ }
) {
if (
context.state.order.vehicle.year != year ||
@@ -2455,8 +2463,12 @@ export const actions = {
context.commit(storeMutations.UPDATE_MAKE, make);
context.commit(storeMutations.UPDATE_MODEL, model);
context.commit(storeMutations.UPDATE_STYLE, style);
+ context.commit(storeMutations.UPDATE_VEHICLE_SUBTYPE, vehicleSubType);
+ context.commit(storeMutations.UPDATE_VEHICLE_SPECIAL_CLASS, vehicleSpecialClass);
+ context.commit(storeMutations.UPDATE_IS_BIGTRUCK, isBigTruck);
context.commit(storeMutations.UPDATE_CAR_ID, carId);
context.commit(storeMutations.UPDATE_VEHICLE_CATEGORY, category);
+ context.commit(storeMutations.UPDATE_VEHICLE_CAN_SAFELITE_SERVICE, canSafeliteService);
context.commit(storeMutations.UPDATE_VEHICLE_IMAGE_URL, imageUrl);
context.commit(storeMutations.UPDATE_VEHICLE_IMAGE_VIF_NUMBER, imageVifNumber);
context.commit(storeMutations.UPDATE_VEHICLE_IMAGE_COLOR, imageVifColor);
@@ -3257,19 +3269,25 @@ export const actions = {
return false;
},
- createSubmittedOrder(context) {
- if (window.sessionStorage.getItem("submittedOrder") !== null) {
+ createSubmittedState(context) {
+ if (window.sessionStorage.getItem(sessionStorageKeyConstants.SUBMITTED_STATE) !== null) {
return;
}
// create a submitted order object from vuex.
- const submittedOrder = context.state.order;
+ const submittedState = {
+ order: context.state.order,
+ applicationUser: context.state.applicationUser,
+ };
const experiments = context.state.applicationUser.experiments;
const affiliateCookies = context.state.applicationUser.affiliateCookies;
// set to local storage
- window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder));
+ window.sessionStorage.setItem(
+ sessionStorageKeyConstants.SUBMITTED_STATE,
+ JSON.stringify(submittedState)
+ );
window.sessionStorage.setItem("createNewSessionForHeritage", true);
// clear vuex
@@ -3288,45 +3306,38 @@ export const actions = {
context.commit(storeMutations.UPDATE_AFFILIATE_COOKIES, affiliateCookies);
},
- addDonationToSubmittedOrder(context, donationAmount) {
- console.log("running addDonationToSubmittedOrder()... donationAmount: ", donationAmount);
-
+ addDonationToSubmittedState(context, donationAmount) {
const submittedOrder = deepClone(baseMixin.methods.getSubmittedOrder());
+ const submittedApplicationUser = deepClone(baseMixin.methods.getSubmittedApplicationUser());
- if (donationAmount > 0) {
- console.log(
- "running addDonationToSubmittedOrder()... adding donation to supportingItems in session storage "
- );
- submittedOrder.lineItems.supportingItems.push({
- partNumber: `DONATION_${donationAmount}`,
- description: `DONATION $${donationAmount}`,
- partType: partTypeStrings.DONATION,
- isInsurable: false,
- isChildPart: false,
- laborAmount: 0,
- sellingPrice: donationAmount,
- kitPrice: 0,
- salesTax: 0,
- id: `donation-${donationAmount}`,
- });
- } else {
- // filter out all donations
- console.log(
- "running addDonationToSubmittedOrder()... removing all donation items in supportingItems in session storage "
- );
+ submittedOrder.lineItems.supportingItems.push({
+ partNumber: `DONATION_${donationAmount}`,
+ description: `DONATION $${donationAmount}`,
+ partType: partTypeStrings.DONATION,
+ isInsurable: false,
+ isChildPart: false,
+ laborAmount: 0,
+ sellingPrice: donationAmount,
+ kitPrice: 0,
+ salesTax: 0,
+ });
- const nonDonationItems = submittedOrder.lineItems.supportingItems.filter((item) => {
- return item.partType !== "DONATION";
- });
- submittedOrder.lineItems.supportingItems = nonDonationItems;
- }
+ addGuidToLineItemsIfNotAlreadyThere(submittedOrder.lineItems.supportingItems);
+
+ const submittedState = {
+ order: submittedOrder,
+ applicationUser: submittedApplicationUser,
+ };
// set to local storage
- window.sessionStorage.setItem("submittedOrder", JSON.stringify(submittedOrder));
+ window.sessionStorage.setItem(
+ sessionStorageKeyConstants.SUBMITTED_STATE,
+ JSON.stringify(submittedState)
+ );
},
- resetSubmittedOrder(context) {
+ resetSubmittedState(context) {
// clear from local storage
- window.sessionStorage.removeItem("submittedOrder");
+ window.sessionStorage.removeItem(sessionStorageKeyConstants.SUBMITTED_STATE);
},
resetExternalParameterState(context) {
if (context.getters.isExternalParameter) {