From ff5f8c5b29dcf2d3b84a38743bc199c70357ee6a Mon Sep 17 00:00:00 2001 From: Bill Richardson Date: Mon, 4 Mar 2024 16:06:54 -0500 Subject: [PATCH] Small tweaks --- src/helpers/order-helper.js | 37 ++++++++---- src/helpers/querystring-helper.js | 2 +- src/layouts/payment-return/payment-return.vue | 57 +++++++++++-------- src/router/index.js | 12 ++-- src/router/router-constants/routing-table.js | 4 +- src/store/index.js | 43 +++++++------- 6 files changed, 91 insertions(+), 64 deletions(-) diff --git a/src/helpers/order-helper.js b/src/helpers/order-helper.js index 85d0bec2..33e7d3c4 100644 --- a/src/helpers/order-helper.js +++ b/src/helpers/order-helper.js @@ -1,6 +1,17 @@ import { useMainStore } from '@/store'; import { updateOrCreateISSCookie } from '@/helpers/cookie-helper'; +/* + Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing +*/ +async function saveSessionHelper(store) { + const savedSessionInfo = await store.saveSession(); + if (savedSessionInfo) { + store.setSaveSessionInfo(savedSessionInfo.data); + } + updateOrCreateISSCookie(); +} + /* Will call API to save existing order, or create new one depending where it's called from. This will also set Referral information in the store after saving, and then @@ -8,8 +19,8 @@ import { updateOrCreateISSCookie } from '@/helpers/cookie-helper'; */ export async function saveSession({ shouldAwaitSaveSessionQueue = false }) { const store = useMainStore(); - var saveSessionPromise = store.applicationUser.saveSessionPromise - ? store.applicationUser.saveSessionPromise.then(() => { return saveSessionHelper(store); }) + const saveSessionPromise = store.applicationUser.saveSessionPromise + ? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store)) : saveSessionHelper(store); store.setSaveSessionPromise(saveSessionPromise); @@ -20,12 +31,18 @@ export async function saveSession({ shouldAwaitSaveSessionQueue = false }) { } /* - Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing + Will determine if to submitWorkOrder. + TODO: Add more description to this */ -async function saveSessionHelper(store) { - const savedSessionInfo = await store.saveSession(); - if (savedSessionInfo) { - store.setSaveSessionInfo(savedSessionInfo.data); - } - updateOrCreateISSCookie(); -} \ No newline at end of file +export async function submitWorkOrder({ + pageNameToLog, + submitAfterSave = false, + createDeleteStatusWorkOrderForPia = false +}) { + await saveSession({ + pageNameToLog, + shouldAwaitSaveSessionQueue: true, + submitAfterSave, + createDeleteStatusWorkOrderForPia + }); +} diff --git a/src/helpers/querystring-helper.js b/src/helpers/querystring-helper.js index 32900e96..f4df1ed7 100644 --- a/src/helpers/querystring-helper.js +++ b/src/helpers/querystring-helper.js @@ -1,4 +1,4 @@ -export default function getQuerystringParameter(key) { +export default function getQueryStringParameter(key) { const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const lowerCaseParams = new URLSearchParams(); diff --git a/src/layouts/payment-return/payment-return.vue b/src/layouts/payment-return/payment-return.vue index 1ef57a4b..329badf9 100644 --- a/src/layouts/payment-return/payment-return.vue +++ b/src/layouts/payment-return/payment-return.vue @@ -11,8 +11,10 @@ import { Form } from 'vee-validate'; import BaseFormMixin from '@/mixins/base-form-mixin.js'; import { useMainStore } from '@/store/index.js'; import queryStrings from '@/constants/query-strings'; -import getQuerystringParameter from '@/helpers/querystring-helper.js'; +import getQueryStringParameter from '@/helpers/querystring-helper.js'; import { paymentMethods } from '@/constants/payment-method-constants.js'; +import { submitWorkOrder } from '@/helpers/order-helper.js'; +import showIssLoadingModal from '@/helpers/loading-modal-helper'; export default { name: 'payment-return', @@ -22,14 +24,14 @@ export default { }, mixins: [BaseFormMixin], async mounted() { - const payInAdvanceError = getQuerystringParameter(queryStrings.ERROR); + showIssLoadingModal(true); + const payInAdvanceError = getQueryStringParameter(queryStrings.ERROR); const { payInAdvanceType } = useMainStore().order.payment; if (payInAdvanceError) { console.error(`Error during payment: ${payInAdvanceError}`); const paymentPageNavScenario = - payInAdvanceType === paymentMethods.CREDIT_CARD - || payInAdvanceType === paymentMethods.AFTERPAY; + payInAdvanceType === paymentMethods.CREDIT_CARD || payInAdvanceType === paymentMethods.AFTERPAY; if (paymentPageNavScenario) { this.$router.navigate( this.navigationScenarios.PAY_IN_ADVANCE_CREDIT_CARD_ERROR, @@ -71,10 +73,16 @@ export default { arePagePrerequisitesValid() { return true; }, - async processCreditCardResponse() { - const subscriptionId = getQuerystringParameter(queryStrings.SUBSCRIPTIONID); + async processPaypalResponse() { + const token = getQueryStringParameter(queryStrings.TOKEN); + this.mainStore.updatePaypalToken(token); - const referralSeqNum = getQuerystringParameter(queryStrings.REFERRAL_SEQ_NUM); + await this.saveAndSubmitWorkOrder(); + }, + async processCreditCardResponse() { + const subscriptionId = getQueryStringParameter(queryStrings.SUBSCRIPTIONID); + + const referralSeqNum = getQueryStringParameter(queryStrings.REFERRAL_SEQ_NUM); if (referralSeqNum !== useMainStore().order.referralSequenceNumber) { console.error(`error: unknown ref:${referralSeqNum} ${useMainStore().order.referralSequenceNumber}`); this.$router.navigate( @@ -85,19 +93,19 @@ export default { } ); } else { - const expMonth = getQuerystringParameter(queryStrings.CARD_EXPIRATION_MONTH); - const expYear = getQuerystringParameter(queryStrings.CARD_EXPIRATION_YEAR); - const cardType = getQuerystringParameter(queryStrings.CARD_TYPE); - const billToPostalCode = getQuerystringParameter(queryStrings.BILL_TO_POSTAL_CODE); - const billToFirstName = getQuerystringParameter(queryStrings.BILL_TO_FIRST_NAME); - const billToLastName = getQuerystringParameter(queryStrings.BILL_TO_LAST_NAME); - const referenceNumber = getQuerystringParameter(queryStrings.REFERENCE_NUMBER); - const authCode = getQuerystringParameter(queryStrings.AUTH_CODE); - const transactionId = getQuerystringParameter(queryStrings.TRANSACTION_ID); - const transReferenceNumber = getQuerystringParameter(queryStrings.TRANS_REFERENCE_NUMBER); - const lastFour = getQuerystringParameter(queryStrings.LAST_FOUR); + const expMonth = getQueryStringParameter(queryStrings.CARD_EXPIRATION_MONTH); + const expYear = getQueryStringParameter(queryStrings.CARD_EXPIRATION_YEAR); + const cardType = getQueryStringParameter(queryStrings.CARD_TYPE); + const billToPostalCode = getQueryStringParameter(queryStrings.BILL_TO_POSTAL_CODE); + const billToFirstName = getQueryStringParameter(queryStrings.BILL_TO_FIRST_NAME); + const billToLastName = getQueryStringParameter(queryStrings.BILL_TO_LAST_NAME); + const referenceNumber = getQueryStringParameter(queryStrings.REFERENCE_NUMBER); + const authCode = getQueryStringParameter(queryStrings.AUTH_CODE); + const transactionId = getQueryStringParameter(queryStrings.TRANSACTION_ID); + const transReferenceNumber = getQueryStringParameter(queryStrings.TRANS_REFERENCE_NUMBER); + const lastFour = getQueryStringParameter(queryStrings.LAST_FOUR); - const ccToken = { + const creditCardToken = { subscriptionId, expMonth, expYear, @@ -111,7 +119,7 @@ export default { transReferenceNumber, lastFour }; - useMainStore().updateCCToken(ccToken); + useMainStore().updateCreditCardToken(creditCardToken); await this.saveAndSubmitWorkOrder(); } }, @@ -119,9 +127,10 @@ export default { // Final work order submit after returning from pay in advance. useMainStore().resetSubmittedOrder(); try { - // do we have a function to submit a work order, - // perhaps built into saveSession? - // we need to submit the work order here + await submitWorkOrder({ + pageNameToLog: 'payment-return', + submitAfterSave: true + }); } catch (error) { console.error(`error: response from submit work order:${error.message}`); this.$router.navigate( @@ -131,9 +140,11 @@ export default { [queryStrings.DISPLAY_PAY_IN_ADVANCE_ALERT]: true } ); + showIssLoadingModal(false); return; } + showIssLoadingModal(false); useMainStore().createSubmittedOrder(); this.$router.navigate( this.navigationScenarios.PAY_IN_ADVANCE_SUCCESS, diff --git a/src/router/index.js b/src/router/index.js index 4cd2dc45..fda08794 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -2,7 +2,7 @@ import { createWebHistory, createRouter } from 'vue-router'; import lazyLoadComponent from '@/router/dynamic-routing/component-loader'; import issPageValues from '@/router/router-constants/issPage-values'; -import { routingTable } from '@/router/router-constants/routing-table'; +import routingTable from '@/router/router-constants/routing-table'; import { useMainStore } from '@/store'; import eventBus from '@/helpers/event-bus/event-bus'; import { globalEvents, globalEventTypes } from '@/constants/events'; @@ -16,11 +16,9 @@ import showIssLoadingModal from '@/helpers/loading-modal-helper'; import analyticsMixin from '@/mixins/analytics-mixin'; import { saveSession } from '@/helpers/order-helper.js'; import routerParams from '@/router/router-constants/router-params'; -import bailoutCode from '@/constants/bailoutCode'; -import IssPageValues from '@/router/router-constants/issPage-values'; +import canBailoutNavigateBack from '@/helpers/bailout-helper'; +import bailoutMessage from '@/constants/bailoutMessage'; import navigationScenarios from './router-constants/navigation-scenarios'; -import canBailoutNavigateBack from "@/helpers/bailout-helper"; -import bailoutMessage from "@/constants/bailoutMessage"; const routes = [ { @@ -129,7 +127,7 @@ router.beforeEach(async (to, from) => { showIssLoadingModal(true); } - const isInIframe = fromQueryPage === IssPageValues.PAYMENT_PAGE; + const isInIframe = fromQueryPage === issPageValues.PAYMENT_PAGE; if (isInIframe) { // need to set window.top.location.href directly when navigating out of an iframe // especially when navigating with browser buttons @@ -139,7 +137,7 @@ router.beforeEach(async (to, from) => { const store = useMainStore(); // Prevent navigating backwards if we enter a bailout that we are not allowed to go back on - if (store.isBailout && from.name === IssPageValues.BAILOUT_PAGE && to.name !== 'root' && to.name !== IssPageValues.CONTACT_CONFIRMATION + if (store.isBailout && from.name === issPageValues.BAILOUT_PAGE && to.name !== 'root' && to.name !== issPageValues.CONTACT_CONFIRMATION && !canBailoutNavigateBack()) { return false; } diff --git a/src/router/router-constants/routing-table.js b/src/router/router-constants/routing-table.js index 60d76dcd..99582af8 100644 --- a/src/router/router-constants/routing-table.js +++ b/src/router/router-constants/routing-table.js @@ -655,7 +655,7 @@ const routingTable = () => [ { scenario: navigationScenarios.PAY_IN_ADVANCE_SUCCESS, destinationIssPageValue: issPageValues.CONFIRMATION - }, + } ] }, { @@ -763,4 +763,4 @@ const routingTable = () => [ ]; -export { routingTable }; +export default routingTable; diff --git a/src/store/index.js b/src/store/index.js index cc1b2986..6d8f8084 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -157,7 +157,8 @@ const getDefaultState = () => ({ parentAccountNumber: 0, isPayInAdvance: null, payInAdvanceType: null, - ccToken: { + paypalToken: null, + creditCardToken: { subscriptionId: null, expMonth: null, expYear: null, @@ -1202,7 +1203,7 @@ export const useMainStore = defineStore({ submitToMainframe: !!this.order.referralNumber, loadedFromDupeCheck }, - additionalSuccessEventDataHandler: (response) => + additionalSuccessEventDataHandler: () => `Email provided: ${customer.emailAddress ? 'true' : 'false'}` }).then((response) => { if (loadedFromDupeCheck) { @@ -1304,7 +1305,23 @@ export const useMainStore = defineStore({ throw ex; } }, - + updateCreditCardToken(token) { + this.order.payment.creditCardToken.subscriptionId = token.subscriptionId; + this.order.payment.creditCardToken.expMonth = token.expMonth; + this.order.payment.creditCardToken.expYear = token.expYear; + this.order.payment.creditCardToken.cardType = token.cardType; + this.order.payment.creditCardToken.billToPostalCode = token.billToPostalCode; + this.order.payment.creditCardToken.billToFirstName = token.billToFirstName; + this.order.payment.creditCardToken.billToLastName = token.billToLastName; + this.order.payment.creditCardToken.referenceNumber = token.referenceNumber; + this.order.payment.creditCardToken.authCode = token.authCode; + this.order.payment.creditCardToken.transactionId = token.transactionId; + this.order.payment.creditCardToken.transReferenceNumber = token.transReferenceNumber; + this.order.payment.creditCardToken.lastFour = token.lastFour; + }, + updatePaypalToken(token) { + this.order.payment.paypalToken = token; + }, setSaveSessionPromise(promise) { this.applicationUser.saveSessionPromise = promise; }, @@ -1399,7 +1416,7 @@ export const useMainStore = defineStore({ this.order.vehicle.registration.firstName = null; this.order.vehicle.registration.lastName = null; }, - resetServiceLocationAndDependencies(context) { + resetServiceLocationAndDependencies() { this.resetServiceLocationAppointmentType(); this.resetServiceLocationProvider(); this.resetSchedule(); @@ -2130,7 +2147,6 @@ export const useMainStore = defineStore({ this.resetInsurance(); this.resetBailout(); }, - savePaymentMethodChoice(paymentMethod) { const isPayInAdvance = paymentMethod !== paymentMethods.PAY_AT_TIME_OF_SERVICE; this.order.payment.isPayInAdvance = isPayInAdvance; @@ -2144,21 +2160,6 @@ export const useMainStore = defineStore({ }); }, - updateCCToken(ccToken) { - this.order.payment.ccToken.subscriptionId = ccToken.subscriptionId; - this.order.payment.ccToken.expMonth = ccToken.expMonth; - this.order.payment.ccToken.expYear = ccToken.expYear; - this.order.payment.ccToken.cardType = ccToken.cardType; - this.order.payment.ccToken.billToPostalCode = ccToken.billToPostalCode; - this.order.payment.ccToken.billToFirstName = ccToken.billToFirstName; - this.order.payment.ccToken.billToLastName = ccToken.billToLastName; - this.order.payment.ccToken.referenceNumber = ccToken.referenceNumber; - this.order.payment.ccToken.authCode = ccToken.authCode; - this.order.payment.ccToken.transactionId = ccToken.transactionId; - this.order.payment.ccToken.transReferenceNumber = ccToken.transReferenceNumber; - this.order.payment.ccToken.lastFour = ccToken.lastFour; - }, - hasSubmittedOrder() { return window.sessionStorage.getItem(webStorageConstants.SUBMITTED_ORDER) !== null; }, @@ -2183,7 +2184,7 @@ export const useMainStore = defineStore({ resetSubmittedOrder() { // clear from local storage window.sessionStorage.removeItem(webStorageConstants.SUBMITTED_ORDER); - }, + } }, persist: true