@zeniai/client-epic-state 5.3.19 → 5.3.21-beta0KB
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/coaBalance/coaBalance.d.ts +9 -0
- package/lib/commonStateTypes/coaBalance/coaBalance.js +11 -0
- package/lib/entity/genericEntity/customerWithSubCustomersId.d.ts +7 -0
- package/lib/entity/genericEntity/customerWithSubCustomersId.js +17 -0
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/entity/tenant/epic/fetchAllTenantsEpic.js +6 -4
- package/lib/entity/tenant/tenantPayload.d.ts +6 -0
- package/lib/entity/tenant/tenantPayload.js +5 -0
- package/lib/entity/tenant/tenantReducer.d.ts +6 -2
- package/lib/entity/tenant/tenantReducer.js +32 -5
- package/lib/entity/tenant/tenantSelector.d.ts +2 -1
- package/lib/entity/tenant/tenantSelector.js +4 -1
- package/lib/entity/tenant/tenantState.d.ts +10 -0
- package/lib/entity/tenant/tenantState.js +5 -0
- package/lib/epic.d.ts +2 -1
- package/lib/epic.js +3 -0
- package/lib/esm/commonStateTypes/coaBalance/coaBalance.js +10 -0
- package/lib/esm/entity/genericEntity/customerWithSubCustomersId.js +12 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +1 -0
- package/lib/esm/entity/tenant/epic/fetchAllTenantsEpic.js +6 -4
- package/lib/esm/entity/tenant/tenantPayload.js +4 -1
- package/lib/esm/entity/tenant/tenantReducer.js +31 -4
- package/lib/esm/entity/tenant/tenantSelector.js +2 -0
- package/lib/esm/entity/tenant/tenantState.js +4 -1
- package/lib/esm/epic.js +4 -1
- package/lib/esm/index.js +7 -6
- package/lib/esm/view/balanceSheet/balanceSheetForTimeframeEpic.js +9 -4
- package/lib/esm/view/balanceSheet/balanceSheetReducer.js +2 -0
- package/lib/esm/view/cashFlow/cashFlowForTimeframeEpic.js +11 -5
- package/lib/esm/view/cashFlow/cashFlowReducer.js +2 -0
- package/lib/esm/view/companyView/companyViewReducer.js +26 -1
- package/lib/esm/view/companyView/epic/companyPassport/updateCustomersTabSettingEpic.js +47 -0
- package/lib/esm/view/companyView/selector/companyPassportViewSelector.js +2 -0
- package/lib/esm/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
- package/lib/esm/view/customerSummaryView/customerSummaryViewReducer.js +39 -6
- package/lib/esm/view/customerSummaryView/customerSummaryViewSelector.js +41 -11
- package/lib/esm/view/customerSummaryView/epic/fetchCustomerSummaryListEpic.js +6 -1
- package/lib/esm/view/financeStatement/financeStatementSelector.js +18 -0
- package/lib/esm/view/profitAndLoss/profitAndLossForTimeframeEpic.js +9 -4
- package/lib/esm/view/profitAndLoss/profitAndLossReducer.js +5 -1
- package/lib/esm/view/spendManagement/reimbursement/editRemiView/editRemiViewReducer.js +23 -3
- package/lib/esm/view/spendManagement/reimbursement/editRemiView/epics/fetchRemiAndInitializeLocalStoreEpic.js +17 -4
- package/lib/esm/view/spendManagement/reimbursement/remiDetailView/epics/fetchRemiDetailEpic.js +1 -1
- package/lib/esm/view/transactionDetail/createTransaction/epics/createTransactionEpic.js +1 -5
- package/lib/esm/view/transactionList/fetchTransactionListByEntityEpic.js +11 -2
- package/lib/esm/view/transactionList/filterTransactionsByTimePeriod.js +18 -0
- package/lib/esm/view/transactionList/transactionListByAccountSelector.js +2 -1
- package/lib/esm/view/transactionList/transactionListByCategoryTypeSelector.js +2 -1
- package/lib/esm/view/transactionList/transactionListByClassSelector.js +2 -1
- package/lib/esm/view/transactionList/transactionListByProjectSelector.js +2 -1
- package/lib/esm/view/transactionList/transactionListReducer.js +24 -15
- package/lib/esm/view/trend/fetchIncomeTrendEpic.js +6 -2
- package/lib/index.d.ts +9 -8
- package/lib/index.js +53 -46
- package/lib/view/balanceSheet/balanceSheetForTimeframeEpic.js +8 -3
- package/lib/view/balanceSheet/balanceSheetReducer.js +2 -0
- package/lib/view/balanceSheet/balanceSheetState.d.ts +2 -0
- package/lib/view/cashFlow/cashFlowForTimeframeEpic.js +10 -4
- package/lib/view/cashFlow/cashFlowReducer.js +2 -0
- package/lib/view/cashFlow/cashFlowState.d.ts +2 -0
- package/lib/view/companyView/companyViewReducer.d.ts +8 -1
- package/lib/view/companyView/companyViewReducer.js +28 -3
- package/lib/view/companyView/epic/companyPassport/updateCustomersTabSettingEpic.d.ts +11 -0
- package/lib/view/companyView/epic/companyPassport/updateCustomersTabSettingEpic.js +51 -0
- package/lib/view/companyView/selector/companyPassportViewSelector.d.ts +1 -0
- package/lib/view/companyView/selector/companyPassportViewSelector.js +4 -1
- package/lib/view/companyView/types/companyPassport/companyPassportViewState.d.ts +1 -0
- package/lib/view/companyView/types/companyPassport/companyPassportViewState.js +4 -0
- package/lib/view/customerSummaryView/customerSummaryViewPayload.d.ts +20 -1
- package/lib/view/customerSummaryView/customerSummaryViewReducer.d.ts +3 -1
- package/lib/view/customerSummaryView/customerSummaryViewReducer.js +42 -6
- package/lib/view/customerSummaryView/customerSummaryViewSelector.d.ts +13 -1
- package/lib/view/customerSummaryView/customerSummaryViewSelector.js +45 -12
- package/lib/view/customerSummaryView/customerSummaryViewState.d.ts +24 -10
- package/lib/view/customerSummaryView/epic/fetchCustomerSummaryListEpic.js +6 -1
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/financeStatement/financeStatementSelector.d.ts +8 -0
- package/lib/view/financeStatement/financeStatementSelector.js +18 -0
- package/lib/view/profitAndLoss/profitAndLossForTimeframeEpic.js +8 -3
- package/lib/view/profitAndLoss/profitAndLossReducer.js +5 -1
- package/lib/view/profitAndLoss/profitAndLossState.d.ts +2 -1
- package/lib/view/spendManagement/reimbursement/editRemiView/editRemiViewReducer.d.ts +7 -2
- package/lib/view/spendManagement/reimbursement/editRemiView/editRemiViewReducer.js +24 -4
- package/lib/view/spendManagement/reimbursement/editRemiView/epics/fetchRemiAndInitializeLocalStoreEpic.d.ts +7 -4
- package/lib/view/spendManagement/reimbursement/editRemiView/epics/fetchRemiAndInitializeLocalStoreEpic.js +15 -1
- package/lib/view/spendManagement/reimbursement/remiDetailView/epics/fetchRemiDetailEpic.js +1 -1
- package/lib/view/transactionDetail/createTransaction/epics/createTransactionEpic.js +1 -5
- package/lib/view/transactionList/fetchTransactionListByEntityEpic.js +11 -2
- package/lib/view/transactionList/filterTransactionsByTimePeriod.d.ts +15 -0
- package/lib/view/transactionList/filterTransactionsByTimePeriod.js +22 -0
- package/lib/view/transactionList/transactionListByAccountSelector.js +2 -1
- package/lib/view/transactionList/transactionListByCategoryTypeSelector.js +2 -1
- package/lib/view/transactionList/transactionListByClassSelector.js +2 -1
- package/lib/view/transactionList/transactionListByProjectSelector.js +2 -1
- package/lib/view/transactionList/transactionListReducer.d.ts +3 -1
- package/lib/view/transactionList/transactionListReducer.js +24 -15
- package/lib/view/trend/fetchIncomeTrendEpic.js +6 -2
- package/package.json +1 -1
|
@@ -161,6 +161,23 @@ export const getFinanceStatement = createSelector((state) => state.accountState,
|
|
|
161
161
|
default:
|
|
162
162
|
break;
|
|
163
163
|
}
|
|
164
|
+
let customDateRangeByTimeframe;
|
|
165
|
+
switch (financeStatementState.selectedReportId) {
|
|
166
|
+
case 'profit_and_loss':
|
|
167
|
+
customDateRangeByTimeframe =
|
|
168
|
+
profitAndLossState.pandL.customDateRangeByTimeframe;
|
|
169
|
+
break;
|
|
170
|
+
case 'balance_sheet':
|
|
171
|
+
customDateRangeByTimeframe =
|
|
172
|
+
balanceSheetState.customDateRangeByTimeframe;
|
|
173
|
+
break;
|
|
174
|
+
case 'cash_flow':
|
|
175
|
+
customDateRangeByTimeframe = cashFlowState.customDateRangeByTimeframe;
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
const selectedReportCustomDateRange = customDateRangeByTimeframe?.[financeStatementState.timeframe];
|
|
164
181
|
return {
|
|
165
182
|
reportId: 'finance_statement',
|
|
166
183
|
reportTitle: '',
|
|
@@ -170,6 +187,7 @@ export const getFinanceStatement = createSelector((state) => state.accountState,
|
|
|
170
187
|
allTimeframeTicks,
|
|
171
188
|
balancesInTimeframe,
|
|
172
189
|
selectedReportAndTimeframeFetchState,
|
|
190
|
+
selectedReportCustomDateRange,
|
|
173
191
|
displayOrder: financeStatementState.displayOrder,
|
|
174
192
|
reportFormat: financeStatementState.reportFormat,
|
|
175
193
|
firstMonthOfFY,
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { from, of } from 'rxjs';
|
|
2
|
-
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
2
|
+
import { catchError, filter, groupBy, mergeMap, switchMap } from 'rxjs/operators';
|
|
3
3
|
import { updateCalculatedSectionAccountsView, updateSectionAccountsView, } from '../../entity/sectionAccountsView/sectionAccountsViewReducer';
|
|
4
4
|
import { createZeniAPIStatus, isSuccessResponse } from '../../responsePayload';
|
|
5
5
|
import { fetchProfitAndLossForTimeframe, updateProfitAndLossForTimeframe, updateProfitAndLossForTimeframeFailure, } from './profitAndLossReducer';
|
|
6
6
|
export const reportIdUniqueKey = (forecastId) => forecastId != null
|
|
7
7
|
? `profit_and_loss+${forecastId}`
|
|
8
8
|
: 'profit_and_loss';
|
|
9
|
-
export const fetchProfitAndLossForTimeframeEpic = (actions$, _, zeniAPI) => actions$.pipe(filter(fetchProfitAndLossForTimeframe.match),
|
|
9
|
+
export const fetchProfitAndLossForTimeframeEpic = (actions$, _, zeniAPI) => actions$.pipe(filter(fetchProfitAndLossForTimeframe.match),
|
|
10
|
+
// One stream per timeframe: a newer request for the same timeframe (e.g. a
|
|
11
|
+
// custom-date-range change, or a dated fetch right after a default one)
|
|
12
|
+
// cancels the older in-flight request so a stale response can't land last.
|
|
13
|
+
groupBy((action) => `${action.payload.forecastId ?? ''}_${action.payload.timeframe}`), mergeMap((group$) => group$.pipe(switchMap((action) => {
|
|
10
14
|
const getTimeSeriesGroup = (timeframe) => {
|
|
11
15
|
switch (timeframe) {
|
|
12
16
|
case 'month':
|
|
@@ -25,7 +29,8 @@ export const fetchProfitAndLossForTimeframeEpic = (actions$, _, zeniAPI) => acti
|
|
|
25
29
|
queryValue.forecast_id = action.payload.forecastId;
|
|
26
30
|
queryValue.is_forecast_vs_actual = true;
|
|
27
31
|
}
|
|
28
|
-
if (action.payload.startDate != null &&
|
|
32
|
+
if (action.payload.startDate != null &&
|
|
33
|
+
action.payload.endDate != null) {
|
|
29
34
|
queryValue.custom_start_date = action.payload.startDate;
|
|
30
35
|
queryValue.custom_end_date = action.payload.endDate;
|
|
31
36
|
}
|
|
@@ -55,4 +60,4 @@ export const fetchProfitAndLossForTimeframeEpic = (actions$, _, zeniAPI) => acti
|
|
|
55
60
|
return of(updateProfitAndLossForTimeframeFailure(response.status, action.payload.forecastId, action.payload.timeframe));
|
|
56
61
|
}
|
|
57
62
|
}), catchError((error) => of(updateProfitAndLossForTimeframeFailure(createZeniAPIStatus('Unexpected Error', 'P&L REST API call errored out' + JSON.stringify(error)), action.payload.forecastId, action.payload.timeframe))));
|
|
58
|
-
}));
|
|
63
|
+
}))));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createSlice } from '@reduxjs/toolkit';
|
|
2
2
|
import { mapReportPayloadV2ToReportV2 } from '../../commonPayloadTypes/v2/viewAndReportPayloadv2';
|
|
3
|
+
import { withFetchedCustomDateRange } from '../../commonStateTypes/coaBalance/coaBalance';
|
|
3
4
|
import { clearAll } from '../../rootActions';
|
|
4
5
|
export const initialPandLState = {
|
|
5
6
|
bookCloseDate: undefined,
|
|
@@ -71,7 +72,10 @@ const profitAndLoss = createSlice({
|
|
|
71
72
|
fetchState: 'In-Progress',
|
|
72
73
|
error: undefined,
|
|
73
74
|
};
|
|
74
|
-
updateState(draft, action.payload.forecastId, {
|
|
75
|
+
updateState(draft, action.payload.forecastId, {
|
|
76
|
+
fetchState,
|
|
77
|
+
customDateRangeByTimeframe: withFetchedCustomDateRange(pAndLState.customDateRangeByTimeframe, timeframe, action.payload.startDate, action.payload.endDate),
|
|
78
|
+
});
|
|
75
79
|
},
|
|
76
80
|
},
|
|
77
81
|
updateProfitAndLossForTimeframe(draft, action) {
|
|
@@ -30,8 +30,13 @@ const editRemiView = createSlice({
|
|
|
30
30
|
};
|
|
31
31
|
},
|
|
32
32
|
},
|
|
33
|
-
indicateReadyToInitializeRemiLocalStore
|
|
34
|
-
|
|
33
|
+
indicateReadyToInitializeRemiLocalStore: {
|
|
34
|
+
reducer() {
|
|
35
|
+
// do nothing
|
|
36
|
+
},
|
|
37
|
+
prepare(reimbursementId) {
|
|
38
|
+
return { payload: { reimbursementId } };
|
|
39
|
+
},
|
|
35
40
|
},
|
|
36
41
|
fetchRecommendationsAndUpdateMerchantRecommendations: {
|
|
37
42
|
reducer() {
|
|
@@ -137,6 +142,21 @@ const editRemiView = createSlice({
|
|
|
137
142
|
return { payload: { reimbursementId } };
|
|
138
143
|
},
|
|
139
144
|
},
|
|
145
|
+
initializeRemiToLocalStoreFailure: {
|
|
146
|
+
reducer(draft, action) {
|
|
147
|
+
const { reimbursementId, error } = action.payload;
|
|
148
|
+
draft.editRemiStateById[reimbursementId] = {
|
|
149
|
+
...draft.editRemiStateById[reimbursementId],
|
|
150
|
+
fetchStatus: {
|
|
151
|
+
fetchState: 'Error',
|
|
152
|
+
error,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
prepare(reimbursementId, error) {
|
|
157
|
+
return { payload: { reimbursementId, error } };
|
|
158
|
+
},
|
|
159
|
+
},
|
|
140
160
|
saveRemiUpdatesToLocalStore(draft, action) {
|
|
141
161
|
if (action.payload.reimbursementId != null) {
|
|
142
162
|
const reimbursementId = action.payload.reimbursementId;
|
|
@@ -387,7 +407,7 @@ const editRemiView = createSlice({
|
|
|
387
407
|
});
|
|
388
408
|
},
|
|
389
409
|
});
|
|
390
|
-
export const { fetchEditRemiDetailPage, fetchRemiAndInitializeLocalStore, initializeRemiToLocalStore, fetchRecommendationsAndUpdateMerchantRecommendations, saveRemiUpdatesToLocalStore, updatesPaymentToInLocalStore, discardRemiUpdatesInLocalStore, removeFileFromRemiUpdatesInLocalStore, saveRemiDetail, saveRemiSuccessOrFailure, parseReceiptsToRemi, fetchCurrencyConversionValue, updateReimbursementType, updateHomeCurrencyConversion, currencyConversionValueSuccessOrFailure, waitForRemiDetailThenInitializeLocalStore, waitForMerchantRecommendationFetchThenUpdateRecommendationInMerchant, updateAddRemiAutoFields, indicateReadyToInitializeRemiLocalStore, updateUploadFetchState, updateRecommendationInMerchant, updateTentativeMerchantNames, clearTentativeMerchantName, clearAddRemiAutoFields, } = editRemiView.actions;
|
|
410
|
+
export const { fetchEditRemiDetailPage, fetchRemiAndInitializeLocalStore, initializeRemiToLocalStore, fetchRecommendationsAndUpdateMerchantRecommendations, saveRemiUpdatesToLocalStore, updatesPaymentToInLocalStore, discardRemiUpdatesInLocalStore, removeFileFromRemiUpdatesInLocalStore, saveRemiDetail, saveRemiSuccessOrFailure, parseReceiptsToRemi, fetchCurrencyConversionValue, updateReimbursementType, updateHomeCurrencyConversion, currencyConversionValueSuccessOrFailure, waitForRemiDetailThenInitializeLocalStore, initializeRemiToLocalStoreFailure, waitForMerchantRecommendationFetchThenUpdateRecommendationInMerchant, updateAddRemiAutoFields, indicateReadyToInitializeRemiLocalStore, updateUploadFetchState, updateRecommendationInMerchant, updateTentativeMerchantNames, clearTentativeMerchantName, clearAddRemiAutoFields, } = editRemiView.actions;
|
|
391
411
|
export default editRemiView.reducer;
|
|
392
412
|
const doUpdateRecommendationForEntity = (draft, lineId, recommendations, shouldAutofill, reimbursementId, reimbursementStageCode) => {
|
|
393
413
|
if (reimbursementId != null) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import recordGet from 'lodash/get';
|
|
2
|
-
import { from } from 'rxjs';
|
|
3
|
-
import { filter, mergeMap } from 'rxjs/operators';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { from, merge } from 'rxjs';
|
|
3
|
+
import { filter, map, mergeMap, take, takeUntil, takeWhile, } from 'rxjs/operators';
|
|
4
|
+
import { clearAll } from '../../../../../rootActions';
|
|
5
|
+
import { fetchRemiDetail, updateRemiDetailFetchState, } from '../../remiDetailView/remiDetailViewReducer';
|
|
6
|
+
import { fetchRemiAndInitializeLocalStore, indicateReadyToInitializeRemiLocalStore, initializeRemiToLocalStore, initializeRemiToLocalStoreFailure, waitForRemiDetailThenInitializeLocalStore, } from '../editRemiViewReducer';
|
|
6
7
|
export const fetchRemiAndInitializeLocalStoreEpic = (actions$, state$) => actions$.pipe(filter(fetchRemiAndInitializeLocalStore.match), mergeMap((action) => {
|
|
7
8
|
const { reimbursementId, cacheOverride, isShowDeletedReimbursementEnabled, } = action.payload;
|
|
8
9
|
const state = state$.value;
|
|
@@ -35,3 +36,15 @@ export const fetchRemiAndInitializeLocalStoreEpic = (actions$, state$) => action
|
|
|
35
36
|
}
|
|
36
37
|
return from(remiDetailActions);
|
|
37
38
|
}));
|
|
39
|
+
export const waitForRemiDetailThenInitializeLocalStoreEpic = (actions$) => actions$.pipe(filter(waitForRemiDetailThenInitializeLocalStore.match), mergeMap((action) => {
|
|
40
|
+
const { reimbursementId } = action.payload;
|
|
41
|
+
const ready$ = actions$.pipe(filter(indicateReadyToInitializeRemiLocalStore.match), filter((readyAction) => readyAction.payload.reimbursementId === reimbursementId), take(1), map(() => initializeRemiToLocalStore(reimbursementId)));
|
|
42
|
+
const failed$ = actions$.pipe(filter(updateRemiDetailFetchState.match), filter((fetchStateAction) => fetchStateAction.payload.reimbursementId === reimbursementId &&
|
|
43
|
+
fetchStateAction.payload.fetchState === 'Error'), map((fetchStateAction) => initializeRemiToLocalStoreFailure(reimbursementId, fetchStateAction.payload.error)));
|
|
44
|
+
const supersededOrCleared$ = actions$.pipe(filter((nextAction) => clearAll.match(nextAction) ||
|
|
45
|
+
(waitForRemiDetailThenInitializeLocalStore.match(nextAction) &&
|
|
46
|
+
nextAction.payload.reimbursementId === reimbursementId)));
|
|
47
|
+
// An Error does not end the wait: a newer request for the same id may still succeed.
|
|
48
|
+
// After an Error, supersededOrCleared$ is what ends it.
|
|
49
|
+
return merge(ready$, failed$).pipe(takeWhile((resultAction) => !initializeRemiToLocalStore.match(resultAction), true), takeUntil(supersededOrCleared$));
|
|
50
|
+
}));
|
package/lib/esm/view/spendManagement/reimbursement/remiDetailView/epics/fetchRemiDetailEpic.js
CHANGED
|
@@ -75,7 +75,7 @@ export const fetchRemiDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(
|
|
|
75
75
|
}));
|
|
76
76
|
}
|
|
77
77
|
});
|
|
78
|
-
actions.push(indicateReadyToInitializeRemiLocalStore());
|
|
78
|
+
actions.push(indicateReadyToInitializeRemiLocalStore(reimbursementId));
|
|
79
79
|
if (response.data.transaction?.lines != null &&
|
|
80
80
|
response.data.transaction.lines.length > 0) {
|
|
81
81
|
actions.push(fetchDuplicateReimbursement(response.data.transaction.created_by_user_id, false, response.data.transaction.transaction_id));
|
|
@@ -52,15 +52,11 @@ exhaustMap((action) => {
|
|
|
52
52
|
// the working copy on unmount instead.
|
|
53
53
|
// Before the local-data init: it seeds the detail entry that init writes into.
|
|
54
54
|
createTransactionSuccessOrFailure('Completed', newTransactionId),
|
|
55
|
+
// No success snackbar here: the screen raises it once pending attachments upload.
|
|
55
56
|
initializeTransactionDetailLocalData({
|
|
56
57
|
transactionId: newTransactionId,
|
|
57
58
|
vendorId: created.vendor_id ?? undefined,
|
|
58
59
|
}),
|
|
59
|
-
openSnackbar({
|
|
60
|
-
messageSection: 'create_transaction',
|
|
61
|
-
messageText: 'success',
|
|
62
|
-
type: 'success',
|
|
63
|
-
}),
|
|
64
60
|
]);
|
|
65
61
|
}), catchError((error) => {
|
|
66
62
|
const message = error instanceof UnresolvedCreateTransactionIdError
|
|
@@ -2,6 +2,7 @@ import lodashGet from 'lodash/get';
|
|
|
2
2
|
import { from, of } from 'rxjs';
|
|
3
3
|
import { catchError, filter, mergeMap } from 'rxjs/operators';
|
|
4
4
|
import { toString } from '../../commonStateTypes/timePeriod';
|
|
5
|
+
import { fromCustomerEntityId } from '../../entity/genericEntity/customerWithSubCustomersId';
|
|
5
6
|
import { updateTransactions } from '../../entity/transaction/transactionReducer';
|
|
6
7
|
import { createZeniAPIStatus, isSuccessResponse } from '../../responsePayload';
|
|
7
8
|
import { fetchEntityTransactionList, updateTransactionListByEntity, updateTransactionListByEntityFailure, } from './transactionListReducer';
|
|
@@ -13,12 +14,20 @@ export const fetchTransactionListByEntityEpic = (actions$, state$, zeniAPI) => a
|
|
|
13
14
|
if (action.payload.cacheOverride === true ||
|
|
14
15
|
entityTransactions == null ||
|
|
15
16
|
entityTransactions.hasValidState() === false) {
|
|
17
|
+
// Customers tab rolled-up view: cached under its own id, sent as the customer id plus the flag
|
|
18
|
+
const { customerId: entityId, includeSubCustomers } = action.payload.entity.type === 'customer'
|
|
19
|
+
? fromCustomerEntityId(action.payload.entity.id)
|
|
20
|
+
: {
|
|
21
|
+
customerId: action.payload.entity.id,
|
|
22
|
+
includeSubCustomers: false,
|
|
23
|
+
};
|
|
16
24
|
const queryParam = {
|
|
17
25
|
start_date: toString(action.payload.period.start),
|
|
18
26
|
end_date: toString(action.payload.period.end),
|
|
19
27
|
sort_by: 'create_time',
|
|
20
28
|
sort_order: 'desc',
|
|
21
|
-
entity_id:
|
|
29
|
+
entity_id: entityId,
|
|
30
|
+
...(includeSubCustomers ? { include_sub_customers: true } : {}),
|
|
22
31
|
entity_name: action.payload.entity.name,
|
|
23
32
|
entity_type: action.payload.entity.type,
|
|
24
33
|
is_fetch_all_transactions: action.payload.isFetchAllTransactions === true
|
|
@@ -31,7 +40,7 @@ export const fetchTransactionListByEntityEpic = (actions$, state$, zeniAPI) => a
|
|
|
31
40
|
if (isSuccessResponse(response) && response.data != null) {
|
|
32
41
|
const updateActions = [];
|
|
33
42
|
updateActions.push(updateTransactions(response.data.transactions, (value) => value.transaction_id));
|
|
34
|
-
updateActions.push(updateTransactionListByEntity(response.data));
|
|
43
|
+
updateActions.push(updateTransactionListByEntity(response.data, action.payload.entity.id));
|
|
35
44
|
return from(updateActions);
|
|
36
45
|
}
|
|
37
46
|
else {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DEFAULT_DATE_FORMAT, toString, } from '../../commonStateTypes/timePeriod';
|
|
2
|
+
/**
|
|
3
|
+
* Transaction lists are fetched and cached in month buckets: `splitPeriod`
|
|
4
|
+
* snaps the first bucket back to the 1st of the month, while the last bucket
|
|
5
|
+
* is fetched with the real end date. So a period that starts mid-month (e.g. a
|
|
6
|
+
* drill-down from the custom-date-range column "Jun 17-30 2026") pulls in the
|
|
7
|
+
* days before its start. Drop those so the list reconciles to the clicked
|
|
8
|
+
* figure. Periods starting on the 1st (every pre-existing caller) are returned
|
|
9
|
+
* untouched. Compares calendar days as `YYYY-MM-DD` strings so the viewer's
|
|
10
|
+
* timezone can't shift the boundary.
|
|
11
|
+
*/
|
|
12
|
+
export const filterTransactionsByTimePeriod = (transactions, period) => {
|
|
13
|
+
if (period.start.day === 1) {
|
|
14
|
+
return transactions;
|
|
15
|
+
}
|
|
16
|
+
const start = toString(period.start);
|
|
17
|
+
return transactions.filter((transaction) => transaction.date.format(DEFAULT_DATE_FORMAT) >= start);
|
|
18
|
+
};
|
|
@@ -2,6 +2,7 @@ import flatMap from 'lodash/flatMap';
|
|
|
2
2
|
import recordGet from 'lodash/get';
|
|
3
3
|
import orderBy from 'lodash/orderBy';
|
|
4
4
|
import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
|
|
5
|
+
import { filterTransactionsByTimePeriod } from './filterTransactionsByTimePeriod';
|
|
5
6
|
import { splitPeriod } from './parallelFetchAccountTransactionListEpic';
|
|
6
7
|
import { isAnyFetchCompleted, reduceFetchState, } from './reduceTransactionListFetchState';
|
|
7
8
|
import { getAcKey, getAcTranKey, } from './transactionListState';
|
|
@@ -29,7 +30,7 @@ export const getTransactionListByAccount = (transactionState, transactionListSta
|
|
|
29
30
|
}
|
|
30
31
|
return value != null;
|
|
31
32
|
});
|
|
32
|
-
transactions = orderBy(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
|
|
33
|
+
transactions = orderBy(filterTransactionsByTimePeriod(transactionsUnsorted, filterByTimePeriod), (value) => value.date.valueOf(), 'desc');
|
|
33
34
|
}
|
|
34
35
|
const key = getAcKey(accountId, accountType);
|
|
35
36
|
const uiState = recordGet(transactionListState.byAccount.transactionListUIStateByAccountKey, key, {});
|
|
@@ -2,6 +2,7 @@ import flatMap from 'lodash/flatMap';
|
|
|
2
2
|
import recordGet from 'lodash/get';
|
|
3
3
|
import orderBy from 'lodash/orderBy';
|
|
4
4
|
import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
|
|
5
|
+
import { filterTransactionsByTimePeriod } from './filterTransactionsByTimePeriod';
|
|
5
6
|
import { splitPeriod } from './parallelFetchAccountTransactionListEpic';
|
|
6
7
|
import { isAnyFetchCompleted, reduceFetchState, } from './reduceTransactionListFetchState';
|
|
7
8
|
import { getCategoryTypeTranKey, } from './transactionListState';
|
|
@@ -26,7 +27,7 @@ export const getTransactionsListByCategoryType = (transactionState, transactionL
|
|
|
26
27
|
}
|
|
27
28
|
return value != null;
|
|
28
29
|
});
|
|
29
|
-
transactions = orderBy(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
|
|
30
|
+
transactions = orderBy(filterTransactionsByTimePeriod(transactionsUnsorted, filterByTimePeriod), (value) => value.date.valueOf(), 'desc');
|
|
30
31
|
}
|
|
31
32
|
const uiState = transactionListState.byType[transactionCategoryType].transactionListUIState;
|
|
32
33
|
return {
|
|
@@ -2,6 +2,7 @@ import flatMap from 'lodash/flatMap';
|
|
|
2
2
|
import recordGet from 'lodash/get';
|
|
3
3
|
import orderBy from 'lodash/orderBy';
|
|
4
4
|
import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
|
|
5
|
+
import { filterTransactionsByTimePeriod } from './filterTransactionsByTimePeriod';
|
|
5
6
|
import { splitPeriod } from './parallelFetchAccountTransactionListEpic';
|
|
6
7
|
import { isAnyFetchCompleted, reduceFetchState, } from './reduceTransactionListFetchState';
|
|
7
8
|
import { getClassAcKey, getClassAcTranKey, } from './transactionListState';
|
|
@@ -29,7 +30,7 @@ export const getTransactionListByClass = (transactionState, transactionListState
|
|
|
29
30
|
}
|
|
30
31
|
return value != null;
|
|
31
32
|
});
|
|
32
|
-
transactions = orderBy(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
|
|
33
|
+
transactions = orderBy(filterTransactionsByTimePeriod(transactionsUnsorted, filterByTimePeriod), (value) => value.date.valueOf(), 'desc');
|
|
33
34
|
}
|
|
34
35
|
const key = getClassAcKey(accountId, accountType, classId);
|
|
35
36
|
const uiState = recordGet(transactionListState.byClass.transactionListUIStateByClassKey, key, {});
|
|
@@ -2,6 +2,7 @@ import flatMap from 'lodash/flatMap';
|
|
|
2
2
|
import recordGet from 'lodash/get';
|
|
3
3
|
import orderBy from 'lodash/orderBy';
|
|
4
4
|
import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
|
|
5
|
+
import { filterTransactionsByTimePeriod } from './filterTransactionsByTimePeriod';
|
|
5
6
|
import { splitPeriod } from './parallelFetchAccountTransactionListEpic';
|
|
6
7
|
import { isAnyFetchCompleted, reduceFetchState, } from './reduceTransactionListFetchState';
|
|
7
8
|
import { getProjectAcKey, getProjectAcTranKey, } from './transactionListState';
|
|
@@ -29,7 +30,7 @@ export const getTransactionListByProject = (transactionState, transactionListSta
|
|
|
29
30
|
}
|
|
30
31
|
return value != null;
|
|
31
32
|
});
|
|
32
|
-
transactions = orderBy(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
|
|
33
|
+
transactions = orderBy(filterTransactionsByTimePeriod(transactionsUnsorted, filterByTimePeriod), (value) => value.date.valueOf(), 'desc');
|
|
33
34
|
}
|
|
34
35
|
const key = getProjectAcKey(accountId, accountType, projectId);
|
|
35
36
|
const uiState = recordGet(transactionListState.byProject.transactionListUIStateByProjectKey, key, {});
|
|
@@ -164,21 +164,30 @@ const transactionList = createSlice({
|
|
|
164
164
|
};
|
|
165
165
|
},
|
|
166
166
|
},
|
|
167
|
-
updateTransactionListByEntity
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
167
|
+
updateTransactionListByEntity: {
|
|
168
|
+
// `entityId`: the requested entity's id when it differs from the query's (a rolled-up customer)
|
|
169
|
+
prepare(payload, entityId) {
|
|
170
|
+
return { payload, meta: { entityId } };
|
|
171
|
+
},
|
|
172
|
+
reducer(draft, action) {
|
|
173
|
+
const transactionIDs = action.payload.transactions.map((transactionPayload) => transactionPayload.transaction_id);
|
|
174
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
175
|
+
const entity = {
|
|
176
|
+
...mapTransactionQueryMetaDataToEntity(action.payload.query),
|
|
177
|
+
...(action.meta.entityId != null && { id: action.meta.entityId }),
|
|
178
|
+
};
|
|
179
|
+
const key = getEntityTranKey(entity, {
|
|
180
|
+
start: toAbsoluteDay(action.payload.query.start_date),
|
|
181
|
+
end: toAbsoluteDay(action.payload.query.end_date),
|
|
182
|
+
});
|
|
183
|
+
draft.byEntity.transactionListByEntityKey[key] = {
|
|
184
|
+
...initialEntityTransactionState,
|
|
185
|
+
fetchState: 'Completed',
|
|
186
|
+
error: undefined,
|
|
187
|
+
entity: entity,
|
|
188
|
+
transactionIDs,
|
|
189
|
+
};
|
|
190
|
+
},
|
|
182
191
|
},
|
|
183
192
|
updateTransactionListByEntityFailure: {
|
|
184
193
|
reducer(draft, action) {
|
|
@@ -3,6 +3,7 @@ import { catchError, filter, mergeMap, switchMap } from 'rxjs/operators';
|
|
|
3
3
|
import { toTimePeriod, } from '../../commonStateTypes/timeframeTick';
|
|
4
4
|
import { getCustomerIncomeTrendKey } from '../../entity/customerIncome/customerIncomeTrendKey';
|
|
5
5
|
import { updateCustomerIncomeTrend } from '../../entity/customerIncome/customerIncomeTrendReducer';
|
|
6
|
+
import { fromCustomerEntityId } from '../../entity/genericEntity/customerWithSubCustomersId';
|
|
6
7
|
import { createZeniAPIStatus, isSuccessResponse } from '../../responsePayload';
|
|
7
8
|
import { date as zeniDate } from '../../zeniDayJS';
|
|
8
9
|
import { fetchIncomeTrend, updateTrendFailure, updateTrendSuccess, } from './trendReducer';
|
|
@@ -25,11 +26,14 @@ switchMap((action) => {
|
|
|
25
26
|
return of(updateTrendSuccess(requestedPeriod));
|
|
26
27
|
}
|
|
27
28
|
}
|
|
29
|
+
// The rolled-up view is cached under its own id; the API takes the customer id plus the flag
|
|
30
|
+
const { customerId: apiCustomerId, includeSubCustomers } = fromCustomerEntityId(customerId);
|
|
28
31
|
const query = {
|
|
29
|
-
entity_id:
|
|
32
|
+
entity_id: apiCustomerId,
|
|
30
33
|
entity_type: 'customer',
|
|
31
|
-
customer_id:
|
|
34
|
+
customer_id: apiCustomerId,
|
|
32
35
|
customer_name: customerName,
|
|
36
|
+
...(includeSubCustomers ? { include_sub_customers: true } : {}),
|
|
33
37
|
...(dateRange != null
|
|
34
38
|
? { start_date: dateRange.startDate, end_date: dateRange.endDate }
|
|
35
39
|
: {}),
|
package/lib/index.d.ts
CHANGED
|
@@ -147,8 +147,8 @@ import { getTaskGroupById } from './entity/taskGroup/taskGroupSelector';
|
|
|
147
147
|
import { TaskGroupState } from './entity/taskGroup/taskGroupState';
|
|
148
148
|
import { TaskGroupTemplate } from './entity/taskGroupTemplate/taskGroupTemplateState';
|
|
149
149
|
import { DoSignInPayload, deleteConnection, doMagicLinkSignIn, doSignIn, doSignOut, fetchActiveTenant, fetchAllTenants, fetchExcludedResources as fetchExcludedResourcesForTenant, fetchExternalConnections as fetchExternalConnectionsForTenant, fetchSubscriptionSummaryForTenant, initEmailConnectOAuth, resendVerifyDeviceOTP, resetSignInState, saveAPIKeyConnection, saveConnectorCredentials, saveExternalConnection as saveExternalConnectionForTenant, saveOAuthConnection, seedTenantSummary, sendEmailMagicLinkToUser, sendSessionHeartbeat, toExternalIntegrationType, updateCurrentTenant, updateSignInState, verifyDeviceWithTwoFA } from './entity/tenant/tenantReducer';
|
|
150
|
-
import { CurrentTenant, CurrentTenantIds, DEFAULT_RECEIPTS_EMAIL, TenantBaseView, TenantCoreDetailsView, TenantView, TenantsBaseOrdered, getCurrentTenant, getCurrentTenantId, getCurrentTenantIds, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getReceiptsEmail, getTenantBaseById, getTenantBaseViewForTenantId, getTenantBaseViewForTenantView, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, isCurrentTenantLoaded, isOtherProductsEnabledForTenant, isTenantBankingOnly, isTenantBookkeepingEnabled, isTenantCardsOnly, isTenantLoaded, isTenantUsingZeniCOA, isZeniDomainTenant, toTenantCoreDetailsView } from './entity/tenant/tenantSelector';
|
|
151
|
-
import { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Connection, LoggedInUser, RoleResource, Tenant, TenantProductSettings } from './entity/tenant/tenantState';
|
|
150
|
+
import { CurrentTenant, CurrentTenantIds, DEFAULT_RECEIPTS_EMAIL, TenantBaseView, TenantCoreDetailsView, TenantView, TenantsBaseOrdered, getCurrentTenant, getCurrentTenantId, getCurrentTenantIds, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getReceiptsEmail, getTenantBaseById, getTenantBaseViewForTenantId, getTenantBaseViewForTenantView, getTenantCustomersTabSettings, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, isCurrentTenantLoaded, isOtherProductsEnabledForTenant, isTenantBankingOnly, isTenantBookkeepingEnabled, isTenantCardsOnly, isTenantLoaded, isTenantUsingZeniCOA, isZeniDomainTenant, toTenantCoreDetailsView } from './entity/tenant/tenantSelector';
|
|
151
|
+
import { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Connection, CustomersTabSettingKey, CustomersTabSettings, LoggedInUser, RoleResource, Tenant, TenantProductSettings } from './entity/tenant/tenantState';
|
|
152
152
|
import { toExternalSupportedTool } from './entity/tenant/tenantTypes';
|
|
153
153
|
import { ToastNotificationPayload } from './entity/toastNotification/toastNotificationPayload';
|
|
154
154
|
import { pushToastNotification } from './entity/toastNotification/toastNotificationReducer';
|
|
@@ -284,11 +284,11 @@ import { AuditSummaryData, CompanyMonthEndReportData, CompanyMonthReportTemplate
|
|
|
284
284
|
import { fetchCockpitContext, fetchCompanyTaskManagerView, fetchTaskManagerMetrics, updateCompanyTaskManagerViewFilters } from './view/companyTaskManagerView/companyTaskManagerViewReducer';
|
|
285
285
|
import { CompanyTaskManagerSelectorView, TaskWithCompanyDetail, getCompanyTaskManagerView } from './view/companyTaskManagerView/companyTaskManagerViewSelector';
|
|
286
286
|
import { CompanyTaskManagerViewUIState, TaskManagerMetrics } from './view/companyTaskManagerView/companyTaskManagerViewState';
|
|
287
|
-
import { CompanyProductServicesInput, clearQboProjectsReconnectRequest, companyManagementSaveUpdates, companyPassportClearDataInLocalStore, companyPassportSaveDataInLocalStore, deleteCompanyOfficerInLocalStore, disableAccountingProjects, dismissCapitalizationOnboarding, enableAccountingProjects, fetchAllCockpitViews, fetchCompanyManagementView, fetchCompanyPassportView, fetchCompanyPortfolioView, fetchManagementView, fetchOnboardingView, fetchParentSubsidiaryManagementView, fetchPortfolioView, fetchSubscriptionView, fetchZeniUsers, resumeEnableAccountingProjects, saveCompanyPassportDetails, saveIndustryAndIncDateInCompanyPassportLocalStore, updateAccountingClassesEnabled, updateAutoReviewIncomeWithoutCustomer, updateCapitalizationAccountThreshold, updateCompanyDownloadState, updateCompanyManagementUIState, updateCompanyPassportLocalStoreData, updateCompanyPortfolioUIState, updateCompanyProductServices, updateCompanyQboRealmId } from './view/companyView/companyViewReducer';
|
|
287
|
+
import { CompanyProductServicesInput, clearQboProjectsReconnectRequest, companyManagementSaveUpdates, companyPassportClearDataInLocalStore, companyPassportSaveDataInLocalStore, deleteCompanyOfficerInLocalStore, disableAccountingProjects, dismissCapitalizationOnboarding, enableAccountingProjects, fetchAllCockpitViews, fetchCompanyManagementView, fetchCompanyPassportView, fetchCompanyPortfolioView, fetchManagementView, fetchOnboardingView, fetchParentSubsidiaryManagementView, fetchPortfolioView, fetchSubscriptionView, fetchZeniUsers, resumeEnableAccountingProjects, saveCompanyPassportDetails, saveIndustryAndIncDateInCompanyPassportLocalStore, updateAccountingClassesEnabled, updateAutoReviewIncomeWithoutCustomer, updateCapitalizationAccountThreshold, updateCompanyDownloadState, updateCompanyManagementUIState, updateCompanyPassportLocalStoreData, updateCompanyPortfolioUIState, updateCompanyProductServices, updateCompanyQboRealmId, updateCustomersTabSetting } from './view/companyView/companyViewReducer';
|
|
288
288
|
import { canSendMonthEndEmailReport, shouldEnableCalendarPickerForLastReportSent } from './view/companyView/helpers/cockpitHelpers';
|
|
289
289
|
import { getParentSubsidiaryManagementView } from './view/companyView/parentSubsidiaryView/parentSubsidiaryViewSelector';
|
|
290
290
|
import { CompanyManagementView, getAddonListZeniSku, getCompanyManagementView, getCompanyProductServicesUpdateStatus, getCompanyQboRealmIdUpdateStatus, getPlanListZeniSku } from './view/companyView/selector/companyManagementViewSelector';
|
|
291
|
-
import { CompanyPassportLocalStoreDataView, CompanyPassportView, getCompanyPassportLocalStoreData, getCompanyPassportView, isCompanyPassportDataToBeSaved } from './view/companyView/selector/companyPassportViewSelector';
|
|
291
|
+
import { CompanyPassportLocalStoreDataView, CompanyPassportView, getCompanyPassportLocalStoreData, getCompanyPassportView, getIsCustomersTabSettingsUpdateInProgress, isCompanyPassportDataToBeSaved } from './view/companyView/selector/companyPassportViewSelector';
|
|
292
292
|
import { CompanyPortfolioView, getCompanyPortfolioView, isInfiniteRunway } from './view/companyView/selector/companyPortfolioViewSelector';
|
|
293
293
|
import { AllCockpitTabsView, getAllCockpitTabsFilterView } from './view/companyView/selector/getAllCockpitTabsFilterView';
|
|
294
294
|
import { ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, CockpitDownloadTabsID, CockpitTabsFileType, CockpitTabsID, toCockpitTabsFileTypeStrict, toCockpitTabsIDStrict } from './view/companyView/types/cockpitTabsID';
|
|
@@ -754,7 +754,7 @@ export { TimeframeTick, TimeframeTickWithMetaData, toTimeframeTick, mapTimePerio
|
|
|
754
754
|
export { VendorSpendTrendFilterTabType, toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorSpendTrendFilterTabType';
|
|
755
755
|
export { getNumberOfPeriods };
|
|
756
756
|
export { SCHEDULE_DAYS_OF_MONTH, ScheduleDaysOfMonth, toScheduleDaysOfMonth, Day, Month, toMonth, toMonthStrict, Quarter, toQuarter, toQuarterStrict, AbsoluteDay, TimePeriod, };
|
|
757
|
-
export { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Tenant, TenantView, LoggedInUser, TenantBaseView, CurrentTenant, CurrentTenantIds, TenantProductSettings, getTenantBaseById, getCurrentTenant, getCurrentTenantId, getCurrentTenantIds, isCurrentTenantLoaded, isTenantLoaded, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, TenantsBaseOrdered, TenantCoreDetailsView, fetchActiveTenant, fetchAllTenants, seedTenantSummary, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, DoSignInPayload, doSignOut, sendSessionHeartbeat, resetSignInState, RoleResource, Connection, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, deleteConnection, saveAPIKeyConnection, saveConnectorCredentials, saveOAuthConnection, initEmailConnectOAuth, toExternalIntegrationType, toExternalSupportedTool, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, DEFAULT_RECEIPTS_EMAIL, getReceiptsEmail, };
|
|
757
|
+
export { CapitalizableAccount, CapitalizableAccounts, CapitalizableClassificationType, CapitalizableMatchPattern, Tenant, TenantView, LoggedInUser, TenantBaseView, CurrentTenant, CurrentTenantIds, TenantProductSettings, CustomersTabSettings, CustomersTabSettingKey, getTenantBaseById, getCurrentTenant, getCurrentTenantId, getCurrentTenantIds, isCurrentTenantLoaded, isTenantLoaded, getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, getIsAutoReviewIncomeWithoutCustomerEnabled, getTenantCustomersTabSettings, getTenantsBaseByCheckInDateSelector, getTenantsCoreDetailsByCheckInDateSelector, toTenantCoreDetailsView, getTenantBaseViewForTenantView, getTenantBaseViewForTenantId, isZeniDomainTenant, isTenantUsingZeniCOA, TenantsBaseOrdered, TenantCoreDetailsView, fetchActiveTenant, fetchAllTenants, seedTenantSummary, updateCurrentTenant, clearAll, doMagicLinkSignIn, verifyDeviceWithTwoFA, resendVerifyDeviceOTP, sendEmailMagicLinkToUser, doSignIn, updateSignInState, DoSignInPayload, doSignOut, sendSessionHeartbeat, resetSignInState, RoleResource, Connection, fetchExcludedResourcesForTenant, fetchExternalConnectionsForTenant, saveExternalConnectionForTenant, deleteConnection, saveAPIKeyConnection, saveConnectorCredentials, saveOAuthConnection, initEmailConnectOAuth, toExternalIntegrationType, toExternalSupportedTool, fetchSubscriptionSummaryForTenant, isTenantBankingOnly, isTenantCardsOnly, isTenantBookkeepingEnabled, isOtherProductsEnabledForTenant, DEFAULT_RECEIPTS_EMAIL, getReceiptsEmail, };
|
|
758
758
|
export { Account, AccountType, AccountBase, StatementCloseDay, toAccountType, AccountReport, NestedAccountReport, AccountWithBalanceReport, AccountGroup, AccountGroupReportV2, AccountGroupType, toAccountGroupType, AccountGroupReport, getAccountGroupKey, AccountGroupKey, RecommendedAccountBase, AccountFilterOption, getAllAccounts, getTransactionFilterAccountOptions, };
|
|
759
759
|
export { Class, ClassBase, RecommendedClassBase, } from './entity/class/classState';
|
|
760
760
|
export { ClassFilterOption, getAllClasses, getClassById, getClassFilterOptions, } from './entity/class/classSelector';
|
|
@@ -867,7 +867,7 @@ export { CockpitFilterCategory, CockpitFilters, DownloadCockpitTabOptions, Filte
|
|
|
867
867
|
export { CockpitDownloadTabsID, CockpitTabsFileType, CockpitTabsID, ALL_COCKPIT_TABS_FILE_TYPES, ALL_COCKPIT_TABS_IDS, toCockpitTabsIDStrict, toCockpitTabsFileTypeStrict, };
|
|
868
868
|
export { AllowedValueWithCode, AllowedValue, AllowedValueWithID, isAllowedValueWithCode, isAllowedValueWithID, };
|
|
869
869
|
export { ManagementUIState, PortfolioUIState };
|
|
870
|
-
export { fetchCompanyPassportView, CompanyPassportView, getCompanyPassportView, getCompanyPassportLocalStoreData, isCompanyPassportDataToBeSaved, companyPassportSaveDataInLocalStore, saveIndustryAndIncDateInCompanyPassportLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, updateCompanyPassportLocalStoreData, saveCompanyPassportDetails, updateAccountingClassesEnabled, updateAutoReviewIncomeWithoutCustomer, enableAccountingProjects, resumeEnableAccountingProjects, disableAccountingProjects, clearQboProjectsReconnectRequest, updateCompanyProductServices, CompanyProductServicesInput, getCompanyProductServicesUpdateStatus, updateCompanyQboRealmId, getCompanyQboRealmIdUpdateStatus, updateCapitalizationAccountThreshold, dismissCapitalizationOnboarding, UpdateActionType, CompanyPassportLocalStoreDataView, };
|
|
870
|
+
export { fetchCompanyPassportView, CompanyPassportView, getCompanyPassportView, getCompanyPassportLocalStoreData, getIsCustomersTabSettingsUpdateInProgress, isCompanyPassportDataToBeSaved, companyPassportSaveDataInLocalStore, saveIndustryAndIncDateInCompanyPassportLocalStore, deleteCompanyOfficerInLocalStore, companyPassportClearDataInLocalStore, updateCompanyPassportLocalStoreData, saveCompanyPassportDetails, updateAccountingClassesEnabled, updateAutoReviewIncomeWithoutCustomer, updateCustomersTabSetting, enableAccountingProjects, resumeEnableAccountingProjects, disableAccountingProjects, clearQboProjectsReconnectRequest, updateCompanyProductServices, CompanyProductServicesInput, getCompanyProductServicesUpdateStatus, updateCompanyQboRealmId, getCompanyQboRealmIdUpdateStatus, updateCapitalizationAccountThreshold, dismissCapitalizationOnboarding, UpdateActionType, CompanyPassportLocalStoreDataView, };
|
|
871
871
|
export { CompanyInfoLocalData, IncInfoLocalData, TaxDetailsLocalData, CompanyDetailsLocalData, PrimaryContactLocalData, CompanyOfficerLocalData, CompanyOfficerType, CompanyPassportLocalData, toCompanyPassportLocalData, };
|
|
872
872
|
export type { CompanyOnboardingIndustryTypeCode, CompanyOnboardingSubIndustryTypeCode, CompanyPurposeOfAccountCode, CompanySourceOfFundsCode, CompanyTransactionVolumeCode, CompanyUsNexusTypeCode, };
|
|
873
873
|
export { COMPANY_ONBOARDING_INDUSTRY_TYPE_CODES, COMPANY_ONBOARDING_SUB_INDUSTRY_CODES_BY_INDUSTRY, COMPANY_PURPOSE_OF_ACCOUNT_CODES, COMPANY_SOURCE_OF_FUNDS_CODES, COMPANY_TRANSACTION_VOLUME_CODES, COMPANY_US_NEXUS_TYPE_CODES, getCompanyOnboardingSubIndustryCodesForIndustry, };
|
|
@@ -1276,7 +1276,8 @@ export type { ActualMatchingMatchId } from './entity/actualMatching/actualMatchi
|
|
|
1276
1276
|
export type { SessionEndpointsLoader } from './sessionEndpointsLoader';
|
|
1277
1277
|
export type { DisplayCurrencyFallback } from './entity/actualMatching/actualMatchingPayload';
|
|
1278
1278
|
export { fetchCustomerSummaryDetail, fetchCustomerSummaryList, resetCustomerSummaryDetailUiState, saveCustomerSummaryDetail, updateCustomerAllTransactionsTabData, updateCustomerDetailSelectedTab, updateCustomerSummaryRevenueSelection, updateCustomerSummaryScrollYOffset, updateCustomerSummarySortUiState, updateCustomerTrendFilter, } from './view/customerSummaryView/customerSummaryViewReducer';
|
|
1279
|
-
export { getCustomerSummaryAllTransactionsTabData, getCustomerSummaryDetail, getCustomerSummaryList, getCustomerSummarySelectedTabType, getCustomerSummaryTrendFilter, isCustomersTabVisible, } from './view/customerSummaryView/customerSummaryViewSelector';
|
|
1279
|
+
export { getCustomerSummaryAllTransactionsTabData, getCustomerSummaryDetail, getCustomerSummaryList, getCustomerSummarySelectedTabType, getCustomerSummaryTrendFilter, getCustomersTabSettings, isCustomersTabVisible, } from './view/customerSummaryView/customerSummaryViewSelector';
|
|
1280
1280
|
export type { CustomerSummaryDetailView } from './view/customerSummaryView/customerSummaryViewSelector';
|
|
1281
1281
|
export { CUSTOMER_REVENUE_KEYS } from './view/customerSummaryView/customerSummaryViewState';
|
|
1282
|
-
export type { CustomerAllTransactionsTabData, CustomerDetailTabType, CustomerRevenueKey, CustomerSummary, CustomerSummaryDetailChanges, CustomerSummaryDetailState, CustomerSummarySortKey, CustomerSummaryViewState, } from './view/customerSummaryView/customerSummaryViewState';
|
|
1282
|
+
export type { CustomerAllTransactionsTabData, CustomerDetailTabType, CustomerRevenueKey, CustomerSummary, CustomerSummaryDetailChanges, CustomerSummaryDetailState, CustomerSummaryFigures, CustomerSummaryReference, CustomerSummarySortKey, CustomerSummaryViewState, } from './view/customerSummaryView/customerSummaryViewState';
|
|
1283
|
+
export { fromCustomerEntityId, toCustomerWithSubCustomersId, } from './entity/genericEntity/customerWithSubCustomersId';
|