SSR-1483 Don't show cart if we fail to settle PIA

Implement create WO for PIA
Implement settledTenderAmount & lockToken
This commit is contained in:
Josh Dassinger 2024-10-16 15:06:55 -05:00
parent a1fb19b37c
commit 2f816c8ec1
5 changed files with 61 additions and 8 deletions

View file

@ -4,8 +4,8 @@ import submitType from '@/constants/submit-type';
/* /*
Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing
*/ */
async function saveSessionHelper(store, { submitAfterSave }) { async function saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA }) {
const savedSessionInfo = await store.saveSession({ submitAfterSave }); const savedSessionInfo = await store.saveSession({ submitAfterSave, createWorkOrderNumberForPIA });
if (savedSessionInfo) { if (savedSessionInfo) {
store.setSaveSessionInfo(savedSessionInfo.data); store.setSaveSessionInfo(savedSessionInfo.data);
} }
@ -16,11 +16,11 @@ async function saveSessionHelper(store, { submitAfterSave }) {
This will also set Referral information in the store after saving, and then 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 update the cookie. To force synchronous behavior pass in 'true' for shouldAwaitSaveSessionQueue
*/ */
export async function saveSession({ shouldAwaitSaveSessionQueue = false, submitAfterSave = false }) { export async function saveSession({ shouldAwaitSaveSessionQueue = false, submitAfterSave = false, createWorkOrderNumberForPIA = false }) {
const store = useMainStore(); const store = useMainStore();
const saveSessionPromise = store.applicationUser.saveSessionPromise const saveSessionPromise = store.applicationUser.saveSessionPromise
? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store, { submitAfterSave })) ? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA }))
: saveSessionHelper(store, { submitAfterSave }); : saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA });
store.setSaveSessionPromise(saveSessionPromise); store.setSaveSessionPromise(saveSessionPromise);

View file

@ -920,6 +920,29 @@ describe('OrderConfirmation.vue', () => {
// Act // Act
const testValue = wrapper.vm.isDropOffAppointment; const testValue = wrapper.vm.isDropOffAppointment;
// Assert
expect(testValue).toBe(expected);
});
});
describe('showCart', () => {
test.each([
[true, true, 100],
[true, false, 100],
[false, true, 0],
[false, true, null]
])('showCart is %p when is PIA is %p and settledTenderAmount is %p', (expected, isPia, settledTenderAmount) => {
// Arrange
const order = deepClone(sessionStorage);
order.payment.isPayInAdvance = isPia;
order.settledTenderAmount = settledTenderAmount;
const mockStoreActions = () => {
useMainStore().getSubmittedOrder = jest.fn().mockImplementation(() => order);
};
const { wrapper } = getMountedComponent({}, {}, mockStoreActions);
// Act
const testValue = wrapper.vm.showCart;
// Assert // Assert
expect(testValue).toBe(expected); expect(testValue).toBe(expected);
}); });

View file

@ -56,6 +56,7 @@
<hr class="mb-0" /> <hr class="mb-0" />
<div> <div>
<cartDropdown <cartDropdown
v-if="showCart"
:showAsPaid="payment.isPayInAdvance" :showAsPaid="payment.isPayInAdvance"
:readOnly="true" :readOnly="true"
:isInitiallyExpanded="false" :isInitiallyExpanded="false"
@ -305,6 +306,19 @@ export default {
this.schedule.jobMinMinutes, this.schedule.jobMinMinutes,
this.schedule.jobMaxMinutes this.schedule.jobMaxMinutes
); );
},
showCart() {
if (!this.payment.isPayInAdvance) {
return true;
}
if (this.submittedOrder.settledTenderAmount > 0) {
return true;
}
// settleTenderAmount always shows 0 via localhost or dev.
// Temporarily set return true to see cart in localhost or dev environment
return false;
} }
}, },
mounted() { mounted() {

View file

@ -89,9 +89,10 @@ import issPageValues from '@/router/router-constants/issPage-values';
import bailoutMessage from '@/constants/bailoutMessage'; import bailoutMessage from '@/constants/bailoutMessage';
import { AppointmentTypeStrings } from '@/constants/schedule-constants'; import { AppointmentTypeStrings } from '@/constants/schedule-constants';
import VehicleBanner from '@/iss-components/vehicle-banner/vehicle-banner.vue'; import VehicleBanner from '@/iss-components/vehicle-banner/vehicle-banner.vue';
import { submitWorkOrder } from '@/helpers/order-helper.js'; import { saveSession, submitWorkOrder } from '@/helpers/order-helper.js';
import { experimentSettings } from '@/constants/experiments'; import { experimentSettings } from '@/constants/experiments';
import submitType from '@/constants/submit-type'; import submitType from '@/constants/submit-type';
import routerParams from '@/router/router-constants/router-params';
export default { export default {
name: 'payment-method', name: 'payment-method',
@ -284,9 +285,16 @@ export default {
console.error(`error: response from submit work order:${error.message}`); console.error(`error: response from submit work order:${error.message}`);
} }
} else { } else {
await saveSession({
createWorkOrderNumberForPIA: true,
shouldAwaitSaveSessionQueue: true
});
this.$router.navigate( this.$router.navigate(
this.navigationScenarios.CLICKED_PAY_NOW, this.navigationScenarios.CLICKED_PAY_NOW,
this.$route this.$route,
{},
{ [routerParams.SKIP_SAVE_SESSION]: true }
); );
} }
} }

