Merge branch 'release/2025.04.10' into rlsmerge/2025.04.10-to-develop

This commit is contained in:
CarlNation 2025-04-02 08:17:59 -04:00
commit d91889d161
15 changed files with 262 additions and 75 deletions

View file

@ -11,6 +11,7 @@ const cartItemTypes = {
EARLY_BIRD: "EARLY BIRD",
SUPPLIES_REPAIR: "SUPPLIES-REPAIR",
SERVICE_PACKAGE_DISCOUNT: "SERVICE PACKAGE DISCOUNT",
DONATION: "DONATION",
};
export { cartItemTypes };

View file

@ -2,6 +2,7 @@ const experimentUniverses = {
CONCEPT_FUNNEL: "ConceptFunnel",
RECAL_PRICE_REMOVAL: "NextGen_RecalPriceRemoval",
MSR: "MSR",
IGQ_SkipQuote: "NextGen_IGQSkipToInsurance",
};
const experimentSettings = {
@ -22,6 +23,7 @@ const experimentSettings = {
WAITLIST_THRESHOLD_DAYS: "Waitlist_Threshold_Days",
PRICING_BY_DAY: "DisplayPricingByDay",
FOSTER_LOVE: "DisplayFosterLove",
SKIP_TO_INSURANCE: "SkipToInsurance",
};
const experimentTriggers = {

View file

@ -3,3 +3,9 @@ export const packageNames = {
TIER_TWO: "TierTwo",
TIER_THREE: "TierThree",
};
export const externalParamPackageLabels = {
GLASS_ONLY: "glassonly",
STANDARD: "standard",
PREMIUM: "premium",
};

View file

@ -10,6 +10,7 @@ const partTypeStrings = {
REPAIR_FEE: "REPAIR FEE",
EARLY_BIRD: "EARLY BIRD",
SERVICE_PACKAGE_DISCOUNT: "SERVICE PACKAGE DISCOUNT",
DONATION: "DONATION",
};
export { partTypeStrings };

View file

@ -27,6 +27,7 @@ const storeActions = {
GET_RAIN_DEFENSE: "getRainDefense",
GET_SUPPORTING_ITEMS: "getSupportingItems",
GET_CAPABILITY_QUESTIONS: "getCapabilityQuestions",
SUBMIT_DONATION_PART_TO_SV2: "submitDonationPartToSV2",
GET_PART_FROM_CAPABILITY_QUESTION_ANSWER: "getPartFromCapabilityQuestionAnswer",
GET_MOLDING_QUESTIONS: "getMoldingQuestions",
GET_MOBILE_FEE_PART: "getMobileFeePart",

View file

@ -54,7 +54,7 @@
<div class="col-12">
<button
class="btn btn-secondary w-100 mb-2"
v-html="DonationAddButtonWidget"></button>
v-html="DonationAddButtonCopy"></button>
</div>
</div>
</div>
@ -108,7 +108,7 @@ export default {
DonationBodySubText() {
return this.getCmsContent(this.cmsWidgetName, "BodyText2");
},
DonationAddButtonWidget() {
DonationAddButtonCopy() {
return this.getCmsContent("DonationAddButtonWidget", "Text");
},
DonationThanksAlertWidget() {
@ -126,6 +126,7 @@ export default {
},
set: function (newValue) {
this.$emit("update:modelValue", newValue);
this.$emit("DonationAddedEvent");
},
},
},

View file

@ -403,7 +403,9 @@ export default {
}
return [
...(this.lineItems.glassParts ?? []),
...(this.lineItems.supportingItems ?? []),
...(this.lineItems.supportingItems.filter(
(item) => item.partType !== partTypeStrings.DONATION
) ?? []),
...(this.availableVaps ?? []),
];
},
@ -466,6 +468,10 @@ export default {
});
}
if (this.donationCartItem) {
cartItems.push(this.donationCartItem);
}
return cartItems;
},
},
@ -1064,6 +1070,46 @@ export default {
return promoCartItems;
},
showDonationCartItem() {
const donationLineItem = this.lineItems.supportingItems.find(
(item) => item.partType === partTypeStrings.DONATION
);
if (donationLineItem?.sellingPrice !== 0) {
return true;
} else {
return false;
}
},
donationCartItemName() {
return this.getCmsContent("DonationCartTextWidget", "Text");
},
donationCartItem() {
if (!this.lineItems || !this.lineItems.supportingItems) {
return null;
}
const donationLineItem = this.lineItems.supportingItems.find(
(item) => item.partType === partTypeStrings.DONATION
);
if (donationLineItem?.sellingPrice > 0) {
return {
name: this.donationCartItemName,
category: cartItemCategories.SUPPORTING_ITEMS,
cartItemType: cartItemTypes.DONATION,
isDisplayed: true,
isRemovable: false,
subTotal: donationLineItem.sellingPrice,
salesTax: 0,
lineItems: [],
isCoveredByInsurance: cartItemTypesCoveredByInsurance.includes(
cartItemTypes.DONATION
),
};
}
return null;
},
removeLinkText() {
return this.getCmsContent("RemoveCartItemTextWidget", "Text");
},

