@zeniai/client-epic-state 5.0.44-betaML3 → 5.0.44-betaRD2

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.
Files changed (120) hide show
  1. package/lib/commonStateTypes/recommendationBase.d.ts +1 -1
  2. package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
  3. package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
  4. package/lib/entity/account/accountSelector.d.ts +0 -5
  5. package/lib/entity/account/accountSelector.js +1 -8
  6. package/lib/entity/account/accountState.d.ts +1 -1
  7. package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
  8. package/lib/entity/class/classReducer.d.ts +4 -4
  9. package/lib/entity/class/classState.d.ts +1 -1
  10. package/lib/entity/forecast/forecastState.d.ts +1 -1
  11. package/lib/entity/project/projectPayload.d.ts +7 -0
  12. package/lib/entity/project/projectPayload.js +15 -1
  13. package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
  14. package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
  15. package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
  16. package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
  17. package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
  18. package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
  19. package/lib/entity/snackbar/snackbarTypes.js +0 -2
  20. package/lib/entity/tenant/clearAllEpic.d.ts +2 -1
  21. package/lib/entity/tenant/clearAllEpic.js +2 -0
  22. package/lib/entity/transaction/payloadTypes/transactionLinePayload.d.ts +2 -0
  23. package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +9 -0
  24. package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +0 -6
  25. package/lib/entity/transaction/payloadTypes/transactionPayload.js +0 -10
  26. package/lib/entity/transaction/stateTypes/transaction.d.ts +0 -3
  27. package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -0
  28. package/lib/epic.d.ts +4 -3
  29. package/lib/epic.js +4 -3
  30. package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
  31. package/lib/esm/entity/account/accountSelector.js +0 -6
  32. package/lib/esm/entity/project/projectPayload.js +12 -0
  33. package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
  34. package/lib/esm/entity/tenant/clearAllEpic.js +2 -0
  35. package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +9 -0
  36. package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +0 -10
  37. package/lib/esm/epic.js +4 -3
  38. package/lib/esm/index.js +11 -8
  39. package/lib/esm/reducer.js +3 -0
  40. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +1 -5
  41. package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +1 -66
  42. package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +0 -19
  43. package/lib/esm/view/projectList/fetchProjectListEpic.js +38 -0
  44. package/lib/esm/view/projectList/projectListPayload.js +1 -0
  45. package/lib/esm/view/projectList/projectListReducer.js +39 -0
  46. package/lib/esm/view/projectList/projectListSelector.js +9 -0
  47. package/lib/esm/view/projectList/projectListState.js +1 -0
  48. package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
  49. package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +6 -6
  50. package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +3 -0
  51. package/lib/esm/view/transactionDetail/transactionDetailSelector.js +14 -13
  52. package/lib/esm/view/transactionList/fetchTransactionListByProjectEpic.js +45 -0
  53. package/lib/esm/view/transactionList/parallelFetchProjectTransactionListEpic.js +32 -0
  54. package/lib/esm/view/transactionList/transactionListByProjectSelector.js +58 -0
  55. package/lib/esm/view/transactionList/transactionListReducer.js +83 -2
  56. package/lib/esm/view/transactionList/transactionListState.js +10 -0
  57. package/lib/index.d.ts +11 -8
  58. package/lib/index.js +43 -42
  59. package/lib/reducer.d.ts +3 -0
  60. package/lib/reducer.js +3 -0
  61. package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
  62. package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
  63. package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
  64. package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
  65. package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
  66. package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
  67. package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
  68. package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
  69. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -2
  70. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -4
  71. package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
  72. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -15
  73. package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -67
  74. package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +1 -3
  75. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +0 -2
  76. package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +0 -20
  77. package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -13
  78. package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
  79. package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
  80. package/lib/view/projectList/fetchProjectListEpic.d.ts +8 -0
  81. package/lib/view/projectList/fetchProjectListEpic.js +42 -0
  82. package/lib/view/projectList/projectListPayload.d.ts +7 -0
  83. package/lib/view/projectList/projectListPayload.js +2 -0
  84. package/lib/view/projectList/projectListReducer.d.ts +9 -0
  85. package/lib/view/projectList/projectListReducer.js +43 -0
  86. package/lib/view/projectList/projectListSelector.d.ts +8 -0
  87. package/lib/view/projectList/projectListSelector.js +13 -0
  88. package/lib/view/projectList/projectListState.d.ts +4 -0
  89. package/lib/view/projectList/projectListState.js +2 -0
  90. package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
  91. package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
  92. package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
  93. package/lib/view/topEx/topExSelector.d.ts +1 -1
  94. package/lib/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
  95. package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +2 -2
  96. package/lib/view/transactionDetail/epics/transactionDetailEpic.js +6 -6
  97. package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +3 -0
  98. package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
  99. package/lib/view/transactionDetail/transactionDetailSelector.d.ts +4 -4
  100. package/lib/view/transactionDetail/transactionDetailSelector.js +13 -12
  101. package/lib/view/transactionDetail/transactionDetailState.d.ts +2 -0
  102. package/lib/view/transactionDetail/transactionDetailTypes.d.ts +2 -0
  103. package/lib/view/transactionList/fetchTransactionListByProjectEpic.d.ts +8 -0
  104. package/lib/view/transactionList/fetchTransactionListByProjectEpic.js +52 -0
  105. package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.d.ts +6 -0
  106. package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.js +36 -0
  107. package/lib/view/transactionList/transactionListByProjectSelector.d.ts +22 -0
  108. package/lib/view/transactionList/transactionListByProjectSelector.js +66 -0
  109. package/lib/view/transactionList/transactionListPayload.d.ts +15 -0
  110. package/lib/view/transactionList/transactionListReducer.d.ts +25 -2
  111. package/lib/view/transactionList/transactionListReducer.js +83 -2
  112. package/lib/view/transactionList/transactionListState.d.ts +15 -0
  113. package/lib/view/transactionList/transactionListState.js +13 -1
  114. package/package.json +1 -1
  115. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -81
  116. package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -25
  117. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.d.ts +0 -9
  118. package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -85
  119. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.d.ts +0 -8
  120. package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -29
