@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.
- package/lib/commonStateTypes/recommendationBase.d.ts +1 -1
- package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
- package/lib/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
- package/lib/entity/account/accountSelector.d.ts +0 -5
- package/lib/entity/account/accountSelector.js +1 -8
- package/lib/entity/account/accountState.d.ts +1 -1
- package/lib/entity/accountGroup/accountGroupState.d.ts +1 -1
- package/lib/entity/class/classReducer.d.ts +4 -4
- package/lib/entity/class/classState.d.ts +1 -1
- package/lib/entity/forecast/forecastState.d.ts +1 -1
- package/lib/entity/project/projectPayload.d.ts +7 -0
- package/lib/entity/project/projectPayload.js +15 -1
- package/lib/entity/sectionAccountsView/sectionAccountsView.d.ts +1 -1
- package/lib/entity/sectionClassesViewV2/sectionClassesView.d.ts +1 -1
- package/lib/entity/sectionClassesViewV2/sectionClassesViewReducer.d.ts +2 -2
- package/lib/entity/sectionProjectView/sectionProjectView.d.ts +1 -1
- package/lib/entity/sectionProjectView/sectionProjectViewReducer.d.ts +2 -2
- package/lib/entity/snackbar/snackbarTypes.d.ts +1 -1
- package/lib/entity/snackbar/snackbarTypes.js +0 -2
- package/lib/entity/tenant/clearAllEpic.d.ts +2 -1
- package/lib/entity/tenant/clearAllEpic.js +2 -0
- package/lib/entity/transaction/payloadTypes/transactionLinePayload.d.ts +2 -0
- package/lib/entity/transaction/payloadTypes/transactionLinePayload.js +9 -0
- package/lib/entity/transaction/payloadTypes/transactionPayload.d.ts +0 -6
- package/lib/entity/transaction/payloadTypes/transactionPayload.js +0 -10
- package/lib/entity/transaction/stateTypes/transaction.d.ts +0 -3
- package/lib/entity/transaction/stateTypes/transactionLine.d.ts +2 -0
- package/lib/epic.d.ts +4 -3
- package/lib/epic.js +4 -3
- package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
- package/lib/esm/entity/account/accountSelector.js +0 -6
- package/lib/esm/entity/project/projectPayload.js +12 -0
- package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
- package/lib/esm/entity/tenant/clearAllEpic.js +2 -0
- package/lib/esm/entity/transaction/payloadTypes/transactionLinePayload.js +9 -0
- package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +0 -10
- package/lib/esm/epic.js +4 -3
- package/lib/esm/index.js +11 -8
- package/lib/esm/reducer.js +3 -0
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +1 -5
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +1 -66
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +0 -19
- package/lib/esm/view/projectList/fetchProjectListEpic.js +38 -0
- package/lib/esm/view/projectList/projectListPayload.js +1 -0
- package/lib/esm/view/projectList/projectListReducer.js +39 -0
- package/lib/esm/view/projectList/projectListSelector.js +9 -0
- package/lib/esm/view/projectList/projectListState.js +1 -0
- package/lib/esm/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
- package/lib/esm/view/transactionDetail/epics/transactionDetailEpic.js +6 -6
- package/lib/esm/view/transactionDetail/epics/updateTransactionDetailEpic.js +3 -0
- package/lib/esm/view/transactionDetail/transactionDetailSelector.js +14 -13
- package/lib/esm/view/transactionList/fetchTransactionListByProjectEpic.js +45 -0
- package/lib/esm/view/transactionList/parallelFetchProjectTransactionListEpic.js +32 -0
- package/lib/esm/view/transactionList/transactionListByProjectSelector.js +58 -0
- package/lib/esm/view/transactionList/transactionListReducer.js +83 -2
- package/lib/esm/view/transactionList/transactionListState.js +10 -0
- package/lib/index.d.ts +11 -8
- package/lib/index.js +43 -42
- package/lib/reducer.d.ts +3 -0
- package/lib/reducer.js +3 -0
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/auditReportView/auditReportViewState.d.ts +1 -1
- package/lib/view/billPayCard/billPayCardSelector.d.ts +1 -1
- package/lib/view/cardBalance/cardBalanceSelector.d.ts +1 -1
- package/lib/view/cashBalance/cashBalanceSelector.d.ts +1 -1
- package/lib/view/cashInCashOut/cashInCashOutSelector.d.ts +1 -1
- package/lib/view/cashPosition/cashPositionSelector.d.ts +1 -1
- package/lib/view/dashboard/dashboardReducer.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.d.ts +2 -2
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransactionCategorizationViewEpic.js +0 -4
- package/lib/view/expenseAutomationView/helpers/transactionCategorizationLocalDataHelper.d.ts +1 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +1 -15
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +2 -67
- package/lib/view/expenseAutomationView/selectorTypes/transactionsViewSelectorTypes.d.ts +1 -3
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +0 -2
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +0 -20
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +1 -13
- package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
- package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
- package/lib/view/projectList/fetchProjectListEpic.d.ts +8 -0
- package/lib/view/projectList/fetchProjectListEpic.js +42 -0
- package/lib/view/projectList/projectListPayload.d.ts +7 -0
- package/lib/view/projectList/projectListPayload.js +2 -0
- package/lib/view/projectList/projectListReducer.d.ts +9 -0
- package/lib/view/projectList/projectListReducer.js +43 -0
- package/lib/view/projectList/projectListSelector.d.ts +8 -0
- package/lib/view/projectList/projectListSelector.js +13 -0
- package/lib/view/projectList/projectListState.d.ts +4 -0
- package/lib/view/projectList/projectListState.js +2 -0
- package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
- package/lib/view/reportsResync/reportsResyncReducer.d.ts +2 -2
- package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
- package/lib/view/topEx/topExSelector.d.ts +1 -1
- package/lib/view/transactionDetail/epics/saveTransactionHelper.js +1 -0
- package/lib/view/transactionDetail/epics/transactionDetailEpic.d.ts +2 -2
- package/lib/view/transactionDetail/epics/transactionDetailEpic.js +6 -6
- package/lib/view/transactionDetail/epics/updateTransactionDetailEpic.js +3 -0
- package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
- package/lib/view/transactionDetail/transactionDetailSelector.d.ts +4 -4
- package/lib/view/transactionDetail/transactionDetailSelector.js +13 -12
- package/lib/view/transactionDetail/transactionDetailState.d.ts +2 -0
- package/lib/view/transactionDetail/transactionDetailTypes.d.ts +2 -0
- package/lib/view/transactionList/fetchTransactionListByProjectEpic.d.ts +8 -0
- package/lib/view/transactionList/fetchTransactionListByProjectEpic.js +52 -0
- package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.d.ts +6 -0
- package/lib/view/transactionList/parallelFetchProjectTransactionListEpic.js +36 -0
- package/lib/view/transactionList/transactionListByProjectSelector.d.ts +22 -0
- package/lib/view/transactionList/transactionListByProjectSelector.js +66 -0
- package/lib/view/transactionList/transactionListPayload.d.ts +15 -0
- package/lib/view/transactionList/transactionListReducer.d.ts +25 -2
- package/lib/view/transactionList/transactionListReducer.js +83 -2
- package/lib/view/transactionList/transactionListState.d.ts +15 -0
- package/lib/view/transactionList/transactionListState.js +13 -1
- package/package.json +1 -1
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -81
- package/lib/esm/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -25
- package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.d.ts +0 -9
- package/lib/view/expenseAutomationView/epics/transactionCategorization/createTransferEntryEpic.js +0 -85
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.d.ts +0 -8
- package/lib/view/expenseAutomationView/epics/transactionCategorization/fetchTransferAccountsEpic.js +0 -29
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 {
|
|
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
|
|
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,
|
|
443
|
-
export { fetchTransactionCategorization, fetchTransactionCategorizationView, updateTransactionCategorizationUIState, updateSelectedCheckboxTransactionIds, setEntityRecommendationForLineIdsForCategorization, initializeTransactionCategorizationViewLocalData, setAllItemsToCategoryClassInLocalDataForCategorization, saveTransactionCategorizationLocalData, fetchTransactionCategorizationFailure, saveTransactionCategorization, updateTransactionCategorization, updateTransactionCategorizationSaveStatus, markTransactionAsNotMiscategorized, updateSelectedVendorForTransaction, updateSelectedCustomerForTransaction, updateSelectedTransactionId, syncTransactionCategorizationFromDetailSave, backgroundRefetchReviewTab,
|
|
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, };
|
package/lib/esm/reducer.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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 {
|
|
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,
|
|
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
|
-
|
|
91
|
-
|
|
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
|
+
}
|