View file

@ -1,6 +1,6 @@
import { partTypeStrings } from "@/constants/part-type-strings";
import { damageLocationsSelected as glassLocations } from "@/constants/damage-locations-selected";
import { packageNames } from "@/constants/package-names";
import { packageNames, externalParamPackageLabels } from "@/constants/package-names";
import baseMixin from "@/mixins/base-mixin.js";
import { getItemsWithoutRecalParts } from "@/helpers/recal-helper";
import {
@ -238,9 +238,9 @@ export function getHighestFullySatisfiedTier(glassToReplace, availableLineItems,
export function getPackageNameByType(packageType) {
const package_names = {
glassonly: packageNames.TIER_ONE,
standard: packageNames.TIER_TWO,
premium: packageNames.TIER_THREE,
[externalParamPackageLabels.GLASS_ONLY]: packageNames.TIER_ONE,
[externalParamPackageLabels.STANDARD]: packageNames.TIER_TWO,
[externalParamPackageLabels.PREMIUM]: packageNames.TIER_THREE,
};
return package_names[packageType] || null;
}

View file

@ -63,7 +63,9 @@
:isExpandedOnLoad="false"
:isItac="isItac"
:isNoComp="isNoComp"
:isMSRFeeApplicable="isMSRFeeApplicable" />
:isMSRFeeApplicable="isMSRFeeApplicable"
:donationAmount="donationAmount"
@update-donation-amount="updateDonationAmount" />
<div class="mt-3" v-if="DisplayFosterLove">
<donationBlock
@ -71,7 +73,8 @@
v-model="donationAmount"
:donationValues="donationValues"
:showDonationSuccess="showDonationSuccess"
:showDonationError="showDonationError" />
:showDonationError="showDonationError"
@DonationAddedEvent="addDonationToOrder" />
</div>
<hr class="mb-5" />
@ -522,61 +525,29 @@ export default {
forwardButtonAction() {
window.location.assign(location.protocol + "//" + location.host);
},
async addDonation(amount, plateTemp) {
// try to call API to add donation to order
// TEMP DUMMY CALL TO SIMULATE SUCCESS OR ERROR FROM API CALL
const donationResponse = this.createMockedResponse(amount);
async addDonationToOrder() {
const donationResponse = await baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.SUBMIT_DONATION_PART_TO_SV2,
{
donationAmount: parseInt(this.donationAmount),
submittedOrder: this.submittedOrder,
},
false
);
if (donationResponse?.wasSuccessful) {
this.showDonationSuccess = true;
this.showDonationError = false;
const donationResponse = await baseMixin.methods.dispatchStoreAction(
await baseMixin.methods.dispatchStoreAction(
storeActions.ADD_DONATION_TO_SUBMITTED_ORDER,
amount,
parseInt(this.donationAmount),
false
);
this.lineItems = deepClone(this.getSubmittedOrder().lineItems);
} else {
this.showDonationError = true;
this.showDonationSuccess = false;
const donationResponse = await baseMixin.methods.dispatchStoreAction(
storeActions.ADD_DONATION_TO_SUBMITTED_ORDER,
0,
false
);
}
},
//mocked response. should be removed once integrate with actual api call.
createMockedResponse(amount) {
let result;
switch (amount) {
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;
},
},
watch: {
donationAmount(newValue) {
newValue = parseInt(newValue);
// this.addDonation(newValue);
// TODO - when backend code is final, then remove the below and restore the line above
if (newValue === 5) {
this.addDonation(newValue, "FAILING_PLATE"); // throws error
} else {
this.addDonation(newValue, "2fast"); // should give successful response
this.donationAmount = 0;
}
},
},

View file

@ -836,6 +836,7 @@ describe("quote.vue", () => {
nextFunction
);
await nextTick();
await nextTick();
expect(nextFunction).toHaveBeenCalled();
expect(baseMixin.methods.isFormValid).toHaveBeenCalled();
expect(baseMixin.methods.isFormValid()).toBe(true);

View file

@ -134,7 +134,7 @@ import { storeActions } from "@/constants/store-actions";
import { deepClone } from "@/helpers/object-helper";
import store from "@/store";
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
import { experimentSettings } from "@/constants/experiments";
import { experimentSettings, experimentUniverses } from "@/constants/experiments";
import { required } from "@/helpers/validation-rules";
import { errorMessages } from "@/constants/error-messages";
import { Form, defineRule } from "vee-validate";
@ -154,12 +154,18 @@ import {
findLineItemsWithPartType,
} from "@/helpers/service-package-helper";
import { nextTick } from "vue";
import { packageNames } from "@/constants/package-names";
import { packageNames, externalParamPackageLabels } from "@/constants/package-names";
import { navigateToHeritageFunnel } from "@/helpers/heritage-integration/navigation-helper";
import { containsRecalParts } from "@/helpers/recal-helper";
import { externalParameterStatus } from "@/constants/external-parameters";
import { saveQuote } from "@/helpers/heritage-integration/order-helper.js";
import { getBoolFromString } from "@/helpers/boolean-helper";
import {
getSessionKeyValue,
getUserIdValue,
getDeviceIdValue,
} from "@/helpers/heritage-integration/cookie-helper";
import { showFmgLoadingModal } from "@/helpers/loading-modal-helper";
defineRule("option-required", required(errorMessages.OPTION_REQUIRED));
@ -189,6 +195,31 @@ export default {
"quote"
);
const shouldExposeSkipQuote = store.getters.isRecalibrationOnOrder;
const skipQuoteExperiment = store.getters.applicationUser.experiments.find(
(e) => e.universeName === experimentUniverses.IGQ_SkipQuote
);
const hasExposedSkipQuote = skipQuoteExperiment?.isExposed;
const shouldSendExposeRequest =
shouldExposeSkipQuote && !hasExposedSkipQuote && skipQuoteExperiment;
if (shouldSendExposeRequest) {
// Don't await -- response is not needed so can fire fully asynchronously.
baseMixin.methods.dispatchStoreActionWithLogging(
storeActions.LOG_EXPERIMENT_EXPOSURE_AND_UPDATE_STORE,
{
userId: getUserIdValue(),
deviceId: getDeviceIdValue(),
sessionKey: getSessionKeyValue(),
pageName: to.query.fmgPage,
experiment: skipQuoteExperiment,
},
"quote",
false
);
}
const promiseResultMap = [
{
resultKey: "cmsContent",
@ -213,6 +244,12 @@ export default {
const isEmailInStoreOnPageLoad = emailFromStore?.length > 0;
const showSaveProgressPopup = isEmailInStoreOnPageLoad ? false : true;
const showSaveProgressModal = isEmailInStoreOnPageLoad ? false : true;
const shouldSkipToInsurance =
getBoolFromString(
experimentMixin.methods.getSettingValue(experimentSettings.SKIP_TO_INSURANCE)
) &&
shouldExposeSkipQuote &&
!hasExposedSkipQuote;
const lineItems = deepClone(store.getters.order.lineItems);
lineItems.vaps = lineItems.vaps ?? [];
@ -302,6 +339,7 @@ export default {
vm.availableLineItems = pricingResults;
vm.holdParentAccountNumber = holdParentAccountNumber;
vm.holdBillToAccountNumber = holdBillToAccountNumber;
vm.skipToInsurance = shouldSkipToInsurance;
if (revalidatePromoResponse) {
const revalidateAlerts = buildToastMessagesFromRevalidateOrValidatePromoResponse(
@ -434,21 +472,16 @@ export default {
}
}
// did user intentionally select insurance?
vm.isInsuranceSelected = true;
vm.servicePackage = store.getters.externalParameterQuote.servicePackage;
await nextTick();
const insuranceSelection = true;
const servicePackage = store.getters.externalParameterQuote.servicePackage;
if (
vm.servicePackage != null &&
servicePackage != null &&
isExternalParameter === externalParameterStatus.ACTIVE
) {
const isValid = await baseMixin.methods.isFormValid(vm.$refs.theForm);
if (isValid) {
baseMixin.methods.ResetExternalParamsAndHideModal();
vm.forwardButtonAction();
}
await vm.skip(insuranceSelection, servicePackage);
}
baseMixin.methods.ResetExternalParamsAndHideModal();
} else {
if (externalThreshold) thresholdToUse = externalThreshold;
@ -467,6 +500,11 @@ export default {
baseMixin.methods.ResetExternalParamsAndHideModal();
}
}
if (vm.skipToInsurance && !vm.showSaveProgressPopup) {
// skip ahead only if no email popup.
await vm.skip(true, externalParamPackageLabels.GLASS_ONLY);
}
});
},
data() {
@ -482,6 +520,7 @@ export default {
showSaveProgressModal: null,
isSaveProgressComplete: null,
packageNumber: null,
skipToInsurance: null,
};
},
mounted() {
@ -584,8 +623,13 @@ export default {
updateSaveProgressAsSaved() {
this.showSaveProgressModal = false;
},
closeSaveProgressPopup() {
async closeSaveProgressPopup() {
this.showSaveProgressPopup = false;
if (this.skipToInsurance) {
// skip ahead now if in IGQ skip experiment
await this.skip(true, externalParamPackageLabels.GLASS_ONLY);
}
},
forwardButtonAction() {
this.dispatchStoreAction(
@ -729,6 +773,20 @@ export default {
this.pushEventToGA("quote", this.GaActions.SERVICE_PACKAGE_PRICE, eventLabel, true);
});
},
async skip(insuranceSelection, packageSelection) {
this.isInsuranceSelected = insuranceSelection;
this.servicePackage = packageSelection;
// Allow selections to filter through sub-logic
await nextTick();
await nextTick();
const isValid = await baseMixin.methods.isFormValid(this.$refs.theForm);
if (isValid) {
showFmgLoadingModal(true);
await this.forwardButtonAction();
}
},
},
watch: {
lineItemsCloneForWatcher: {

View file

@ -102,6 +102,11 @@ export default {
this.$emit("servicePackageDiscountSelected", supportingItems);
},
servicePackage(newValue) {
if (newValue !== null) {
this.selectDefaultPackage();
}
},
},
computed: {
nullSafeAvailableLineItems() {

View file

@ -230,6 +230,12 @@ export default {
return "widget-name-" + this.cmsWidgetName;
},
},
mounted() {
if (!store.getters.externalParameterState?.isExternalParameter) {
showFmgLoadingModal(false);
}
},
};
function encodeUriData(payload) {

View file

@ -433,9 +433,6 @@ router.afterEach(async (to, from) => {
await saveSession({ pageNameToLog: to.query.fmgPage });
}
}
if (!store.getters.externalParameterState?.isExternalParameter) {
showFmgLoadingModal(false);
}
// Push page view to GA
analyticsMixin.methods.pushPageViewToGA();

View file

@ -1892,6 +1892,97 @@ export const actions = {
pageNameToLog: pageNameToLog,
});
},
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=="
}
}
*/
/* Uncomment and use when endpoint integration is finalized
return 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=="
}
},
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;
},
getPartFromCapabilityQuestionAnswer(context, { payload, pageNameToLog }) {
const glassLocation = payload;
@ -3207,16 +3298,16 @@ export const actions = {
"running addDonationToSubmittedOrder()... adding donation to supportingItems in session storage "
);
submittedOrder.lineItems.supportingItems.push({
partNumber: "DONATION",
description: null,
partType: "DONATION",
partNumber: `DONATION_${donationAmount}`,
description: `DONATION $${donationAmount}`,
partType: partTypeStrings.DONATION,
isInsurable: false,
isChildPart: false,
laborAmount: 0,
sellingPrice: donationAmount,
kitPrice: 0,
salesTax: null,
id: "donation-" + donationAmount,
salesTax: 0,
id: `donation-${donationAmount}`,
});
} else {
// filter out all donations