package/lib/esm/index.js CHANGED
@@ -123,6 +123,8 @@ import { fetchCashPosition, updateCashPositionCOABalancesRange, updateCashPositi
123
123
  import { getCashPosition, getCashPositionForHighlightedRange, getCashPositionForSelectedRange, getCashPositionUIState, } from './view/cashPosition/cashPositionSelector';
124
124
  import { fetchClassList } from './view/classList/classListReducer';
125
125
  import { getClassList, } from './view/classList/classListSelector';
126
+ import { fetchProjectList } from './view/projectList/projectListReducer';
127
+ import { getProjectList, } from './view/projectList/projectListSelector';
126
128
  import { SEMI_WEEKLY_REQUIRED_DAYS_COUNT, getMinAllowedEndDate, getRecurringEndDateFromCount, toRecurringFrequency, } from './view/common/recurringViewHelper';
127
129
  import { ZENI_CLEARING_ACCOUNT, isZeniClearingAccount, isZeniClearingAccountReport, } from './view/common/zeniClearingAccountHelper';
128
130
  import { clearTransactionVendorSaveStatus, resetTransactionVendorLocalData, saveTransactionVendor, saveTransactionVendorSuccessOrFailure, updateTransactionVendorLocalData, } from './view/commonVendorView/transactionVendorView/transactionVendorViewReducer';
@@ -165,10 +167,10 @@ import { clearExpenseAutomationFluxAnalysisView, fetchFluxAnalysisView, reviewFl
165
167
  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';
166
168
  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';
167
169
  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';
168
- import { acknowledgeTransferEntryRouteReplacement, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, fetchTransactionCategorization, fetchTransactionCategorizationFailure, fetchTransactionCategorizationView, fetchTransferAccounts, initializeTransactionCategorizationViewLocalData, markTransactionAsNotMiscategorized, removeTransactionFromAllTabs, resetCreateTransferEntryStatus, saveTransactionCategorization, saveTransactionCategorizationLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, setEntityRecommendationForLineIdsForCategorization, syncTransactionCategorizationFromDetailSave, updateCurrentSelectedTransactionCategorizationTab, updateSelectedCheckboxTransactionIds, updateSelectedCustomerForTransaction, updateSelectedTransactionId, updateSelectedVendorForTransaction, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, updateTransactionCategorizationUIState, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } from './view/expenseAutomationView/reducers/transactionsViewReducer';
170
+ 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';
169
171
  import { getExpenseAutomationFluxAnalysisView } from './view/expenseAutomationView/selectors/fluxAnalysisViewSelector';
170
172
  import { getExpenseAutomationReconciliationView, isAccountReconReport, } from './view/expenseAutomationView/selectors/reconciliationViewSelector';
171
- import { getExpenseAutomationTransactionView, getLastTransferEntryReplacement, } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
173
+ import { getExpenseAutomationTransactionView } from './view/expenseAutomationView/selectors/transactionCategorizationSelector';
172
174
  import { toJEScheduleMainTab as toExpenseAutomationJEScheduleMainTab, toJEScheduleSortKey as toExpenseAutomationJEScheduleSortKey, } from './view/expenseAutomationView/types/jeSchedulesViewState';
173
175
  import { BATCH_FILE_STATUSES, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, } from './view/expenseAutomationView/types/missingReceiptsViewState';
174
176
  import { toMissingReceiptsSortKey as toExpenseAutomationMissingReceiptsSortKey, } from './view/expenseAutomationView/types/missingReceiptsViewState';
@@ -381,8 +383,9 @@ import { getThirdPartyIdFromTransactionId, } from './view/transactionDetail/tran
381
383
  import { getTransactionListByAccount, getTransactionListUIStateByAccountKey, } from './view/transactionList/transactionListByAccountSelector';
382
384
  import { getTransactionListUIStateByCategoryType, getTransactionsListByCategoryType, } from './view/transactionList/transactionListByCategoryTypeSelector';
383
385
  import { getTransactionListByClass, getTransactionListUIStateByClassKey, } from './view/transactionList/transactionListByClassSelector';
386
+ import { getTransactionListByProject, getTransactionListUIStateByProjectKey, } from './view/transactionList/transactionListByProjectSelector';
384
387
  import { getTransactionListByEntity, getTransactionListByEntityForSinglePeriod, } from './view/transactionList/transactionListByEntitySelector';
385
- import { clearTransactionList, fetchAccountTransactionList, fetchEntityTransactionList, parallelFetchAccountTransactionList, parallelFetchClassTransactionList, parallelFetchEntityTransactionList, parallelFetchTransactionListByCategoryType, updateLatestTransactionId, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, updateTransactionListByClass, updateTransactionListByClassUIState, updateTransactionListByEntity, updateTransactionListByEntityFailure, updateTransactionListUIStateByCategoryType, } from './view/transactionList/transactionListReducer';
388
+ import { clearTransactionList, fetchAccountTransactionList, fetchEntityTransactionList, parallelFetchAccountTransactionList, parallelFetchClassTransactionList, parallelFetchProjectTransactionList, parallelFetchEntityTransactionList, parallelFetchTransactionListByCategoryType, updateLatestTransactionId, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, updateTransactionListByClass, updateTransactionListByClassUIState, updateTransactionListByProject, updateTransactionListByProjectUIState, updateTransactionListByEntity, updateTransactionListByEntityFailure, updateTransactionListUIStateByCategoryType, } from './view/transactionList/transactionListReducer';
386
389
  import { clearTrendData, fetchExpenseTrend, fetchIncomeTrend, } from './view/trend/trendReducer';
387
390
  import { getCurrentFiscalQuarterDateRange, getTrendForEntity, } from './view/trend/trendSelector';
388
391
  import { clearTrendWithTransactions, fetchTransactionsForEntity, fetchTrendForEntity, updateSelectedTimeperiod, } from './view/trendWithTransactions/trendWithTransactionsReducer';
@@ -439,8 +442,8 @@ export {
439
442
  // Bulk Upload Types
440
443
  BATCH_FILE_STATUSES, isUnmatchedTabFileStatus, toBatchFileStatus, toBatchStatusValue, toBulkUploadPhase, toBulkUploadResultsTab, toBulkUploadSortKey, toCompletedSubTab, toMatchSource, toMissingReceiptsTab, toExpenseAutomationJEScheduleMainTab, toExpenseAutomationJEScheduleSortKey, getExpenseAutomationView, toExpenseAutomationMissingReceiptsSortKey, toExpenseAutomationTransactionsTabKey, toExpenseAutomationViewType, uploadExpenseAutomationMissingReceiptSuccess, markExpenseAutomationMissingReceiptAsDone, fetchAllExpenseAutomationTabs, refreshExpenseAutomationCurrentTab, updateCurrentSelectedTransactionCategorizationTab, fetchExpenseAutomationMissingReceipts,
441
444
  // Bulk Upload Actions
442
- 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, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, getLastTransferEntryReplacement, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateNodeCollapseState, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
443
- export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, createTransferEntry, createTransferEntryFailure, createTransferEntryReplacedTransaction, createTransferEntrySuccess, resetCreateTransferEntryStatus, acknowledgeTransferEntryRouteReplacement, fetchTransferAccounts, removeTransactionFromAllTabs, clearExpenseAutomationTransactionsView, toTransactionsSortKey, };
445
+ 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, getExpenseAutomationFluxAnalysisView, updateCurrentSelectedView, updateCurrentSelectedPeriod, getExpenseAutomationTransactionView, updateFluxAnalysisViewUIState, updateFluxAnalysisViewPageMetaData, MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, getLineItemsByTransactionIdsFromLocalData, isAnyItemWithUncategorizedExpenseAccount, excludeAccountFromReconciliation, includeAccountInReconciliation, saveExpenseAutomationReconciliationDetail, updateExpenseAutomationReconcileTabListScrollState, updateExpenseAutomationReconReviewTabListSortState, updateExpenseAutomationReconcileTabListSortState, updateExpenseAutomationReconcileTabLocalData, updateExpenseAutomationAccountReconciliationSelectedTab, updateExpenseAutomationAccountReconciliationSelectedAccountId, getExpenseAutomationReconciliationView, fetchReconciliationView, uploadAccountStatementIntoDocumentAI, updateExpenseAutomationReconListScrollPosition, setConnectionInProgressForAccountReconciliation, getAccountReconByAccountIdAndSelectedPeriod, toReconciliationTabsType, isAccountReconReport, updateExpenseAutomationReconReviewTabLocalData, updateExpenseAutomationSelectedDrawerAccountId, saveExpenseAutomationReconciliationReview, updateExpenseAutomationAccountReconciliationLocalData, toReconciliationAccountSource, deleteAccountStatement, uploadAccountStatement, updateNodeCollapseState, updateStatementUploadChosen, isReviewTransactionBankTransferType, isReviewTransactionBillPaymentType, isReviewTransactionCreditCardPaymentType, isReviewTransactionDepositType, isReviewTransactionExpenseType, isReviewTransactionCreditCardCreditType, setStatementParseInProgress, };
446
+ export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, clearExpenseAutomationTransactionsView, toTransactionsSortKey, };
444
447
  export { TOP_EX_TIME_PERIODS };
