@zeniai/client-epic-state 4.19.40-betaML1 → 4.19.40
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/esm/index.js +2 -2
- package/lib/esm/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js +0 -1
- package/lib/esm/view/commonVendorView/transactionVendorView/transactionVendorViewReducer.js +1 -2
- package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +0 -27
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -65
- package/lib/esm/view/transactionDetail/epics/saveTransactionDetailEpic.js +2 -2
- package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +2 -11
- package/lib/esm/view/transactionDetail/transactionDetailReducer.js +1 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +29 -30
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js +0 -1
- package/lib/view/commonVendorView/transactionVendorView/transactionVendorViewReducer.d.ts +1 -2
- package/lib/view/commonVendorView/transactionVendorView/transactionVendorViewReducer.js +1 -2
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +0 -10
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js +1 -30
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -7
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -65
- package/lib/view/transactionDetail/epics/saveTransactionDetailEpic.js +2 -2
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.d.ts +2 -3
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +1 -10
- package/lib/view/transactionDetail/transactionDetailReducer.d.ts +1 -3
- package/lib/view/transactionDetail/transactionDetailReducer.js +1 -2
- package/package.json +1 -1
package/lib/esm/index.js
CHANGED
|
@@ -163,7 +163,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
|
|
|
163
163
|
import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys, } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
|
|
164
164
|
import { fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess, } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
|
|
165
165
|
import { deleteAccountStatement, fetchReconciliation as fetchReconciliationView, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateStatementUploadChosen, uploadAccountStatement, } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
|
|
166
|
-
import { clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization,
|
|
166
|
+
import { clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
167
167
|
import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
|
|
168
168
|
import { getExpenseAutomationReconciliationView, isAccountReconReport, } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
|
|
169
169
|
import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
|
|
@@ -408,7 +408,7 @@ export { toCOABalanceTypeStrict, toCOABalanceType as toCOABlanaceType, isCalcula
|
|
|
408
408
|
export { stringToUnion, stringToUnionStrict };
|
|
409
409
|
export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, getMonthEndCloseChecksViewByTenantId, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, };
|
|
410
410
|
export { getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
411
|
-
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId,
|
|
411
|
+
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, clearExpenseAutomationTransactionsView, toTransactionsSortKey, };
|
|
412
412
|
export { TOP_EX_TIME_PERIODS };
|
|
413
413
|
export { toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, };
|
|
414
414
|
export { toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
|
package/lib/esm/view/commonVendorView/transactionVendorView/epics/saveTransactionVendorEpic.js
CHANGED
|
@@ -105,7 +105,6 @@ export const saveTransactionVendorEpic = (actions$, state$, zeniAPI) => actions$
|
|
|
105
105
|
transactionId: action.payload.transactionId,
|
|
106
106
|
isExpenseAutomationEnabled: action.payload.isExpenseAutomationEnabled,
|
|
107
107
|
cotTransactionTracking: [], // We don't need to pass COT tracking for vendor save
|
|
108
|
-
isUncategorizedExpenseCategoryEnabled: action.payload.isUncategorizedExpenseCategoryEnabled,
|
|
109
108
|
}));
|
|
110
109
|
}
|
|
111
110
|
return from(actions);
|
|
@@ -44,14 +44,13 @@ const transactionVendorView = createSlice({
|
|
|
44
44
|
draft.newVendorState.saveStatus.error = undefined;
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
|
-
prepare(transactionId, vendorId, saveTransaction, isExpenseAutomationEnabled = false
|
|
47
|
+
prepare(transactionId, vendorId, saveTransaction, isExpenseAutomationEnabled = false) {
|
|
48
48
|
return {
|
|
49
49
|
payload: {
|
|
50
50
|
vendorId,
|
|
51
51
|
transactionId,
|
|
52
52
|
saveTransaction,
|
|
53
53
|
isExpenseAutomationEnabled,
|
|
54
|
-
isUncategorizedExpenseCategoryEnabled,
|
|
55
54
|
},
|
|
56
55
|
};
|
|
57
56
|
},
|
package/lib/esm/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.js
CHANGED
|
@@ -3,33 +3,6 @@ import { isEntityMatching, mergeTransactionAndEntityRecommendationsWithCOT, toLi
|
|
|
3
3
|
import { isAccountUncategorized } from '../../transactionDetail/transactionDetailLocalDataHelper';
|
|
4
4
|
import { initialSupportedTransactionCategorization, } from '../types/transactionsViewState';
|
|
5
5
|
import { TRANSACTION_CATEGORIZED_COUNT_VARIABLE_NAME, TRANSACTION_COUNT_VARIABLE_NAME, TRANSACTION_FAILED_COUNT_VARIABLE_NAME, TRANSACTION_UPDATED_COUNT_VARIABLE_NAME, } from './helpers';
|
|
6
|
-
/**
|
|
7
|
-
* Extracts line IDs with `pending_review` categorization status from a transaction,
|
|
8
|
-
* preserving the transaction's original line order.
|
|
9
|
-
*/
|
|
10
|
-
export const getPendingReviewLineIdsFromTransaction = (transaction) => {
|
|
11
|
-
if (transaction.lines == null) {
|
|
12
|
-
return [];
|
|
13
|
-
}
|
|
14
|
-
return transaction.lines
|
|
15
|
-
.filter((line) => line.categorizationStatus === 'pending_review')
|
|
16
|
-
.map((line) => line.id);
|
|
17
|
-
};
|
|
18
|
-
/**
|
|
19
|
-
* Removes a transaction from a tab view's local data and membership lists.
|
|
20
|
-
* Intended for use within Immer reducer drafts (mutates in place).
|
|
21
|
-
*/
|
|
22
|
-
export const removeTransactionFromTabView = (tabView, transactionId) => {
|
|
23
|
-
delete tabView.transactionReviewLocalDataById[transactionId];
|
|
24
|
-
for (const periodId of Object.keys(tabView.transactionIdsBySelectedPeriod)) {
|
|
25
|
-
tabView.transactionIdsBySelectedPeriod[periodId] =
|
|
26
|
-
tabView.transactionIdsBySelectedPeriod[periodId].filter((id) => id !== transactionId);
|
|
27
|
-
}
|
|
28
|
-
tabView.selectedCheckBoxTransactionIds =
|
|
29
|
-
tabView.selectedCheckBoxTransactionIds.filter((id) => id !== transactionId);
|
|
30
|
-
tabView.transactionIdsWithUnsavedData =
|
|
31
|
-
tabView.transactionIdsWithUnsavedData.filter((id) => id !== transactionId);
|
|
32
|
-
};
|
|
33
6
|
export const MAX_SELECTION_LIMIT = 5;
|
|
34
7
|
export const toTransactionDetailLocalData = (transaction, selectedTab, lineItemsByTransactionIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) => {
|
|
35
8
|
const transactionLocal = {
|
|
@@ -3,7 +3,7 @@ import recordGet from 'lodash/get';
|
|
|
3
3
|
import uniq from 'lodash/uniq';
|
|
4
4
|
import { toMonthYearPeriodId, } from '../../../commonStateTypes/timePeriod';
|
|
5
5
|
import { isVendorTransaction } from '../../../entity/transaction/stateTypes/vendorTransaction';
|
|
6
|
-
import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, mergeTabSpecificLineItems,
|
|
6
|
+
import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, mergeTabSpecificLineItems, setEntityRecommendationForLineIdInLocalData, toSetAllLineItemsToCategoryClass, } from '../helpers/transactionCategorizationLocalDataHelper';
|
|
7
7
|
export const initialTransactionTabViewState = {
|
|
8
8
|
saveStatus: {
|
|
9
9
|
fetchState: 'Not-Started',
|
|
@@ -699,70 +699,7 @@ const expenseAutomationTransactionsView = createSlice({
|
|
|
699
699
|
clearExpenseAutomationTransactionsView(draft) {
|
|
700
700
|
Object.assign(draft, initialState);
|
|
701
701
|
},
|
|
702
|
-
syncTransactionCategorizationFromDetailSave: {
|
|
703
|
-
prepare(transactionId, updatedTransaction, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled) {
|
|
704
|
-
return {
|
|
705
|
-
payload: {
|
|
706
|
-
transactionId,
|
|
707
|
-
updatedTransaction,
|
|
708
|
-
pendingReviewLineIds,
|
|
709
|
-
uncategorizedIncomeExpense,
|
|
710
|
-
isUncategorizedExpenseCategoryEnabled,
|
|
711
|
-
},
|
|
712
|
-
};
|
|
713
|
-
},
|
|
714
|
-
reducer(draft, action) {
|
|
715
|
-
const { transactionId, updatedTransaction, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled, } = action.payload;
|
|
716
|
-
const txnId = transactionId.id;
|
|
717
|
-
const reviewTabView = draft.transactionCategorizationView.review;
|
|
718
|
-
const autoTabView = draft.transactionCategorizationView.autoCategorized;
|
|
719
|
-
const existsInReview = reviewTabView.transactionReviewLocalDataById[txnId] != null;
|
|
720
|
-
const existsInAuto = autoTabView.transactionReviewLocalDataById[txnId] != null;
|
|
721
|
-
if (!existsInReview && !existsInAuto) {
|
|
722
|
-
return;
|
|
723
|
-
}
|
|
724
|
-
const allReviewed = pendingReviewLineIds.length === 0;
|
|
725
|
-
if (allReviewed) {
|
|
726
|
-
if (existsInReview) {
|
|
727
|
-
removeTransactionFromTabView(reviewTabView, txnId);
|
|
728
|
-
}
|
|
729
|
-
if (existsInAuto) {
|
|
730
|
-
removeTransactionFromTabView(autoTabView, txnId);
|
|
731
|
-
}
|
|
732
|
-
return;
|
|
733
|
-
}
|
|
734
|
-
// Partially reviewed — auto-only: remove transaction from auto tab entirely
|
|
735
|
-
// since pending_review lines don't belong in auto tab and review_complete lines are done
|
|
736
|
-
const isAutoOnly = existsInAuto && !existsInReview;
|
|
737
|
-
if (isAutoOnly) {
|
|
738
|
-
removeTransactionFromTabView(autoTabView, txnId);
|
|
739
|
-
return;
|
|
740
|
-
}
|
|
741
|
-
// Review-only or both-tabs: rebuild review tab local data with pending review lines
|
|
742
|
-
if (existsInReview) {
|
|
743
|
-
const newLocalData = toTransactionDetailLocalData(updatedTransaction, 'review', pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled);
|
|
744
|
-
reviewTabView.transactionReviewLocalDataById[txnId] = {
|
|
745
|
-
transactionId: txnId,
|
|
746
|
-
transactionReviewLocalData: {
|
|
747
|
-
...newLocalData,
|
|
748
|
-
sortedLineItems: updatedTransaction.lines?.map((l) => l.id) ?? [],
|
|
749
|
-
tabSpecificLineItems: {
|
|
750
|
-
review: pendingReviewLineIds,
|
|
751
|
-
},
|
|
752
|
-
},
|
|
753
|
-
};
|
|
754
|
-
reviewTabView.selectedCheckBoxTransactionIds =
|
|
755
|
-
reviewTabView.selectedCheckBoxTransactionIds.filter((id) => id !== txnId);
|
|
756
|
-
reviewTabView.transactionIdsWithUnsavedData =
|
|
757
|
-
reviewTabView.transactionIdsWithUnsavedData.filter((id) => id !== txnId);
|
|
758
|
-
}
|
|
759
|
-
// If both tabs, remove from auto tab entirely
|
|
760
|
-
if (existsInAuto) {
|
|
761
|
-
removeTransactionFromTabView(autoTabView, txnId);
|
|
762
|
-
}
|
|
763
|
-
},
|
|
764
|
-
},
|
|
765
702
|
},
|
|
766
703
|
});
|
|
767
|
-
export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId,
|
|
704
|
+
export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, } = expenseAutomationTransactionsView.actions;
|
|
768
705
|
export default expenseAutomationTransactionsView.reducer;
|
|
@@ -6,7 +6,7 @@ import { saveTransactionDetail, updateTransactionDetail, } from '../transactionD
|
|
|
6
6
|
import { getTransactionDetailKey } from '../transactionDetailState';
|
|
7
7
|
import { toTransactionUpdatesFromTransactionDetailLocalData } from './saveTransactionHelper';
|
|
8
8
|
export const saveTransactionDetailEpic = (actions$, state$) => actions$.pipe(filter(saveTransactionDetail.match), mergeMap((action) => {
|
|
9
|
-
const { transactionId, cotTransactionTracking, isExpenseAutomationEnabled,
|
|
9
|
+
const { transactionId, cotTransactionTracking, isExpenseAutomationEnabled, } = action.payload;
|
|
10
10
|
const fetchActions = [];
|
|
11
11
|
const transactionDetailState = state$.value.transactionDetailState;
|
|
12
12
|
const transactionState = state$.value.transactionState;
|
|
@@ -16,7 +16,7 @@ export const saveTransactionDetailEpic = (actions$, state$) => actions$.pipe(fil
|
|
|
16
16
|
if (detail != null && transaction != null) {
|
|
17
17
|
const localData = detail.transactionDetailLocalData;
|
|
18
18
|
const transactionSaveUpdates = toTransactionUpdatesFromTransactionDetailLocalData(localData, transaction, isExpenseAutomationEnabled);
|
|
19
|
-
fetchActions.push(updateTransactionDetail(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking
|
|
19
|
+
fetchActions.push(updateTransactionDetail(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking));
|
|
20
20
|
return from(fetchActions);
|
|
21
21
|
}
|
|
22
22
|
return from(fetchActions);
|
|
@@ -13,21 +13,18 @@ import { isTransferTransaction, } from '../../../entity/transaction/stateTypes/o
|
|
|
13
13
|
import { toJEAndDepositTransactionTypeStrict, toVendorTransactionTypeStrict, } from '../../../entity/transaction/stateTypes/transactionType';
|
|
14
14
|
import { isVendorTransaction, } from '../../../entity/transaction/stateTypes/vendorTransaction';
|
|
15
15
|
import toSupportedTransaction from '../../../entity/transaction/toSupportedTransaction';
|
|
16
|
-
import {
|
|
17
|
-
import { updateTransaction, updateTransactions, } from '../../../entity/transaction/transactionReducer';
|
|
16
|
+
import { updateTransaction } from '../../../entity/transaction/transactionReducer';
|
|
18
17
|
import { getSupportedTransactionById } from '../../../entity/transaction/transactionSelector';
|
|
19
18
|
import { updateVendors } from '../../../entity/vendor/vendorReducer';
|
|
20
19
|
import { getVendorByVendorId } from '../../../entity/vendor/vendorSelector';
|
|
21
20
|
import { createZeniAPIStatus, isActionNotAllowed, isSuccessResponse, } from '../../../responsePayload';
|
|
22
21
|
import { getUncategorizedAccounts } from '../../accountList/accountListSelector';
|
|
23
|
-
import { getPendingReviewLineIdsFromTransaction } from '../../expenseAutomationView/helpers/transactionCategorizationLocalDataHelper';
|
|
24
|
-
import { syncTransactionCategorizationFromDetailSave } from '../../expenseAutomationView/reducers/transactionsViewReducer';
|
|
25
22
|
import { initializeTransactionDetailLocalData, markTransactionAsNotMiscategorized, updateStatusConsolidatedSaveTransactionDetail, updateTransactionDetail, updateTransactionDetailSaveStatus, updateTransactionStateIfUpdateActionNotAllowed, } from '../transactionDetailReducer';
|
|
26
23
|
import { getTransactionDetailKey, } from '../transactionDetailState';
|
|
27
24
|
import { isTransactionUncategorized } from './saveTransactionHelper';
|
|
28
25
|
export const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(updateTransactionDetail.match), mergeMap((action) => {
|
|
29
26
|
const { transactionState, vendorState, transactionDetailState } = state$.value;
|
|
30
|
-
const { cotTransactionTracking, transactionId, transactionSaveUpdates
|
|
27
|
+
const { cotTransactionTracking, transactionId, transactionSaveUpdates } = action.payload;
|
|
31
28
|
return zeniAPI
|
|
32
29
|
.putAndGetJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/transactions/${action.payload.transactionId.id}/categorize`, preparePayload(transactionState, vendorState, transactionDetailState, transactionId, transactionSaveUpdates, cotTransactionTracking))
|
|
33
30
|
.pipe(mergeMap((response) => {
|
|
@@ -105,12 +102,6 @@ export const updateTransactionDetailEpic = (actions$, state$, zeniAPI) => action
|
|
|
105
102
|
}));
|
|
106
103
|
}
|
|
107
104
|
}
|
|
108
|
-
// Sync transaction categorization list state from detail save
|
|
109
|
-
// Updates list-keyed canonical entity so the list selector reads fresh data
|
|
110
|
-
actions.push(updateTransactions([response.data.transaction], (value) => value.transaction_id, 'merge'));
|
|
111
|
-
const transactionWithCOT = getTransactionWithCOT(transaction);
|
|
112
|
-
const pendingReviewLineIds = getPendingReviewLineIdsFromTransaction(transactionWithCOT);
|
|
113
|
-
actions.push(syncTransactionCategorizationFromDetailSave(transactionIdResp, transactionWithCOT, pendingReviewLineIds, uncategorizedIncomeExpense, isUncategorizedExpenseCategoryEnabled));
|
|
114
105
|
return from(actions);
|
|
115
106
|
}
|
|
116
107
|
else if (isActionNotAllowed(response)) {
|
|
@@ -105,14 +105,13 @@ const transactionDetail = createSlice({
|
|
|
105
105
|
};
|
|
106
106
|
}
|
|
107
107
|
},
|
|
108
|
-
prepare(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking
|
|
108
|
+
prepare(transactionId, transactionSaveUpdates, isExpenseAutomationEnabled, cotTransactionTracking) {
|
|
109
109
|
return {
|
|
110
110
|
payload: {
|
|
111
111
|
transactionId,
|
|
112
112
|
transactionSaveUpdates,
|
|
113
113
|
isExpenseAutomationEnabled,
|
|
114
114
|
cotTransactionTracking,
|
|
115
|
-
isUncategorizedExpenseCategoryEnabled,
|
|
116
115
|
},
|
|
117
116
|
};
|
|
118
117
|
},
|
package/lib/index.d.ts
CHANGED
|
@@ -265,7 +265,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
|
|
|
265
265
|
import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
|
|
266
266
|
import { fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
|
|
267
267
|
import { deleteAccountStatement, fetchReconciliation as fetchReconciliationView, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateStatementUploadChosen, uploadAccountStatement } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
|
|
268
|
-
import { clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization,
|
|
268
|
+
import { clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
269
269
|
import { ExpenseAutomationStepDetails, ExpenseAutomationViewSelector } from './view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes';
|
|
270
270
|
import { ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView } from './view/expenseAutomationView/selectorTypes/fluxAnalysisViewSelectorTypes';
|
|
271
271
|
import { JEAccountSettingsView } from './view/expenseAutomationView/selectorTypes/jeAccountSettingsViewSelectorTypes';
|
|
@@ -616,7 +616,7 @@ export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePe
|
|
|
616
616
|
export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
617
617
|
export { JEScheduleLocalData };
|
|
618
618
|
export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
|
|
619
|
-
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId,
|
|
619
|
+
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
|
|
620
620
|
export { TopExpense, TopExTimePeriod, TOP_EX_TIME_PERIODS };
|
|
621
621
|
export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, MonthYearPeriod, };
|
|
622
622
|
export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
|