From 166940db044aaec4f461ab2e419247bfdc03e8e6 Mon Sep 17 00:00:00 2001 From: CarlNation <32103961+CarlNation@users.noreply.github.com> Date: Sun, 29 Oct 2023 08:28:32 -0400 Subject: [PATCH 1/3] CSR-1392 removed work order flags for submitting a pia in delete substatus and the final submit flag from the store and pass it as a parameter to save session instead. --- src/constants/store-actions.js | 2 - src/constants/store-mutations.js | 2 - .../heritage-integration/order-helper.js | 38 ++++++++++++++++--- src/layouts/payment-method/payment-method.vue | 26 +++++++++---- .../payment-pia-return/payment-pia-return.vue | 20 ++++++++-- src/store/index.js | 26 ++++--------- src/store/store.spec.js | 11 ------ 7 files changed, 74 insertions(+), 51 deletions(-) diff --git a/src/constants/store-actions.js b/src/constants/store-actions.js index ee67ff77d..bb2ef16a0 100644 --- a/src/constants/store-actions.js +++ b/src/constants/store-actions.js @@ -89,8 +89,6 @@ const storeActions = { SAVE_PROMOS: "savePromos", SAVE_CUSTOMER_DETAILS: "saveCustomerDetails", SAVE_SERVICE_LOCATION_TECH_NOTES: "saveServiceLocationTechNotes", - SAVE_WORK_ORDER_FLAG: "saveWorkOrderFlag", - SAVE_PIA_WORK_ORDER: "savePiaWorkOrder", SAVE_CCTOKEN: "saveCCToken", SAVE_PAYPAL_TOKEN: "savePaypalToken", }; diff --git a/src/constants/store-mutations.js b/src/constants/store-mutations.js index ca0afadf2..b7ac47d38 100644 --- a/src/constants/store-mutations.js +++ b/src/constants/store-mutations.js @@ -1,7 +1,5 @@ const storeMutations = { // PAYMENT MUTATIONS - UPDATE_WORK_ORDER_FLAG: "updateWorkOrderFlag", - UPDATE_PIA_WORK_ORDER: "updatePiaWorkOrder", UPDATE_CCTOKEN: "updateCCToken", UPDATE_PAYPAL_TOKEN: "updatePaypalToken", diff --git a/src/helpers/heritage-integration/order-helper.js b/src/helpers/heritage-integration/order-helper.js index 91f4768f3..01a5a780f 100644 --- a/src/helpers/heritage-integration/order-helper.js +++ b/src/helpers/heritage-integration/order-helper.js @@ -53,17 +53,30 @@ export async function loadSessionIfPresent(isConceptInsurance, pageNameToLog) { This will also set Referral information in the store after saving, and then update the cookie. To force synchronous behavior pass in 'true' for shouldAwaitSaveSessionQueue */ -export async function saveSession({ pageNameToLog, shouldAwaitSaveSessionQueue = false }) { +export async function saveSession({ + pageNameToLog, + shouldAwaitSaveSessionQueue = false, + submitAfterSave = false, + createDeleteStatusWorkOrderForPia = false, +}) { var saveSessionPromise; if (store.getters.applicationUser.saveSessionPromise) { // queue newest request after current saveSessionPromise resolves saveSessionPromise = store.getters.applicationUser.saveSessionPromise.then(() => { // get a new saveSessionPromise - return saveSessionHelper(pageNameToLog); + return saveSessionHelper( + pageNameToLog, + submitAfterSave, + createDeleteStatusWorkOrderForPia + ); }); } else { // create an initial saveSessionPromise - saveSessionPromise = saveSessionHelper(pageNameToLog); + saveSessionPromise = saveSessionHelper( + pageNameToLog, + submitAfterSave, + createDeleteStatusWorkOrderForPia + ); } store.commit(storeMutations.UPDATE_SAVE_SESSION_PROMISE, saveSessionPromise); // await here to allow for a caller to await and make the function synchronous @@ -72,10 +85,16 @@ export async function saveSession({ pageNameToLog, shouldAwaitSaveSessionQueue = } } -export async function submitWorkOrder({ pageNameToLog }) { +export async function submitWorkOrder({ + pageNameToLog, + submitAfterSave = false, + createDeleteStatusWorkOrderForPia = false, +}) { await saveSession({ pageNameToLog: pageNameToLog, shouldAwaitSaveSessionQueue: true, + submitAfterSave: submitAfterSave, + createDeleteStatusWorkOrderForPia: createDeleteStatusWorkOrderForPia, }); } @@ -117,10 +136,17 @@ async function loadSession( /* Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing */ -async function saveSessionHelper(pageNameToLog) { +async function saveSessionHelper( + pageNameToLog, + submitAfterSave = false, + createDeleteStatusWorkOrderForPia = false +) { const savedSessionInfo = await baseMixin.methods.dispatchStoreActionWithLogging( storeActions.SAVE_SESSION, - null, + { + submitAfterSave: submitAfterSave, + createDeleteStatusWorkOrderForPia: createDeleteStatusWorkOrderForPia, + }, pageNameToLog ); // Update the store with information received from the saveSession response diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index a3044994b..5d013c97d 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -266,7 +266,6 @@ export default { const matchedIndices = []; this.cartItems.forEach((cartItem, i) => { if (cartItem.partType === item.partType) { - // console.log("adding this to matchedIndices: ", i); matchedIndices.push(i); } }); @@ -289,8 +288,8 @@ export default { await this.dispatchStoreAction(storeActions.SAVE_PROMOS, this.lineItems.promos, false); if (this.paymentMethod == paymentMethods.LATER) { - this.dispatchStoreAction(this.storeActions.SAVE_WORK_ORDER_FLAG, true, false); - await submitWorkOrder({ pageNameToLog: "payment-method" }); + // this creates the final work order + await submitWorkOrder({ pageNameToLog: "payment-method", submitAfterSave: true }); this.$router.navigateWithoutSaving( this.navigationScenarios.CLICKED_FORWARD, this.$route @@ -302,14 +301,25 @@ export default { async setupPia() { this.$refs.loadingModal.showModal(); - // if we don't have a work order in delete substatus, set the flag and submit + // if we don't have a work order in delete substatus, set the flag and submit. + // we need a work order number for pia so we can pass it to safeliteHop. if (!store.getters.order.workOrderNumber) { - this.dispatchStoreAction(storeActions.SAVE_PIA_WORK_ORDER, true); - await submitWorkOrder({ pageNameToLog: "payment-method" }); - this.dispatchStoreAction(storeActions.SAVE_PIA_WORK_ORDER, false); - this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); + try { + await submitWorkOrder({ + pageNameToLog: "payment-method", + submitAfterSave: false, + createDeleteStatusWorkOrderForPia: true, + }); + } catch (error) { + console.log( + "error: response from pia submit work order:" + error.message); + this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); + this.$route.params[this.routerParams.DISPLAY_PIA_ALERT] = true; + return; + } } + this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); this.$router.navigateWithoutSaving( this.navigationScenarios.CLICKED_PAY_NOW, this.$route diff --git a/src/layouts/payment-pia-return/payment-pia-return.vue b/src/layouts/payment-pia-return/payment-pia-return.vue index 3eb819810..54e49c620 100644 --- a/src/layouts/payment-pia-return/payment-pia-return.vue +++ b/src/layouts/payment-pia-return/payment-pia-return.vue @@ -58,14 +58,12 @@ export default { async processPaypalResponse() { const token = getQuerystringParameter(queryStrings.TOKEN); const payerId = getQuerystringParameter(queryStrings.PAYERID); - baseMixin.methods.dispatchStoreAction(storeActions.SAVE_WORK_ORDER_FLAG, true, false); baseMixin.methods.dispatchStoreAction(storeActions.SAVE_PAYPAL_TOKEN, token, false); await this.saveAndSubmitWorkOrder(); }, async processCreditCardResponse() { const subscriptionID = getQuerystringParameter(queryStrings.SUBSCRIPTIONID); - baseMixin.methods.dispatchStoreAction(storeActions.SAVE_WORK_ORDER_FLAG, true, false); const referralSeqNum = getQuerystringParameter(queryStrings.REFERRAL_SEQ_NUM); if (referralSeqNum != store.getters.order.referralSequenceNumber) { @@ -115,7 +113,23 @@ export default { async saveAndSubmitWorkOrder() { // Final work order submit after returning from PIA. await this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); - await submitWorkOrder({ pageNameToLog: "payment-pia-return" }); + try { + await submitWorkOrder({ + pageNameToLog: "payment-pia-return", + submitAfterSave: true, + }); + } catch (error) { + console.log("error: response from submit work order:" + error.message); + this.$router.navigateWithoutSaving( + this.navigationScenarios.PIA_ERROR, + this.$route, + {}, + { [routerParams.DISPLAY_PIA_ALERT]: true } + ); + this.$refs.loadingModal.isModalVisible = false; + return; + } + this.$refs.loadingModal.isModalVisible = false; this.$router.navigateWithoutSaving(this.navigationScenarios.PIA_SUCCESS, this.$route); }, diff --git a/src/store/index.js b/src/store/index.js index 64640bca2..72fcb264e 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -28,7 +28,6 @@ import { getDateDifferenceInDays } from "@/helpers/date-helper"; // Export State const getDefaultState = () => { return { - submitAfterSave: false, order: { vehicle: { year: null, @@ -127,7 +126,6 @@ const getDefaultState = () => { referralCorrelationId: null, eon: null, workOrderNumber: null, - createDeleteStatusWorkOrderForPia: false, }, applicationUser: { eventBus: [], @@ -147,10 +145,6 @@ export const state = getDefaultState(); // Export Mutations export const mutations = { - updateWorkOrderFlag(state, submitAfterSave) { - state.submitAfterSave = submitAfterSave; - }, - // VEHICLE MUTATIONS updateYear(state, year) { state.order.vehicle.year = year; @@ -248,9 +242,6 @@ export const mutations = { updatePiaType(state, piaType) { state.order.payment.piaType = piaType; }, - updatePiaWorkOrder(state, piaWorkOrder) { - state.order.createDeleteStatusWorkOrderForPia = piaWorkOrder; - }, updateWorkOrderNumber(state, workOrderNumber) { state.order.workOrderNumber = workOrderNumber; }, @@ -566,7 +557,6 @@ export const mutations = { // Export Getters export const getters = { - submitAfterSave: (state) => state.submitAfterSave, vehicle: (state) => state.order.vehicle, eventBusItem: (state) => (eventCategory, eventSubCategory) => { const matchedEvent = state.applicationUser.eventBus.find( @@ -1577,13 +1567,17 @@ export const actions = { }, // Session API Actions - saveSession(context, { pageNameToLog }) { + saveSession(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 submitAfterSave = payload?.submitAfterSave === "true"; + const createDeleteStatusWorkOrderForPia = + payload?.createDeleteStatusWorkOrderForPia === "true"; + // create a new array to avoid mutating state const newGlassToReplace = convertGlassPieceNamingForApi(damage.glassToReplace); @@ -1591,7 +1585,7 @@ export const actions = { method: endpoints.SaveSession.method, endpoint: endpoints.SaveSession.url, payload: { - submitAfterSave: context.state.submitAfterSave, + submitAfterSave: submitAfterSave, userAgent: navigator.userAgent, applicationUser: { crmCustomerId: applicationUser.crmCustomerId, @@ -1702,7 +1696,7 @@ export const actions = { referralNumber: order.referralNumber?.toString(), referralSequenceNumber: order.referralSequenceNumber, eon: order.eon, - createDeleteStatusWorkOrderForPia: order.createDeleteStatusWorkOrderForPia, + createDeleteStatusWorkOrderForPia: createDeleteStatusWorkOrderForPia, }, }, logApiCall: true, @@ -1773,12 +1767,6 @@ export const actions = { ); }, - saveWorkOrderFlag(context, submitAfterSave) { - context.commit(storeMutations.UPDATE_WORK_ORDER_FLAG, submitAfterSave); - }, - savePiaWorkOrder(context, piaWorkOrder) { - context.commit(storeMutations.UPDATE_PIA_WORK_ORDER, piaWorkOrder); - }, saveCCToken(context, ccToken) { context.commit(storeMutations.UPDATE_CCTOKEN, ccToken); }, diff --git a/src/store/store.spec.js b/src/store/store.spec.js index b0cd5154a..e7c004090 100644 --- a/src/store/store.spec.js +++ b/src/store/store.spec.js @@ -2791,17 +2791,6 @@ describe("Actions", () => { }); describe("Getters", () => { - it("submitAfterSave, should return true", () => { - // Arrange - const storeState = state; - - // Act - mutations.updateWorkOrderFlag(storeState, true); - - // Assert - expect(getters.submitAfterSave(storeState)).toEqual(true); - }); - it("Vehicle getter, should return vehicle data", () => { // Arrange const storeState = state; From 0d9373cae72d6144f765e71fd90659dcc031c609 Mon Sep 17 00:00:00 2001 From: CarlNation <32103961+CarlNation@users.noreply.github.com> Date: Sun, 29 Oct 2023 08:33:17 -0400 Subject: [PATCH 2/3] CSR-1392 prettier --- src/layouts/payment-method/payment-method.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 5d013c97d..46fc1b55e 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -311,8 +311,7 @@ export default { createDeleteStatusWorkOrderForPia: true, }); } catch (error) { - console.log( - "error: response from pia submit work order:" + error.message); + console.log("error: response from pia submit work order:" + error.message); this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE); this.$route.params[this.routerParams.DISPLAY_PIA_ALERT] = true; return; From 4723eb8098a096f2a2a04ee2b703c27371521c3d Mon Sep 17 00:00:00 2001 From: CarlNation <32103961+CarlNation@users.noreply.github.com> Date: Sun, 29 Oct 2023 10:25:05 -0400 Subject: [PATCH 3/3] CSR-1392 associated tests --- src/helpers/heritage-integration/order-helper.spec.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/helpers/heritage-integration/order-helper.spec.js b/src/helpers/heritage-integration/order-helper.spec.js index 322d9237d..daf9af6bb 100644 --- a/src/helpers/heritage-integration/order-helper.spec.js +++ b/src/helpers/heritage-integration/order-helper.spec.js @@ -179,7 +179,7 @@ describe("saveSession", () => { // Assert expect(mocks.baseMixin.methods.dispatchStoreActionWithLogging).toHaveBeenCalledWith( storeActions.SAVE_SESSION, - null, + { createDeleteStatusWorkOrderForPia: false, submitAfterSave: false }, "test" ); expect(mocks.baseMixin.methods.dispatchStoreAction).toHaveBeenCalledWith( @@ -282,12 +282,12 @@ describe("submitWorkOrder", () => { const mocks = setupMocksForJsFiles(mockData); // Act - await submitWorkOrder({ pageNameToLog: "test" }); + await submitWorkOrder({ pageNameToLog: "test", submitAfterSave: true }); // Assert expect(mocks.baseMixin.methods.dispatchStoreActionWithLogging).toHaveBeenCalledWith( storeActions.SAVE_SESSION, - null, + { createDeleteStatusWorkOrderForPia: false, submitAfterSave: true }, "test" ); expect(mocks.baseMixin.methods.dispatchStoreAction).toHaveBeenCalledWith( @@ -345,7 +345,7 @@ describe("submitWorkOrder", () => { setupCookies({ funnelCookieValue: JSON.stringify(testCookieValue) }); // Act - await submitWorkOrder({ pageNameToLog: "test" }); + await submitWorkOrder({ pageNameToLog: "test", submitAfterSave: true }); // Assert expect(cookieHelper.getFunnelCookie().DidHeritageFunnelUpdateLast).toEqual(false);