445
448
  export { toTimeframeTick, mapTimePeriodtoTimeframeTick, toTimePeriod, toAbsoluteDay, toMonthYearPeriodId, convertToPeriod, };
446
449
  export { toVendorSpendTrendFilterTabsTypeStrict, } from './entity/vendorExpense/vendorExpenseSelector';
@@ -491,12 +494,12 @@ export { defaultVendorCurrency, updateVendors };
491
494
  export { isVendorTransaction, isVendorTransactionWithCustomer, };
492
495
  export { isTransferTransaction };
493
496
  export { getSupportedTransactionById, };
494
- export { clearTransactionList, updateLatestTransactionId, parallelFetchAccountTransactionList, parallelFetchEntityTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, updateTransactionListByClassUIState, updateTransactionListByClass, updateTransactionListUIStateByCategoryType, parallelFetchTransactionListByCategoryType, };
497
+ export { clearTransactionList, updateLatestTransactionId, parallelFetchAccountTransactionList, parallelFetchEntityTransactionList, fetchAccountTransactionList, updateTransactionListByAccount, updateTransactionListByAccountFailure, updateTransactionListByAccountUIState, parallelFetchClassTransactionList, updateTransactionListByClassUIState, updateTransactionListByClass, parallelFetchProjectTransactionList, updateTransactionListByProjectUIState, updateTransactionListByProject, updateTransactionListUIStateByCategoryType, parallelFetchTransactionListByCategoryType, };
495
498
  export { getTransactionListByAccount, getTransactionListUIStateByAccountKey, };
