@zeniai/client-epic-state 5.2.62-beta1MM → 5.2.62-beta2KB
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/actualMatching/actualMatchingReducer.d.ts +1 -3
- package/lib/entity/actualMatching/actualMatchingReducer.js +2 -11
- package/lib/entity/jeSchedules/jeSchedulesPayload.d.ts +0 -1
- package/lib/entity/jeSchedules/jeSchedulesPayload.js +0 -1
- package/lib/entity/jeSchedules/jeSchedulesState.d.ts +0 -1
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -1
- package/lib/entity/transaction/stateTypes/paymentType.d.ts +2 -2
- package/lib/entity/transaction/stateTypes/paymentType.js +9 -1
- package/lib/entity/transaction/stateTypes/printStatus.d.ts +4 -0
- package/lib/entity/transaction/stateTypes/printStatus.js +15 -0
- package/lib/epic.d.ts +4 -2
- package/lib/epic.js +6 -2
- package/lib/esm/entity/actualMatching/actualMatchingReducer.js +1 -9
- package/lib/esm/entity/jeSchedules/jeSchedulesPayload.js +0 -1
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -1
- package/lib/esm/entity/transaction/stateTypes/paymentType.js +9 -1
- package/lib/esm/entity/transaction/stateTypes/printStatus.js +11 -0
- package/lib/esm/epic.js +6 -2
- package/lib/esm/index.js +10 -7
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/actualMatching/fetchActualMatchingMatchEpic.js +2 -4
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/actualMatching/matchAndReverseAccrualsEpic.js +13 -26
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/actualMatching/searchMatchTransactionsEpic.js +23 -2
- package/lib/esm/view/expenseAutomationView/reducers/actualMatchingViewReducer.js +38 -89
- package/lib/esm/view/expenseAutomationView/selectors/actualMatchingViewSelector.js +64 -61
- package/lib/esm/view/expenseAutomationView/types/actualMatchingViewState.js +0 -15
- package/lib/esm/view/transactionDetail/createTransaction/createTransactionLocalDataHelper.js +133 -0
- package/lib/esm/view/transactionDetail/createTransaction/createTransactionPayload.js +132 -0
- package/lib/esm/view/transactionDetail/createTransaction/createTransactionSelector.js +41 -0
- package/lib/esm/view/transactionDetail/createTransaction/createTransactionState.js +11 -0
- package/lib/esm/view/transactionDetail/createTransaction/epics/createTransactionEpic.js +60 -0
- package/lib/esm/view/transactionDetail/createTransaction/epics/fetchVendorRecommendationsForCreateTransactionEpic.js +55 -0
- package/lib/esm/view/transactionDetail/createTransaction/epics/initializeCreateTransactionLocalDataEpic.js +14 -0
- package/lib/esm/view/transactionDetail/transactionDetailReducer.js +174 -1
- package/lib/index.d.ts +12 -8
- package/lib/index.js +70 -57
- package/lib/view/expenseAutomationView/epics/jeSchedule/actualMatching/fetchActualMatchingMatchEpic.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/jeSchedule/actualMatching/fetchActualMatchingMatchEpic.js +1 -3
- package/lib/view/expenseAutomationView/epics/jeSchedule/actualMatching/matchAndReverseAccrualsEpic.js +11 -24
- package/lib/view/expenseAutomationView/epics/jeSchedule/actualMatching/searchMatchTransactionsEpic.js +22 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/actualMatchingPayload.d.ts +1 -12
- package/lib/view/expenseAutomationView/reducers/actualMatchingViewReducer.d.ts +8 -19
- package/lib/view/expenseAutomationView/reducers/actualMatchingViewReducer.js +39 -90
- package/lib/view/expenseAutomationView/selectorTypes/actualMatchingViewSelectorTypes.d.ts +8 -20
- package/lib/view/expenseAutomationView/selectors/actualMatchingViewSelector.d.ts +4 -7
- package/lib/view/expenseAutomationView/selectors/actualMatchingViewSelector.js +64 -64
- package/lib/view/expenseAutomationView/types/actualMatchingViewState.d.ts +4 -20
- package/lib/view/expenseAutomationView/types/actualMatchingViewState.js +1 -18
- package/lib/view/transactionDetail/createTransaction/createTransactionLocalDataHelper.d.ts +51 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionLocalDataHelper.js +148 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionPayload.d.ts +85 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionPayload.js +136 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionSelector.d.ts +40 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionSelector.js +48 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionState.d.ts +81 -0
- package/lib/view/transactionDetail/createTransaction/createTransactionState.js +14 -0
- package/lib/view/transactionDetail/createTransaction/epics/createTransactionEpic.d.ts +9 -0
- package/lib/view/transactionDetail/createTransaction/epics/createTransactionEpic.js +64 -0
- package/lib/view/transactionDetail/createTransaction/epics/fetchVendorRecommendationsForCreateTransactionEpic.d.ts +20 -0
- package/lib/view/transactionDetail/createTransaction/epics/fetchVendorRecommendationsForCreateTransactionEpic.js +59 -0
- package/lib/view/transactionDetail/createTransaction/epics/initializeCreateTransactionLocalDataEpic.d.ts +12 -0
- package/lib/view/transactionDetail/createTransaction/epics/initializeCreateTransactionLocalDataEpic.js +18 -0
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +37 -1
- package/lib/view/transactionDetail/transactionDetailReducer.js +176 -2
- package/lib/view/transactionDetail/transactionDetailState.d.ts +12 -0
- package/package.json +1 -1
- package/lib/esm/view/expenseAutomationView/epics/jeSchedule/actualMatching/ignoreActualMatchingSuggestionEpic.js +0 -50
- package/lib/view/expenseAutomationView/epics/jeSchedule/actualMatching/ignoreActualMatchingSuggestionEpic.d.ts +0 -10
- package/lib/view/expenseAutomationView/epics/jeSchedule/actualMatching/ignoreActualMatchingSuggestionEpic.js +0 -54
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
import { ActualMatchingMatchPayload } from '../../../../../entity/actualMatching/actualMatchingPayload';
|
|
4
|
-
import {
|
|
4
|
+
import { updateActualMatchingMatches } from '../../../../../entity/actualMatching/actualMatchingReducer';
|
|
5
5
|
import { ZeniAPIResponse } from '../../../../../responsePayload';
|
|
6
6
|
import { clearAll } from '../../../../../rootActions';
|
|
7
7
|
import { RootState } from '../../../../../rootStateTypes';
|
|
8
8
|
import { ZeniAPI } from '../../../../../zeniAPI';
|
|
9
9
|
import { fetchActualMatchingMatch, fetchActualMatchingMatchFailure, fetchActualMatchingMatchSuccess } from '../../../reducers/actualMatchingViewReducer';
|
|
10
10
|
export type ActualMatchingMatchResponse = ZeniAPIResponse<ActualMatchingMatchPayload>;
|
|
11
|
-
export type ActionType = ReturnType<typeof clearAll> | ReturnType<typeof fetchActualMatchingMatch> | ReturnType<typeof fetchActualMatchingMatchFailure> | ReturnType<typeof fetchActualMatchingMatchSuccess> | ReturnType<typeof
|
|
11
|
+
export type ActionType = ReturnType<typeof clearAll> | ReturnType<typeof fetchActualMatchingMatch> | ReturnType<typeof fetchActualMatchingMatchFailure> | ReturnType<typeof fetchActualMatchingMatchSuccess> | ReturnType<typeof updateActualMatchingMatches>;
|
|
12
12
|
export declare const fetchActualMatchingMatchEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|
|
@@ -35,8 +35,6 @@ const fetchActualMatchingMatchEpic = (actions$, state$, zeniAPI) => actions$.pip
|
|
|
35
35
|
refreshViewInBackground,
|
|
36
36
|
status: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', `Fetch actual matching match REST API call errored out ${JSON.stringify(error)}`),
|
|
37
37
|
}),
|
|
38
|
-
])), (0, operators_1.takeUntil)(actions$.pipe((0, operators_1.filter)(
|
|
39
|
-
(actualMatchingReducer_1.removeActualMatchingMatch.match(action) &&
|
|
40
|
-
action.payload.matchId === matchId)))));
|
|
38
|
+
])), (0, operators_1.takeUntil)(actions$.pipe((0, operators_1.filter)(rootActions_1.clearAll.match))));
|
|
41
39
|
}));
|
|
42
40
|
exports.fetchActualMatchingMatchEpic = fetchActualMatchingMatchEpic;
|
|
@@ -12,7 +12,7 @@ const actualMatchingViewReducer_1 = require("../../../reducers/actualMatchingVie
|
|
|
12
12
|
const actualMatchingViewState_1 = require("../../../types/actualMatchingViewState");
|
|
13
13
|
const refreshActualMatchingList_1 = require("./refreshActualMatchingList");
|
|
14
14
|
function isMatchFailedStatus(status) {
|
|
15
|
-
return status === 'conflict' || status === 'claim_lost' || status === 'error';
|
|
15
|
+
return (status === 'conflict' || status === 'claim_lost' || status === 'error');
|
|
16
16
|
}
|
|
17
17
|
function matchAndReverseSnackbar(results, vendorName) {
|
|
18
18
|
const reversedCount = results.filter((result) => result.status === 'reversed').length;
|
|
@@ -59,15 +59,12 @@ function matchAndReverseHttpFailSnackbar(vendorName) {
|
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
function matchVendorName(state, matchId) {
|
|
62
|
-
return (
|
|
63
|
-
?.vendorName ?? '');
|
|
62
|
+
return (0, actualMatchingSelector_1.getActualMatchingMatchById)(state.actualMatchingState, matchId)?.vendorName ?? '';
|
|
64
63
|
}
|
|
65
64
|
const matchAndReverseAccrualsEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(actualMatchingViewReducer_1.matchAndReverseAccruals.match),
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
(0, operators_1.groupBy)((action) => `${action.payload.transactionType.toLowerCase()}:${action.payload.transactionIntegrationId}`), (0, operators_1.mergeMap)((perMatch$) => perMatch$.pipe((0, operators_1.exhaustMap)((action) => {
|
|
70
|
-
const { transactionId, transactionIntegrationId, transactionType, lineIds, accrualIds, transactionSyncToken, forMatchModal, } = action.payload;
|
|
65
|
+
// Posts reversing JEs; drop duplicate clicks while a request is in flight.
|
|
66
|
+
(0, operators_1.exhaustMap)((action) => {
|
|
67
|
+
const { transactionId, transactionIntegrationId, transactionType, lineIds, accrualIds, transactionSyncToken, } = action.payload;
|
|
71
68
|
const body = {
|
|
72
69
|
transaction_id: transactionId,
|
|
73
70
|
transaction_integration_id: transactionIntegrationId,
|
|
@@ -86,40 +83,30 @@ const matchAndReverseAccrualsEpic = (actions$, state$, zeniAPI) => actions$.pipe
|
|
|
86
83
|
if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
|
|
87
84
|
const results = response.data.results.map(actualMatchingPayload_1.toMatchAndReverseResult);
|
|
88
85
|
const successActions = [
|
|
89
|
-
(0, actualMatchingViewReducer_1.matchAndReverseAccrualsSuccess)({
|
|
90
|
-
matchId,
|
|
91
|
-
results,
|
|
92
|
-
...(forMatchModal === true ? { forMatchModal: true } : {}),
|
|
93
|
-
}),
|
|
86
|
+
(0, actualMatchingViewReducer_1.matchAndReverseAccrualsSuccess)({ matchId, results }),
|
|
94
87
|
];
|
|
95
88
|
const occupancyChanged = results.some((result) => (0, actualMatchingViewState_1.isMatchAndReverseCompleteStatus)(result.status));
|
|
96
89
|
const allComplete = results.length > 0 &&
|
|
97
90
|
results.every((result) => (0, actualMatchingViewState_1.isMatchAndReverseCompleteStatus)(result.status));
|
|
98
91
|
if (occupancyChanged) {
|
|
99
92
|
// List + detail: list can omit leftovers; detail GET always
|
|
100
|
-
// writes intended occupancy so
|
|
101
|
-
//
|
|
93
|
+
// writes intended occupancy so Continue match prefills the
|
|
94
|
+
// remaining leftover set instead of a stale cached row.
|
|
102
95
|
successActions.push(...(0, refreshActualMatchingList_1.refreshActualMatchingList)(state$.value), (0, actualMatchingViewReducer_1.fetchActualMatchingMatch)(matchId, true));
|
|
103
96
|
}
|
|
104
97
|
const snackbar = matchAndReverseSnackbar(results, vendorName);
|
|
105
98
|
if (snackbar != null) {
|
|
106
99
|
successActions.push(snackbar);
|
|
107
100
|
}
|
|
108
|
-
if (allComplete
|
|
101
|
+
if (allComplete) {
|
|
109
102
|
successActions.push((0, actualMatchingViewReducer_1.clearMatchNewModal)());
|
|
110
103
|
}
|
|
111
104
|
return (0, rxjs_1.from)(successActions);
|
|
112
105
|
}
|
|
113
|
-
return (0, rxjs_1.of)((0, actualMatchingViewReducer_1.matchAndReverseAccrualsFailure)({
|
|
114
|
-
status: response.status,
|
|
115
|
-
matchId,
|
|
116
|
-
...(forMatchModal === true ? { forMatchModal: true } : {}),
|
|
117
|
-
}), matchAndReverseHttpFailSnackbar(vendorName));
|
|
106
|
+
return (0, rxjs_1.of)((0, actualMatchingViewReducer_1.matchAndReverseAccrualsFailure)({ status: response.status }), matchAndReverseHttpFailSnackbar(vendorName));
|
|
118
107
|
}), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, actualMatchingViewReducer_1.matchAndReverseAccrualsFailure)({
|
|
119
|
-
matchId,
|
|
120
|
-
...(forMatchModal === true ? { forMatchModal: true } : {}),
|
|
121
108
|
status: (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'Match and reverse accruals REST API call errored out' +
|
|
122
109
|
JSON.stringify(error)),
|
|
123
110
|
}), matchAndReverseHttpFailSnackbar(vendorName))), (0, operators_1.takeUntil)(actions$.pipe((0, operators_1.filter)(rootActions_1.clearAll.match))));
|
|
124
|
-
}))
|
|
111
|
+
}));
|
|
125
112
|
exports.matchAndReverseAccrualsEpic = matchAndReverseAccrualsEpic;
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.searchMatchTransactionsEpic = void 0;
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
5
|
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const actualMatchingSelector_1 = require("../../../../../entity/actualMatching/actualMatchingSelector");
|
|
6
7
|
const responsePayload_1 = require("../../../../../responsePayload");
|
|
7
8
|
const rootActions_1 = require("../../../../../rootActions");
|
|
8
9
|
const actualMatchingPayload_1 = require("../../../payload/actualMatchingPayload");
|
|
@@ -10,7 +11,27 @@ const actualMatchingViewReducer_1 = require("../../../reducers/actualMatchingVie
|
|
|
10
11
|
const actualMatchingViewSelector_1 = require("../../../selectors/actualMatchingViewSelector");
|
|
11
12
|
const actualMatchingViewState_1 = require("../../../types/actualMatchingViewState");
|
|
12
13
|
const searchMatchTransactionsEpic = (actions$, state$, zeniAPI) => {
|
|
13
|
-
const openModal$ = actions$.pipe((0, operators_1.filter)(actualMatchingViewReducer_1.openMatchNewModal.match), (0, operators_1.mergeMap)(() =>
|
|
14
|
+
const openModal$ = actions$.pipe((0, operators_1.filter)(actualMatchingViewReducer_1.openMatchNewModal.match), (0, operators_1.mergeMap)((action) => {
|
|
15
|
+
const matchId = action.payload.matchId;
|
|
16
|
+
if (matchId == null || matchId === '') {
|
|
17
|
+
return (0, rxjs_1.from)([
|
|
18
|
+
(0, actualMatchingViewReducer_1.searchMatchTransactions)(''),
|
|
19
|
+
(0, actualMatchingViewReducer_1.searchMatchAccruals)(''),
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
const match = (0, actualMatchingSelector_1.getActualMatchingMatchById)(state$.value.actualMatchingState, matchId);
|
|
23
|
+
const parsed = (0, actualMatchingViewSelector_1.parseActualMatchingMatchId)(matchId);
|
|
24
|
+
const transactionType = match?.transactionType != null && match.transactionType !== ''
|
|
25
|
+
? match.transactionType
|
|
26
|
+
: parsed?.transactionType;
|
|
27
|
+
const transactionIntegrationId = match?.transactionIntegrationId != null &&
|
|
28
|
+
match.transactionIntegrationId !== ''
|
|
29
|
+
? match.transactionIntegrationId
|
|
30
|
+
: parsed?.transactionIntegrationId;
|
|
31
|
+
return (0, rxjs_1.from)([
|
|
32
|
+
(0, actualMatchingViewReducer_1.searchMatchTransactions)('', undefined, transactionType, transactionIntegrationId),
|
|
33
|
+
]);
|
|
34
|
+
}));
|
|
14
35
|
const searchActions$ = actions$.pipe((0, operators_1.filter)(actualMatchingViewReducer_1.searchMatchTransactions.match));
|
|
15
36
|
const pagination$ = searchActions$.pipe((0, operators_1.filter)((action) => action.payload.pageToken != null));
|
|
16
37
|
const newSearchDebounced$ = searchActions$.pipe((0, operators_1.filter)((action) => action.payload.pageToken == null), (0, operators_1.debounceTime)(actualMatchingViewState_1.MATCH_SEARCH_DEBOUNCE_MS));
|
package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export declare const getLineItemsByTransactionsIdsFromResponse: (transactions: S
|
|
|
39
39
|
export declare const getLineItemsByTransactionIdsFromLocalData: (transactionLocalData: TransactionReviewLocalDataSelectorView[], selectedTab: TransactionsTab) => Record<ID, string[]>;
|
|
40
40
|
export declare const mergeTabSpecificLineItems: (currentTabSpecificLineItems: TabSpecificLineItems, selectedTab: TransactionsTab, newLineItems: TabSpecificLineItems) => TabSpecificLineItems;
|
|
41
41
|
export declare const getSnackbarMessageForTransactionReview: (updatedCount: number, failedCount: number, categorizedCount: number) => {
|
|
42
|
-
messageSection: "common" | "recommendation_feedback" | "transactionDetails_updatingPastTransactions" | "transactionDetails_transactionUpdated" | "cockpit_month_end_email_sent" | "cockpit_month_end_email_save" | "cockpit_month_end_email_attachment_upload" | "je_bill_link" | "je_posted" | "actual_matching_match_and_reverse" | "actual_matching_undo_reversal" | "
|
|
42
|
+
messageSection: "common" | "recommendation_feedback" | "transactionDetails_updatingPastTransactions" | "transactionDetails_transactionUpdated" | "cockpit_month_end_email_sent" | "cockpit_month_end_email_save" | "cockpit_month_end_email_attachment_upload" | "je_bill_link" | "je_posted" | "actual_matching_match_and_reverse" | "actual_matching_undo_reversal" | "audit_score_updated" | "people_invite_people" | "people_invite_multiple_people" | "people_delete_person" | "people_update_person" | "reimbursement_updated" | "reimbursement_deleted" | "reimbursement_cancelled_deleted" | "reimbursement_cancelled" | "reimbursement_approved" | "reimbursement_rejected" | "reimbursement_sent_for_approval" | "account_added" | "business_verification_save" | "business_verification_submit" | "business_verification_from_bills_submit" | "plaid_connection" | "unlink_deposit_account" | "reimbursement_setup" | "reimbursement_approval_create" | "reimbursement_duplicate_approval_create" | "reimbursement_approval_update" | "reimbursement_duplicate_approval_update" | "reimbursement_approval_delete" | "reimbursement_approval_reorder" | "reimbursement_create_mileage" | "reimbursement_update_mileage" | "reimbursement_accept_term" | "reimbursement_accept_employee_term" | "reimbursement_bulk_submit" | "reimbursement_bulk_processed" | "bill_pay_setup" | "zeni_accounts_setup" | "bill_pay_approval_create" | "bill_pay_duplicate_approval_create" | "bill_pay_approval_update" | "bill_pay_duplicate_approval_update" | "bill_pay_approval_delete" | "bill_pay_approval_reorder" | "bill_pay_updated" | "bill_pay_deleted" | "bill_pay_cancelled_deleted" | "bill_pay_cancelled" | "bill_pay_approved" | "real_time_approver_added" | "bill_pay_rejected" | "bill_pay_sent_for_approval" | "bill_pay_accept_term" | "bill_pay_bulk_submit" | "bill_pay_bulk_processed" | "bill_pay_refund" | "bill_pay_retry" | "bill_pay_marked_as_paid" | "zeni_account_accept_term" | "update_vendor" | "data_refresh_update" | "delete_bank_account" | "create_bank_account" | "create_bank_account_ach" | "create_bank_account_wire" | "create_bank_account_international" | "transfer_money" | "update_zeni_account_nickname" | "create_checking_account" | "deposit_check" | "create_vendor" | "onboarding_customer_view" | "onboarding_customer_view_complete" | "onboarding_customer_identity_verification_save" | "onboarding_customer_identity_verification_submit" | "onboarding_customer_business_verification_save" | "onboarding_customer_business_verification_submit" | "retry_bank_account_connection" | "dashboard_invite_sent" | "onboarding_info_saved" | "approve_original_merchant" | "approve_global_merchant" | "reject_global_merchant" | "create_global_merchant" | "fetch_global_merchant_no_recommendation" | "save_vendor_renamed" | "save_vendor_sent_for_review" | "save_vendor_marked_as_employee" | "save_vendor_marked_as_local_contractor" | "charge_card_setup" | "charge_card_accept_term" | "charge_card_receipt_upload" | "charge_card_resend_invite" | "charge_card_revoke_invite" | "card_policy_created" | "card_policy_updated" | "card_policy_deleted" | "charge_card_update_limit" | "charge_cards_update_limit" | "close_charge_card" | "lock_charge_card" | "lock_charge_card_card_user" | "lock_charge_cards" | "unlock_charge_card" | "unlock_charge_card_card_user" | "unlock_charge_cards" | "close_charge_cards" | "revoke_invite_charge_cards" | "charge_card_express_interest" | "create_schedule" | "save_schedule" | "delete_schedule" | "ignore_schedule" | "revert_schedule" | "ignore_accrual" | "revert_accrual" | "save_task_detail" | "fetch_task_detail" | "delete_task" | "archive_task" | "snooze_task" | "unsnooze_task" | "create_tag" | "delete_tag" | "update_charge_card" | "update_charge_card_name" | "update_charge_card_name_card_user" | "issue_charge_card" | "issue_charge_cards" | "notification_settings_saved" | "referral_invite_sent" | "notification_mark_as_read" | "mark_as_complete_schedule" | "cancel_journal_entry" | "settings_accounting_accounts_updated" | "create_card_setup" | "confirm_card_setup" | "add_card_payment_source" | "fetch_payment_sources" | "task_assigned_toast_notification" | "task_due_tomorrow_toast_notification" | "task_deleted_toast_notification" | "task_archived_toast_notification" | "task_overdue_toast_notification" | "task_overdue_toast_notification_creator" | "task_notification_count" | "task_activities_toast_notification" | "task_created_toast_notification" | "task_group_creation_success" | "task_group_deletion_success" | "task_group_update_success" | "primary_funding_account_updated" | "task_time_spent_validation" | "missing_receipts_attachment" | "flux_analysis_unreviewed" | "flux_analysis_reviewed" | "receipt_match" | "receipts_upload" | "receipts_bulk_match" | "billing_address_view" | "express_pay_submit" | "exclude_transaction" | "reconcile" | "save_reconcile_for_later" | "recon_transaction_categorize" | "recon_transaction_match" | "update_debit_card_pin_attempt" | "set_debit_card_pin" | "ai_cfo_create_session_and_submit" | "ai_cfo_chat_session_deleted" | "charge_card_auto_pay_enable" | "charge_card_auto_pay_disable" | "treasury_setup" | "treasury_accept_term" | "treasury_transfer_money" | "treasury_transfer_money_failed" | "auto_transfer_rule_create" | "auto_transfer_rule_update" | "auto_transfer_rule_delete" | "auto_transfer_rule_pause" | "auto_transfer_rule_resume" | "treasury_update_portfolio_allocation" | "send_email_magic_link_to_user" | "complete_profile_done" | "create_transfer_entry" | "create_transaction" | "reports_resync" | "invalid_phone_number" | "transactions_categorized_updated_failed" | "transaction_categorized_updated_failed" | "transactionsCategorized_transactionsUpdated" | "transactionsCategorized_transactionUpdated" | "transactionCategorized_transactionsUpdated" | "transactionCategorized_transactionUpdated" | "transactionsCategorized_transactionsFailed" | "transactionsCategorized_transactionFailed" | "transactionCategorized_transactionsFailed" | "transactionCategorized_transactionFailed" | "transactionsUpdated_transactionsFailed" | "transactionsUpdated_transactionFailed" | "transactionUpdated_transactionsFailed" | "transactionUpdated_transactionFailed" | "transactionsCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionsUpdated_transactionFailed" | "transactionsCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionsUpdated_transactionsFailed" | "transactionsCategorized_transactionUpdated_transactionFailed" | "transactionCategorized_transactionsUpdated_transactionFailed" | "transactionCategorized_transactionUpdated_transactionsFailed" | "transactionCategorized_transactionUpdated_transactionFailed" | "accounting_classes_enabled_update" | "accounting_projects_enabled_update" | "accounting_projects_qbo_not_enabled" | "capitalization_threshold_update" | "account_excluded_from_reconciliation" | "account_included_in_reconciliation" | "confirm_statement_mapping" | "statement_parsing_in_progress" | "statement_parsing_complete" | "ai_accountant_trigger_job" | "oauth_consent_approve" | "oauth_consent_invalid_request" | "credit_agent_update_profile" | "credit_agent_save_macro" | "credit_agent_schedule_cron" | "create_sub_task" | "qbo_connection_already_linked" | "qbo_connection_failed" | "accounting_projects_qbo_reconnect_failed" | "product_services_update" | "qbo_realm_id_update" | "invoicing_dunning_case_resolved" | "invoicing_dunning_retry" | "invoicing_dunning_cancel" | "invoicing_dunning_settings_save" | "invoicing_qbo_backfill" | "invoicing_qbo_sync_health_retry" | "invoicing_qbo_settings_save" | "invoicing_branding_save" | "invoicing_discount_archive" | "invoicing_discount_unarchive" | "invoicing_discount_delete" | "invoicing_invoice_reminder_sent" | "invoicing_invoice_regenerated" | "invoicing_invoice_voided" | "invoicing_catalog_item_saved" | "invoicing_customer_saved" | "invoicing_subscription_saved" | "invoicing_coupon_saved" | "invoicing_invoice_saved" | "invoicing_credit_note_saved" | "invoicing_payment_recorded" | "invoicing_subscription_activated" | "invoicing_subscription_cancellation_removed" | "invoicing_subscription_cancelled" | "invoicing_subscription_non_renewing" | "invoicing_subscription_paused" | "invoicing_subscription_reactivated" | "invoicing_subscription_resumed" | "invoicing_subscription_term_end_changed" | "invoicing_data_import_download";
|
|
43
43
|
messageText: "notification" | "failed" | "success";
|
|
44
44
|
type: "error" | "success" | "info";
|
|
45
45
|
variables: {
|
|
@@ -3,7 +3,7 @@ import { TimePeriod } from '../../../commonStateTypes/timePeriod';
|
|
|
3
3
|
import { ActualMatchingListResponsePayload, DisplayCurrencyFallback } from '../../../entity/actualMatching/actualMatchingPayload';
|
|
4
4
|
import { JEOneTimeAccrualPayload } from '../../../entity/jeSchedules/jeSchedulesPayload';
|
|
5
5
|
import { ZeniAPIResponse } from '../../../responsePayload';
|
|
6
|
-
import {
|
|
6
|
+
import { ActualMatchingTransactionSearchResult, MatchAndReverseResult, UndoReversalResult } from '../types/actualMatchingViewState';
|
|
7
7
|
export declare function toServiceMonthFromPeriod(period: TimePeriod): string;
|
|
8
8
|
export type ActualMatchingListResponse = ZeniAPIResponse<ActualMatchingListResponsePayload>;
|
|
9
9
|
export interface ActualMatchingAccrualSearchResponsePayload {
|
|
@@ -72,17 +72,6 @@ export declare function toMatchAndReverseResult(payload: MatchAndReverseResultPa
|
|
|
72
72
|
export interface UndoReversalRequestPayload {
|
|
73
73
|
accrual_ids: ID[];
|
|
74
74
|
}
|
|
75
|
-
export interface IgnoreActualMatchingSuggestionRequestPayload {
|
|
76
|
-
reason: ActualMatchingIgnoreReasonType;
|
|
77
|
-
note?: string;
|
|
78
|
-
}
|
|
79
|
-
export interface IgnoreActualMatchingSuggestionResponsePayload {
|
|
80
|
-
already_dismissed_accrual_ids?: string[];
|
|
81
|
-
dismissed_accrual_ids?: string[];
|
|
82
|
-
match_id?: string;
|
|
83
|
-
no_longer_eligible_accrual_ids?: string[];
|
|
84
|
-
}
|
|
85
|
-
export type IgnoreActualMatchingSuggestionResponse = ZeniAPIResponse<IgnoreActualMatchingSuggestionResponsePayload>;
|
|
86
75
|
export interface UndoReversalResultPayload {
|
|
87
76
|
accrual_id: ID;
|
|
88
77
|
status: string;
|
|
@@ -7,7 +7,7 @@ export declare const initialTransactionSearchState: ActualMatchingTransactionSea
|
|
|
7
7
|
export declare const initialAccrualSearchState: ActualMatchingAccrualSearchState;
|
|
8
8
|
export declare const initialMatchModalState: ActualMatchingMatchModalState;
|
|
9
9
|
export declare const initialState: ActualMatchingViewState;
|
|
10
|
-
export declare const
|
|
10
|
+
export declare const ackCloseMatchAfterUndo: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationActualMatchingView/ackCloseMatchAfterUndo">, clearActualMatchingView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationActualMatchingView/clearActualMatchingView">, clearMatchNewModal: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationActualMatchingView/clearMatchNewModal">, closeMatchNewModal: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"expenseAutomationActualMatchingView/closeMatchNewModal">, fetchActualMatching: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[period: TimePeriod, refreshViewInBackground?: any], {
|
|
11
11
|
period: TimePeriod;
|
|
12
12
|
refreshViewInBackground: any;
|
|
13
13
|
}, "expenseAutomationActualMatchingView/fetchActualMatching", never, never>, fetchActualMatchingFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -31,32 +31,21 @@ export declare const ackCloseMatchAfterIgnore: import("@reduxjs/toolkit").Action
|
|
|
31
31
|
matchIds: ActualMatchingMatchId[];
|
|
32
32
|
refreshViewInBackground: boolean;
|
|
33
33
|
selectedPeriod: MonthYearPeriod;
|
|
34
|
-
}, "expenseAutomationActualMatchingView/fetchActualMatchingSuccess">,
|
|
35
|
-
matchId: string;
|
|
36
|
-
reason: "other_ignore" | "already_handled" | "amount_off" | "wrong_period" | "wrong_bill";
|
|
37
|
-
note: string | undefined;
|
|
38
|
-
}, "expenseAutomationActualMatchingView/ignoreActualMatchingSuggestion", never, never>, ignoreActualMatchingSuggestionFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
39
|
-
matchId: ActualMatchingMatchId;
|
|
40
|
-
status: ZeniAPIStatus;
|
|
41
|
-
}, "expenseAutomationActualMatchingView/ignoreActualMatchingSuggestionFailure">, ignoreActualMatchingSuggestionSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
42
|
-
matchId: ActualMatchingMatchId;
|
|
43
|
-
}, "expenseAutomationActualMatchingView/ignoreActualMatchingSuggestionSuccess">, matchAndReverseAccruals: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: string, transactionIntegrationId: string, transactionType: string, lineIds: string[], transactionSyncToken: string, accrualIds: string[], forMatchModal?: boolean | undefined], {
|
|
44
|
-
accrualIds: string[];
|
|
45
|
-
lineIds: string[];
|
|
34
|
+
}, "expenseAutomationActualMatchingView/fetchActualMatchingSuccess">, matchAndReverseAccruals: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionId: string, transactionIntegrationId: string, transactionType: string, lineIds: string[], transactionSyncToken: string, accrualIds: string[]], {
|
|
46
35
|
transactionId: string;
|
|
47
36
|
transactionIntegrationId: string;
|
|
48
|
-
transactionSyncToken: string;
|
|
49
37
|
transactionType: string;
|
|
50
|
-
|
|
38
|
+
lineIds: string[];
|
|
39
|
+
transactionSyncToken: string;
|
|
40
|
+
accrualIds: string[];
|
|
51
41
|
}, "expenseAutomationActualMatchingView/matchAndReverseAccruals", never, never>, matchAndReverseAccrualsFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
52
42
|
status: ZeniAPIStatus;
|
|
53
|
-
forMatchModal?: boolean;
|
|
54
|
-
matchId?: ActualMatchingMatchId;
|
|
55
43
|
}, "expenseAutomationActualMatchingView/matchAndReverseAccrualsFailure">, matchAndReverseAccrualsSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
56
44
|
results: MatchAndReverseResult[];
|
|
57
|
-
forMatchModal?: boolean;
|
|
58
45
|
matchId?: ActualMatchingMatchId;
|
|
59
|
-
}, "expenseAutomationActualMatchingView/matchAndReverseAccrualsSuccess">, openMatchNewModal: import("@reduxjs/toolkit").
|
|
46
|
+
}, "expenseAutomationActualMatchingView/matchAndReverseAccrualsSuccess">, openMatchNewModal: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[matchId?: string | undefined], {
|
|
47
|
+
matchId: string | undefined;
|
|
48
|
+
}, "expenseAutomationActualMatchingView/openMatchNewModal", never, never>, searchMatchAccruals: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[query: string, pageToken?: string | null | undefined], {
|
|
60
49
|
query: string;
|
|
61
50
|
pageToken: string | undefined;
|
|
62
51
|
}, "expenseAutomationActualMatchingView/searchMatchAccruals", never, never>, searchMatchAccrualsFailure: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.updateActualMatchingUIState = exports.undoReversalAccrualsSuccess = exports.undoReversalAccrualsFailure = exports.undoReversalAccruals = exports.searchMatchTransactionsSuccess = exports.searchMatchTransactionsFailure = exports.searchMatchTransactions = exports.searchMatchAccrualsSuccess = exports.searchMatchAccrualsFailure = exports.searchMatchAccruals = exports.openMatchNewModal = exports.matchAndReverseAccrualsSuccess = exports.matchAndReverseAccrualsFailure = exports.matchAndReverseAccruals = exports.
|
|
4
|
+
exports.updateActualMatchingUIState = exports.undoReversalAccrualsSuccess = exports.undoReversalAccrualsFailure = exports.undoReversalAccruals = exports.searchMatchTransactionsSuccess = exports.searchMatchTransactionsFailure = exports.searchMatchTransactions = exports.searchMatchAccrualsSuccess = exports.searchMatchAccrualsFailure = exports.searchMatchAccruals = exports.openMatchNewModal = exports.matchAndReverseAccrualsSuccess = exports.matchAndReverseAccrualsFailure = exports.matchAndReverseAccruals = exports.fetchActualMatchingSuccess = exports.fetchActualMatchingPage = exports.fetchActualMatchingMatchSuccess = exports.fetchActualMatchingMatchFailure = exports.fetchActualMatchingMatch = exports.fetchActualMatchingFailure = exports.fetchActualMatching = exports.closeMatchNewModal = exports.clearMatchNewModal = exports.clearActualMatchingView = exports.ackCloseMatchAfterUndo = exports.initialState = exports.initialMatchModalState = exports.initialAccrualSearchState = exports.initialTransactionSearchState = void 0;
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
6
|
const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
7
7
|
const jeScheduleHelper_1 = require("../../../entity/jeSchedules/jeScheduleHelper");
|
|
@@ -26,6 +26,9 @@ exports.initialAccrualSearchState = {
|
|
|
26
26
|
};
|
|
27
27
|
exports.initialMatchModalState = {
|
|
28
28
|
isOpen: false,
|
|
29
|
+
openedFromMatchId: undefined,
|
|
30
|
+
didPinPrefillTransactions: false,
|
|
31
|
+
pinnedTransactionResults: [],
|
|
29
32
|
transactionSearch: exports.initialTransactionSearchState,
|
|
30
33
|
accrualSearch: exports.initialAccrualSearchState,
|
|
31
34
|
confirmStatus: { fetchState: 'Not-Started', error: undefined },
|
|
@@ -45,28 +48,16 @@ exports.initialState = {
|
|
|
45
48
|
sortOrder: 'descending',
|
|
46
49
|
searchString: '',
|
|
47
50
|
scrollPosition: { scrollTop: 0, scrollLeft: undefined },
|
|
48
|
-
statusFilter: 'all',
|
|
49
51
|
},
|
|
50
52
|
matchModal: exports.initialMatchModalState,
|
|
51
53
|
undoReversalStatusByMatchId: {},
|
|
52
|
-
|
|
53
|
-
confirmStatusByMatchId: {},
|
|
54
|
-
closeMatchAfterUndoMatchIds: [],
|
|
55
|
-
closeMatchAfterIgnoreMatchIds: [],
|
|
54
|
+
closeMatchAfterUndo: false,
|
|
56
55
|
lastMatchResultsByMatchId: {},
|
|
57
56
|
lastUndoResultsByMatchId: {},
|
|
58
57
|
hasValidState() {
|
|
59
58
|
return this.fetchState == 'Completed';
|
|
60
59
|
},
|
|
61
60
|
};
|
|
62
|
-
function enqueueCloseMatchId(ids, matchId) {
|
|
63
|
-
if (!ids.includes(matchId)) {
|
|
64
|
-
ids.push(matchId);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function dropCloseMatchId(ids, matchId) {
|
|
68
|
-
return ids.filter((id) => id !== matchId);
|
|
69
|
-
}
|
|
70
61
|
function pruneLastMatchResultsForUndone(draft, matchId, results) {
|
|
71
62
|
const undoneIds = new Set(results
|
|
72
63
|
.filter((result) => result.status === 'undone')
|
|
@@ -109,6 +100,9 @@ function resetMatchModalSearches(draft) {
|
|
|
109
100
|
error: undefined,
|
|
110
101
|
};
|
|
111
102
|
draft.matchModal.lastBatchResults = undefined;
|
|
103
|
+
draft.matchModal.openedFromMatchId = undefined;
|
|
104
|
+
draft.matchModal.didPinPrefillTransactions = false;
|
|
105
|
+
draft.matchModal.pinnedTransactionResults = [];
|
|
112
106
|
}
|
|
113
107
|
const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
114
108
|
name: 'expenseAutomationActualMatchingView',
|
|
@@ -249,13 +243,21 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
249
243
|
if (action.payload.scrollPosition != null) {
|
|
250
244
|
draft.uiState.scrollPosition = action.payload.scrollPosition;
|
|
251
245
|
}
|
|
252
|
-
if (action.payload.statusFilter != null) {
|
|
253
|
-
draft.uiState.statusFilter = action.payload.statusFilter;
|
|
254
|
-
}
|
|
255
246
|
},
|
|
256
|
-
openMatchNewModal
|
|
257
|
-
|
|
258
|
-
|
|
247
|
+
openMatchNewModal: {
|
|
248
|
+
prepare(matchId) {
|
|
249
|
+
return { payload: { matchId } };
|
|
250
|
+
},
|
|
251
|
+
reducer(draft, action) {
|
|
252
|
+
resetMatchModalSearches(draft);
|
|
253
|
+
draft.matchModal.isOpen = true;
|
|
254
|
+
const matchId = action.payload.matchId;
|
|
255
|
+
draft.matchModal.openedFromMatchId =
|
|
256
|
+
matchId != null && matchId !== '' ? matchId : undefined;
|
|
257
|
+
if (draft.matchModal.openedFromMatchId != null) {
|
|
258
|
+
draft.matchModal.accrualSearch.fetchState = 'Completed';
|
|
259
|
+
}
|
|
260
|
+
},
|
|
259
261
|
},
|
|
260
262
|
// Dismiss (Cancel / overlay). Store reset matches `clearMatchNewModal`;
|
|
261
263
|
// the actions stay distinct so confirm-success vs user-dismiss stay observable.
|
|
@@ -310,6 +312,11 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
310
312
|
}
|
|
311
313
|
else {
|
|
312
314
|
draft.matchModal.transactionSearch.results = results;
|
|
315
|
+
if (draft.matchModal.openedFromMatchId != null &&
|
|
316
|
+
!draft.matchModal.didPinPrefillTransactions) {
|
|
317
|
+
draft.matchModal.didPinPrefillTransactions = true;
|
|
318
|
+
draft.matchModal.pinnedTransactionResults = results;
|
|
319
|
+
}
|
|
313
320
|
}
|
|
314
321
|
draft.matchModal.transactionSearch.nextPageToken = nextPageToken;
|
|
315
322
|
draft.matchModal.transactionSearch.isLoadingMore = false;
|
|
@@ -362,27 +369,21 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
362
369
|
draft.matchModal.accrualSearch.error = action.payload.error;
|
|
363
370
|
},
|
|
364
371
|
matchAndReverseAccruals: {
|
|
365
|
-
reducer(draft
|
|
366
|
-
|
|
372
|
+
reducer(draft) {
|
|
373
|
+
draft.matchModal.confirmStatus = {
|
|
367
374
|
fetchState: 'In-Progress',
|
|
368
375
|
error: undefined,
|
|
369
376
|
};
|
|
370
|
-
if (action.payload.forMatchModal === true) {
|
|
371
|
-
draft.matchModal.confirmStatus = inProgress;
|
|
372
|
-
}
|
|
373
|
-
const matchId = `${action.payload.transactionType.toLowerCase()}:${action.payload.transactionIntegrationId}`;
|
|
374
|
-
draft.confirmStatusByMatchId[matchId] = inProgress;
|
|
375
377
|
},
|
|
376
|
-
prepare(transactionId, transactionIntegrationId, transactionType, lineIds, transactionSyncToken, accrualIds
|
|
378
|
+
prepare(transactionId, transactionIntegrationId, transactionType, lineIds, transactionSyncToken, accrualIds) {
|
|
377
379
|
return {
|
|
378
380
|
payload: {
|
|
379
|
-
accrualIds,
|
|
380
|
-
lineIds,
|
|
381
381
|
transactionId,
|
|
382
382
|
transactionIntegrationId,
|
|
383
|
-
transactionSyncToken,
|
|
384
383
|
transactionType,
|
|
385
|
-
|
|
384
|
+
lineIds,
|
|
385
|
+
transactionSyncToken,
|
|
386
|
+
accrualIds,
|
|
386
387
|
},
|
|
387
388
|
};
|
|
388
389
|
},
|
|
@@ -391,33 +392,23 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
391
392
|
const { results } = action.payload;
|
|
392
393
|
const allComplete = results.length > 0 &&
|
|
393
394
|
results.every((result) => (0, actualMatchingViewState_1.isMatchAndReverseCompleteStatus)(result.status));
|
|
394
|
-
|
|
395
|
+
draft.matchModal.confirmStatus = allComplete
|
|
395
396
|
? { fetchState: 'Completed', error: undefined }
|
|
396
397
|
: {
|
|
397
398
|
fetchState: 'Error',
|
|
398
399
|
error: (0, responsePayload_1.createZeniAPIStatus)('Partial match-and-reverse', 'Some accruals were not reversed'),
|
|
399
400
|
};
|
|
400
|
-
|
|
401
|
-
draft.matchModal.confirmStatus = confirmStatus;
|
|
402
|
-
draft.matchModal.lastBatchResults = results;
|
|
403
|
-
}
|
|
401
|
+
draft.matchModal.lastBatchResults = results;
|
|
404
402
|
if (action.payload.matchId != null) {
|
|
405
|
-
draft.confirmStatusByMatchId[action.payload.matchId] = confirmStatus;
|
|
406
403
|
draft.lastMatchResultsByMatchId[action.payload.matchId] = results;
|
|
407
404
|
pruneLastUndoResultsForMatched(draft, action.payload.matchId, action.payload.results);
|
|
408
405
|
}
|
|
409
406
|
},
|
|
410
407
|
matchAndReverseAccrualsFailure(draft, action) {
|
|
411
|
-
|
|
408
|
+
draft.matchModal.confirmStatus = {
|
|
412
409
|
fetchState: 'Error',
|
|
413
410
|
error: action.payload.status,
|
|
414
411
|
};
|
|
415
|
-
if (action.payload.forMatchModal === true) {
|
|
416
|
-
draft.matchModal.confirmStatus = failed;
|
|
417
|
-
}
|
|
418
|
-
if (action.payload.matchId != null) {
|
|
419
|
-
draft.confirmStatusByMatchId[action.payload.matchId] = failed;
|
|
420
|
-
}
|
|
421
412
|
},
|
|
422
413
|
undoReversalAccruals: {
|
|
423
414
|
reducer(draft, action) {
|
|
@@ -439,12 +430,7 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
439
430
|
};
|
|
440
431
|
const allUndone = results.length > 0 &&
|
|
441
432
|
results.every((result) => result.status === 'undone');
|
|
442
|
-
|
|
443
|
-
enqueueCloseMatchId(draft.closeMatchAfterUndoMatchIds, matchId);
|
|
444
|
-
}
|
|
445
|
-
else {
|
|
446
|
-
draft.closeMatchAfterUndoMatchIds = dropCloseMatchId(draft.closeMatchAfterUndoMatchIds, matchId);
|
|
447
|
-
}
|
|
433
|
+
draft.closeMatchAfterUndo = allUndone;
|
|
448
434
|
pruneLastMatchResultsForUndone(draft, matchId, results);
|
|
449
435
|
if (allUndone) {
|
|
450
436
|
delete draft.lastUndoResultsByMatchId[matchId];
|
|
@@ -458,44 +444,7 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
458
444
|
},
|
|
459
445
|
},
|
|
460
446
|
ackCloseMatchAfterUndo(draft) {
|
|
461
|
-
draft.
|
|
462
|
-
},
|
|
463
|
-
ignoreActualMatchingSuggestion: {
|
|
464
|
-
prepare(matchId, reason, note) {
|
|
465
|
-
return { payload: { matchId, reason, note } };
|
|
466
|
-
},
|
|
467
|
-
reducer(draft, action) {
|
|
468
|
-
draft.ignoreStatusByMatchId[action.payload.matchId] = {
|
|
469
|
-
fetchState: 'In-Progress',
|
|
470
|
-
error: undefined,
|
|
471
|
-
};
|
|
472
|
-
},
|
|
473
|
-
},
|
|
474
|
-
ignoreActualMatchingSuggestionSuccess(draft, action) {
|
|
475
|
-
const { matchId } = action.payload;
|
|
476
|
-
draft.ignoreStatusByMatchId[matchId] = {
|
|
477
|
-
fetchState: 'Completed',
|
|
478
|
-
error: undefined,
|
|
479
|
-
};
|
|
480
|
-
enqueueCloseMatchId(draft.closeMatchAfterIgnoreMatchIds, matchId);
|
|
481
|
-
delete draft.lastMatchResultsByMatchId[matchId];
|
|
482
|
-
delete draft.lastUndoResultsByMatchId[matchId];
|
|
483
|
-
delete draft.detailFetchStateByMatchId[matchId];
|
|
484
|
-
delete draft.detailRefreshStatusByMatchId[matchId];
|
|
485
|
-
delete draft.undoReversalStatusByMatchId[matchId];
|
|
486
|
-
delete draft.confirmStatusByMatchId[matchId];
|
|
487
|
-
Object.keys(draft.matchIdsByPeriod).forEach((periodId) => {
|
|
488
|
-
draft.matchIdsByPeriod[periodId] = draft.matchIdsByPeriod[periodId].filter((id) => id !== matchId);
|
|
489
|
-
});
|
|
490
|
-
},
|
|
491
|
-
ignoreActualMatchingSuggestionFailure(draft, action) {
|
|
492
|
-
draft.ignoreStatusByMatchId[action.payload.matchId] = {
|
|
493
|
-
fetchState: 'Error',
|
|
494
|
-
error: action.payload.status,
|
|
495
|
-
};
|
|
496
|
-
},
|
|
497
|
-
ackCloseMatchAfterIgnore(draft) {
|
|
498
|
-
draft.closeMatchAfterIgnoreMatchIds.shift();
|
|
447
|
+
draft.closeMatchAfterUndo = false;
|
|
499
448
|
},
|
|
500
449
|
undoReversalAccrualsFailure(draft, action) {
|
|
501
450
|
draft.undoReversalStatusByMatchId[action.payload.matchId] = {
|
|
@@ -513,5 +462,5 @@ const expenseAutomationActualMatchingView = (0, toolkit_1.createSlice)({
|
|
|
513
462
|
});
|
|
514
463
|
},
|
|
515
464
|
});
|
|
516
|
-
_a = expenseAutomationActualMatchingView.actions, exports.
|
|
465
|
+
_a = expenseAutomationActualMatchingView.actions, exports.ackCloseMatchAfterUndo = _a.ackCloseMatchAfterUndo, exports.clearActualMatchingView = _a.clearActualMatchingView, exports.clearMatchNewModal = _a.clearMatchNewModal, exports.closeMatchNewModal = _a.closeMatchNewModal, exports.fetchActualMatching = _a.fetchActualMatching, exports.fetchActualMatchingFailure = _a.fetchActualMatchingFailure, exports.fetchActualMatchingMatch = _a.fetchActualMatchingMatch, exports.fetchActualMatchingMatchFailure = _a.fetchActualMatchingMatchFailure, exports.fetchActualMatchingMatchSuccess = _a.fetchActualMatchingMatchSuccess, exports.fetchActualMatchingPage = _a.fetchActualMatchingPage, exports.fetchActualMatchingSuccess = _a.fetchActualMatchingSuccess, exports.matchAndReverseAccruals = _a.matchAndReverseAccruals, exports.matchAndReverseAccrualsFailure = _a.matchAndReverseAccrualsFailure, exports.matchAndReverseAccrualsSuccess = _a.matchAndReverseAccrualsSuccess, exports.openMatchNewModal = _a.openMatchNewModal, exports.searchMatchAccruals = _a.searchMatchAccruals, exports.searchMatchAccrualsFailure = _a.searchMatchAccrualsFailure, exports.searchMatchAccrualsSuccess = _a.searchMatchAccrualsSuccess, exports.searchMatchTransactions = _a.searchMatchTransactions, exports.searchMatchTransactionsFailure = _a.searchMatchTransactionsFailure, exports.searchMatchTransactionsSuccess = _a.searchMatchTransactionsSuccess, exports.undoReversalAccruals = _a.undoReversalAccruals, exports.undoReversalAccrualsFailure = _a.undoReversalAccrualsFailure, exports.undoReversalAccrualsSuccess = _a.undoReversalAccrualsSuccess, exports.updateActualMatchingUIState = _a.updateActualMatchingUIState;
|
|
517
466
|
exports.default = expenseAutomationActualMatchingView.reducer;
|
|
@@ -43,9 +43,6 @@ export interface ActualMatchingKpiSummary {
|
|
|
43
43
|
count: number;
|
|
44
44
|
estimatedMinutesToClear: number;
|
|
45
45
|
};
|
|
46
|
-
reversed: {
|
|
47
|
-
count: number;
|
|
48
|
-
};
|
|
49
46
|
variance: {
|
|
50
47
|
averagePercentPerMatch: number;
|
|
51
48
|
netAmount: number;
|
|
@@ -70,30 +67,21 @@ export interface ActualMatchingMatchModalView {
|
|
|
70
67
|
results: ActualMatchingTransactionSearchResult[];
|
|
71
68
|
};
|
|
72
69
|
lastBatchResults?: MatchAndReverseResult[];
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
transactionType: string;
|
|
82
|
-
leftovers?: JEOneTimeAccrual[];
|
|
83
|
-
matchShape?: string;
|
|
84
|
-
matchTier?: string;
|
|
85
|
-
transactionDate?: string;
|
|
86
|
-
vendorId?: ID;
|
|
87
|
-
vendorName?: string;
|
|
70
|
+
openedFromMatchId?: string;
|
|
71
|
+
prefill?: {
|
|
72
|
+
selectedAccrualIds: ID[];
|
|
73
|
+
actualAmount?: number;
|
|
74
|
+
consumedLineIds?: ID[];
|
|
75
|
+
matchedLineId?: string;
|
|
76
|
+
matchedTransactionId?: string;
|
|
77
|
+
};
|
|
88
78
|
}
|
|
89
79
|
export interface ExpenseAutomationActualMatchingViewSelector extends SelectorView {
|
|
90
80
|
hasLoadedForSelectedPeriod: boolean;
|
|
91
|
-
ignoreStatusByMatchId: Record<string, FetchStateAndError>;
|
|
92
81
|
kpiSummary: ActualMatchingKpiSummary;
|
|
93
82
|
matchModal: ActualMatchingMatchModalView;
|
|
94
83
|
pendingReview: ActualMatchingRow[];
|
|
95
84
|
refreshStatus: FetchStateAndError;
|
|
96
85
|
reversed: ActualMatchingRow[];
|
|
97
86
|
uiState: ActualMatchingViewUIState;
|
|
98
|
-
undoReversalStatusByMatchId: Record<string, FetchStateAndError>;
|
|
99
87
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { FetchStateAndError } from '../../../commonStateTypes/common';
|
|
2
2
|
import { MonthYearPeriod } from '../../../commonStateTypes/timePeriod';
|
|
3
3
|
import { DisplayCurrencyFallback } from '../../../entity/actualMatching/actualMatchingPayload';
|
|
4
|
+
import { ActualMatchingMatch } from '../../../entity/actualMatching/actualMatchingState';
|
|
4
5
|
import { ActualMatchingMatchId } from '../../../entity/actualMatching/actualMatchingTypes';
|
|
5
6
|
import { JEOneTimeAccrual } from '../../../entity/jeSchedules/jeSchedulesSelector';
|
|
6
7
|
import { JEOneTimeAccrualMatchSuggestion } from '../../../entity/jeSchedules/jeSchedulesState';
|
|
7
8
|
import { RootState } from '../../../rootStateTypes';
|
|
8
9
|
import { ZeniDate } from '../../../zeniDayJS';
|
|
9
|
-
import { ActualMatchingKpiSummary,
|
|
10
|
+
import { ActualMatchingKpiSummary, ActualMatchingRow, ActualMatchingRowKind, ExpenseAutomationActualMatchingViewSelector } from '../selectorTypes/actualMatchingViewSelectorTypes';
|
|
10
11
|
import { MatchAndReverseResult, UndoReversalResult } from '../types/actualMatchingViewState';
|
|
11
12
|
export declare function getSelectedMonthYearForCurrentTenant(state: RootState): MonthYearPeriod | undefined;
|
|
12
13
|
export declare function getTenantDisplayCurrency(state: RootState): DisplayCurrencyFallback | undefined;
|
|
@@ -26,16 +27,12 @@ export declare function getActualMatchingReversalDate(accrual: JEOneTimeAccrual,
|
|
|
26
27
|
export declare function buildActualMatchingKpiSummary(rows: ActualMatchingRow[], displayCurrencyCode?: string): ActualMatchingKpiSummary;
|
|
27
28
|
export interface ExpenseAutomationActualMatchingMatchView {
|
|
28
29
|
detailFetchState: FetchStateAndError;
|
|
29
|
-
ignoreStatus: FetchStateAndError;
|
|
30
30
|
refreshStatus: FetchStateAndError;
|
|
31
31
|
undoReversalStatus: FetchStateAndError;
|
|
32
32
|
lastMatchResults?: MatchAndReverseResult[];
|
|
33
33
|
lastUndoResults?: UndoReversalResult[];
|
|
34
|
-
match?:
|
|
34
|
+
match?: ActualMatchingMatch;
|
|
35
35
|
}
|
|
36
36
|
export declare function getExpenseAutomationActualMatchingMatchView(state: RootState, matchId: ActualMatchingMatchId): ExpenseAutomationActualMatchingMatchView;
|
|
37
|
-
export declare function getCloseMatchAfterUndo(state: RootState):
|
|
38
|
-
export declare function getCloseMatchAfterUndoMatchId(state: RootState): ActualMatchingMatchId | undefined;
|
|
39
|
-
export declare function getCloseMatchAfterIgnoreMatchId(state: RootState): ActualMatchingMatchId | undefined;
|
|
40
|
-
export declare function getActualMatchingMatchModalConfirmStatus(state: RootState, matchId?: ActualMatchingMatchId): FetchStateAndError;
|
|
37
|
+
export declare function getCloseMatchAfterUndo(state: RootState): boolean;
|
|
41
38
|
export declare function getExpenseAutomationActualMatchingView(state: RootState): ExpenseAutomationActualMatchingViewSelector;
|