View file

@ -214,6 +214,8 @@ export const getDefaultState = () => ({
eon: null, eon: null,
workOrderId: null, workOrderId: null,
workOrderNumber: null, workOrderNumber: null,
settledTenderAmount: null,
lockToken: null,
customerPortalLoginToken: null, customerPortalLoginToken: null,
originalDeductible: null, originalDeductible: null,
currentDeductible: null, currentDeductible: null,
@ -1330,12 +1332,14 @@ export const useMainStore = defineStore({
this.order.referralCorrelationId = response.referralCorrelationId; this.order.referralCorrelationId = response.referralCorrelationId;
this.order.eon = response.eon; this.order.eon = response.eon;
this.order.workOrderNumber = response.workOrderNumber; this.order.workOrderNumber = response.workOrderNumber;
this.order.settledTenderAmount = response.settledTenderAmount;
this.order.lockToken = response.lockToken;
this.order.customerPortalLoginToken = response.customerPortalLoginToken; this.order.customerPortalLoginToken = response.customerPortalLoginToken;
this.applicationUser.savedSessionId = response.savedSessionId; this.applicationUser.savedSessionId = response.savedSessionId;
this.applicationUser.crmCustomerId = response.crmCustomerId.toString(); this.applicationUser.crmCustomerId = response.crmCustomerId.toString();
}, },
saveSession({ submitAfterSave }) { saveSession({ submitAfterSave, createWorkOrderNumberForPIA }) {
const { vehicle, damage, policy, customer, contactInfo, payment, const { vehicle, damage, policy, customer, contactInfo, payment,
lineItems, serviceLocation, schedule, insuranceCoverage } = this.order; lineItems, serviceLocation, schedule, insuranceCoverage } = this.order;
@ -1475,6 +1479,8 @@ export const useMainStore = defineStore({
referralSequenceNumber: this.order.referralSequenceNumber, referralSequenceNumber: this.order.referralSequenceNumber,
eon: this.order.eon, eon: this.order.eon,
submitToMainframe: !!this.order.referralNumber, submitToMainframe: !!this.order.referralNumber,
createWorkOrderNumberForPIA: createWorkOrderNumberForPIA,
lockToken: this.order.lockToken,
loadedFromDupeCheck, loadedFromDupeCheck,
submitAfterSave: !!submitAfterSave submitAfterSave: !!submitAfterSave
}; };
@ -1989,6 +1995,8 @@ export const useMainStore = defineStore({
this.order.referralSequenceNumber = null; this.order.referralSequenceNumber = null;
this.order.workOrderId = null; this.order.workOrderId = null;
this.order.workOrderNumber = null; this.order.workOrderNumber = null;
this.order.settledTenderAmount = null;
this.order.lockToken = null;
this.order.eon = null; this.order.eon = null;
this.order.originalDeductible = null; this.order.originalDeductible = null;
this.order.currentDeductible = null; this.order.currentDeductible = null;