@zeniai/client-epic-state 4.19.37-betaVR8 → 4.19.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +0 -1
- package/lib/epic.d.ts +1 -9
- package/lib/epic.js +1 -9
- package/lib/esm/entity/snackbar/snackbarTypes.js +0 -1
- package/lib/esm/epic.js +1 -9
- package/lib/esm/index.js +2 -4
- package/lib/esm/view/expenseAutomationView/payload/missingReceiptsPayload.js +1 -100
- package/lib/esm/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +1 -264
- package/lib/esm/view/expenseAutomationView/selectors/missingReceiptsSelector.js +1 -128
- package/lib/esm/zeniAPI.js +3 -41
- package/lib/index.d.ts +5 -7
- package/lib/index.js +30 -58
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -0
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.d.ts +0 -108
- package/lib/view/expenseAutomationView/payload/missingReceiptsPayload.js +0 -107
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.d.ts +3 -51
- package/lib/view/expenseAutomationView/reducers/missingReceiptsViewReducer.js +2 -265
- package/lib/view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes.d.ts +1 -61
- package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.d.ts +1 -1
- package/lib/view/expenseAutomationView/selectors/missingReceiptsSelector.js +0 -127
- package/lib/view/expenseAutomationView/types/missingReceiptsViewState.d.ts +0 -104
- package/lib/zeniAPI.d.ts +0 -9
- package/lib/zeniAPI.js +2 -40
- package/package.json +2 -2
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +0 -24
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +0 -49
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +0 -31
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +0 -41
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +0 -57
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +0 -35
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +0 -27
- package/lib/esm/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +0 -41
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.d.ts +0 -15
- package/lib/view/expenseAutomationView/epics/missingReceipts/bulkUploadReceiptsEpic.js +0 -28
- package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.d.ts +0 -7
- package/lib/view/expenseAutomationView/epics/missingReceipts/confirmBulkUploadMatchEpic.js +0 -53
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchDetailsEpic.js +0 -35
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.d.ts +0 -7
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchBulkUploadBatchesEpic.js +0 -45
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchCompletedTransactionsEpic.js +0 -61
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/missingReceipts/fetchMultipleBatchDetailsEpic.js +0 -39
- package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.d.ts +0 -6
- package/lib/view/expenseAutomationView/epics/missingReceipts/searchTransactionsForManualMatchEpic.js +0 -31
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.d.ts +0 -15
- package/lib/view/expenseAutomationView/epics/missingReceipts/watchBulkUploadBatchStatusEpic.js +0 -46
|
@@ -1,28 +1,6 @@
|
|
|
1
1
|
import { createSlice } from '@reduxjs/toolkit';
|
|
2
2
|
import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
|
|
3
|
-
export const initialBulkUploadState = {
|
|
4
|
-
batchDetailsById: {},
|
|
5
|
-
batchListByPeriod: {},
|
|
6
|
-
batchListFetchState: { fetchState: 'Not-Started', error: undefined },
|
|
7
|
-
batchStatusById: {},
|
|
8
|
-
completedSubTab: 'all',
|
|
9
|
-
completedTransactionsByPeriod: {},
|
|
10
|
-
confirmMatchStatus: { fetchState: 'Not-Started', error: undefined },
|
|
11
|
-
currentBatchId: undefined,
|
|
12
|
-
currentResultsTab: 'unmatched',
|
|
13
|
-
manualSearch: {
|
|
14
|
-
fetchState: { fetchState: 'Not-Started', error: undefined },
|
|
15
|
-
results: [],
|
|
16
|
-
searchQuery: '',
|
|
17
|
-
},
|
|
18
|
-
phase: 'idle',
|
|
19
|
-
sortKey: 'date',
|
|
20
|
-
sortOrder: 'descending',
|
|
21
|
-
uploadProgress: 0,
|
|
22
|
-
uploadStatus: { fetchState: 'Not-Started', error: undefined },
|
|
23
|
-
};
|
|
24
3
|
export const initialState = {
|
|
25
|
-
bulkUpload: initialBulkUploadState,
|
|
26
4
|
uploadReceiptStatusById: {},
|
|
27
5
|
refreshStatus: {
|
|
28
6
|
fetchState: 'Not-Started',
|
|
@@ -142,248 +120,7 @@ const expenseAutomationMissingReceiptsView = createSlice({
|
|
|
142
120
|
clearExpenseAutomationMissingReceiptsView(draft) {
|
|
143
121
|
Object.assign(draft, initialState);
|
|
144
122
|
},
|
|
145
|
-
// -- Bulk Upload Actions --
|
|
146
|
-
bulkUploadReceipts: {
|
|
147
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
148
|
-
reducer(draft, _action) {
|
|
149
|
-
draft.bulkUpload.phase = 'uploading';
|
|
150
|
-
draft.bulkUpload.uploadProgress = 0;
|
|
151
|
-
draft.bulkUpload.uploadStatus = {
|
|
152
|
-
fetchState: 'In-Progress',
|
|
153
|
-
error: undefined,
|
|
154
|
-
};
|
|
155
|
-
},
|
|
156
|
-
prepare(files) {
|
|
157
|
-
return { payload: { files } };
|
|
158
|
-
},
|
|
159
|
-
},
|
|
160
|
-
updateBulkUploadProgress(draft, action) {
|
|
161
|
-
draft.bulkUpload.uploadProgress = action.payload;
|
|
162
|
-
},
|
|
163
|
-
bulkUploadReceiptsSuccess(draft, action) {
|
|
164
|
-
draft.bulkUpload.currentBatchId = action.payload.batchId;
|
|
165
|
-
draft.bulkUpload.uploadStatus = {
|
|
166
|
-
fetchState: 'Completed',
|
|
167
|
-
error: undefined,
|
|
168
|
-
};
|
|
169
|
-
draft.bulkUpload.phase = 'matching';
|
|
170
|
-
},
|
|
171
|
-
bulkUploadReceiptsFailure(draft, action) {
|
|
172
|
-
draft.bulkUpload.uploadStatus = {
|
|
173
|
-
fetchState: 'Error',
|
|
174
|
-
error: action.payload.error,
|
|
175
|
-
};
|
|
176
|
-
draft.bulkUpload.phase = 'idle';
|
|
177
|
-
},
|
|
178
|
-
updateBulkUploadBatchStatus(draft, action) {
|
|
179
|
-
const batchStatus = action.payload;
|
|
180
|
-
draft.bulkUpload.batchStatusById[batchStatus.batchId] = batchStatus;
|
|
181
|
-
},
|
|
182
|
-
pusherBatchStatusUpdate(draft, action) {
|
|
183
|
-
const batchStatus = action.payload;
|
|
184
|
-
draft.bulkUpload.batchStatusById[batchStatus.batchId] = batchStatus;
|
|
185
|
-
},
|
|
186
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
187
|
-
fetchBulkUploadBatchDetails(_draft) {
|
|
188
|
-
// trigger epic, no state change needed
|
|
189
|
-
},
|
|
190
|
-
fetchBulkUploadBatchDetailsSuccess(draft, action) {
|
|
191
|
-
const details = action.payload;
|
|
192
|
-
draft.bulkUpload.batchDetailsById[details.batchId] = details;
|
|
193
|
-
draft.bulkUpload.phase = 'completed';
|
|
194
|
-
},
|
|
195
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
196
|
-
fetchBulkUploadBatchDetailsFailure(draft, _action) {
|
|
197
|
-
draft.bulkUpload.phase = 'completed';
|
|
198
|
-
},
|
|
199
|
-
storeBatchDetails(draft, action) {
|
|
200
|
-
const details = action.payload;
|
|
201
|
-
draft.bulkUpload.batchDetailsById[details.batchId] = details;
|
|
202
|
-
},
|
|
203
|
-
fetchBulkUploadBatches: {
|
|
204
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
205
|
-
reducer(draft, _action) {
|
|
206
|
-
draft.bulkUpload.batchListFetchState = {
|
|
207
|
-
fetchState: 'In-Progress',
|
|
208
|
-
error: undefined,
|
|
209
|
-
};
|
|
210
|
-
},
|
|
211
|
-
prepare(cacheOverride = false) {
|
|
212
|
-
return { payload: { cacheOverride } };
|
|
213
|
-
},
|
|
214
|
-
},
|
|
215
|
-
fetchBulkUploadBatchesSuccess(draft, action) {
|
|
216
|
-
const periodId = toMonthYearPeriodId(action.payload.selectedPeriod);
|
|
217
|
-
draft.bulkUpload.batchListByPeriod[periodId] = action.payload.batchList;
|
|
218
|
-
draft.bulkUpload.batchListFetchState = {
|
|
219
|
-
fetchState: 'Completed',
|
|
220
|
-
error: undefined,
|
|
221
|
-
};
|
|
222
|
-
},
|
|
223
|
-
fetchBulkUploadBatchesFailure(draft, action) {
|
|
224
|
-
draft.bulkUpload.batchListFetchState = {
|
|
225
|
-
fetchState: 'Error',
|
|
226
|
-
error: action.payload.error,
|
|
227
|
-
};
|
|
228
|
-
},
|
|
229
|
-
confirmBulkUploadMatch: {
|
|
230
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
231
|
-
reducer(draft, _action) {
|
|
232
|
-
draft.bulkUpload.confirmMatchStatus = {
|
|
233
|
-
fetchState: 'In-Progress',
|
|
234
|
-
error: undefined,
|
|
235
|
-
};
|
|
236
|
-
},
|
|
237
|
-
prepare(batchId, attachmentId, transactionId, transactionType, fileName) {
|
|
238
|
-
return { payload: { batchId, attachmentId, transactionId, transactionType, fileName } };
|
|
239
|
-
},
|
|
240
|
-
},
|
|
241
|
-
confirmBulkUploadMatchSuccess(draft, action) {
|
|
242
|
-
const { batchId, attachmentId, transactionId } = action.payload;
|
|
243
|
-
draft.bulkUpload.confirmMatchStatus = {
|
|
244
|
-
fetchState: 'Completed',
|
|
245
|
-
error: undefined,
|
|
246
|
-
};
|
|
247
|
-
const details = draft.bulkUpload.batchDetailsById[batchId];
|
|
248
|
-
if (details != null) {
|
|
249
|
-
const file = details.files.find((f) => f.attachmentId === attachmentId);
|
|
250
|
-
if (file != null) {
|
|
251
|
-
const originalStatus = file.status;
|
|
252
|
-
file.status = 'matched';
|
|
253
|
-
file.matchedTransactionId = transactionId;
|
|
254
|
-
file.candidates = undefined;
|
|
255
|
-
details.summary.matched += 1;
|
|
256
|
-
if (originalStatus === 'no_match') {
|
|
257
|
-
details.summary.noMatch = Math.max(0, details.summary.noMatch - 1);
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
details.summary.possibleMatches = Math.max(0, details.summary.possibleMatches - 1);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
},
|
|
265
|
-
confirmBulkUploadMatchFailure(draft, action) {
|
|
266
|
-
draft.bulkUpload.confirmMatchStatus = {
|
|
267
|
-
fetchState: 'Error',
|
|
268
|
-
error: action.payload.error,
|
|
269
|
-
};
|
|
270
|
-
},
|
|
271
|
-
setBulkUploadResultsTab(draft, action) {
|
|
272
|
-
draft.bulkUpload.currentResultsTab = action.payload;
|
|
273
|
-
},
|
|
274
|
-
setBulkUploadCompletedSubTab(draft, action) {
|
|
275
|
-
draft.bulkUpload.completedSubTab = action.payload;
|
|
276
|
-
draft.bulkUpload.completedTransactionsByPeriod = {};
|
|
277
|
-
},
|
|
278
|
-
setBulkUploadSortConfig(draft, action) {
|
|
279
|
-
draft.bulkUpload.sortKey = action.payload.sortKey;
|
|
280
|
-
draft.bulkUpload.sortOrder = action.payload.sortOrder;
|
|
281
|
-
},
|
|
282
|
-
clearBulkUpload(draft) {
|
|
283
|
-
Object.assign(draft.bulkUpload, initialBulkUploadState);
|
|
284
|
-
},
|
|
285
|
-
searchTransactionsForManualMatch: {
|
|
286
|
-
reducer(draft, action) {
|
|
287
|
-
draft.bulkUpload.manualSearch.searchQuery = action.payload.query;
|
|
288
|
-
draft.bulkUpload.manualSearch.fetchState = {
|
|
289
|
-
fetchState: 'In-Progress',
|
|
290
|
-
error: undefined,
|
|
291
|
-
};
|
|
292
|
-
draft.bulkUpload.manualSearch.results = [];
|
|
293
|
-
},
|
|
294
|
-
prepare(query) {
|
|
295
|
-
return { payload: { query } };
|
|
296
|
-
},
|
|
297
|
-
},
|
|
298
|
-
searchTransactionsForManualMatchSuccess(draft, action) {
|
|
299
|
-
draft.bulkUpload.manualSearch.results = action.payload;
|
|
300
|
-
draft.bulkUpload.manualSearch.fetchState = {
|
|
301
|
-
fetchState: 'Completed',
|
|
302
|
-
error: undefined,
|
|
303
|
-
};
|
|
304
|
-
},
|
|
305
|
-
searchTransactionsForManualMatchFailure(draft, action) {
|
|
306
|
-
draft.bulkUpload.manualSearch.fetchState = {
|
|
307
|
-
fetchState: 'Error',
|
|
308
|
-
error: action.payload.error,
|
|
309
|
-
};
|
|
310
|
-
},
|
|
311
|
-
clearManualSearchResults(draft) {
|
|
312
|
-
draft.bulkUpload.manualSearch = initialBulkUploadState.manualSearch;
|
|
313
|
-
},
|
|
314
|
-
// -- Completed Transactions Actions --
|
|
315
|
-
fetchCompletedTransactions: {
|
|
316
|
-
reducer(draft, action) {
|
|
317
|
-
const { pageToken } = action.payload;
|
|
318
|
-
if (pageToken != null) {
|
|
319
|
-
const periods = draft.bulkUpload.completedTransactionsByPeriod;
|
|
320
|
-
for (const entry of Object.values(periods)) {
|
|
321
|
-
if (entry.nextPageToken === pageToken) {
|
|
322
|
-
entry.fetchState = {
|
|
323
|
-
fetchState: 'In-Progress',
|
|
324
|
-
error: undefined,
|
|
325
|
-
};
|
|
326
|
-
break;
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
},
|
|
331
|
-
prepare(pageToken) {
|
|
332
|
-
return { payload: { pageToken } };
|
|
333
|
-
},
|
|
334
|
-
},
|
|
335
|
-
fetchCompletedTransactionsSuccess(draft, action) {
|
|
336
|
-
const { transactionIds, nextPageToken, totalCount, selectedPeriod, isInitialLoad } = action.payload;
|
|
337
|
-
const periodId = toMonthYearPeriodId(selectedPeriod);
|
|
338
|
-
if (isInitialLoad) {
|
|
339
|
-
draft.bulkUpload.completedTransactionsByPeriod[periodId] = {
|
|
340
|
-
transactionIds,
|
|
341
|
-
nextPageToken,
|
|
342
|
-
totalCount,
|
|
343
|
-
fetchState: { fetchState: 'Completed', error: undefined },
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
else {
|
|
347
|
-
const existing = draft.bulkUpload.completedTransactionsByPeriod[periodId];
|
|
348
|
-
if (existing != null) {
|
|
349
|
-
existing.transactionIds.push(...transactionIds);
|
|
350
|
-
existing.nextPageToken = nextPageToken;
|
|
351
|
-
existing.totalCount = totalCount;
|
|
352
|
-
existing.fetchState = { fetchState: 'Completed', error: undefined };
|
|
353
|
-
}
|
|
354
|
-
else {
|
|
355
|
-
draft.bulkUpload.completedTransactionsByPeriod[periodId] = {
|
|
356
|
-
transactionIds,
|
|
357
|
-
nextPageToken,
|
|
358
|
-
totalCount,
|
|
359
|
-
fetchState: { fetchState: 'Completed', error: undefined },
|
|
360
|
-
};
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
},
|
|
364
|
-
fetchCompletedTransactionsFailure(draft, action) {
|
|
365
|
-
const periodId = toMonthYearPeriodId(action.payload.selectedPeriod);
|
|
366
|
-
const existing = draft.bulkUpload.completedTransactionsByPeriod[periodId];
|
|
367
|
-
if (existing != null) {
|
|
368
|
-
existing.fetchState = {
|
|
369
|
-
fetchState: 'Error',
|
|
370
|
-
error: action.payload.error,
|
|
371
|
-
};
|
|
372
|
-
}
|
|
373
|
-
else {
|
|
374
|
-
draft.bulkUpload.completedTransactionsByPeriod[periodId] = {
|
|
375
|
-
fetchState: { fetchState: 'Error', error: action.payload.error },
|
|
376
|
-
nextPageToken: null,
|
|
377
|
-
totalCount: 0,
|
|
378
|
-
transactionIds: [],
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
},
|
|
382
123
|
},
|
|
383
124
|
});
|
|
384
|
-
export const { fetchMissingReceipts, fetchMissingReceiptsSuccess, fetchMissingReceiptsFailure, uploadMissingReceiptSuccess, updateMissingReceiptUploadState, updateMissingReceiptsUIState, markMissingReceiptAsDone, clearExpenseAutomationMissingReceiptsView,
|
|
385
|
-
// Bulk Upload
|
|
386
|
-
bulkUploadReceipts, updateBulkUploadProgress, bulkUploadReceiptsSuccess, bulkUploadReceiptsFailure, updateBulkUploadBatchStatus, pusherBatchStatusUpdate, fetchBulkUploadBatchDetails, fetchBulkUploadBatchDetailsSuccess, fetchBulkUploadBatchDetailsFailure, storeBatchDetails, fetchBulkUploadBatches, fetchBulkUploadBatchesSuccess, fetchBulkUploadBatchesFailure, confirmBulkUploadMatch, confirmBulkUploadMatchSuccess, confirmBulkUploadMatchFailure, setBulkUploadResultsTab, setBulkUploadCompletedSubTab, setBulkUploadSortConfig, clearBulkUpload, searchTransactionsForManualMatch, searchTransactionsForManualMatchSuccess, searchTransactionsForManualMatchFailure, clearManualSearchResults,
|
|
387
|
-
// Completed Transactions
|
|
388
|
-
fetchCompletedTransactions, fetchCompletedTransactionsSuccess, fetchCompletedTransactionsFailure, } = expenseAutomationMissingReceiptsView.actions;
|
|
125
|
+
export const { fetchMissingReceipts, fetchMissingReceiptsSuccess, fetchMissingReceiptsFailure, uploadMissingReceiptSuccess, updateMissingReceiptUploadState, updateMissingReceiptsUIState, markMissingReceiptAsDone, clearExpenseAutomationMissingReceiptsView, } = expenseAutomationMissingReceiptsView.actions;
|
|
389
126
|
export default expenseAutomationMissingReceiptsView.reducer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import orderBy from 'lodash/orderBy';
|
|
2
2
|
import { toMonthYearPeriodId } from '../../../commonStateTypes/timePeriod';
|
|
3
3
|
import { getCurrentTenant } from '../../../entity/tenant/tenantSelector';
|
|
4
|
-
import {
|
|
4
|
+
import { getSupportedTransactionsByIds } from '../../../entity/transaction/transactionSelector';
|
|
5
5
|
import { getAllSteps } from '../selectorTypes/expenseAutomationViewSelectorTypes';
|
|
6
6
|
export function getExpenseAutomationMissingReceiptsView(state) {
|
|
7
7
|
const { expenseAutomationMissingReceiptsViewState, expenseAutomationViewState, transactionState, monthEndCloseChecksState, } = state;
|
|
@@ -47,79 +47,6 @@ export function getExpenseAutomationMissingReceiptsView(state) {
|
|
|
47
47
|
const completionStatus = missingReceiptsCompletionStatus != null
|
|
48
48
|
? missingReceiptsCompletionStatus
|
|
49
49
|
: 'incomplete';
|
|
50
|
-
const { bulkUpload } = expenseAutomationMissingReceiptsViewState;
|
|
51
|
-
const currentBatchStatus = bulkUpload.currentBatchId != null
|
|
52
|
-
? bulkUpload.batchStatusById[bulkUpload.currentBatchId]
|
|
53
|
-
: undefined;
|
|
54
|
-
const currentBatchDetails = bulkUpload.currentBatchId != null
|
|
55
|
-
? bulkUpload.batchDetailsById[bulkUpload.currentBatchId]
|
|
56
|
-
: undefined;
|
|
57
|
-
const resolvedFiles = currentBatchDetails?.files.map((file) => resolveBatchFile(file, transactionState));
|
|
58
|
-
const getSortValue = (file) => {
|
|
59
|
-
const t = file.matchedTransaction;
|
|
60
|
-
if (t == null) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
switch (bulkUpload.sortKey) {
|
|
64
|
-
case 'vendor':
|
|
65
|
-
return (t.vendorName ?? t.description)?.toLowerCase() ?? null;
|
|
66
|
-
case 'category': {
|
|
67
|
-
const line = t.lines?.[0];
|
|
68
|
-
return line?.account?.accountName?.toLowerCase() ?? null;
|
|
69
|
-
}
|
|
70
|
-
case 'class': {
|
|
71
|
-
const line = t.lines?.[0];
|
|
72
|
-
return line?.class?.className?.toLowerCase() ?? null;
|
|
73
|
-
}
|
|
74
|
-
case 'date':
|
|
75
|
-
return t.date.valueOf();
|
|
76
|
-
case 'amount':
|
|
77
|
-
return t.amount.amount;
|
|
78
|
-
default:
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
const bulkUploadSortDirection = bulkUpload.sortOrder === 'ascending' ? 'asc' : 'desc';
|
|
83
|
-
const matchedFiles = orderBy(resolvedFiles?.filter((f) => f.status === 'matched') ?? [], getSortValue, bulkUploadSortDirection);
|
|
84
|
-
const unmatchedFiles = orderBy(resolvedFiles?.filter((f) => f.status === 'un_matched' || f.status === 'no_match') ?? [], getSortValue, bulkUploadSortDirection);
|
|
85
|
-
const progress = currentBatchStatus != null
|
|
86
|
-
? {
|
|
87
|
-
...currentBatchStatus.progress,
|
|
88
|
-
percentage: currentBatchStatus.progress.total > 0
|
|
89
|
-
? Math.round((currentBatchStatus.progress.processed /
|
|
90
|
-
currentBatchStatus.progress.total) *
|
|
91
|
-
100)
|
|
92
|
-
: 0,
|
|
93
|
-
}
|
|
94
|
-
: { total: 0, processed: 0, percentage: 0 };
|
|
95
|
-
const batchList = monthYearPeriodId != null
|
|
96
|
-
? bulkUpload.batchListByPeriod[monthYearPeriodId] ?? []
|
|
97
|
-
: [];
|
|
98
|
-
const batchListFetchState = bulkUpload.batchListFetchState;
|
|
99
|
-
const pastBatches = batchList.filter((b) => b.batchId !== bulkUpload.currentBatchId);
|
|
100
|
-
const pastUnmatchedFiles = pastBatches.flatMap((b) => {
|
|
101
|
-
const details = bulkUpload.batchDetailsById[b.batchId];
|
|
102
|
-
if (details == null) {
|
|
103
|
-
return [];
|
|
104
|
-
}
|
|
105
|
-
return details.files
|
|
106
|
-
.filter((f) => f.status === 'un_matched' || f.status === 'no_match')
|
|
107
|
-
.map((f) => resolveBatchFile(f, transactionState));
|
|
108
|
-
});
|
|
109
|
-
const completedTransactionsForPeriod = monthYearPeriodId != null
|
|
110
|
-
? bulkUpload.completedTransactionsByPeriod[monthYearPeriodId]
|
|
111
|
-
: undefined;
|
|
112
|
-
const completedTransactionIds = completedTransactionsForPeriod?.transactionIds ?? [];
|
|
113
|
-
const resolvedCompletedTransactions = getSupportedTransactionsByIds(transactionState, completedTransactionIds);
|
|
114
|
-
const resolvedBatchDetails = currentBatchDetails != null && resolvedFiles != null
|
|
115
|
-
? {
|
|
116
|
-
batchId: currentBatchDetails.batchId,
|
|
117
|
-
createdAt: currentBatchDetails.createdAt,
|
|
118
|
-
files: resolvedFiles,
|
|
119
|
-
status: currentBatchDetails.status,
|
|
120
|
-
summary: currentBatchDetails.summary,
|
|
121
|
-
}
|
|
122
|
-
: undefined;
|
|
123
50
|
return {
|
|
124
51
|
fetchState,
|
|
125
52
|
error,
|
|
@@ -128,59 +55,5 @@ export function getExpenseAutomationMissingReceiptsView(state) {
|
|
|
128
55
|
refreshStatus,
|
|
129
56
|
transactions: sortedTransactions,
|
|
130
57
|
completionStatus,
|
|
131
|
-
bulkUpload: {
|
|
132
|
-
phase: bulkUpload.phase,
|
|
133
|
-
uploadStatus: bulkUpload.uploadStatus,
|
|
134
|
-
batchStatus: currentBatchStatus,
|
|
135
|
-
batchDetails: resolvedBatchDetails,
|
|
136
|
-
completedSubTab: bulkUpload.completedSubTab,
|
|
137
|
-
completedTransactions: {
|
|
138
|
-
fetchState: completedTransactionsForPeriod?.fetchState ?? {
|
|
139
|
-
fetchState: 'Not-Started',
|
|
140
|
-
error: undefined,
|
|
141
|
-
},
|
|
142
|
-
nextPageToken: completedTransactionsForPeriod?.nextPageToken ?? null,
|
|
143
|
-
totalCount: completedTransactionsForPeriod?.totalCount ?? 0,
|
|
144
|
-
transactions: resolvedCompletedTransactions,
|
|
145
|
-
},
|
|
146
|
-
matchedFiles,
|
|
147
|
-
unmatchedFiles,
|
|
148
|
-
progress,
|
|
149
|
-
currentResultsTab: bulkUpload.currentResultsTab,
|
|
150
|
-
sortKey: bulkUpload.sortKey,
|
|
151
|
-
sortOrder: bulkUpload.sortOrder,
|
|
152
|
-
batchList,
|
|
153
|
-
batchListFetchState,
|
|
154
|
-
pastBatches,
|
|
155
|
-
pastUnmatchedFiles,
|
|
156
|
-
confirmMatchStatus: bulkUpload.confirmMatchStatus,
|
|
157
|
-
manualSearch: bulkUpload.manualSearch,
|
|
158
|
-
uploadProgress: bulkUpload.uploadProgress,
|
|
159
|
-
},
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
function resolveBatchFile(file, transactionState) {
|
|
163
|
-
const matchedTransaction = file.matchedTransactionId != null
|
|
164
|
-
? getSupportedTransactionById(transactionState, file.matchedTransactionId)
|
|
165
|
-
: undefined;
|
|
166
|
-
const candidates = file.candidates
|
|
167
|
-
?.map((ref) => {
|
|
168
|
-
const transaction = getSupportedTransactionById(transactionState, ref.transactionId);
|
|
169
|
-
return transaction != null
|
|
170
|
-
? { transaction, matchScore: ref.matchScore }
|
|
171
|
-
: undefined;
|
|
172
|
-
})
|
|
173
|
-
.filter((c) => c != null);
|
|
174
|
-
return {
|
|
175
|
-
attachmentId: file.attachmentId,
|
|
176
|
-
fileId: file.fileId,
|
|
177
|
-
filename: file.filename,
|
|
178
|
-
filePreviewUrl: file.filePreviewUrl,
|
|
179
|
-
status: file.status,
|
|
180
|
-
matchedTransaction,
|
|
181
|
-
candidates: candidates != null && candidates.length > 0
|
|
182
|
-
? candidates
|
|
183
|
-
: undefined,
|
|
184
|
-
matchSource: file.matchSource,
|
|
185
58
|
};
|
|
186
59
|
}
|
package/lib/esm/zeniAPI.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fetch } from 'cross-fetch';
|
|
2
|
-
import {
|
|
2
|
+
import { from } from 'rxjs';
|
|
3
3
|
import { isInvalidSessionError } from './responsePayload';
|
|
4
4
|
export class ZeniAPIClient {
|
|
5
5
|
constructor(apiEndPoints, userId, sessionId, tenantId, onSessionInvalidated) {
|
|
@@ -79,6 +79,8 @@ export class ZeniAPIClient {
|
|
|
79
79
|
return from(promise);
|
|
80
80
|
}
|
|
81
81
|
postFormData(restEndPoint, formData, signal) {
|
|
82
|
+
// Use apiHeaders for auth headers, then remove Content-Type
|
|
83
|
+
// so the browser sets multipart/form-data with the correct boundary
|
|
82
84
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
83
85
|
const { 'Content-Type': _contentType, ...headers } = this.apiHeaders();
|
|
84
86
|
const promise = fetch(restEndPoint, {
|
|
@@ -89,46 +91,6 @@ export class ZeniAPIClient {
|
|
|
89
91
|
}).then((response) => this.processJsonResponse(response));
|
|
90
92
|
return from(promise);
|
|
91
93
|
}
|
|
92
|
-
postFormDataWithProgress(restEndPoint, formData, signal) {
|
|
93
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
94
|
-
const { 'Content-Type': _ct, ...headers } = this.apiHeaders();
|
|
95
|
-
return new Observable((subscriber) => {
|
|
96
|
-
const xhr = new XMLHttpRequest();
|
|
97
|
-
xhr.upload.onprogress = (event) => {
|
|
98
|
-
if (event.lengthComputable) {
|
|
99
|
-
const percentage = Math.round((event.loaded / event.total) * 100);
|
|
100
|
-
subscriber.next({ type: 'progress', percentage });
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
xhr.onload = () => {
|
|
104
|
-
try {
|
|
105
|
-
const json = JSON.parse(xhr.responseText);
|
|
106
|
-
this.checkSessionValidity(json);
|
|
107
|
-
subscriber.next({ type: 'response', data: json });
|
|
108
|
-
subscriber.complete();
|
|
109
|
-
}
|
|
110
|
-
catch (e) {
|
|
111
|
-
subscriber.error(e);
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
xhr.onerror = () => {
|
|
115
|
-
subscriber.error(new Error('Upload failed'));
|
|
116
|
-
};
|
|
117
|
-
xhr.open('POST', restEndPoint);
|
|
118
|
-
Object.entries(headers).forEach(([key, value]) => {
|
|
119
|
-
xhr.setRequestHeader(key, String(value));
|
|
120
|
-
});
|
|
121
|
-
xhr.send(formData);
|
|
122
|
-
if (signal != null) {
|
|
123
|
-
signal.addEventListener('abort', () => xhr.abort());
|
|
124
|
-
}
|
|
125
|
-
return () => {
|
|
126
|
-
if (xhr.readyState !== XMLHttpRequest.DONE) {
|
|
127
|
-
xhr.abort();
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
94
|
deleteAndGetJSON(restEndPoint, body, headers, signal) {
|
|
133
95
|
let apiHeaders = this.apiHeaders(headers);
|
|
134
96
|
if (body != null) {
|
package/lib/index.d.ts
CHANGED
|
@@ -263,14 +263,14 @@ import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLine
|
|
|
263
263
|
import { UploadStatementDocumentAIPayload, UploadStatementDocumentAIResponse } from './view/expenseAutomationView/payload/reconciliationPayload';
|
|
264
264
|
import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFluxAnalysisView, updateFluxAnalysisViewPageMetaData, updateFluxAnalysisViewUIState, updateOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview } from './view/expenseAutomationView/reducers/fluxAnalysisViewReducer';
|
|
265
265
|
import { clearJeScheduleLocalData as clearExpenseAutomationJEScheduleLocalData, clearExpenseAutomationJESchedulesView, fetchJeSchedulesPage as fetchExpenseAutomationJESchedulesPage, ignoreRecommendedJeSchedule as ignoreExpenseAutomationJESchedule, initializeAccountSettingsView as initializeJeAccountSettingsView, initializeJeScheduleLocalData, removeJeScheduleTransactionKey, retryJeSchedule as retryExpenseAutomationJESchedule, saveAccountSettings as saveJeAccountSettings, saveAccountSettingsLocalData as saveJeAccountSettingsLocalData, updateJeScheduleLocalDataById, updateJeScheduleTransactionKeys } from './view/expenseAutomationView/reducers/jeSchedulesViewReducer';
|
|
266
|
-
import {
|
|
266
|
+
import { fetchMissingReceipts as fetchExpenseAutomationMissingReceipts, markMissingReceiptAsDone as markExpenseAutomationMissingReceiptAsDone, updateMissingReceiptUploadState as updateExpenseAutomationMissingReceiptUploadState, updateMissingReceiptsUIState as updateExpenseAutomationMissingReceiptsUIState, uploadMissingReceiptSuccess as uploadExpenseAutomationMissingReceiptSuccess } from './view/expenseAutomationView/reducers/missingReceiptsViewReducer';
|
|
267
267
|
import { deleteAccountStatement, fetchReconciliation as fetchReconciliationView, saveReconciliationDetail as saveExpenseAutomationReconciliationDetail, saveReconciliationReview as saveExpenseAutomationReconciliationReview, setConnectionInProgressForAccount as setConnectionInProgressForAccountReconciliation, setStatementParseInProgress, updateAccountReconciliationLocalData as updateExpenseAutomationAccountReconciliationLocalData, updateSelectedAccountId as updateExpenseAutomationAccountReconciliationSelectedAccountId, updateSelectedTab as updateExpenseAutomationAccountReconciliationSelectedTab, updateReconListScrollPosition as updateExpenseAutomationReconListScrollPosition, updateReviewTabSortState as updateExpenseAutomationReconReviewTabListSortState, updateReviewTabLocalData as updateExpenseAutomationReconReviewTabLocalData, updateReconcileTabListScrollState as updateExpenseAutomationReconcileTabListScrollState, updateReconcileTabListSortState as updateExpenseAutomationReconcileTabListSortState, updateReconcileTabLocalData as updateExpenseAutomationReconcileTabLocalData, updateSelectedDrawerAccountId as updateExpenseAutomationSelectedDrawerAccountId, updateStatementUploadChosen, uploadAccountStatement } from './view/expenseAutomationView/reducers/reconciliationViewReducer';
|
|
268
268
|
import { clearExpenseAutomationTransactionsView, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState } from './view/expenseAutomationView/reducers/transactionsViewReducer';
|
|
269
269
|
import { ExpenseAutomationStepDetails, ExpenseAutomationViewSelector } from './view/expenseAutomationView/selectorTypes/expenseAutomationViewSelectorTypes';
|
|
270
270
|
import { ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView } from './view/expenseAutomationView/selectorTypes/fluxAnalysisViewSelectorTypes';
|
|
271
271
|
import { JEAccountSettingsView } from './view/expenseAutomationView/selectorTypes/jeAccountSettingsViewSelectorTypes';
|
|
272
272
|
import { ExpenseAutomationJESchedulesViewSelector } from './view/expenseAutomationView/selectorTypes/jeSchedulesSelectorTypes';
|
|
273
|
-
import {
|
|
273
|
+
import { ExpenseAutomationMissingReceiptsViewSelector } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
|
|
274
274
|
import { AccountReconSectionID, AccountReconciliationByAccount, AccountReconciliationBySection, ExpenseAutomationReconciliationViewSelector } from './view/expenseAutomationView/selectorTypes/reconciliationViewSelectorTypes';
|
|
275
275
|
import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView } from './view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes';
|
|
276
276
|
import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
|
|
@@ -279,8 +279,6 @@ import { getExpenseAutomationReconciliationView, isAccountReconReport } from './
|
|
|
279
279
|
import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
|
|
280
280
|
import { FluxAnalysisActionType, FluxAnalysisReviewStatus, FluxAnalysisSortKey, FluxAnalysisViewUIState, FluxBalancesByMonth } from './view/expenseAutomationView/types/fluxAnalysisViewState';
|
|
281
281
|
import { AccountSettingsLocalData, JEScheduleLocalData } from './view/expenseAutomationView/types/jeSchedulesViewState';
|
|
282
|
-
import { BatchDetails, BatchFile, BatchFileStatus, BatchListItem, BatchStatus, BatchStatusValue, BatchSummary, BulkUploadPhase, BulkUploadResultsTab, BulkUploadSortKey, BulkUploadState, CandidateRef, CompletedSubTab, MatchCandidate, MatchSource, MissingReceiptsTab } from './view/expenseAutomationView/types/missingReceiptsViewState';
|
|
283
|
-
import { CompletedTransactionsSelectorData, ResolvedBatchFile, ResolvedCandidate, ResolvedBatchDetails } from './view/expenseAutomationView/selectorTypes/missingReceiptsSelectorTypes';
|
|
284
282
|
import { MissingReceiptsSortKey as ExpenseAutomationMissingReceiptsSortKey, MissingReceiptsViewState as ExpenseAutomationMissingReceiptsViewState, MissingReceiptsViewUIState as ExpenseAutomationMissingReceiptsViewUIState, toMissingReceiptsSortKey as toExpenseAutomationMissingReceiptsSortKey } from './view/expenseAutomationView/types/missingReceiptsViewState';
|
|
285
283
|
import { AccountReconciliationLocalData, ReconciliationViewTabType as ExpenseAutomationReconciliationViewTab, ReconReconcileSortKey, ReconReviewSortKey, ReconciliationReconcileTabLocalData, ReconciliationReviewTabLocalData, SaveReconcileDetailActionPayload as SaveExpenseAutomationReconciliationActionType, toReconciliationTabsType } from './view/expenseAutomationView/types/reconciliationViewState';
|
|
286
284
|
import { TransactionsTab as ExpenseAutomationTransactionsTab, TransactionsViewState as ExpenseAutomationTransactionsViewState, TransactionsViewUIState as ExpenseAutomationTransactionsViewUIState, SupportedTransactionCategorization, TransactionCategorizationLineItemData, TransactionReviewLocalData, TransactionsSortKey, TransactionsTab, toTransactionsTabKey as toExpenseAutomationTransactionsTabKey, toTransactionsSortKey } from './view/expenseAutomationView/types/transactionsViewState';
|
|
@@ -589,13 +587,13 @@ import { ZeniAccStatementsSelectorView, getZeniAccStatements } from './view/zeni
|
|
|
589
587
|
import { fetchZeniAccountsPromoCard } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardReducer';
|
|
590
588
|
import { ZeniAccountsPromoCardReport, getZeniAccountsPromoCard } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardSelector';
|
|
591
589
|
import { ZeniAccountsPromoCardState } from './view/zeniAccountsPromoCard/zeniAccountsPromoCardState';
|
|
592
|
-
import {
|
|
590
|
+
import { RESTAPIEndpoints } from './zeniAPI';
|
|
593
591
|
import { Dayjs, ZeniDate, date, dateFromYearMonthDate, dateInLocal, dateLocal, dateNow, getBusinessDayOfDate, getLocalTimezone, getMinDate, getMonthIndex, setLocalTimezone, updateZeniDateLocaleID } from './zeniDayJS';
|
|
594
592
|
import { ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL } from './zeniUrl';
|
|
595
593
|
export { AccountSettingsLocalData };
|
|
596
594
|
export { saveJeAccountSettings, saveJeAccountSettingsLocalData };
|
|
597
595
|
export default initialize;
|
|
598
|
-
export { initializePusher, disconnectPusher, Dayjs, ZeniDate, dateInLocal as zeniDateInLocal, date as zeniDate, dateLocal, dateNow, getBusinessDayOfDate, formatZeniDateFY as formatZeniDate, getFYMonths, getFYQuarterAndYear, getStartOfAndEndOfTimeframeForFY, getActualPeriodOfFYQtr, getActualPeriodOfFY, getLocalTimezone, addPeriod, subtractPeriod, setLocalTimezone, updateZeniDateLocaleID, ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL,
|
|
596
|
+
export { initializePusher, disconnectPusher, Dayjs, ZeniDate, dateInLocal as zeniDateInLocal, date as zeniDate, dateLocal, dateNow, getBusinessDayOfDate, formatZeniDateFY as formatZeniDate, getFYMonths, getFYQuarterAndYear, getStartOfAndEndOfTimeframeForFY, getActualPeriodOfFYQtr, getActualPeriodOfFY, getLocalTimezone, addPeriod, subtractPeriod, setLocalTimezone, updateZeniDateLocaleID, ZeniUrl, toZeniUrl, toZeniUrlWithoutBaseURL, RESTAPIEndpoints, RootState, updateZeniAPIClientConfig, zeniAPIClientConfig, injectFeatureEpics, injectFeatureModules, initializeWithNewStore, ZeniStore, ZeniAPIStatus, getTimeframeTickTag, TimeFrameTickTag, isIncompleteMonthPresentInTimeframeTick, getLastMonthOfFYQuarter, getLastMonthOfFYYear, getMonthIndex, dateFromYearMonthDate, getMinDate, ExternalAPIEndpoints, };
|
|
599
597
|
export { ID, FetchState, FetchStateAndError, FetchedState, UpdateType, Mode, AccountViewMode, CompletionStatusType, };
|
|
600
598
|
export { Amount, toAmount, Currency };
|
|
601
599
|
export { View, SelectorView, Report, ReportID, toReportID, ReportIDPlusForecastID, SelectorReport, ReportFormat, toReportFormatStrict, isCashFlowOrBalanceSheetReport, isDashboardReport, isDashboardClassesViewReport, isPAndLReport, isPAndLClassesViewReport, isAgingReport, isOpExByVendorReport, isFluxAnalysisOpExReport, PageToken, };
|
|
@@ -615,7 +613,7 @@ export { TransactionsOrder, COABalancesSliceOrder, EntityOrder, Section, Section
|
|
|
615
613
|
export { ClassesViewSelectorReportV2 };
|
|
616
614
|
export { BalancesTimeseries, TrendTimeseries, BalanceKind };
|
|
617
615
|
export { fetchMonthEndCloseChecks, fetchMonthClosePerformanceTrend, MonthClosePerformanceTrend, MonthEndCloseCheck, getMonthEndCloseChecksViewByTenantId, MonthEndCloseChecksView, MonthEndCloseCheckFrequency, MonthCloseCheckMetrics, ALL_MONTH_END_CLOSE_CHECKS_FREQUENCY, MonthEndAuditSummary, };
|
|
618
|
-
export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector,
|
|
616
|
+
export { ExpenseAutomationViewSelector, ExpenseAutomationStepDetails, ExpenseAutomationViewType, ExpenseAutomationMissingReceiptsViewSelector, ExpenseAutomationFluxAnalysisViewSelector, FluxAnalysisVendorView, FluxAnalysisViewSectionReport, FluxVendorAccountsAndClassesView, ExpenseAutomationMissingReceiptsViewUIState, ExpenseAutomationMissingReceiptsViewState, ExpenseAutomationViewState, ExpenseAutomationTransactionsTab, ExpenseAutomationMissingReceiptsSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts, fetchFluxAnalysisView, clearExpenseAutomationFluxAnalysisView, updateOperatingExpensesIdsForReview as updateFluxOperatingExpensesIdsForReview, updateSelectedSectionIdsForReview as updateFluxAnalysisSelectedSectionIdsForReview, reviewFluxAnalysisView, updateExpenseAutomationMissingReceiptUploadState, updateExpenseAutomationMissingReceiptsUIState, FluxAnalysisOperatingExpenseView, FluxAnalysisSectionType, getExpenseAutomationFluxAnalysisView, FluxAnalysisSortKey, FluxAnalysisActionType, FluxBalancesByMonth, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, ReconReconcileSortKey, ReconciliationReconcileTabLocalData, FluxAnalysisReviewStatus, updateFluxAnalysisViewUIState, FluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, SaveExpenseAutomationReconciliationActionType, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, ExpenseAutomationReconciliationViewSelector, getExpenseAutomationReconciliationView, AccountReconciliationBySection, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, UploadStatementDocumentAIResponse, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, AccountReconciliationByAccount, AccountReconciliationEntity, getAccountReconByAccountIdAndSelectedPeriod, ExpenseAutomationReconciliationViewTab, toReconciliationTabsType, isAccountReconReport, ReconReviewSortKey, AccountReconSectionID, ReconciliationReviewTabLocalData, TransactionsToReview, RecommendedActionCodeType, ReconciliationStatusCodeType, BalanceDataStatusCodeType, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, BankStatusCodeType, ReconciliationAccountSourceType, toReconciliationAccountSource, StatementStatusCodeType, AccountReconciliationLocalData, StatementDataStatusCodeType, deleteAccountStatement, uploadAccountStatement, UploadStatementDocumentAIPayload, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
|
|
619
617
|
export { JEScheduleLocalData };
|
|
620
618
|
export { ExpenseAutomationJESchedulesViewSelector, JEAccountSettingsView, JEScheduledTransactionWithFailedEntries, };
|
|
621
619
|
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, clearExpenseAutomationTransactionsView, TransactionsSortKey, toTransactionsSortKey, TransactionsTab, TransactionCategorizationLineItemData, TransactionReviewLocalData, SupportedTransactionCategorization, ExpenseAutomationTransactionsViewState, ExpenseAutomationTransactionsViewUIState, ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView, };
|