diff --git a/src/constants/endpoints.js b/src/constants/endpoints.js index 16e0803e6..c972d8118 100644 --- a/src/constants/endpoints.js +++ b/src/constants/endpoints.js @@ -124,6 +124,10 @@ const endpoints = { url: "/order/api/v1/order/load-session", method: "POST", }, + SaveQuote: { + url: "/order/api/v1/order/initiate-saved-progress-email", + method: "POST", + }, GetSignature: { url: "/order/api/v1/order/sign", method: "POST", diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index 41e5896bd..45a18bace 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -37,6 +37,7 @@ const storeActions = { GET_MOBILE_PREMIUM_FEE: "getMobilePremiumFee", SAVE_SESSION: "saveSession", LOAD_SESSION: "loadSession", + SAVE_QUOTE: "saveQuote", UPDATE_STORE_WITH_SAVE_SESSION_RESPONSE: "updateStoreWithSaveSessionResponse", VALIDATE_ZIP: "validateZip", PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA: "priceOrderItemsAndSaveServerData", diff --git a/src/helpers/heritage-integration/order-helper.js b/src/helpers/heritage-integration/order-helper.js index 555c41325..e88a64c27 100644 --- a/src/helpers/heritage-integration/order-helper.js +++ b/src/helpers/heritage-integration/order-helper.js @@ -98,6 +98,23 @@ export async function submitWorkOrder({ }); } +export async function saveQuote({ pageNameToLog }) { + // save session back to sv2 so the email gets saved just in case they refresh or step away and come back later + await saveSession({ + pageNameToLog: pageNameToLog, + shouldAwaitSaveSessionQueue: true, + submitAfterSave: false, + createUnscheduledStatusWorkOrderForPIA: false, + }); + + return await baseMixin.methods.dispatchStoreActionWithLogging( + storeActions.SAVE_QUOTE, + {}, + pageNameToLog, + false + ); +} + // PRIVATE FUNCTIONS // /* diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 6f3809304..c83e61b23 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -84,6 +84,11 @@ class="mb-5 quote-disclaimer" /> +
+
+ +
+
@@ -134,6 +139,7 @@ import { packageNames } 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"; defineRule("option-required", required(errorMessages.OPTION_REQUIRED)); @@ -455,6 +461,9 @@ export default { }, }, methods: { + async handleClick() { + await saveQuote({ pageNameToLog: "quote" }); + }, openModalAction(modalName) { this.$refs[modalName].openModal(); }, diff --git a/src/store/index.js b/src/store/index.js index 7840fbafb..47fddba84 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1931,6 +1931,49 @@ export const actions = { }, // Session API Actions + saveQuote(context, { pageNameToLog, payload }) { + const vehicle = context.getters.vehicle; + const damage = context.getters.damage; + const order = context.state.order; + const applicationUser = context.getters.applicationUser; + const lineItems = context.state.order.lineItems; + const excludeRecalInquote = context.getters.shouldHideRecalibration; + + return globalMethods.callHttpClient({ + method: endpoints.SaveQuote.method, + endpoint: endpoints.SaveQuote.url, + payload: { + referralCorrelationId: order.referralCorrelationId, + referralNumber: order.referralNumber?.toString(), + referralSequenceNumber: order.referralSequenceNumber, + emailAddress: order.customer.emailAddress, + lastPage: pageNameToLog, + isRepair: damage.isRepair, + firstName: order.customer.firstName, + lastName: order.customer.lastName, + savedSessionId: applicationUser.savedSessionId, + serviceState: order.serviceLocation.state, + serviceZipCode: order.serviceLocation.zipCode, + parentAccountNumber: order.payment.parentAccountNumber, + excludeRecalInquote: excludeRecalInquote, + year: vehicle.year, + make: vehicle.make, + model: vehicle.model, + isInsurance: order.payment.isInsurance ?? false, + isVerified: order.payment.insuranceCoverage.isVerified ?? false, + lineItems: { + glassParts: lineItems.glassParts, + supportingItems: lineItems.supportingItems, + vaps: lineItems.vaps, + serverData: lineItems.serverData, + promos: lineItems.promos, + }, + }, + logApiCall: true, + pageNameToLog: pageNameToLog, + }); + }, + saveSession(context, { pageNameToLog, payload }) { const vehicle = context.getters.vehicle; const damage = context.getters.damage; @@ -2008,8 +2051,7 @@ export const actions = { order.payment.insuranceCoverage.coverageStatus?.toString(), coverageVerificationType: order.payment.insuranceCoverage.coverageVerificationType, - coverageSubStatus: - order.payment.insuranceCoverage.coverageSubStatus, + coverageSubStatus: order.payment.insuranceCoverage.coverageSubStatus, }, isInsurance: order.payment.isInsurance, parentAccountNumber: order.payment.parentAccountNumber,