496
499
  export { fetchEntityTransactionList, updateTransactionListByEntity, saveTransactionDetailLocalData, clearTransactionDetailSaveStatus, updateTransactionListByEntityFailure, resetLineItemsCategoryClassInLocalData, setAllLineItemsToCategoryClassInLocalData, saveTransactionDetail, setAllLineItemsLocalDataIsUpdateAllChecked, initializeTransactionDetailLocalData, removeEntityRecommendationForLineIdForTransactionDetail, updateSelectedVendor, updateSelectedCustomer, resetSelectedCustomer, resetVendor, updateLocalDataWithTransactionsUpdateWithVendorCheckbox, updateVendorToAllLineItems, resetAllLineItemsToVendor, updateLatestSelectedEntity, updateVendorBulkRecommendationsFetchStatus, setIsVendorUpdateAllChecked, };
497
500
  export { downloadAccountingProviderAttachment, downloadAccountingProviderAttachmentSuccess, downloadAccountingProviderAttachmentFailure, fetchTransactionDetail, updateTransactionDetail, uploadMissingAttachmentSuccess, deleteTransactionAttachment, getThirdPartyIdFromTransactionId, };
498
501
  export { getTransactionListByEntity };
499
- export { getTransactionListByClass, getTransactionListUIStateByClassKey, getTransactionListByEntityForSinglePeriod, };
502
+ export { getTransactionListByClass, getTransactionListUIStateByClassKey, getTransactionListByProject, getTransactionListUIStateByProjectKey, getTransactionListByEntityForSinglePeriod, };
500
503
  export { getTransactionDetail, getTransactionDetailForTransaction, getInitialUpdatablePeriodsForTransactionRecommendations as getUpdatablePeriodsForTransactionRecommendations, };
501
504
  export { getInsights, fetchInsightsCard, updateSelectedInsightIndex, };
502
505
  export { fetchForecastList } from './view/forecastList/forecastListReducer';
