@zeniai/client-epic-state 5.0.55-betaAR1 → 5.0.55-betaAR3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/entity/account/accountSelector.d.ts +20 -1
- package/lib/entity/account/accountSelector.js +35 -1
- package/lib/entity/account/accountState.d.ts +5 -0
- package/lib/entity/account/accountState.js +11 -4
- package/lib/entity/approvalRule/approvalRulePayload.d.ts +5 -27
- package/lib/entity/approvalRule/approvalRulePayload.js +10 -131
- package/lib/entity/approvalRule/approvalRuleSelector.d.ts +1 -25
- package/lib/entity/approvalRule/approvalRuleSelector.js +0 -40
- package/lib/entity/approvalRule/approvalRuleState.d.ts +7 -48
- package/lib/entity/class/classSelector.d.ts +5 -0
- package/lib/entity/class/classSelector.js +8 -0
- package/lib/esm/entity/account/accountSelector.js +33 -1
- package/lib/esm/entity/account/accountState.js +7 -1
- package/lib/esm/entity/approvalRule/approvalRulePayload.js +10 -131
- package/lib/esm/entity/approvalRule/approvalRuleSelector.js +0 -35
- package/lib/esm/entity/class/classSelector.js +7 -0
- package/lib/esm/index.js +5 -5
- package/lib/esm/view/expenseAutomationView/reducers/transactionsViewReducer.js +11 -1
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +57 -8
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +7 -5
- package/lib/esm/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +16 -46
- package/lib/esm/view/spendManagement/billPay/editBillView/editBillViewSelector.js +2 -7
- package/lib/esm/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +7 -5
- package/lib/esm/view/spendManagement/spendManagementFilterHelpers.js +185 -15
- package/lib/index.d.ts +6 -7
- package/lib/index.js +35 -37
- package/lib/tsconfig.typecheck.tsbuildinfo +1 -1
- package/lib/view/companyTaskManagerView/companyTaskManagerViewReducer.d.ts +2 -2
- package/lib/view/companyView/types/cockpitTypes.d.ts +1 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.d.ts +5 -1
- package/lib/view/expenseAutomationView/reducers/transactionsViewReducer.js +12 -2
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.d.ts +4 -1
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +59 -8
- package/lib/view/expenseAutomationView/types/transactionsViewState.d.ts +2 -0
- package/lib/view/people/peopleTypes.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/epic/initializeBillPaySetupApproverViewUpdateDataEpic.js +6 -4
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.d.ts +1 -1
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonPayload.js +16 -46
- package/lib/view/spendManagement/billPay/billPaySetupApproverView/types/commonState.d.ts +3 -15
- package/lib/view/spendManagement/billPay/editBillView/editBillViewSelector.js +2 -7
- package/lib/view/spendManagement/chargeCards/chargeCardList/chargeCardList.d.ts +1 -1
- package/lib/view/spendManagement/reimbursement/remiSetupApproverView/epic/initializeRemiSetupApproverViewUpdateDataEpic.js +6 -4
- package/lib/view/spendManagement/spendManagementFilterHelpers.d.ts +45 -4
- package/lib/view/spendManagement/spendManagementFilterHelpers.js +186 -16
- package/lib/view/taskManager/taskListView/taskList.d.ts +3 -3
- package/package.json +1 -1
|
@@ -4,10 +4,10 @@ import { CompanyTaskManagerViewPayload } from './companyTaskManagerViewPayload';
|
|
|
4
4
|
import { CompanyTaskManagerViewState, CompanyTaskManagerViewUIState, TaskManagerMetrics } from './companyTaskManagerViewState';
|
|
5
5
|
export declare const initialUIState: CompanyTaskManagerViewUIState;
|
|
6
6
|
export declare const initialState: CompanyTaskManagerViewState;
|
|
7
|
-
export declare const fetchCompanyTaskManagerView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[pageToken: PageToken, sortKey: "status" | "name" | "
|
|
7
|
+
export declare const fetchCompanyTaskManagerView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[pageToken: PageToken, sortKey: "status" | "name" | "tags" | "createdBy" | "dueDate" | "priority" | "assignee" | "taskName", sortOrder: "ascending" | "descending", keepExistingListItems?: any, searchString?: string | undefined], {
|
|
8
8
|
pageToken: PageToken;
|
|
9
9
|
searchString: string | undefined;
|
|
10
|
-
sortKey: "status" | "name" | "
|
|
10
|
+
sortKey: "status" | "name" | "tags" | "createdBy" | "dueDate" | "priority" | "assignee" | "taskName";
|
|
11
11
|
sortOrder: "ascending" | "descending";
|
|
12
12
|
keepExistingListItems: any;
|
|
13
13
|
}, "companyTaskManagerView/fetchCompanyTaskManagerView", never, never>, updateCompanyTaskManagerViewOnSuccess: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
@@ -7,7 +7,7 @@ export declare const toPortfolioSortKeyType: (v: string) => "companyName" | "exp
|
|
|
7
7
|
export declare const toManagementSortKeyType: (v: string) => "status" | "bookCloseDate" | "companyName" | "group" | "controller" | "plans" | "monthlyRecurringRevenue" | "notes" | "taxStatus" | "preparer" | "reviewer" | "annualRecurringRevenue" | "task" | "customerSuccessManager" | "apAnalyst" | "reportSent" | "taxLead" | "satisfaction";
|
|
8
8
|
export declare const toOnboardingSortKeyType: (v: string) => "companyName" | "notes" | "businessVerified" | "identityVerified" | "bankAccountLinked" | "customerCreated" | "groupCreated" | "qboLinked" | "enroller" | "invite" | "latestCreated";
|
|
9
9
|
export declare const toHealthSortKeyType: (v: string) => "companyName" | "group" | "controller" | "monthlyRecurringRevenue" | "runway" | "companyEngagementMetricsUpdatedAt" | "customerSatisfactionScore" | "externalProductServiceExposure" | "netPromoterScore" | "customerSuccessManager" | "issues" | "productVerticals" | "churnProbability" | "lastReportSent" | "subscriptionDate" | "renewalDate" | "dashboardLastSeen" | "lastEngagement";
|
|
10
|
-
export declare const toTaskManagerSortKeyType: (v: string) => "status" | "name" | "
|
|
10
|
+
export declare const toTaskManagerSortKeyType: (v: string) => "status" | "name" | "tags" | "createdBy" | "dueDate" | "priority" | "assignee" | "taskName";
|
|
11
11
|
export type PortfolioViewSortKey = ReturnType<typeof toPortfolioSortKeyType>;
|
|
12
12
|
export type ManagementViewSortKey = ReturnType<typeof toManagementSortKeyType>;
|
|
13
13
|
export type OnboardingViewSortKey = ReturnType<typeof toOnboardingSortKeyType>;
|
|
@@ -14,6 +14,7 @@ import { ZeniAPIStatus } from '../../../responsePayload';
|
|
|
14
14
|
import { UncategorizedAccounts } from '../../accountList/accountListSelector';
|
|
15
15
|
import { UpdateTransactionCategorizationResponsePayload } from '../payload/transactionCategorizationPayload';
|
|
16
16
|
import { SupportedTransactionCategorization, TransactionSaveUpdates, TransactionsTab, TransactionsTabViewState, TransactionsViewState, TransactionsViewUIState } from '../types/transactionsViewState';
|
|
17
|
+
import { TransactionFilters } from '../../spendManagement/spendManagementFilterHelpers';
|
|
17
18
|
export declare const initialTransactionTabViewState: TransactionsTabViewState;
|
|
18
19
|
export declare const initialState: TransactionsViewState;
|
|
19
20
|
export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", period: TimePeriod, cacheOverride?: any, keepExistingListItems?: any, searchString?: string | undefined, pageToken?: PageToken | undefined, refreshViewInBackground?: any, resetListItems?: boolean | undefined, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
|
|
@@ -29,7 +30,10 @@ export declare const fetchTransactionCategorization: import("@reduxjs/toolkit").
|
|
|
29
30
|
}, "expenseAutomationTransactionsView/fetchTransactionCategorization", never, never>, updateTransactionCategorizationUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
30
31
|
selectedTab: TransactionsTab;
|
|
31
32
|
uiState: Partial<TransactionsViewUIState>;
|
|
32
|
-
}, "expenseAutomationTransactionsView/updateTransactionCategorizationUIState">,
|
|
33
|
+
}, "expenseAutomationTransactionsView/updateTransactionCategorizationUIState">, updateTransactionFilters: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
34
|
+
filters: TransactionFilters;
|
|
35
|
+
selectedTab: TransactionsTab;
|
|
36
|
+
}, "expenseAutomationTransactionsView/updateTransactionFilters">, initializeTransactionCategorizationViewLocalData: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[selectedTab: "review" | "autoCategorized", transactionIds: string[], selectedPeriod: MonthYearPeriod, keepExistingListItems: any, pageToken: PageToken, totalCount: number, lineItemsByTransactionIds: Record<string, string[]>, refreshViewInBackground?: any, isUncategorizedExpenseCategoryEnabled?: boolean | undefined], {
|
|
33
37
|
selectedTab: "review" | "autoCategorized";
|
|
34
38
|
transactionIds: string[];
|
|
35
39
|
selectedPeriod: MonthYearPeriod;
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
var _a;
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.uploadTransactionCategorizationReceiptSuccess = exports.updateTransactionCategorizationUploadReceiptState = exports.backgroundRefetchReviewTab = exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
|
|
7
|
+
exports.uploadTransactionCategorizationReceiptSuccess = exports.updateTransactionCategorizationUploadReceiptState = exports.backgroundRefetchReviewTab = exports.syncTransactionCategorizationFromDetailSave = exports.updateSelectedTransactionId = exports.setEntityRecommendationForLineIdsForCategorization = exports.clearExpenseAutomationTransactionsView = exports.clearExpenseAutomationTransactionsViewPerTabView = exports.updateSelectedCheckboxTransactionIds = exports.fetchTransactionCategorizationView = exports.resetOtherTabsFetchState = exports.fetchTransactionCategorizationSuccess = exports.updateTotalCountForTransactionCategorization = exports.setAllItemsToCategoryClassInLocalDataForCategorization = exports.updateSelectedCustomerForTransaction = exports.updateSelectedVendorForTransaction = exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = exports.markTransactionAsNotMiscategorized = exports.updateTransactionCategorizationSaveStatus = exports.updateCurrentSelectedTransactionCategorizationTab = exports.updateTransactionCategorization = exports.saveTransactionCategorization = exports.fetchTransactionCategorizationFailure = exports.saveTransactionCategorizationLocalData = exports.initializeTransactionCategorizationViewLocalData = exports.updateTransactionFilters = exports.updateTransactionCategorizationUIState = exports.fetchTransactionCategorization = exports.initialState = exports.initialTransactionTabViewState = void 0;
|
|
8
8
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
9
9
|
const get_1 = __importDefault(require("lodash/get"));
|
|
10
10
|
const uniq_1 = __importDefault(require("lodash/uniq"));
|
|
@@ -34,6 +34,10 @@ exports.initialTransactionTabViewState = {
|
|
|
34
34
|
totalCount: {},
|
|
35
35
|
limit: 10,
|
|
36
36
|
},
|
|
37
|
+
filters: {
|
|
38
|
+
categoryCombinationOperator: 'AND',
|
|
39
|
+
categories: [],
|
|
40
|
+
},
|
|
37
41
|
fetchState: 'Not-Started',
|
|
38
42
|
error: undefined,
|
|
39
43
|
hasValidState() {
|
|
@@ -243,6 +247,12 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
|
|
|
243
247
|
uiState.totalCount;
|
|
244
248
|
}
|
|
245
249
|
},
|
|
250
|
+
updateTransactionFilters(draft, action) {
|
|
251
|
+
const { selectedTab, filters } = action.payload;
|
|
252
|
+
if (filters != null) {
|
|
253
|
+
draft.transactionCategorizationView[selectedTab].filters = filters;
|
|
254
|
+
}
|
|
255
|
+
},
|
|
246
256
|
saveTransactionCategorization: {
|
|
247
257
|
prepare(selectedTab, transactionIds, cotTrackingByTransactionId, isUncategorizedExpenseCategoryEnabled) {
|
|
248
258
|
return {
|
|
@@ -810,5 +820,5 @@ const expenseAutomationTransactionsView = (0, toolkit_1.createSlice)({
|
|
|
810
820
|
},
|
|
811
821
|
},
|
|
812
822
|
});
|
|
813
|
-
_a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId, exports.syncTransactionCategorizationFromDetailSave = _a.syncTransactionCategorizationFromDetailSave, exports.backgroundRefetchReviewTab = _a.backgroundRefetchReviewTab, exports.updateTransactionCategorizationUploadReceiptState = _a.updateTransactionCategorizationUploadReceiptState, exports.uploadTransactionCategorizationReceiptSuccess = _a.uploadTransactionCategorizationReceiptSuccess;
|
|
823
|
+
_a = expenseAutomationTransactionsView.actions, exports.fetchTransactionCategorization = _a.fetchTransactionCategorization, exports.updateTransactionCategorizationUIState = _a.updateTransactionCategorizationUIState, exports.updateTransactionFilters = _a.updateTransactionFilters, exports.initializeTransactionCategorizationViewLocalData = _a.initializeTransactionCategorizationViewLocalData, exports.saveTransactionCategorizationLocalData = _a.saveTransactionCategorizationLocalData, exports.fetchTransactionCategorizationFailure = _a.fetchTransactionCategorizationFailure, exports.saveTransactionCategorization = _a.saveTransactionCategorization, exports.updateTransactionCategorization = _a.updateTransactionCategorization, exports.updateCurrentSelectedTransactionCategorizationTab = _a.updateCurrentSelectedTransactionCategorizationTab, exports.updateTransactionCategorizationSaveStatus = _a.updateTransactionCategorizationSaveStatus, exports.markTransactionAsNotMiscategorized = _a.markTransactionAsNotMiscategorized, exports.updateStatusForTransactionNotMiscategorizedUpdateForCategorization = _a.updateStatusForTransactionNotMiscategorizedUpdateForCategorization, exports.updateSelectedVendorForTransaction = _a.updateSelectedVendorForTransaction, exports.updateSelectedCustomerForTransaction = _a.updateSelectedCustomerForTransaction, exports.setAllItemsToCategoryClassInLocalDataForCategorization = _a.setAllItemsToCategoryClassInLocalDataForCategorization, exports.updateTotalCountForTransactionCategorization = _a.updateTotalCountForTransactionCategorization, exports.fetchTransactionCategorizationSuccess = _a.fetchTransactionCategorizationSuccess, exports.resetOtherTabsFetchState = _a.resetOtherTabsFetchState, exports.fetchTransactionCategorizationView = _a.fetchTransactionCategorizationView, exports.updateSelectedCheckboxTransactionIds = _a.updateSelectedCheckboxTransactionIds, exports.clearExpenseAutomationTransactionsViewPerTabView = _a.clearExpenseAutomationTransactionsViewPerTabView, exports.clearExpenseAutomationTransactionsView = _a.clearExpenseAutomationTransactionsView, exports.setEntityRecommendationForLineIdsForCategorization = _a.setEntityRecommendationForLineIdsForCategorization, exports.updateSelectedTransactionId = _a.updateSelectedTransactionId, exports.syncTransactionCategorizationFromDetailSave = _a.syncTransactionCategorizationFromDetailSave, exports.backgroundRefetchReviewTab = _a.backgroundRefetchReviewTab, exports.updateTransactionCategorizationUploadReceiptState = _a.updateTransactionCategorizationUploadReceiptState, exports.uploadTransactionCategorizationReceiptSuccess = _a.uploadTransactionCategorizationReceiptSuccess;
|
|
814
824
|
exports.default = expenseAutomationTransactionsView.reducer;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { TransactionWithCOT } from '../../../entity/transaction/stateTypes/transaction';
|
|
1
2
|
import { RootState } from '../../../reducer';
|
|
2
|
-
import {
|
|
3
|
+
import { TransactionView } from '../../spendManagement/spendManagementFilterHelpers';
|
|
4
|
+
import { ExpenseAutomationTransactionViewSelector, TransactionReviewLocalDataSelectorView } from '../selectorTypes/transactionsViewSelectorTypes';
|
|
5
|
+
export declare const toTransactionView: (transaction: TransactionWithCOT, transactionLocalData?: TransactionReviewLocalDataSelectorView) => TransactionView;
|
|
3
6
|
export declare function getExpenseAutomationTransactionView(state: RootState): ExpenseAutomationTransactionViewSelector;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.toTransactionView = void 0;
|
|
6
7
|
exports.getExpenseAutomationTransactionView = getExpenseAutomationTransactionView;
|
|
7
8
|
const omit_1 = __importDefault(require("lodash/omit"));
|
|
8
9
|
const reduceFetchState_1 = require("../../../commonStateTypes/reduceFetchState");
|
|
@@ -10,14 +11,34 @@ const timePeriod_1 = require("../../../commonStateTypes/timePeriod");
|
|
|
10
11
|
const tenantSelector_1 = require("../../../entity/tenant/tenantSelector");
|
|
11
12
|
const transactionHelper_1 = require("../../../entity/transaction/transactionHelper");
|
|
12
13
|
const transactionSelector_1 = require("../../../entity/transaction/transactionSelector");
|
|
14
|
+
const spendManagementFilterHelpers_1 = require("../../spendManagement/spendManagementFilterHelpers");
|
|
13
15
|
const accountListSelector_1 = require("../../accountList/accountListSelector");
|
|
14
16
|
const classListSelector_1 = require("../../classList/classListSelector");
|
|
15
17
|
const projectListSelector_1 = require("../../projectList/projectListSelector");
|
|
16
18
|
const expenseAutomationViewSelectorTypes_1 = require("../selectorTypes/expenseAutomationViewSelectorTypes");
|
|
19
|
+
const toTransactionView = (transaction, transactionLocalData) => {
|
|
20
|
+
return {
|
|
21
|
+
id: transaction.id,
|
|
22
|
+
date: transaction.date,
|
|
23
|
+
amount: transaction.amount,
|
|
24
|
+
vendorName: transaction.vendorName,
|
|
25
|
+
customerName: transaction.customerName,
|
|
26
|
+
vendorId: transaction.vendorId,
|
|
27
|
+
customerId: transaction.customerId,
|
|
28
|
+
description: transaction.description,
|
|
29
|
+
memo: transaction.memo,
|
|
30
|
+
type: transaction.type,
|
|
31
|
+
typeName: transaction.typeName,
|
|
32
|
+
createTime: transaction.createTime,
|
|
33
|
+
transaction: transaction,
|
|
34
|
+
transactionLocalData,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
exports.toTransactionView = toTransactionView;
|
|
17
38
|
function getExpenseAutomationTransactionView(state) {
|
|
18
39
|
const { accountState, classState, classListState, accountListState, expenseAutomationTransactionsViewState, expenseAutomationViewState, projectState, projectListState, transactionState, monthEndCloseChecksState, monthEndCloseChecksViewState, } = state;
|
|
19
40
|
const { selectedTransactionCategorizationTab } = expenseAutomationTransactionsViewState;
|
|
20
|
-
const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
|
|
41
|
+
const { uiState, refreshStatus, saveStatus, markAsNotMiscategorizedStatus, transactionIdsBySelectedPeriod, transactionReviewLocalDataById, selectedCheckBoxTransactionIds, transactionIdsWithUnsavedData, uploadReceiptStatusById, selectedTransactionId, selectedTransactionLineId, filters, } = expenseAutomationTransactionsViewState.transactionCategorizationView[selectedTransactionCategorizationTab];
|
|
21
42
|
const uncategorizedIncomeExpense = (0, accountListSelector_1.getUncategorizedAccounts)(accountState, accountListState, 'accountList');
|
|
22
43
|
const accountList = (0, accountListSelector_1.getAccountList)(accountState, accountListState, 'accountList');
|
|
23
44
|
const classList = (0, classListSelector_1.getClassList)(classState, classListState);
|
|
@@ -36,10 +57,42 @@ function getExpenseAutomationTransactionView(state) {
|
|
|
36
57
|
? transactionIdsBySelectedPeriod[monthYearPeriodId]
|
|
37
58
|
: null;
|
|
38
59
|
const transactionIds = transactionIdsForSelectedPeriod ?? [];
|
|
39
|
-
const
|
|
40
|
-
|
|
60
|
+
const transactions = (0, transactionSelector_1.getSupportedTransactionsByIds)(transactionState, transactionIds);
|
|
61
|
+
const transactionsWithCOT = transactions.map((transaction) => (0, transactionHelper_1.getTransactionWithCOT)(transaction));
|
|
62
|
+
const transactionLocalDataMap = new Map();
|
|
63
|
+
transactionIds.forEach((transactionId) => {
|
|
41
64
|
const transactionData = transactionReviewLocalDataById[transactionId];
|
|
42
65
|
if (transactionData != null) {
|
|
66
|
+
transactionLocalDataMap.set(transactionId, {
|
|
67
|
+
transactionId,
|
|
68
|
+
transactionReviewLocalData: transactionData.transactionReviewLocalData,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// Step 2: Convert to TransactionView and apply advanced filters
|
|
73
|
+
const transactionViews = transactionsWithCOT.map((transaction) => {
|
|
74
|
+
const localData = transactionLocalDataMap.get(transaction.id);
|
|
75
|
+
return (0, exports.toTransactionView)(transaction, localData);
|
|
76
|
+
});
|
|
77
|
+
// Apply advanced filters if they exist
|
|
78
|
+
const filteredTransactionViews = (0, spendManagementFilterHelpers_1.applyAdvancedFiltersOnList)('transaction_categorization', transactionViews, filters);
|
|
79
|
+
// Convert back to TransactionWithCOT for return
|
|
80
|
+
const filteredTransactionsWithCOT = filteredTransactionViews.map((view) => view.transaction);
|
|
81
|
+
// Get transactionLocalData for filtered transactions
|
|
82
|
+
// Also include transactionLocalData for transactions that don't exist in transactionState
|
|
83
|
+
// but have local data (to match original behavior)
|
|
84
|
+
const filteredTransactionIds = new Set(filteredTransactionViews.map((view) => view.id));
|
|
85
|
+
const filteredTransactionLocalData = transactionIds
|
|
86
|
+
.map((transactionId) => {
|
|
87
|
+
const transactionData = transactionReviewLocalDataById[transactionId];
|
|
88
|
+
if (transactionData == null) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
// Include if transaction is in filtered results, or if transaction doesn't exist in state
|
|
92
|
+
// (to maintain backward compatibility with tests)
|
|
93
|
+
const transactionExists = transactions.some((t) => t.id === transactionId);
|
|
94
|
+
if (filteredTransactionIds.has(transactionId) ||
|
|
95
|
+
!transactionExists) {
|
|
43
96
|
return {
|
|
44
97
|
transactionId,
|
|
45
98
|
transactionReviewLocalData: transactionData.transactionReviewLocalData,
|
|
@@ -47,9 +100,7 @@ function getExpenseAutomationTransactionView(state) {
|
|
|
47
100
|
}
|
|
48
101
|
return null;
|
|
49
102
|
})
|
|
50
|
-
.filter((
|
|
51
|
-
const transactions = (0, transactionSelector_1.getSupportedTransactionsByIds)(transactionState, transactionIds);
|
|
52
|
-
const transactionsWithCOT = transactions.map((transaction) => (0, transactionHelper_1.getTransactionWithCOT)(transaction));
|
|
103
|
+
.filter((data) => data != null);
|
|
53
104
|
const monthEndFetchState = monthYearPeriodId != null
|
|
54
105
|
? (monthEndCloseChecksViewState.monthEndCloseChecksViewByTenantId[currentTenant.tenantId]?.[monthYearPeriodId] ?? { fetchState: 'Not-Started', error: undefined })
|
|
55
106
|
: { fetchState: 'Not-Started', error: undefined };
|
|
@@ -96,7 +147,7 @@ function getExpenseAutomationTransactionView(state) {
|
|
|
96
147
|
version: 0,
|
|
97
148
|
fetchState: fetchStatus.fetchState,
|
|
98
149
|
error: fetchStatus.error,
|
|
99
|
-
transactions:
|
|
150
|
+
transactions: filteredTransactionsWithCOT,
|
|
100
151
|
selectedCheckBoxTransactionIds,
|
|
101
152
|
transactionIdsWithUnsavedData,
|
|
102
153
|
uncategorizedAccounts: uncategorizedIncomeExpense,
|
|
@@ -107,7 +158,7 @@ function getExpenseAutomationTransactionView(state) {
|
|
|
107
158
|
classHierarchyList,
|
|
108
159
|
isAccountingProjectsEnabled,
|
|
109
160
|
projectList,
|
|
110
|
-
transactionLocalData,
|
|
161
|
+
transactionLocalData: filteredTransactionLocalData,
|
|
111
162
|
uiState,
|
|
112
163
|
refreshStatus,
|
|
113
164
|
saveStatus,
|
|
@@ -15,6 +15,7 @@ import { TransactionCategory, TransactionType } from '../../../entity/transactio
|
|
|
15
15
|
import { VendorBase } from '../../../entity/vendor/vendorState';
|
|
16
16
|
import { ZeniDate } from '../../../zeniDayJS';
|
|
17
17
|
import { EntityRecommendationKey } from '../../recommendation/recommendationState';
|
|
18
|
+
import { TransactionFilters } from '../../spendManagement/spendManagementFilterHelpers';
|
|
18
19
|
import { TransactionDetailKey } from '../../transactionDetail/transactionDetailState';
|
|
19
20
|
export declare const toTransactionsSortKey: (v: string) => "date" | "amount" | "vendor" | "project" | "category" | "class" | "payment_account" | "transaction_type" | "memo_and_receipt";
|
|
20
21
|
export type TransactionsSortKey = ReturnType<typeof toTransactionsSortKey>;
|
|
@@ -91,6 +92,7 @@ export interface SupportedTransactionCategorization {
|
|
|
91
92
|
}
|
|
92
93
|
export declare const initialSupportedTransactionCategorization: SupportedTransactionCategorization;
|
|
93
94
|
export interface TransactionsTabViewState extends FetchedState {
|
|
95
|
+
filters: TransactionFilters;
|
|
94
96
|
markAsNotMiscategorizedStatus: FetchStateAndError;
|
|
95
97
|
refreshStatus: FetchStateAndError;
|
|
96
98
|
saveStatus: FetchStateAndError;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const toPeopleSortKeyType: (v: string) => "role" | "manager" | "
|
|
1
|
+
declare const toPeopleSortKeyType: (v: string) => "role" | "manager" | "name" | "department" | "lastSeen";
|
|
2
2
|
export type PeopleViewSortKey = ReturnType<typeof toPeopleSortKeyType>;
|
|
3
3
|
export {};
|
|
@@ -11,13 +11,15 @@ const initializeBillPaySetupApproverViewUpdateDataEpic = (actions$, state$) => a
|
|
|
11
11
|
if (approvalRuleId != null) {
|
|
12
12
|
const approvalRule = (0, approvalRuleSelector_1.getApprovalRuleById)(state$.value.approvalRuleState, approvalRuleId);
|
|
13
13
|
if (approvalRule != null) {
|
|
14
|
+
const criteria = approvalRule.criteria[0];
|
|
15
|
+
const range = criteria?.range;
|
|
14
16
|
const billPaySetupApproverViewUpdateData = {
|
|
15
17
|
approvalRuleId,
|
|
16
18
|
steps: approvalRule.steps,
|
|
17
19
|
criteria: {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
rangeType: criteria?.rangeType,
|
|
21
|
+
rangeEntity: criteria?.rangeEntity,
|
|
22
|
+
range,
|
|
21
23
|
},
|
|
22
24
|
};
|
|
23
25
|
fetchActions.push((0, billPaySetupApproverViewReducer_1.clearBillPaySetupApproverViewUpdateData)(), (0, billPaySetupApproverViewReducer_1.saveBillPaySetupApproverViewUpdateData)(billPaySetupApproverViewUpdateData));
|
|
@@ -26,7 +28,7 @@ const initializeBillPaySetupApproverViewUpdateDataEpic = (actions$, state$) => a
|
|
|
26
28
|
else {
|
|
27
29
|
const billPaySetupApproverViewCreateData = {
|
|
28
30
|
steps: [],
|
|
29
|
-
criteria:
|
|
31
|
+
criteria: undefined,
|
|
30
32
|
};
|
|
31
33
|
fetchActions.push((0, billPaySetupApproverViewReducer_1.clearBillPaySetupApproverViewUpdateData)(), (0, billPaySetupApproverViewReducer_1.saveBillPaySetupApproverViewUpdateData)(billPaySetupApproverViewCreateData));
|
|
32
34
|
}
|
|
@@ -14,7 +14,7 @@ interface ApproverViewStepPayload extends Omit<StepPayload, 'actors'> {
|
|
|
14
14
|
}
|
|
15
15
|
interface ApprovalUpdatableInfoPayload {
|
|
16
16
|
approval_rule_id: ID;
|
|
17
|
-
criteria: CriteriaPayload;
|
|
17
|
+
criteria: CriteriaPayload[];
|
|
18
18
|
is_applicable_on_pending_approval_entity: boolean;
|
|
19
19
|
steps: ApproverViewStepPayload[];
|
|
20
20
|
}
|
|
@@ -2,50 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.toApprovalChangableInfoPayload = void 0;
|
|
4
4
|
const toApprovalChangableInfoPayload = (approverViewUpdateData) => {
|
|
5
|
-
|
|
6
|
-
// amount / vendor / department; flatten it into the wire format's
|
|
7
|
-
// `conditions[]` array.
|
|
8
|
-
let criteriaPayload;
|
|
5
|
+
let criteriaPayload = [];
|
|
9
6
|
if (approverViewUpdateData.criteria != null) {
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
if (vendor != null && vendor.vendorIds.length > 0) {
|
|
27
|
-
conditions.push({
|
|
28
|
-
field: 'vendor_id',
|
|
29
|
-
type: vendor.operator === 'is_not' ? 'not_in' : 'in',
|
|
30
|
-
value: vendor.vendorIds,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
if (department != null && department.departmentIds.length > 0) {
|
|
34
|
-
conditions.push({
|
|
35
|
-
field: 'department_id',
|
|
36
|
-
type: department.operator === 'is_not' ? 'not_in' : 'in',
|
|
37
|
-
value: department.departmentIds,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
if (conditions.length > 0) {
|
|
41
|
-
const currency = amount?.min ?? amount?.max ?? null;
|
|
42
|
-
criteriaPayload = {
|
|
43
|
-
conditions,
|
|
44
|
-
criteria_operator: 'and',
|
|
45
|
-
currency_code: currency?.currencyCode ?? 'USD',
|
|
46
|
-
currency_symbol: currency?.currencySymbol ?? '$',
|
|
47
|
-
};
|
|
48
|
-
}
|
|
7
|
+
const criteria = approverViewUpdateData.criteria;
|
|
8
|
+
const { rangeType, rangeEntity, range } = criteria;
|
|
9
|
+
const { min, max } = range;
|
|
10
|
+
const { currencyCode, currencySymbol } = min;
|
|
11
|
+
criteriaPayload = [
|
|
12
|
+
{
|
|
13
|
+
type: rangeType,
|
|
14
|
+
range_entity: rangeEntity,
|
|
15
|
+
min: min.amount,
|
|
16
|
+
max: max?.amount ?? null,
|
|
17
|
+
currency_code: currencyCode,
|
|
18
|
+
currency_symbol: currencySymbol,
|
|
19
|
+
},
|
|
20
|
+
];
|
|
49
21
|
}
|
|
50
22
|
const steps = approverViewUpdateData.steps.map((step) => {
|
|
51
23
|
return {
|
|
@@ -66,12 +38,10 @@ const toApprovalChangableInfoPayload = (approverViewUpdateData) => {
|
|
|
66
38
|
});
|
|
67
39
|
const isUpdate = approverViewUpdateData.approvalRuleId != null;
|
|
68
40
|
const payload = {
|
|
41
|
+
criteria: criteriaPayload,
|
|
69
42
|
steps,
|
|
70
43
|
is_applicable_on_pending_approval_entity: approverViewUpdateData.isApplicableOnPendingApprovalEntity ?? true,
|
|
71
44
|
};
|
|
72
|
-
if (criteriaPayload != null) {
|
|
73
|
-
payload.criteria = criteriaPayload;
|
|
74
|
-
}
|
|
75
45
|
if (isUpdate) {
|
|
76
46
|
payload.approval_rule_id = approverViewUpdateData.approvalRuleId;
|
|
77
47
|
}
|
|
@@ -1,31 +1,19 @@
|
|
|
1
1
|
import { FetchStateAndError, ID } from '../../../../../commonStateTypes/common';
|
|
2
|
-
import {
|
|
2
|
+
import { Criteria, Step } from '../../../../../entity/approvalRule/approvalRuleState';
|
|
3
3
|
export type ApprovalUpdateActionType = 'approval_create' | 'approval_update';
|
|
4
4
|
export interface ApproverViewUpdateData {
|
|
5
5
|
type: ApprovalUpdateActionType;
|
|
6
6
|
updateStatus: FetchStateAndError;
|
|
7
7
|
data?: ApprovalRuleUpdateData | ApprovalRuleCreateData;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Form-side criteria shape used by the rule create/edit form.
|
|
11
|
-
*
|
|
12
|
-
* Each condition kind gets its own optional slot, mirroring how the UI
|
|
13
|
-
* edits them as distinct rows. At most one of each kind is present; this
|
|
14
|
-
* matches the design constraint that each condition type can be added once.
|
|
15
|
-
*/
|
|
16
|
-
export interface ApprovalRuleFormCriteria {
|
|
17
|
-
amount?: AmountCriteria;
|
|
18
|
-
department?: DepartmentCriteria;
|
|
19
|
-
vendor?: VendorCriteria;
|
|
20
|
-
}
|
|
21
9
|
export interface ApprovalRuleUpdateData {
|
|
22
10
|
approvalRuleId: ID;
|
|
23
|
-
criteria:
|
|
11
|
+
criteria: Criteria;
|
|
24
12
|
steps: Step[];
|
|
25
13
|
isApplicableOnPendingApprovalEntity?: boolean;
|
|
26
14
|
}
|
|
27
15
|
export interface ApprovalRuleCreateData {
|
|
28
|
-
criteria:
|
|
16
|
+
criteria: Criteria;
|
|
29
17
|
steps: Step[];
|
|
30
18
|
isApplicableOnPendingApprovalEntity?: boolean;
|
|
31
19
|
}
|
|
@@ -9,7 +9,6 @@ exports.getPaymentSection = getPaymentSection;
|
|
|
9
9
|
exports.toPaymentToOption = toPaymentToOption;
|
|
10
10
|
const get_1 = __importDefault(require("lodash/get"));
|
|
11
11
|
const has_1 = __importDefault(require("lodash/has"));
|
|
12
|
-
const approvalRuleSelector_1 = require("../../../../entity/approvalRule/approvalRuleSelector");
|
|
13
12
|
const reduceFetchState_1 = require("../../../../commonStateTypes/reduceFetchState");
|
|
14
13
|
const bankAccountSelector_1 = require("../../../../entity/bankAccount/bankAccountSelector");
|
|
15
14
|
const contactSelector_1 = require("../../../../entity/billPay/contact/contactSelector");
|
|
@@ -699,13 +698,9 @@ exports.getDefaultWithdrawFromAccount = getDefaultWithdrawFromAccount;
|
|
|
699
698
|
const checkIfCreatorIsApprover = (billAmount, approvalRules, signedInUser) => {
|
|
700
699
|
let isCreatorAlsoApprover = false;
|
|
701
700
|
const approvalRule = approvalRules.find((rule) => {
|
|
702
|
-
const
|
|
703
|
-
if (amountCriteria?.min == null) {
|
|
704
|
-
return false;
|
|
705
|
-
}
|
|
706
|
-
const { min, max } = amountCriteria;
|
|
701
|
+
const { max, min } = rule.criteria[0].range;
|
|
707
702
|
return (billAmount > min.amount &&
|
|
708
|
-
(max?.amount != null ? billAmount <= max
|
|
703
|
+
(max?.amount != null ? billAmount <= max?.amount : true));
|
|
709
704
|
});
|
|
710
705
|
if (approvalRule != null) {
|
|
711
706
|
const requireApprovalSteps = approvalRule.steps.filter((step) => step.action === 'require_approval');
|
|
@@ -61,7 +61,7 @@ export declare const initialCreditAcc: CreditAccount;
|
|
|
61
61
|
export declare const initialDebitCardSummaries: DebitCardSummaries;
|
|
62
62
|
export declare const initialResendRevokeCardInvite: ResendRevokeCardInvite;
|
|
63
63
|
export declare const initialCreditAccountRepayment: CreditAccountRepayment;
|
|
64
|
-
export declare const toChargeCardSortKeyType: (v: string) => "status" | "
|
|
64
|
+
export declare const toChargeCardSortKeyType: (v: string) => "status" | "accountType" | "owner" | "cardName" | "limit" | "department" | "cardType" | "utilisation";
|
|
65
65
|
export declare type ChargeCardViewSortKey = ReturnType<typeof toChargeCardSortKeyType>;
|
|
66
66
|
export declare const ALL_CASHBACK_SORT_KEYS: readonly ["month", "cashback"];
|
|
67
67
|
export declare const toCashbackSortKeyType: (v: string) => "month" | "cashback";
|
|
@@ -11,13 +11,15 @@ const initializeRemiSetupApproverViewUpdateDataEpic = (actions$, state$) => acti
|
|
|
11
11
|
if (approvalRuleId != null) {
|
|
12
12
|
const approvalRule = (0, approvalRuleSelector_1.getApprovalRuleById)(state$.value.approvalRuleState, approvalRuleId);
|
|
13
13
|
if (approvalRule != null) {
|
|
14
|
+
const criteria = approvalRule.criteria[0];
|
|
15
|
+
const range = criteria?.range;
|
|
14
16
|
const remiSetupApproverViewUpdateData = {
|
|
15
17
|
approvalRuleId,
|
|
16
18
|
steps: approvalRule.steps,
|
|
17
19
|
criteria: {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
20
|
+
rangeType: criteria?.rangeType,
|
|
21
|
+
rangeEntity: criteria?.rangeEntity,
|
|
22
|
+
range,
|
|
21
23
|
},
|
|
22
24
|
};
|
|
23
25
|
fetchActions.push((0, remiSetupApproverViewReducer_1.clearRemiSetupApproverViewUpdateData)(), (0, remiSetupApproverViewReducer_1.saveRemiSetupApproverViewUpdateData)(remiSetupApproverViewUpdateData));
|
|
@@ -26,7 +28,7 @@ const initializeRemiSetupApproverViewUpdateDataEpic = (actions$, state$) => acti
|
|
|
26
28
|
else {
|
|
27
29
|
const remiSetupApproverViewCreateData = {
|
|
28
30
|
steps: [],
|
|
29
|
-
criteria:
|
|
31
|
+
criteria: undefined,
|
|
30
32
|
};
|
|
31
33
|
fetchActions.push((0, remiSetupApproverViewReducer_1.clearRemiSetupApproverViewUpdateData)(), (0, remiSetupApproverViewReducer_1.saveRemiSetupApproverViewUpdateData)(remiSetupApproverViewCreateData));
|
|
32
34
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
+
import { Amount } from '../../commonStateTypes/amount';
|
|
2
|
+
import { ID } from '../../commonStateTypes/common';
|
|
1
3
|
import { TimePeriod } from '../../commonStateTypes/timePeriod';
|
|
4
|
+
import { TransactionType } from '../../entity/transaction/stateTypes/transactionType';
|
|
5
|
+
import { SupportedTransactionWithCOT } from '../../entity/transaction/transactionState';
|
|
2
6
|
import { UserRoleType } from '../../entity/userRole/userRoleType';
|
|
3
7
|
import { RootState } from '../../reducer';
|
|
4
8
|
import { ZeniDate } from '../../zeniDayJS';
|
|
9
|
+
import { TransactionReviewLocalDataSelectorView } from '../expenseAutomationView/selectorTypes/transactionsViewSelectorTypes';
|
|
5
10
|
import { TaskListFilterCategoryField, TaskListFilters } from '../taskManager/taskListView/taskList';
|
|
6
11
|
import { TaskWithUserDetails } from '../taskManager/taskListView/taskListSelector';
|
|
7
12
|
import { BillTransactionView } from './billPay/billList/billListSelector';
|
|
@@ -10,8 +15,8 @@ import { PaymentHistoryFilterCategoryDropdownOption, PaymentHistoryFilters } fro
|
|
|
10
15
|
import { ChargeCardRepaymentWithUser } from './chargeCards/chargeCardPaymentHistory/chargeCardPaymentHistorySelector';
|
|
11
16
|
import { ReimbursementView } from './reimbursement/remiListView/remiListSelector';
|
|
12
17
|
import { ReimbursementFilters, RemiListViewFilterCategoryField } from './reimbursement/remiListView/remiListState';
|
|
13
|
-
export type SpendManagementFiltersType = BillPayFilters | ReimbursementFilters | TaskListFilters | PaymentHistoryFilters;
|
|
14
|
-
export type SpendManagementFilterEntityType = 'bill_pay' | 'reimbursement' | 'task_management' | 'charge_card_payment_history';
|
|
18
|
+
export type SpendManagementFiltersType = BillPayFilters | ReimbursementFilters | TaskListFilters | TransactionFilters | PaymentHistoryFilters;
|
|
19
|
+
export type SpendManagementFilterEntityType = 'bill_pay' | 'reimbursement' | 'task_management' | 'transaction_categorization' | 'charge_card_payment_history';
|
|
15
20
|
export type FilterCategoryType = 'searchAutocomplete' | 'user' | 'dateRange' | 'numberRange' | 'dropdown';
|
|
16
21
|
export interface MatchingOperatorDropdownOption {
|
|
17
22
|
label: 'is' | 'is not';
|
|
@@ -33,9 +38,45 @@ export interface TaskFilterCategoryDropdownOption {
|
|
|
33
38
|
multiple?: boolean;
|
|
34
39
|
type?: FilterCategoryType;
|
|
35
40
|
}
|
|
36
|
-
export type SpendManagementFilterCategoryDropdownOption = BillPayFilterCategoryDropdownOption | ReimbursementFilterCategoryDropdownOption | TaskFilterCategoryDropdownOption | PaymentHistoryFilterCategoryDropdownOption;
|
|
41
|
+
export type SpendManagementFilterCategoryDropdownOption = BillPayFilterCategoryDropdownOption | ReimbursementFilterCategoryDropdownOption | TaskFilterCategoryDropdownOption | TransactionFilterCategoryDropdownOption | PaymentHistoryFilterCategoryDropdownOption;
|
|
42
|
+
export interface TransactionFilterCategoryDropdownOption {
|
|
43
|
+
value: TransactionFilterCategoryField;
|
|
44
|
+
multiple?: boolean;
|
|
45
|
+
type?: FilterCategoryType;
|
|
46
|
+
}
|
|
47
|
+
export type TransactionFilterEntityType = 'transaction_categorization' | 'customer' | 'vendor' | 'merchant';
|
|
48
|
+
export type TransactionFilterCategoryField = 'payment_account_name' | 'payment_account_type' | 'payee' | 'category' | 'class' | 'amount';
|
|
49
|
+
export declare const TRANSACTION_FILTER_CATEGORIES: TransactionFilterCategoryDropdownOption[];
|
|
50
|
+
export interface TransactionFilters {
|
|
51
|
+
categories: TransactionFilterCategory[];
|
|
52
|
+
categoryCombinationOperator: CategoryCombinationOperator;
|
|
53
|
+
}
|
|
54
|
+
/** Amount filter operators for transaction_categorization (expense automation). Other entities use only equal/not-equal. */
|
|
55
|
+
export type TransactionFilterAmountMatchingOperator = 'equal' | 'not-equal' | 'lessThan' | 'greaterThan' | 'inBetween';
|
|
56
|
+
export interface TransactionFilterCategory {
|
|
57
|
+
field: TransactionFilterCategoryField;
|
|
58
|
+
matchingOperator: TransactionFilterAmountMatchingOperator;
|
|
59
|
+
values: (string | ZeniDate)[];
|
|
60
|
+
valuesCombinationOperator: 'ANY';
|
|
61
|
+
}
|
|
62
|
+
export interface TransactionView {
|
|
63
|
+
amount: Amount;
|
|
64
|
+
createTime: ZeniDate;
|
|
65
|
+
date: ZeniDate;
|
|
66
|
+
description: string;
|
|
67
|
+
id: ID;
|
|
68
|
+
memo: string;
|
|
69
|
+
transaction: SupportedTransactionWithCOT;
|
|
70
|
+
type: TransactionType;
|
|
71
|
+
customerId?: ID;
|
|
72
|
+
customerName?: string;
|
|
73
|
+
transactionLocalData?: TransactionReviewLocalDataSelectorView;
|
|
74
|
+
typeName?: string;
|
|
75
|
+
vendorId?: ID;
|
|
76
|
+
vendorName?: string;
|
|
77
|
+
}
|
|
37
78
|
export type FilterCategoryValueType = string | number | ZeniDate;
|
|
38
|
-
export declare const applyAdvancedFiltersOnList: (entity: SpendManagementFilterEntityType, allItems: BillTransactionView[] | ReimbursementView[] | TaskWithUserDetails[] | ChargeCardRepaymentWithUser[], filters?: BillPayFilters | ReimbursementFilters | TaskListFilters | PaymentHistoryFilters, filteredItems?: (BillTransactionView | ReimbursementView | TaskWithUserDetails | ChargeCardRepaymentWithUser)[], index?: number) => (BillTransactionView | ReimbursementView | TaskWithUserDetails | ChargeCardRepaymentWithUser)[];
|
|
79
|
+
export declare const applyAdvancedFiltersOnList: (entity: SpendManagementFilterEntityType, allItems: BillTransactionView[] | ReimbursementView[] | TaskWithUserDetails[] | TransactionView[] | ChargeCardRepaymentWithUser[], filters?: BillPayFilters | ReimbursementFilters | TaskListFilters | TransactionFilters | PaymentHistoryFilters, filteredItems?: (BillTransactionView | ReimbursementView | TaskWithUserDetails | TransactionView | ChargeCardRepaymentWithUser)[], index?: number) => (BillTransactionView | ReimbursementView | TaskWithUserDetails | TransactionView | ChargeCardRepaymentWithUser)[];
|
|
39
80
|
export declare const isBillListDownloadable: (state: RootState, currentTimePeriod: TimePeriod) => boolean;
|
|
40
81
|
export declare const isRemiListDownloadable: (state: RootState, currentTimePeriod: TimePeriod) => boolean;
|
|
41
82
|
export declare const hideCreatedByFilter: (userRole: UserRoleType[]) => boolean;
|