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:
parent
a1fb19b37c
commit
2f816c8ec1
5 changed files with 61 additions and 8 deletions
|
|
@ -4,8 +4,8 @@ import submitType from '@/constants/submit-type';
|
|||
/*
|
||||
Encapsulates asynchronous Save Session logic inside a promise to allow for Save Session queuing
|
||||
*/
|
||||
async function saveSessionHelper(store, { submitAfterSave }) {
|
||||
const savedSessionInfo = await store.saveSession({ submitAfterSave });
|
||||
async function saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA }) {
|
||||
const savedSessionInfo = await store.saveSession({ submitAfterSave, createWorkOrderNumberForPIA });
|
||||
if (savedSessionInfo) {
|
||||
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
|
||||
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 saveSessionPromise = store.applicationUser.saveSessionPromise
|
||||
? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store, { submitAfterSave }))
|
||||
: saveSessionHelper(store, { submitAfterSave });
|
||||
? store.applicationUser.saveSessionPromise.then(() => saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA }))
|
||||
: saveSessionHelper(store, { submitAfterSave, createWorkOrderNumberForPIA });
|
||||
|
||||
store.setSaveSessionPromise(saveSessionPromise);
|
||||
|
||||
|
|
|
|||
|
|
@ -920,6 +920,29 @@ describe('OrderConfirmation.vue', () => {
|
|||
// Act
|
||||
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
|
||||
expect(testValue).toBe(expected);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@
|
|||
<hr class="mb-0" />
|
||||
<div>
|
||||
<cartDropdown
|
||||
v-if="showCart"
|
||||
:showAsPaid="payment.isPayInAdvance"
|
||||
:readOnly="true"
|
||||
:isInitiallyExpanded="false"
|
||||
|
|
@ -305,6 +306,19 @@ export default {
|
|||
this.schedule.jobMinMinutes,
|
||||
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() {
|
||||
|
|
|
|||
|
|
@ -89,9 +89,10 @@ import issPageValues from '@/router/router-constants/issPage-values';
|
|||
import bailoutMessage from '@/constants/bailoutMessage';
|
||||
import { AppointmentTypeStrings } from '@/constants/schedule-constants';
|
||||
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 submitType from '@/constants/submit-type';
|
||||
import routerParams from '@/router/router-constants/router-params';
|
||||
|
||||
export default {
|
||||
name: 'payment-method',
|
||||
|
|
@ -284,9 +285,16 @@ export default {
|
|||
console.error(`error: response from submit work order:${error.message}`);
|
||||
}
|
||||
} else {
|
||||
await saveSession({
|
||||
createWorkOrderNumberForPIA: true,
|
||||
shouldAwaitSaveSessionQueue: true
|
||||
});
|
||||
|
||||
this.$router.navigate(
|
||||
this.navigationScenarios.CLICKED_PAY_NOW,
|
||||
this.$route
|
||||
this.$route,
|
||||
{},
|
||||
{ [routerParams.SKIP_SAVE_SESSION]: true }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@ export const getDefaultState = () => ({
|
|||
eon: null,
|
||||
workOrderId: null,
|
||||
workOrderNumber: null,
|
||||
settledTenderAmount: null,
|
||||
lockToken: null,
|
||||
customerPortalLoginToken: null,
|
||||
originalDeductible: null,
|
||||
currentDeductible: null,
|
||||
|
|
@ -1330,12 +1332,14 @@ export const useMainStore = defineStore({
|
|||
this.order.referralCorrelationId = response.referralCorrelationId;
|
||||
this.order.eon = response.eon;
|
||||
this.order.workOrderNumber = response.workOrderNumber;
|
||||
this.order.settledTenderAmount = response.settledTenderAmount;
|
||||
this.order.lockToken = response.lockToken;
|
||||
this.order.customerPortalLoginToken = response.customerPortalLoginToken;
|
||||
this.applicationUser.savedSessionId = response.savedSessionId;
|
||||
this.applicationUser.crmCustomerId = response.crmCustomerId.toString();
|
||||
},
|
||||
|
||||
saveSession({ submitAfterSave }) {
|
||||
saveSession({ submitAfterSave, createWorkOrderNumberForPIA }) {
|
||||
const { vehicle, damage, policy, customer, contactInfo, payment,
|
||||
lineItems, serviceLocation, schedule, insuranceCoverage } = this.order;
|
||||
|
||||
|
|
@ -1475,6 +1479,8 @@ export const useMainStore = defineStore({
|
|||
referralSequenceNumber: this.order.referralSequenceNumber,
|
||||
eon: this.order.eon,
|
||||
submitToMainframe: !!this.order.referralNumber,
|
||||
createWorkOrderNumberForPIA: createWorkOrderNumberForPIA,
|
||||
lockToken: this.order.lockToken,
|
||||
loadedFromDupeCheck,
|
||||
submitAfterSave: !!submitAfterSave
|
||||
};
|
||||
|
|
@ -1989,6 +1995,8 @@ export const useMainStore = defineStore({
|
|||
this.order.referralSequenceNumber = null;
|
||||
this.order.workOrderId = null;
|
||||
this.order.workOrderNumber = null;
|
||||
this.order.settledTenderAmount = null;
|
||||
this.order.lockToken = null;
|
||||
this.order.eon = null;
|
||||
this.order.originalDeductible = null;
|
||||
this.order.currentDeductible = null;
|
||||
|
|
|
|||
Loading…
Reference in a new issue