@@ -545,7 +548,7 @@ export { fetchVendorsList, updateScrollYOffset, fetchVendorsFiling1099All, fetch
545
548
  export { updateW9FormUploadFetchState, updateW9FormUploadFile, getVendorUploadDetailsByVendorId, vendorFiling1099UploadDetailsSave, vendorFiling1099UploadDetailsResetFormStatus, vendorFiling1099UploadDetailsResetLocalData, initializeVendorFiling1099UploadDetailsLocalState, updateVendor1099DetailsLocalData, updateW9FormOCRDataToLocalData, };
546
549
  export { toOutsideZeniPaymentModeType, checkShowMarkAsPaidButton, };
547
550
  export { toRemiSubTabType, toRemiSubTabTypeStrict, toRemiTabType, toRemiTabTypeStrict, toReimbursementTypeCode, getRemiList, getRemiDownloadList, fetchRemiList, fetchRemiListPerTab, updateRemiListTab, updateRemiListSubTab, updateRemiDetailSaveRemiCode, updateRemiListUIState, updateRemiListSearchResult, updateBillListFilterResult, updateRemiListFilterResult, REIMBURSEMENT_FILTER_CATEGORIES, REIMBURSEMENT_FILTER_CATEGORIES_RESTRICTED, updateRemiListDownloadUIState, updateBillListDownloadUIState, updateBillsBulkActionList, removeBillFromBulkActionList, clearAllBillsFromBulkActionList, getBillsBulkReviewView, validateBillsBulkAction, approveOrRejectBillsBulkAction, cancelOrDeleteBillsBulkAction, submitDraftBillsBulkAction, autoReviewPendingApprovalBills, incrementBulkActionProcessedCount, getBillsBulkOperationProgress, clearBillPayBulkActionView, isBillConditionallyValid, getRemisBulkReviewView, getRemisBulkOperationProgress, updateRemisBulkActionList, removeRemiFromBulkActionList, clearAllRemisFromBulkActionList, reviewDraftRemisBulkAction, approveOrRejectRemisBulkAction, cancelOrDeleteRemisBulkAction, submitDraftRemisBulkAction, autoReviewPendingApprovalRemis, clearRemiBulkActionView, incrementRemiBulkActionProcessedCount, updateOutsideZeniPaymentLocalData, discardOutsideZeniPaymentLocalData, checkIfCreatorIsApprover, };
548
- export { getClassList, fetchClassList, };
551
+ export { getClassList, fetchClassList, getProjectList, fetchProjectList, };
549
552
  export { fetchBillList, fetchBillListPerTab, updateTab, updateSubTab, updateSelectedBillId, updateBillDetailSaveBillCode, fetchVendorByNameAndParseInvoice, saveBillUpdatesToLocalStore, discardBillUpdatesInLocalStore, saveBillDetail, approveOrRejectBill, updateApprovalStatusOnSuccess, deleteBill, cancelAndDeleteBill, retryOrRefundBill, getBillList, getBillDownloadList, getBillDetailView, checkApproveRejectBtnShowForBill, getBillTransactionDetailKey, fetchBillDetail, fetchEditBillDetailPage, fetchAndUpdateVendorRecommendations, fetchDuplicateBill, clearBillPayReview, getEditBillDetail, getReviewPageBillDetail, fetchBillAndInitializeLocalStore, updateShowAutofill, saveVendorSuccessOrFailure, updateBillListUIState, BILL_PAY_FILTER_CATEGORIES, updateVendorDetailLocalData, resetVendorDetailLocalData, resetVendorSaveStatus, updateContactsInVendorDetailLocalData, updateVendorTabDetailUIState, updateContactsInVendorTabDetailLocalData, updateBillUploadFetchState, updateBillListSearchResult, fetchUserDetails, verifyUser, updateVendorContact, toPaymentToOption, convertAmountToHomeCurrency, fetchVendorAndUpdateBillLocalData, markBillForRetry, updateWithdrawFromAccountId, removeBillFileFromLocalStore, replaceBillFileInLocalStore, updateShouldReplaceBillData, };
550
553
  export { hideCreatedByFilter, };
551
554
  export { fetchBillPaySetupView, fetchZeniAccountSetupView, enableSetup, getPaymentAccounts, getPlaidLinkToken, updateSelectedCompanyOfficer, updateSetupViewLocalStoreData, updateBusinessVerificationDetails, updatePaymentAccount, updatePaymentAccountLoginStatus, updatePaymentAccountStatus, establishPlaidConnection, updateMappedCashAccount, updatePrimaryFundingAccount, acceptBillPayTerms, acceptZeniAccountTerms, acceptBillPayUpdatedTerms, saveSetupViewDataInLocalStore, saveCompnayOfficerPhoneInLocalStore, saveCompnayOfficerAdditionalDocumentsInLocalStore, saveTreasuryAdditionalDocumentsInLocalStore, saveIndustryAndIncDateInLocalStore, clearSetupViewDataInLocalStore, clearBillPaySetupView, clearZeniAccountSetupView, sendOtp, resendOtp, verifyOtp, getBillPaySetupViewDetails, getPlaidAccountDetails, getZeniAccountSetupViewDetails, getBusinessVerificationDetails, getBillPayBusinessVerificationDetails, getZeniAccountBusinessVerificationDetails, getTreasuryBusinessVerificationDetails, getCommonSetupViewDetails, getTwoFactorAuthenticationView, getTwoFactorAuthenticationViewForCardUserOnboarding, getTwoFactorAuthenticationViewForChargeCardHolder, };
@@ -130,6 +130,7 @@ import people, { initialState as initialPeopleState, } from './view/people/peopl
130
130
  import profitAndLoss, { initialState as initialProfitAndLossState, } from './view/profitAndLoss/profitAndLossReducer';
131
131
  import profitAndLossClassesView, { initialState as initialProfitAndLossClassesViewState, } from './view/profitAndLossClassesView/profitAndLossClassesViewReducer';
132
132
  import profitAndLossProjectView, { initialState as initialProfitAndLossProjectViewState, } from './view/profitAndLossProjectView/profitAndLossProjectViewReducer';
133
+ import projectList, { initialState as initialProjectListState, } from './view/projectList/projectListReducer';
133
134
  import recommendation, { initialState as initialEntityRecommendationState, } from './view/recommendation/recommendationReducer';
134
135
  import referralView, { initialState as initialReferralViewState, } from './view/referralView/referralReducer';
135
136
  import reimbursementCard, { initialState as initialReimbursementCardState, } from './view/reimbursementCard/reimbursementCardReducer';
@@ -390,6 +391,7 @@ const initialViewsState = {
390
391
  profitAndLossClassesViewState: initialProfitAndLossClassesViewState,
391
392
  profitAndLossProjectViewState: initialProfitAndLossProjectViewState,
392
393
  profitAndLossState: initialProfitAndLossState,
394
+ projectListState: initialProjectListState,
393
395
  realTimeApprovalState: initialRealTimeApprovalState,
394
396
  referralViewState: initialReferralViewState,
395
397
  reimbursementCardState: initialReimbursementCardState,
@@ -625,6 +627,7 @@ const viewReducers = {
625
627
  profitAndLossClassesViewState: profitAndLossClassesView,
626
628
  profitAndLossProjectViewState: profitAndLossProjectView,
627
629
  profitAndLossState: profitAndLoss,
630
+ projectListState: projectList,
628
631
  realTimeApprovalState: realTimeApproval,
629
632
  referralViewState: referralView,
630
633
  reimbursementCardState: reimbursementCard,
@@ -4,7 +4,7 @@ import { toMonthYearPeriodId, } from '../../../../commonStateTypes/timePeriod';
4
4
  import { fetchAccountList } from '../../../accountList/accountListReducer';
5
5
  import { fetchClassList } from '../../../classList/classListReducer';
6
6
  import { fetchOwnerList } from '../../../ownerList/ownerListReducer';
7
- import { fetchTransactionCategorization, fetchTransactionCategorizationView, fetchTransferAccounts, } from '../../reducers/transactionsViewReducer';
7
+ import { fetchTransactionCategorization, fetchTransactionCategorizationView, } from '../../reducers/transactionsViewReducer';
8
8
  export const fetchTransactionCategorizationViewEpic = (actions$, state$) => actions$.pipe(filter(fetchTransactionCategorizationView.match), mergeMap((action) => {
9
9
  const { selectedTab, cacheOverride, keepExistingListItems, pageToken, period, refreshViewInBackground, searchString, resetListItems, isUncategorizedExpenseCategoryEnabled, } = action.payload;
10
10
  const updateActions = [];
@@ -21,10 +21,6 @@ export const fetchTransactionCategorizationViewEpic = (actions$, state$) => acti
21
21
  accountList.fetchState === 'Not-Started') {
22
22
  updateActions.push(fetchAccountList('accountList', true));
23
23
  }
24
- const { transferAccounts } = state$.value.expenseAutomationTransactionsViewState;
25
- if (transferAccounts.fetchState === 'Not-Started') {
26
- updateActions.push(fetchTransferAccounts());
27
- }
28
24
  const classList = state$.value.classListState;
29
25
  if (classList.hasValidState() === false &&
30
26
  classList.fetchState === 'Not-Started') {
@@ -4,7 +4,6 @@ import uniq from 'lodash/uniq';
4
4
  import { toMonthYearPeriodId, } from '../../../commonStateTypes/timePeriod';
5
5
  import { isVendorTransaction } from '../../../entity/transaction/stateTypes/vendorTransaction';
6
6
  import { MAX_SELECTION_LIMIT, checkIfAllLineItemsAreCategoryClassFilled, filterAutoTabLineItems, mergeTabSpecificLineItems, removeTransactionFromTabView, setEntityRecommendationForLineIdInLocalData, toSetAllLineItemsToCategoryClass, toTransactionDetailLocalData, } from '../helpers/transactionCategorizationLocalDataHelper';
7
- import { TRANSACTIONS_TABS, } from '../types/transactionsViewState';
8
7
  export const initialTransactionTabViewState = {
9
8
  saveStatus: {
10
9
  fetchState: 'Not-Started',
@@ -42,17 +41,11 @@ export const initialTransactionTabViewState = {
42
41
  selectedTransactionLineId: undefined,
43
42
  };
44
43
  export const initialState = {
45
- createTransferEntryStatus: 'Not-Started',
46
- lastTransferEntryReplacement: undefined,
47
44
  selectedTransactionCategorizationTab: 'review',
48
45
  transactionCategorizationView: {
49
46
  review: { ...initialTransactionTabViewState },
50
47
  autoCategorized: { ...initialTransactionTabViewState },
51
48
  },
52
- transferAccounts: {
53
- fetchState: 'Not-Started',
54
- accountIds: [],
55
- },
56
49
  };
57
50
  const expenseAutomationTransactionsView = createSlice({
58
51
  name: 'expenseAutomationTransactionsView',
@@ -799,65 +792,7 @@ const expenseAutomationTransactionsView = createSlice({
799
792
  };
800
793
  },
801
794
  },
802
- fetchTransferAccounts(draft) {
803
- draft.transferAccounts.fetchState = 'In-Progress';
804
- },
805
- updateTransferAccounts(draft, action) {
806
- draft.transferAccounts.fetchState = 'Completed';
807
- draft.transferAccounts.accountIds = action.payload.accountIds;
808
- },
809
- updateTransferAccountsFailure(draft) {
810
- draft.transferAccounts.fetchState = 'Error';
811
- },
812
- createTransferEntry: {
813
- prepare(transactionId, creditAccountIntegrationId, debitAccountIntegrationId, memo, transactionType, sourceTransactionType) {
814
- return {
815
- payload: {
816
- transactionId,
817
- creditAccountIntegrationId,
818
- debitAccountIntegrationId,
819
- memo,
820
- transactionType,
821
- sourceTransactionType,
822
- },
823
- };
824
- },
825
- reducer(draft) {
826
- draft.createTransferEntryStatus = 'In-Progress';
827
- },
828
- },
829
- createTransferEntrySuccess(draft) {
830
- draft.createTransferEntryStatus = 'Completed';
831
- },
832
- createTransferEntryFailure(draft) {
833
- draft.createTransferEntryStatus = 'Error';
834
- },
835
- resetCreateTransferEntryStatus(draft) {
836
- draft.createTransferEntryStatus = 'Not-Started';
837
- },
838
- createTransferEntryReplacedTransaction: {
839
- prepare(previousTransactionId, newTransactionId) {
840
- return { payload: { newTransactionId, previousTransactionId } };
841
- },
842
- reducer(draft, action) {
843
- draft.lastTransferEntryReplacement = action.payload;
844
- },
845
- },
846
- acknowledgeTransferEntryRouteReplacement(draft) {
847
- draft.lastTransferEntryReplacement = undefined;
848
- },
849
- removeTransactionFromAllTabs: {
850
- prepare(transactionId) {
851
- return { payload: { transactionId } };
852
- },
853
- reducer(draft, action) {
854
- const { transactionId } = action.payload;
855
- for (const tab of TRANSACTIONS_TABS) {
856
- removeTransactionFromTabView(draft.transactionCategorizationView[tab], transactionId);
857
- }
858
- },
859
- },
860
795
  },
861
796
  });
862
- export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, fetchTransferAccounts, updateTransferAccounts, updateTransferAccountsFailure, createTransferEntry, createTransferEntrySuccess, createTransferEntryFailure, resetCreateTransferEntryStatus, createTransferEntryReplacedTransaction, acknowledgeTransferEntryRouteReplacement, removeTransactionFromAllTabs, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
797
+ export const { fetchTransactionCategorization, updateTransactionCategorizationUIState, initializeTransactionCategorizationViewLocalData, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateCurrentSelectedTransactionCategorizationTab, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateStatusForTransactionNotMiscategorizedUpdateForCategorization, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, setAllItemsToCategoryClassInLocalDataForCategorization, updateTotalCountForTransactionCategorization, fetchTransactionCategorizationSuccess, resetOtherTabsFetchState, fetchTransactionCategorizationView, updateSelectedCheckboxTransactionIds, clearExpenseAutomationTransactionsViewPerTabView, clearExpenseAutomationTransactionsView, setEntityRecommendationForLineIdsForCategorization, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab, updateTransactionCategorizationUploadReceiptState, uploadTransactionCategorizationReceiptSuccess, } = expenseAutomationTransactionsView.actions;
863
798
  export default expenseAutomationTransactionsView.reducer;
@@ -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
  }
@@ -0,0 +1,38 @@
1
+ import { of } from 'rxjs';
2
+ import { catchError, filter, mergeMap, switchMap, withLatestFrom, } from 'rxjs/operators';
3
+ import { updateProjects } from '../../entity/project/projectReducer';
4
+ import { getIsAccountingProjectsEnabled } from '../../entity/tenant/tenantSelector';
5
+ import { createZeniAPIStatus, isSuccessResponse } from '../../responsePayload';
6
+ import { fetchProjectList, updateProjectList, updateProjectListFailure, } from './projectListReducer';
7
+ const buildProjectListQuery = (isIncludeDeleted) => {
8
+ const query = {
9
+ is_deleted: isIncludeDeleted,
10
+ sort_by: 'project_name',
11
+ sort_order: 'asc',
12
+ is_full: true,
13
+ };
14
+ return `?query=${encodeURIComponent(JSON.stringify(query))}`;
15
+ };
16
+ export const fetchProjectListEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchProjectList.match), withLatestFrom(state$), switchMap(([action, state]) => {
17
+ if (!getIsAccountingProjectsEnabled(state)) {
18
+ return of(updateProjectList({
19
+ status: createZeniAPIStatus('Success', ''),
20
+ data: { projects: [] },
21
+ }));
22
+ }
23
+ const { isIncludeDeleted } = action.payload;
24
+ const queryParams = buildProjectListQuery(isIncludeDeleted);
25
+ return zeniAPI
26
+ .getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/projects${queryParams}`)
27
+ .pipe(mergeMap((response) => {
28
+ if (isSuccessResponse(response)) {
29
+ return of(updateProjects(response.data?.projects ?? []), updateProjectList(response));
30
+ }
31
+ else {
32
+ return of(updateProjectListFailure(response.status));
33
+ }
34
+ }), catchError((error) => {
35
+ return of(updateProjectListFailure(createZeniAPIStatus('Unexpected Error', 'Fetch Projects REST API call errored out' +
36
+ JSON.stringify(error))));
37
+ }));
38
+ }));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,39 @@
1
+ import { createSlice } from '@reduxjs/toolkit';
2
+ export const initialState = {
3
+ fetchState: 'Not-Started',
4
+ error: undefined,
5
+ projectIds: [],
6
+ hasValidState() {
7
+ return this.fetchState == 'Completed';
8
+ },
9
+ };
10
+ const projectList = createSlice({
11
+ name: 'projectList',
12
+ initialState,
13
+ reducers: {
14
+ fetchProjectList: {
15
+ reducer(draft) {
16
+ draft.fetchState = 'In-Progress';
17
+ draft.error = undefined;
18
+ },
19
+ prepare(isIncludeDeleted) {
20
+ return { payload: { isIncludeDeleted: isIncludeDeleted ?? false } };
21
+ },
22
+ },
23
+ updateProjectList(draft, action) {
24
+ draft.projectIds =
25
+ action.payload.data?.projects.map((project) => project.zeni_project_id) ?? [];
26
+ draft.fetchState = 'Completed';
27
+ draft.error = undefined;
28
+ },
29
+ updateProjectListFailure(draft, action) {
30
+ draft.fetchState = 'Error';
31
+ draft.error = action.payload;
32
+ },
33
+ clearProjectList(draft) {
34
+ Object.assign(draft, initialState);
35
+ },
36
+ },
37
+ });
38
+ export const { fetchProjectList, updateProjectList, updateProjectListFailure, clearProjectList, } = projectList.actions;
39
+ export default projectList.reducer;
@@ -0,0 +1,9 @@
1
+ import { getProjectsByIds } from '../../entity/project/projectSelector';
2
+ export const getProjectList = (projectState, projectListState) => {
3
+ return {
4
+ projects: getProjectsByIds(projectState, projectListState.projectIds),
5
+ fetchState: projectListState.fetchState,
6
+ error: projectListState.error,
7
+ version: 0,
8
+ };
9
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -51,6 +51,7 @@ export const toTransactionUpdatesFromTransactionDetailLocalData = (transactionDe
51
51
  lineDescription: lineItem.lineDescription,
52
52
  class: lineItem.class,
53
53
  account: lineItem.account,
54
+ project: lineItem.project,
54
55
  recommendation: convertCOTRecommendationsToRegular(lineItem.recommendationsWithCOT),
55
56
  };
56
57
  if (line.type === 'journal_entry_transaction_line' ||
@@ -13,8 +13,8 @@ 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';
17
+ import { fetchProjectList } from '../../projectList/projectListReducer';
18
18
  import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState, } from '../transactionDetailReducer';
19
19
  import { getAllLinkedTransactions, getTransactionDetailKey, } from '../transactionDetailState';
20
20
  export const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(filter(fetchTransactionDetail.match), mergeMap((action) => {
@@ -35,16 +35,16 @@ export const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions
35
35
  accountList.fetchState !== 'In-Progress') {
36
36
  transactionActions.push(fetchAccountList('accountList'));
37
37
  }
38
- const { transferAccounts } = state$.value.expenseAutomationTransactionsViewState;
39
- if (transferAccounts.fetchState !== 'In-Progress' &&
40
- transferAccounts.fetchState !== 'Completed') {
41
- transactionActions.push(fetchTransferAccounts());
42
- }
43
38
  const classList = state$.value.classListState;
44
39
  if (classList.hasValidState() === false &&
45
40
  classList.fetchState !== 'In-Progress') {
46
41
  transactionActions.push(fetchClassList());
47
42
  }
43
+ const projectList = state$.value.projectListState;
44
+ if (projectList.hasValidState() === false &&
45
+ projectList.fetchState !== 'In-Progress') {
46
+ transactionActions.push(fetchProjectList());
47
+ }
48
48
  transactionActions.push(updateTransactionDetailFetchState(transactionId, 'In-Progress'));
49
49
  const query = { transaction_type: transactionId.type };
50
50
  const getTransactionDetail$ = zeniAPI
@@ -181,6 +181,9 @@ const toTransactionUpdatePayload = (updates, detail, cotTransactionTracking, ven
181
181
  if (lineUpdates.account != null) {
182
182
  lineTobeUpdated.account = lineUpdates.account;
183
183
  }
184
+ if (lineUpdates.project != null) {
185
+ lineTobeUpdated.project = lineUpdates.project;
186
+ }
184
187
  if (lineUpdates.customer != null) {
185
188
  lineTobeUpdated.customer = lineUpdates.customer;
186
189
  }
@@ -1,7 +1,6 @@
1
1
  import recordGet from 'lodash/get';
2
2
  import { reduceFetchState } from '../../commonStateTypes/reduceFetchState';
3
- import { getAccountBase, getAccountBaseForTransferAccounts, } from '../../entity/account/accountSelector';
4
- import { getIsAccountingClassesEnabled } from '../../entity/tenant/tenantSelector';
3
+ import { getIsAccountingClassesEnabled, getIsAccountingProjectsEnabled, } from '../../entity/tenant/tenantSelector';
5
4
  import { toTransactionTypeStrict } from '../../entity/transaction/stateTypes/transactionType';
6
5
  import { getTransactionWithCOT } from '../../entity/transaction/transactionHelper';
7
6
  import { getSupportedTransactionById } from '../../entity/transaction/transactionSelector';
@@ -9,9 +8,10 @@ import { getVendorsByVendorIds } from '../../entity/vendor/vendorSelector';
9
8
  import { dateNow } from '../../zeniDayJS';
10
9
  import { getAccountList, getNestedAccountListHierarchy, } from '../accountList/accountListSelector';
11
10
  import { getClassList, getNestedClassListHierarchy, } from '../classList/classListSelector';
11
+ import { getProjectList, } from '../projectList/projectListSelector';
12
12
  import { getAllLinkedTransactions, getTransactionDetailKey, initialSupportedTransactionDetail, } from './transactionDetailState';
13
13
  export const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
14
- const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, } = state;
14
+ const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, projectState, projectListState, } = state;
15
15
  const detailKey = getTransactionDetailKey(transactionId);
16
16
  const transactionDetail = recordGet(transactionDetailState.transactionDetailById, detailKey);
17
17
  let fetchState = {
@@ -57,20 +57,21 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
57
57
  const classList = isAccountingClassesEnabled
58
58
  ? getClassList(classState, classListState)
59
59
  : { classes: [], nestedClassHierarchy: [], fetchState: 'Completed', error: undefined, version: 0 };
60
+ const isAccountingProjectsEnabled = getIsAccountingProjectsEnabled(state);
61
+ const projectList = isAccountingProjectsEnabled
62
+ ? getProjectList(projectState, projectListState)
63
+ : {
64
+ projects: [],
65
+ fetchState: 'Completed',
66
+ error: undefined,
67
+ version: 0,
68
+ };
60
69
  const accountsHierarchyList = getNestedAccountListHierarchy(accountListState, 'accountList');
61
70
  const classHierarchyList = isAccountingClassesEnabled
62
71
  ? getNestedClassListHierarchy(classListState)
63
72
  : [];
64
73
  const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
65
74
  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
75
  return {
75
76
  reportId: 'transaction_detail',
76
77
  reportTitle: 'Transaction Detail',
@@ -87,8 +88,8 @@ export const getTransactionDetail = (state, transactionId, fetchLinkedTransactio
87
88
  accountsHierarchyList,
88
89
  classList: classList,
89
90
  isAccountingClassesEnabled,
90
- createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
91
- transferAccounts: transferAccountsList,
91
+ isAccountingProjectsEnabled,
92
+ projectList,
92
93
  isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
93
94
  transactionDetailLocalData: transactionDetail?.transactionDetailLocalData ??
94
95
  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
+ }