@zeniai/client-epic-state 5.0.44-betaML3 → 5.0.44-betaRD1
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/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
- package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
- package/lib/entity/account/accountSelector.d.ts +0 -5
- package/lib/entity/account/accountSelector.js +1 -8
- package/lib/entity/account/accountState.d.ts +1 -1
- package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
- package/lib/entity/class/classReducer.d.ts +4 -4
- package/lib/entity/class/classState.d.ts +1 -1
- package/lib/entity/forecast/forecastState.d.ts +1 -1
- package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
- package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
- package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
- package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
- package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +0 -2
- package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +0 -6
- package/lib/entity/transaction/payloadTypes/transactionPayload.js +0 -10
- package/lib/entity/transaction/stateTypes/transaction.d.ts +0 -3
- package/lib/epic.d.ts +3 -3
- package/lib/epic.js +3 -3
- package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
- package/lib/esm/entity/account/accountSelector.js +0 -6
- package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
- package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +0 -10
- package/lib/esm/epic.js +3 -3
- package/lib/esm/index.js +8 -7
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +1 -5
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +1 -66
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +0 -19
- package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +0 -6
- package/lib/esm/view/transactionDetail/transactionDetailSelector.js +1 -12
- package/lib/esm/view/transactionList/fetchTransactionListByProjectEpic.js +45 -0
- package/lib/esm/view/transactionList/parallelFetchProjectTransactionListEpic.js +32 -0
- package/lib/esm/view/transactionList/transactionListByProjectSelector.js +58 -0
- package/lib/esm/view/transactionList/transactionListReducer.js +83 -2
- package/lib/esm/view/transactionList/transactionListState.js +10 -0
- package/lib/index.d.ts +8 -7
- package/lib/index.js +38 -42
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
- package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
- package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
- package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
- package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
- package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
- package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -4
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -15
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -67
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +1 -3
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +0 -2
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +0 -20
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -13
- package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
- package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
- package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
- package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
- package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
- package/lib/view/topEx/topExSelector.d.ts +1 -1
- package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +1 -2
- package/lib/view/transactionDetail/epics/transactionDetailEpic.js +0 -6
- package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
- package/lib/view/transactionDetail/transactionDetailSelector.d.ts +1 -4
- package/lib/view/transactionDetail/transactionDetailSelector.js +1 -12
- package/lib/view/transactionList/fetchTransactionListByProjectEpic.d.ts +8 -0
- package/lib/view/transactionList/fetchTransactionListByProjectEpic.js +52 -0
- package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.d.ts +6 -0
- package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.js +36 -0
- package/lib/view/transactionList/transactionListByProjectSelector.d.ts +22 -0
- package/lib/view/transactionList/transactionListByProjectSelector.js +66 -0
- package/lib/view/transactionList/transactionListPayload.d.ts +15 -0
- package/lib/view/transactionList/transactionListReducer.d.ts +25 -2
- package/lib/view/transactionList/transactionListReducer.js +83 -2
- package/lib/view/transactionList/transactionListState.d.ts +15 -0
- package/lib/view/transactionList/transactionListState.js +13 -1
- package/package.json +1 -1
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -81
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -25
- package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.d.ts +0 -9
- package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -85
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -29
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import omit from 'lodash/omit';
|
|
2
2
|
import { reduceAllFetchState, reduceAnyFetchState, } from '../../../commonStateTypes/reduceFetchState';
|
|
3
3
|
import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
|
|
4
|
-
import { getAccountBase, getAccountBaseForTransferAccounts, } from '../../../entity/account/accountSelector';
|
|
5
4
|
import { getIsAccountingClassesEnabled, getCurrentTenant, } from '../../../entity/tenant/tenantSelector';
|
|
6
5
|
import { getTransactionWithCOT } from '../../../entity/transaction/transactionHelper';
|
|
7
6
|
import { getSupportedTransactionsByIds } from '../../../entity/transaction/transactionSelector';
|
|
8
7
|
import { getAccountList, getNestedAccountListHierarchy, getUncategorizedAccounts, } from '../../accountList/accountListSelector';
|
|
9
8
|
import { getClassList, getNestedClassListHierarchy, } from '../../classList/classListSelector';
|
|
10
9
|
import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
|
|
11
|
-
export function getLastTransferEntryReplacement(state) {
|
|
12
|
-
return state.expenseAutomationTransactionsViewState.lastTransferEntryReplacement;
|
|
13
|
-
}
|
|
14
10
|
export function getExpenseAutomationTransactionView(state) {
|
|
15
11
|
const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
|
|
16
12
|
const { selectedTransactionCategorizationTab } = expenseAutomationTransactionsViewState;
|
|
@@ -87,19 +83,6 @@ export function getExpenseAutomationTransactionView(state) {
|
|
|
87
83
|
: [];
|
|
88
84
|
const transactionCompletionStatus = allSteps.find((step) => step.step === 'transaction_categorization')?.completionStatus;
|
|
89
85
|
const completionStatus = transactionCompletionStatus ?? 'incomplete';
|
|
90
|
-
const transferAccountsFromApi = expenseAutomationTransactionsViewState.transferAccounts.accountIds
|
|
91
|
-
.map((id) => getAccountBaseForTransferAccounts(accountState, id))
|
|
92
|
-
.filter((account) => account != null);
|
|
93
|
-
/**
|
|
94
|
-
* Credit transfer picker uses transfer-account ids from a dedicated fetch. If that list
|
|
95
|
-
* resolves to nothing while the COA list is loaded, fall back to the full COA list so the
|
|
96
|
-
* credit dropdown is not empty.
|
|
97
|
-
*/
|
|
98
|
-
const transferAccountsList = transferAccountsFromApi.length > 0
|
|
99
|
-
? transferAccountsFromApi
|
|
100
|
-
: accountList.accounts
|
|
101
|
-
.map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
|
|
102
|
-
.filter((account) => account != null);
|
|
103
86
|
return {
|
|
104
87
|
version: 0,
|
|
105
88
|
fetchState: fetchStatus.fetchState,
|
|
@@ -118,13 +101,11 @@ export function getExpenseAutomationTransactionView(state) {
|
|
|
118
101
|
refreshStatus,
|
|
119
102
|
saveStatus,
|
|
120
103
|
markAsNotMiscategorizedStatus,
|
|
121
|
-
createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
|
|
122
104
|
completionStatus,
|
|
123
105
|
totalCountByTab,
|
|
124
106
|
fetchStateByTransactionTabs: fetchStateByTab,
|
|
125
107
|
uploadReceiptStatusById,
|
|
126
108
|
selectedTransactionId,
|
|
127
109
|
selectedTransactionLineId,
|
|
128
|
-
transferAccounts: transferAccountsList,
|
|
129
110
|
};
|
|
130
111
|
}
|
|
@@ -13,7 +13,6 @@ import { fetchAccountList } from '../../accountList/accountListReducer';
|
|
|
13
13
|
import { fetchClassList } from '../../classList/classListReducer';
|
|
14
14
|
import { getInitializedTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorLocalDataHelper';
|
|
15
15
|
import { updateTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorViewReducer';
|
|
16
|
-
import { fetchTransferAccounts } from '../../expenseAutomationView/reducers/transactionsViewReducer';
|
|
17
16
|
import { fetchOwnerList } from '../../ownerList/ownerListReducer';
|
|
18
17
|
import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState, } from '../transactionDetailReducer';
|
|
19
18
|
import { getAllLinkedTransactions, getTransactionDetailKey, } from '../transactionDetailState';
|
|
@@ -35,11 +34,6 @@ export const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions
|
|
|
35
34
|
accountList.fetchState !== 'In-Progress') {
|
|
36
35
|
transactionActions.push(fetchAccountList('accountList'));
|
|
37
36
|
}
|
|
38
|
-
const { transferAccounts } = state$.value.expenseAutomationTransactionsViewState;
|
|
39
|
-
if (transferAccounts.fetchState !== 'In-Progress' &&
|
|
40
|
-
transferAccounts.fetchState !== 'Completed') {
|
|
41
|
-
transactionActions.push(fetchTransferAccounts());
|
|
42
|
-
}
|
|
43
37
|
const classList = state$.value.classListState;
|
|
44
38
|
if (classList.hasValidState() === false &&
|
|
45
39
|
classList.fetchState !== 'In-Progress') {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import recordGet from 'lodash/get';
|
|
2
2
|
import { reduceFetchState } from '../../commonStateTypes/reduceFetchState';
|
|
3
|
-
import { getAccountBase, getAccountBaseForTransferAccounts, } from '../../entity/account/accountSelector';
|
|
4
3
|
import { getIsAccountingClassesEnabled } from '../../entity/tenant/tenantSelector';
|
|
5
4
|
import { toTransactionTypeStrict } from '../../entity/transaction/stateTypes/transactionType';
|
|
6
5
|
import { getTransactionWithCOT } from '../../entity/transaction/transactionHelper';
|
|
@@ -11,7 +10,7 @@ import { getAccountList, getNestedAccountListHierarchy, } from '../accountList/a
|
|
|
11
10
|
import { getClassList, getNestedClassListHierarchy, } from '../classList/classListSelector';
|
|
12
11
|
import { getAllLinkedTransactions, getTransactionDetailKey, initialSupportedTransactionDetail, } from './transactionDetailState';
|
|
13
12
|
export const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
|
|
14
|
-
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState,
|
|
13
|
+
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, } = state;
|
|
15
14
|
const detailKey = getTransactionDetailKey(transactionId);
|
|
16
15
|
const transactionDetail = recordGet(transactionDetailState.transactionDetailById, detailKey);
|
|
17
16
|
let fetchState = {
|
|
@@ -63,14 +62,6 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
|
|
|
63
62
|
: [];
|
|
64
63
|
const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
|
|
65
64
|
const vendors = getVendorsByVendorIds(vendorState, vendorListState.vendorIds);
|
|
66
|
-
const transferAccountsFromApi = expenseAutomationTransactionsViewState.transferAccounts.accountIds
|
|
67
|
-
.map((id) => getAccountBaseForTransferAccounts(accountState, id))
|
|
68
|
-
.filter((account) => account != null);
|
|
69
|
-
const transferAccountsList = transferAccountsFromApi.length > 0
|
|
70
|
-
? transferAccountsFromApi
|
|
71
|
-
: accountsList.accounts
|
|
72
|
-
.map((a) => getAccountBase(accountState, a.accountId, 'account_list'))
|
|
73
|
-
.filter((account) => account != null);
|
|
74
65
|
return {
|
|
75
66
|
reportId: 'transaction_detail',
|
|
76
67
|
reportTitle: 'Transaction Detail',
|
|
@@ -87,8 +78,6 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
|
|
|
87
78
|
accountsHierarchyList,
|
|
88
79
|
classList: classList,
|
|
89
80
|
isAccountingClassesEnabled,
|
|
90
|
-
createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
|
|
91
|
-
transferAccounts: transferAccountsList,
|
|
92
81
|
isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
|
|
93
82
|
transactionDetailLocalData: transactionDetail?.transactionDetailLocalData ??
|
|
94
83
|
initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { toBase64 } from 'js-base64';
|
|
2
|
+
import lodashGet from 'lodash/get';
|
|
3
|
+
import { from, of } from 'rxjs';
|
|
4
|
+
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
5
|
+
import { toString } from '../../commonStateTypes/timePeriod';
|
|
6
|
+
import { updateTransactions } from '../../entity/transaction/transactionReducer';
|
|
7
|
+
import { createZeniAPIStatus, isSuccessResponse } from '../../responsePayload';
|
|
8
|
+
import { fetchProjectTransactionList, updateTransactionListByProject, updateTransactionListByProjectFailure, } from './transactionListReducer';
|
|
9
|
+
import { getProjectAcTranKey } from './transactionListState';
|
|
10
|
+
export const fetchTransactionListByProjectEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchProjectTransactionList.match), mergeMap((action) => {
|
|
11
|
+
const state = state$.value;
|
|
12
|
+
const key = getProjectAcTranKey(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
|
|
13
|
+
const projectTransactions = lodashGet(state.transactionListState.byProject.transactionListByProjectKey, key, undefined);
|
|
14
|
+
if (action.payload.cacheOverride === true ||
|
|
15
|
+
projectTransactions == null ||
|
|
16
|
+
projectTransactions.hasValidState() === false) {
|
|
17
|
+
const queryParam = {
|
|
18
|
+
start_date: toString(action.payload.period.start),
|
|
19
|
+
end_date: toString(action.payload.period.end),
|
|
20
|
+
sort_by: 'create_time',
|
|
21
|
+
sort_order: 'desc',
|
|
22
|
+
account_id: action.payload.accountId,
|
|
23
|
+
account_type: action.payload.accountType,
|
|
24
|
+
zeni_project_id: action.payload.projectId,
|
|
25
|
+
};
|
|
26
|
+
const base64AccountId = toBase64(action.payload.accountId);
|
|
27
|
+
return zeniAPI
|
|
28
|
+
.getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/accounts/${base64AccountId}/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`)
|
|
29
|
+
.pipe(mergeMap((response) => {
|
|
30
|
+
if (isSuccessResponse(response) && response.data != null) {
|
|
31
|
+
const updateActions = [];
|
|
32
|
+
updateActions.push(updateTransactions(response.data.account.transactions, (value) => value.transaction_id));
|
|
33
|
+
updateActions.push(updateTransactionListByProject(response.data));
|
|
34
|
+
return from(updateActions);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return of(updateTransactionListByProjectFailure(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period, response.status));
|
|
38
|
+
}
|
|
39
|
+
}), catchError((error) => of(updateTransactionListByProjectFailure(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period, createZeniAPIStatus('Unexpected Error', 'fetch transaction list REST API call errored out' +
|
|
40
|
+
JSON.stringify(error))))));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return from([]);
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { from } from 'rxjs';
|
|
2
|
+
import { filter, mergeMap } from 'rxjs/operators';
|
|
3
|
+
import { splitPeriod } from './parallelFetchClassTransactionListEpic';
|
|
4
|
+
import { fetchProjectTransactionList, parallelFetchProjectTransactionList, } from './transactionListReducer';
|
|
5
|
+
import { getProjectAcTranKey, } from './transactionListState';
|
|
6
|
+
export const parallelFetchProjectTransactionListEpic = (actions$, state$) => actions$.pipe(filter(parallelFetchProjectTransactionList.match), mergeMap((action) => {
|
|
7
|
+
const state = state$.value.transactionListState;
|
|
8
|
+
const timePeriods = splitPeriod(action.payload.period);
|
|
9
|
+
const filteredTimePeriods = timePeriods.filter((value) => {
|
|
10
|
+
if (action.payload.cacheOverride === false) {
|
|
11
|
+
return (isDataAvailableOrFetching(state.byProject, action.payload.accountId, action.payload.accountType, action.payload.projectId, value) === false);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
if (filteredTimePeriods.length > 12) {
|
|
18
|
+
console.error('Only maximum 12 parallel fetch are allowed!');
|
|
19
|
+
return from([]);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const fetchActions = filteredTimePeriods.map((period) => fetchProjectTransactionList(action.payload.accountId, action.payload.accountType, action.payload.projectId, period, true));
|
|
23
|
+
return from(fetchActions);
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
function isDataAvailableOrFetching(state, accountId, accountType, projectId, period) {
|
|
27
|
+
const key = getProjectAcTranKey(accountId, accountType, projectId, period);
|
|
28
|
+
const projectTransactions = state.transactionListByProjectKey[key];
|
|
29
|
+
return (projectTransactions != null &&
|
|
30
|
+
(projectTransactions.fetchState === 'In-Progress' ||
|
|
31
|
+
projectTransactions.hasValidState()));
|
|
32
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import flatMap from 'lodash/flatMap';
|
|
2
|
+
import recordGet from 'lodash/get';
|
|
3
|
+
import orderBy from 'lodash/orderBy';
|
|
4
|
+
import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
|
|
5
|
+
import { splitPeriod } from './parallelFetchAccountTransactionListEpic';
|
|
6
|
+
import { isAnyFetchCompleted, reduceFetchState, } from './reduceTransactionListFetchState';
|
|
7
|
+
import { getProjectAcKey, getProjectAcTranKey, } from './transactionListState';
|
|
8
|
+
export const getTransactionListByProject = (transactionState, transactionListState, accountId, accountType, projectId, timeframe, filterByTimePeriod) => {
|
|
9
|
+
const timePeriods = splitPeriod(filterByTimePeriod); // Note: Split by months.
|
|
10
|
+
const accountTransactions = timePeriods
|
|
11
|
+
.map((thisTimePeriod) => {
|
|
12
|
+
const key = getProjectAcTranKey(accountId, accountType, projectId, thisTimePeriod);
|
|
13
|
+
return recordGet(transactionListState.byProject.transactionListByProjectKey, key, undefined);
|
|
14
|
+
})
|
|
15
|
+
.filter((acTransaction) => acTransaction != null);
|
|
16
|
+
let account = undefined;
|
|
17
|
+
if (accountTransactions.length > 0) {
|
|
18
|
+
account = accountTransactions[0].account;
|
|
19
|
+
}
|
|
20
|
+
const fetchState = reduceFetchState(accountTransactions);
|
|
21
|
+
let transactions = [];
|
|
22
|
+
if (isAnyFetchCompleted(accountTransactions)) {
|
|
23
|
+
const allTransactionIDs = flatMap(accountTransactions, (value) => value.transactionIDs);
|
|
24
|
+
const transactionsUnsorted = allTransactionIDs
|
|
25
|
+
.map((transactionId) => getSupportedTransactionById(transactionState, transactionId))
|
|
26
|
+
.filter((value) => {
|
|
27
|
+
if (value == null) {
|
|
28
|
+
console.error("Can't have null transaction at this stage!");
|
|
29
|
+
}
|
|
30
|
+
return value != null;
|
|
31
|
+
});
|
|
32
|
+
transactions = orderBy(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
|
|
33
|
+
}
|
|
34
|
+
const key = getProjectAcKey(accountId, accountType, projectId);
|
|
35
|
+
const uiState = recordGet(transactionListState.byProject.transactionListUIStateByProjectKey, key, {});
|
|
36
|
+
return {
|
|
37
|
+
reportId: 'transaction_list_of_account_by_project',
|
|
38
|
+
reportTitle: 'Transaction List of Account By Project',
|
|
39
|
+
version: 1,
|
|
40
|
+
status: undefined,
|
|
41
|
+
fetchState: fetchState.fetchState,
|
|
42
|
+
error: fetchState.error,
|
|
43
|
+
timeframe,
|
|
44
|
+
filterByTimePeriod,
|
|
45
|
+
accountId,
|
|
46
|
+
accountType,
|
|
47
|
+
projectId,
|
|
48
|
+
account,
|
|
49
|
+
transactionOrder: 'descending_transaction_date',
|
|
50
|
+
transactions,
|
|
51
|
+
uiState,
|
|
52
|
+
latestTransactionId: transactionListState.latestTransactionId,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export const getTransactionListUIStateByProjectKey = (transactionListState, accountId, accountType, projectId) => {
|
|
56
|
+
const key = getProjectAcKey(accountId, accountType, projectId);
|
|
57
|
+
return recordGet(transactionListState.byProject.transactionListUIStateByProjectKey, key, undefined);
|
|
58
|
+
};
|
|
@@ -2,7 +2,7 @@ import { createSlice } from '@reduxjs/toolkit';
|
|
|
2
2
|
import { toAbsoluteDay } from '../../commonStateTypes/timePeriod';
|
|
3
3
|
import { mapAccountBasePayloadToAccountBase } from '../../entity/account/accountPayload';
|
|
4
4
|
import { toEntityType } from '../../entity/genericEntity/entity';
|
|
5
|
-
import { accountTransactionsInitialState, getAcKey, getAcTranKey, getCategoryTypeTranKey, getClassAcKey, getClassAcTranKey, getEntityTranKey, initialClassTransactionState, initialEntityTransactionState, initialTransactionsStateByCategoryType, } from './transactionListState';
|
|
5
|
+
import { accountTransactionsInitialState, getAcKey, getAcTranKey, getCategoryTypeTranKey, getClassAcKey, getClassAcTranKey, getEntityTranKey, getProjectAcKey, getProjectAcTranKey, initialClassTransactionState, initialEntityTransactionState, initialProjectTransactionState, initialTransactionsStateByCategoryType, } from './transactionListState';
|
|
6
6
|
export const initialState = {
|
|
7
7
|
byAccount: {
|
|
8
8
|
transactionListByAccountKey: {},
|
|
@@ -37,6 +37,10 @@ export const initialState = {
|
|
|
37
37
|
transactionListByClassKey: {},
|
|
38
38
|
transactionListUIStateByClassKey: {},
|
|
39
39
|
},
|
|
40
|
+
byProject: {
|
|
41
|
+
transactionListByProjectKey: {},
|
|
42
|
+
transactionListUIStateByProjectKey: {},
|
|
43
|
+
},
|
|
40
44
|
};
|
|
41
45
|
const transactionList = createSlice({
|
|
42
46
|
name: 'transactionList',
|
|
@@ -246,6 +250,64 @@ const transactionList = createSlice({
|
|
|
246
250
|
return { payload: { accountId, accountType, classId, period, error } };
|
|
247
251
|
},
|
|
248
252
|
},
|
|
253
|
+
// Transaction list by project related reducers
|
|
254
|
+
//
|
|
255
|
+
// Mirrors the by-class set; the only behavioural difference is that the
|
|
256
|
+
// server query param is `zeni_project_id` (post-Ayon's accounting #3984
|
|
257
|
+
// rename) and there's no equivalent of `include_sub_class_transactions`
|
|
258
|
+
// — projects don't have a sub-project hierarchy in this layout yet.
|
|
259
|
+
parallelFetchProjectTransactionList: {
|
|
260
|
+
reducer() {
|
|
261
|
+
// Do nothing..
|
|
262
|
+
},
|
|
263
|
+
prepare(accountId, accountType, projectId, period, cacheOverride = false) {
|
|
264
|
+
return {
|
|
265
|
+
payload: { accountId, accountType, projectId, period, cacheOverride },
|
|
266
|
+
};
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
fetchProjectTransactionList: {
|
|
270
|
+
reducer(draft, action) {
|
|
271
|
+
const key = getProjectAcTranKey(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
|
|
272
|
+
if (action.payload.cacheOverride === true ||
|
|
273
|
+
draft.byProject.transactionListByProjectKey[key] == null ||
|
|
274
|
+
(draft.byProject.transactionListByProjectKey[key]?.hasValidState() ===
|
|
275
|
+
false &&
|
|
276
|
+
draft.byProject.transactionListByProjectKey[key]?.fetchState !=
|
|
277
|
+
'In-Progress')) {
|
|
278
|
+
draft.byProject.transactionListByProjectKey[key] = {
|
|
279
|
+
...initialProjectTransactionState,
|
|
280
|
+
fetchState: 'In-Progress',
|
|
281
|
+
error: undefined,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
prepare(accountId, accountType, projectId, period, cacheOverride = false) {
|
|
286
|
+
return {
|
|
287
|
+
payload: { accountId, accountType, projectId, period, cacheOverride },
|
|
288
|
+
};
|
|
289
|
+
},
|
|
290
|
+
},
|
|
291
|
+
updateTransactionListByProject(draft, action) {
|
|
292
|
+
doUpdateTransactionListByProject(draft.byProject.transactionListByProjectKey, action.payload);
|
|
293
|
+
},
|
|
294
|
+
updateTransactionListByProjectUIState(draft, action) {
|
|
295
|
+
const key = getProjectAcKey(action.payload.accountId, action.payload.accountType, action.payload.projectId);
|
|
296
|
+
draft.byProject.transactionListUIStateByProjectKey[key] = Object.assign({}, draft.byProject.transactionListUIStateByProjectKey[key], action.payload.uiState);
|
|
297
|
+
},
|
|
298
|
+
updateTransactionListByProjectFailure: {
|
|
299
|
+
reducer(draft, action) {
|
|
300
|
+
const key = getProjectAcTranKey(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
|
|
301
|
+
draft.byProject.transactionListByProjectKey[key] = {
|
|
302
|
+
...initialProjectTransactionState,
|
|
303
|
+
fetchState: 'Error',
|
|
304
|
+
error: action.payload.error,
|
|
305
|
+
};
|
|
306
|
+
},
|
|
307
|
+
prepare(accountId, accountType, projectId, period, error) {
|
|
308
|
+
return { payload: { accountId, accountType, projectId, period, error } };
|
|
309
|
+
},
|
|
310
|
+
},
|
|
249
311
|
parallelFetchTransactionListByCategoryType: {
|
|
250
312
|
reducer() {
|
|
251
313
|
// Do nothing..
|
|
@@ -340,7 +402,7 @@ const transactionList = createSlice({
|
|
|
340
402
|
},
|
|
341
403
|
},
|
|
342
404
|
});
|
|
343
|
-
export const { parallelFetchAccountTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, parallelFetchEntityTransactionList, fetchEntityTransactionList, updateTransactionListByEntity, updateTransactionListByEntityFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, fetchClassTransactionList, updateTransactionListByClass, updateTransactionListByClassUIState, updateTransactionListByClassFailure, parallelFetchTransactionListByCategoryType, fetchTransactionsListByCategoryType, updateTransactionListByCategoryType, updateTransactionsListByCategoryTypeFailure, updateTransactionListUIStateByCategoryType, clearTransactionList, updateLatestTransactionId, } = transactionList.actions;
|
|
405
|
+
export const { parallelFetchAccountTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, parallelFetchEntityTransactionList, fetchEntityTransactionList, updateTransactionListByEntity, updateTransactionListByEntityFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, fetchClassTransactionList, updateTransactionListByClass, updateTransactionListByClassUIState, updateTransactionListByClassFailure, parallelFetchProjectTransactionList, fetchProjectTransactionList, updateTransactionListByProject, updateTransactionListByProjectUIState, updateTransactionListByProjectFailure, parallelFetchTransactionListByCategoryType, fetchTransactionsListByCategoryType, updateTransactionListByCategoryType, updateTransactionsListByCategoryTypeFailure, updateTransactionListUIStateByCategoryType, clearTransactionList, updateLatestTransactionId, } = transactionList.actions;
|
|
344
406
|
export default transactionList.reducer;
|
|
345
407
|
/**
|
|
346
408
|
* Helper functions
|
|
@@ -390,3 +452,22 @@ function doUpdateTransactionListByClass(draft, payload) {
|
|
|
390
452
|
transactionIDs,
|
|
391
453
|
};
|
|
392
454
|
}
|
|
455
|
+
function doUpdateTransactionListByProject(draft, payload) {
|
|
456
|
+
const transactionIDs = payload.account.transactions.map((transactionPaylod) => transactionPaylod.transaction_id);
|
|
457
|
+
const account = mapAccountBasePayloadToAccountBase(payload.account);
|
|
458
|
+
const projectId = payload.query.zeni_project_id;
|
|
459
|
+
const start = toAbsoluteDay(payload.query.start_date);
|
|
460
|
+
const end = toAbsoluteDay(payload.query.end_date);
|
|
461
|
+
const key = getProjectAcTranKey(account.accountId, account.accountType, projectId, {
|
|
462
|
+
start,
|
|
463
|
+
end,
|
|
464
|
+
});
|
|
465
|
+
draft[key] = {
|
|
466
|
+
...initialProjectTransactionState,
|
|
467
|
+
fetchState: 'Completed',
|
|
468
|
+
error: undefined,
|
|
469
|
+
account: account,
|
|
470
|
+
projectId: projectId,
|
|
471
|
+
transactionIDs,
|
|
472
|
+
};
|
|
473
|
+
}
|
|
@@ -30,6 +30,16 @@ export const initialClassTransactionState = {
|
|
|
30
30
|
return this.fetchState == 'Completed';
|
|
31
31
|
},
|
|
32
32
|
};
|
|
33
|
+
export const getProjectAcTranKey = (accountId, accountType, projectId, period) => `${accountId}-${accountType}-${projectId}-${period.start.day}_${period.start.month}_${period.start.year}_${period.end.day}_${period.end.month}_${period.end.year}`;
|
|
34
|
+
export const getProjectAcKey = (accountId, accountType, projectId) => `${accountId}-${accountType}-${projectId}`;
|
|
35
|
+
export const initialProjectTransactionState = {
|
|
36
|
+
transactionIDs: [],
|
|
37
|
+
fetchState: 'Not-Started',
|
|
38
|
+
error: undefined,
|
|
39
|
+
hasValidState() {
|
|
40
|
+
return this.fetchState == 'Completed';
|
|
41
|
+
},
|
|
42
|
+
};
|
|
33
43
|
export const getCategoryTypeTranKey = (categoryType, period) => `${categoryType}_${period.start.day}_${period.start.month}_${period.start.year}_${period.end.day}_${period.end.month}_${period.end.year}`;
|
|
34
44
|
export const initialTransactionsStateByCategoryType = {
|
|
35
45
|
transactionIDs: [],
|
package/lib/index.d.ts
CHANGED
|
@@ -271,7 +271,7 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
|
|
|
271
271
|
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, updateJESchedulesUIState as updateExpenseAutomationJESchedulesUIState, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
|
|
272
272
|
import { acknowledgeBulkUploadConfirmMatchComplete, bulkUploadAutomatchingTimedOut, bulkUploadReceipts, bulkUploadReceiptsFailure, bulkUploadReceiptsSuccess, clearBulkUpload, clearManualSearchResults, clearMissingReceiptsTabNavigation, confirmBulkUploadMatch, confirmBulkUploadMatchFailure, confirmBulkUploadMatchSuccess, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsFailure, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatches, fetchBulkUploadBatchesFailure, fetchBulkUploadBatchesSuccess, fetchCompletedTransactions, fetchCompletedTransactionsFailure, fetchCompletedTransactionsSuccess, fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, searchTransactionsForManualMatch, searchTransactionsForManualMatchFailure, searchTransactionsForManualMatchSuccess, setBulkUploadCompletedSubTab, setBulkUploadResultsTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, storeBatchDetails, updateBulkUploadProgress, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
|
|
273
273
|
import { deleteAccountStatement, excludeAccountFromReconciliation, fetchReconciliation as fetchReconciliationView, includeAccountInReconciliation, 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, updateNodeCollapseState, updateStatementUploadChosen, uploadAccountStatement } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
|
|
274
|
-
import {
|
|
274
|
+
import { backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
275
275
|
import { ExpenseAutomationStepDetails, ExpenseAutomationViewSelector } from './view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes';
|
|
276
276
|
import { ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView } from './view/expenseAutomationView/selectorTypes/fluxAnalysisViewSelectorTypes';
|
|
277
277
|
import { JEAccountSettingsView } from './view/expenseAutomationView/selectorTypes/jeAccountSettingsViewSelectorTypes';
|
|
@@ -283,7 +283,7 @@ import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSel
|
|
|
283
283
|
import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
|
|
284
284
|
import { JEScheduledTransactionWithFailedEntries } from './view/expenseAutomationView/selectors/jeSchedulesViewSelector';
|
|
285
285
|
import { getExpenseAutomationReconciliationView, isAccountReconReport } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
|
|
286
|
-
import { getExpenseAutomationTransactionView
|
|
286
|
+
import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
|
|
287
287
|
import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
|
|
288
288
|
import { AccountSettingsLocalData, JEScheduleMainTab as ExpenseAutomationJEScheduleMainTab, JEScheduleSortKey as ExpenseAutomationJEScheduleSortKey, JESchedulesViewUIState as ExpenseAutomationJESchedulesViewUIState, JEScheduleLocalData, toJEScheduleMainTab as toExpenseAutomationJEScheduleMainTab, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey } from './view/expenseAutomationView/types/jeSchedulesViewState';
|
|
289
289
|
import { BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, MatchCandidate, MatchSource, MissingReceiptsTab, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab } from './view/expenseAutomationView/types/missingReceiptsViewState';
|
|
@@ -569,8 +569,9 @@ import { TransactionDetailLineItemData, TransactionDetailLocalData, TransactionV
|
|
|
569
569
|
import { TransactionListByAccountReport, getTransactionListByAccount, getTransactionListUIStateByAccountKey } from './view/transactionList/transactionListByAccountSelector';
|
|
570
570
|
import { TransactionListByCategoryType, getTransactionListUIStateByCategoryType, getTransactionsListByCategoryType } from './view/transactionList/transactionListByCategoryTypeSelector';
|
|
571
571
|
import { TransactionListByClassReport, getTransactionListByClass, getTransactionListUIStateByClassKey } from './view/transactionList/transactionListByClassSelector';
|
|
572
|
+
import { TransactionListByProjectReport, getTransactionListByProject, getTransactionListUIStateByProjectKey } from './view/transactionList/transactionListByProjectSelector';
|
|
572
573
|
import { TransactionListByEntityView, getTransactionListByEntity, getTransactionListByEntityForSinglePeriod } from './view/transactionList/transactionListByEntitySelector';
|
|
573
|
-
import { clearTransactionList, fetchAccountTransactionList, fetchEntityTransactionList, parallelFetchAccountTransactionList, parallelFetchClassTransactionList, parallelFetchEntityTransactionList, parallelFetchTransactionListByCategoryType, updateLatestTransactionId, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, updateTransactionListByClass, updateTransactionListByClassUIState, updateTransactionListByEntity, updateTransactionListByEntityFailure, updateTransactionListUIStateByCategoryType } from './view/transactionList/transactionListReducer';
|
|
574
|
+
import { clearTransactionList, fetchAccountTransactionList, fetchEntityTransactionList, parallelFetchAccountTransactionList, parallelFetchClassTransactionList, parallelFetchProjectTransactionList, parallelFetchEntityTransactionList, parallelFetchTransactionListByCategoryType, updateLatestTransactionId, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, updateTransactionListByClass, updateTransactionListByClassUIState, updateTransactionListByProject, updateTransactionListByProjectUIState, updateTransactionListByEntity, updateTransactionListByEntityFailure, updateTransactionListUIStateByCategoryType } from './view/transactionList/transactionListReducer';
|
|
574
575
|
import { TransactionCategoryType } from './view/transactionList/transactionListState';
|
|
575
576
|
import { clearTrendData, fetchExpenseTrend, fetchIncomeTrend } from './view/trend/trendReducer';
|
|
576
577
|
import { TrendView, getCurrentFiscalQuarterDateRange, getTrendForEntity } from './view/trend/trendSelector';
|
|
@@ -652,10 +653,10 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
|
|
|
652
653
|
export { ClassesViewSelectorReportV2 };
|
|
653
654
|
export { BalancesTimeseries, TrendTimeseries, BalanceKind };
|
|
654
655
|
export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePerformanceTrend, MonthEndCloseCheck, getMonthEndCloseChecksViewByTenantId, MonthEndCloseChecksView, MonthEndCloseCheckFrequency, MonthCloseCheckMetrics, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, MonthEndAuditSummary, };
|
|
655
|
-
export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, isUnmatchedTabFileStatus, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleMainTab, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, acknowledgeBulkUploadConfirmMatchComplete, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView,
|
|
656
|
+
export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, BulkUploadSelectorData, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, BATCH_FILE_STATUSES, BatchDetails, BatchFile, BatchFileStatus, BatchListItem, isUnmatchedTabFileStatus, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, CompletedTransactionsSelectorData, MatchCandidate, MatchSource, MissingReceiptsTab, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, ResolvedBatchFile, ResolvedBatchDetails, ResolvedCandidate, ExpenseAutomationJEScheduleMainTab, ExpenseAutomationJEScheduleSortKey, ExpenseAutomationJESchedulesViewUIState, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, bulkUploadReceipts, bulkUploadAutomatchingTimedOut, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, restoreBulkUploadAutomatchingOnMount, restoreBulkUploadMatchingState, updateBulkUploadProgress, pusherBatchStatusUpdate, requestMissingReceiptsTabNavigation, clearMissingReceiptsTabNavigation, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchMoreBatchDetails, fetchMoreBatchDetailsComplete, fetchMoreBatchDetailsFailure, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, setBulkUploadUploadedFileCount, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults, acknowledgeBulkUploadConfirmMatchComplete, fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, ExcludeAccountFromReconciliationPayload, excludeAccountFromReconciliation, includeAccountInReconciliation, 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, updateNodeCollapseState, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
656
657
|
export { JEScheduleLocalData };
|
|
657
658
|
export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
|
|
658
|
-
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab,
|
|
659
|
+
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
|
|
659
660
|
export { TopExpense, TopExTimePeriod, TOP_EX_TIME_PERIODS };
|
|
660
661
|
export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, MonthYearPeriod, };
|
|
661
662
|
export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
|
|
@@ -717,12 +718,12 @@ export { VendorTransaction, VendorTransactionWithCOT, isVendorTransaction, Vendo
|
|
|
717
718
|
export { TransferTransaction, isTransferTransaction };
|
|
718
719
|
export { MatchedTransaction };
|
|
719
720
|
export { SupportedTransaction, SupportedTransactionWithCOT, SupportedTransactionPayload, getSupportedTransactionById, };
|
|
720
|
-
export { clearTransactionList, updateLatestTransactionId, parallelFetchAccountTransactionList, parallelFetchEntityTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, updateTransactionListByClassUIState, updateTransactionListByClass, updateTransactionListUIStateByCategoryType, parallelFetchTransactionListByCategoryType, };
|
|
721
|
+
export { clearTransactionList, updateLatestTransactionId, parallelFetchAccountTransactionList, parallelFetchEntityTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, updateTransactionListByClassUIState, updateTransactionListByClass, parallelFetchProjectTransactionList, updateTransactionListByProjectUIState, updateTransactionListByProject, updateTransactionListUIStateByCategoryType, parallelFetchTransactionListByCategoryType, };
|
|
721
722
|
export { TransactionListByAccountReport, getTransactionListByAccount, getTransactionListUIStateByAccountKey, };
|
|
722
723
|
export { fetchEntityTransactionList, updateTransactionListByEntity, saveTransactionDetailLocalData, clearTransactionDetailSaveStatus, updateTransactionListByEntityFailure, resetLineItemsCategoryClassInLocalData, setAllLineItemsToCategoryClassInLocalData, saveTransactionDetail, setAllLineItemsLocalDataIsUpdateAllChecked, initializeTransactionDetailLocalData, removeEntityRecommendationForLineIdForTransactionDetail, updateSelectedVendor, updateSelectedCustomer, resetSelectedCustomer, resetVendor, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateVendorToAllLineItems, resetAllLineItemsToVendor, updateLatestSelectedEntity, updateVendorBulkRecommendationsFetchStatus, setIsVendorUpdateAllChecked, };
|
|
723
724
|
export { TransactionUpdates, downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentSuccess, downloadAccountingProviderAttachmentFailure, fetchTransactionDetail, updateTransactionDetail, uploadMissingAttachmentSuccess, deleteTransactionAttachment, getThirdPartyIdFromTransactionId, };
|
|
724
725
|
export { TransactionListByEntityView, getTransactionListByEntity };
|
|
725
|
-
export { TransactionListByClassReport, getTransactionListByClass, getTransactionListUIStateByClassKey, getTransactionListByEntityForSinglePeriod, };
|
|
726
|
+
export { TransactionListByClassReport, getTransactionListByClass, getTransactionListUIStateByClassKey, TransactionListByProjectReport, getTransactionListByProject, getTransactionListUIStateByProjectKey, getTransactionListByEntityForSinglePeriod, };
|
|
726
727
|
export { TransactionDetailReport, getTransactionDetail, getTransactionDetailForTransaction, VendorDetailsView, getInitialUpdatablePeriodsForTransactionRecommendations as getUpdatablePeriodsForTransactionRecommendations, };
|
|
727
728
|
export { getInsights, fetchInsightsCard, updateSelectedInsightIndex, InsightsView, };
|
|
728
729
|
export { fetchForecastList } from './view/forecastList/forecastListReducer';
|