@zeniai/client-epic-state 5.0.44-betaML3 → 5.0.44-betaRD1
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/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/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/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/epic.d.ts +3 -3
- package/lib/epic.js +3 -3
- package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +1 -1
- package/lib/esm/entity/account/accountSelector.js +0 -6
- package/lib/esm/entity/snackbar/snackbarTypes.js +0 -2
- package/lib/esm/entity/transaction/payloadTypes/transactionPayload.js +0 -10
- package/lib/esm/epic.js +3 -3
- package/lib/esm/index.js +8 -7
- 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/transactionDetail/epics/transactionDetailEpic.js +0 -6
- package/lib/esm/view/transactionDetail/transactionDetailSelector.js +1 -12
- 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 +8 -7
- package/lib/index.js +38 -42
- 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/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/transactionDetailEpic.d.ts +1 -2
- package/lib/view/transactionDetail/epics/transactionDetailEpic.js +0 -6
- package/lib/view/transactionDetail/transactionDetailPayload.d.ts +1 -1
- package/lib/view/transactionDetail/transactionDetailSelector.d.ts +1 -4
- package/lib/view/transactionDetail/transactionDetailSelector.js +1 -12
- 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
|
@@ -4,7 +4,7 @@ import { RootState } from '../../reducer';
|
|
|
4
4
|
import { TopExReport, TopExTimePeriodWithMetaData } from './topExSelectorTypes';
|
|
5
5
|
import { TopExState } from './topExState';
|
|
6
6
|
export declare const getTopExpenses: (accountState: AccountState, topExState: TopExState, numberOfExpenses?: number) => {
|
|
7
|
-
reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation"
|
|
7
|
+
reportId: "cash_balance" | "card_balance" | "expense_automation_card" | "operating_expenses" | "operating_expenses_by_classes" | "revenue" | "revenue_by_classes" | "net_burn_or_income" | "net_burn_or_income_story_card" | "net_burn_or_income_by_classes" | "cash_position" | "top_expenses" | "profit_and_loss" | "profit_and_loss_by_classes" | "profit_and_loss_by_projects" | "balance_sheet" | "cash_flow" | "dashboard" | "finance_statement" | "transaction_list_of_account" | "transaction_list_missing_receipt" | "transaction_list_of_account_by_class" | "transaction_list_of_account_by_project" | "transaction_detail" | "cash_in_cash_out" | "insights_dashboard" | "company_details" | "class_list" | "account_list" | "account_list_by_type" | "vendor" | "task_card" | "bill_pay" | "reimbursement" | "bill_pay_card" | "reimbursement_card" | "bill_pay_promo_card" | "zeni_accounts" | "zeni_accounts_promo_card" | "zeni_treasury" | "charge_cards" | "other_connection" | "reimbursement_promo_card" | "onboarding" | "operating_expenses_by_vendor" | "operating_expenses_by_vendor_summary" | "vendors_tab" | "accounts_payable_aging" | "accounts_receivable_aging" | "vendor_global_review" | "prepaid_expenses" | "fixed_assets" | "notification" | "rewards_card" | "billing" | "flux_analysis_operating_expense" | "account_reconciliation" | "zeni_credit_promo_card" | "treasury_promo_card" | "excluded_account_reconciliation";
|
|
8
8
|
reportTitle: string;
|
|
9
9
|
version: string | number | undefined;
|
|
10
10
|
status: import("../..").Status | undefined;
|
|
@@ -7,9 +7,8 @@ import { ZeniAPI } from '../../../zeniAPI';
|
|
|
7
7
|
import { fetchAccountList } from '../../accountList/accountListReducer';
|
|
8
8
|
import { fetchClassList } from '../../classList/classListReducer';
|
|
9
9
|
import { updateTransactionVendorLocalData } from '../../commonVendorView/transactionVendorView/transactionVendorViewReducer';
|
|
10
|
-
import { fetchTransferAccounts } from '../../expenseAutomationView/reducers/transactionsViewReducer';
|
|
11
10
|
import { fetchOwnerList } from '../../ownerList/ownerListReducer';
|
|
12
11
|
import { updateSortUiState } from '../../vendorList/vendorListReducer';
|
|
13
12
|
import { fetchTransactionDetail, initializeTransactionDetailLocalData, removeTransactionDetail, updateTransactionDetailFetchState } from '../transactionDetailReducer';
|
|
14
|
-
export type ActionType = ReturnType<typeof fetchTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionDetailFetchState> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof removeTransaction> | ReturnType<typeof removeTransactionDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof updateSortUiState> | ReturnType<typeof updateVendors> | ReturnType<typeof updateTransactionVendorLocalData> | ReturnType<typeof fetchOwnerList
|
|
13
|
+
export type ActionType = ReturnType<typeof fetchTransactionDetail> | ReturnType<typeof updateTransaction> | ReturnType<typeof updateTransactionDetailFetchState> | ReturnType<typeof initializeTransactionDetailLocalData> | ReturnType<typeof removeTransaction> | ReturnType<typeof removeTransactionDetail> | ReturnType<typeof fetchClassList> | ReturnType<typeof fetchAccountList> | ReturnType<typeof updateSortUiState> | ReturnType<typeof updateVendors> | ReturnType<typeof updateTransactionVendorLocalData> | ReturnType<typeof fetchOwnerList>;
|
|
15
14
|
export declare const fetchTransactionDetailEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|
|
@@ -19,7 +19,6 @@ const accountListReducer_1 = require("../../accountList/accountListReducer");
|
|
|
19
19
|
const classListReducer_1 = require("../../classList/classListReducer");
|
|
20
20
|
const transactionVendorLocalDataHelper_1 = require("../../commonVendorView/transactionVendorView/transactionVendorLocalDataHelper");
|
|
21
21
|
const transactionVendorViewReducer_1 = require("../../commonVendorView/transactionVendorView/transactionVendorViewReducer");
|
|
22
|
-
const transactionsViewReducer_1 = require("../../expenseAutomationView/reducers/transactionsViewReducer");
|
|
23
22
|
const ownerListReducer_1 = require("../../ownerList/ownerListReducer");
|
|
24
23
|
const transactionDetailReducer_1 = require("../transactionDetailReducer");
|
|
25
24
|
const transactionDetailState_1 = require("../transactionDetailState");
|
|
@@ -41,11 +40,6 @@ const fetchTransactionDetailEpic = (actions$, state$, zeniAPI) => actions$.pipe(
|
|
|
41
40
|
accountList.fetchState !== 'In-Progress') {
|
|
42
41
|
transactionActions.push((0, accountListReducer_1.fetchAccountList)('accountList'));
|
|
43
42
|
}
|
|
44
|
-
const { transferAccounts } = state$.value.expenseAutomationTransactionsViewState;
|
|
45
|
-
if (transferAccounts.fetchState !== 'In-Progress' &&
|
|
46
|
-
transferAccounts.fetchState !== 'Completed') {
|
|
47
|
-
transactionActions.push((0, transactionsViewReducer_1.fetchTransferAccounts)());
|
|
48
|
-
}
|
|
49
43
|
const classList = state$.value.classListState;
|
|
50
44
|
if (classList.hasValidState() === false &&
|
|
51
45
|
classList.fetchState !== 'In-Progress') {
|
|
@@ -3,7 +3,7 @@ import { TransactionPayload } from '../../entity/transaction/payloadTypes/transa
|
|
|
3
3
|
import { SupportedTransactionPayload } from '../../entity/transaction/transactionState';
|
|
4
4
|
import { VendorPayload } from '../../entity/vendor/vendorPayload';
|
|
5
5
|
import { ZeniAPIResponse } from '../../responsePayload';
|
|
6
|
-
|
|
6
|
+
interface TransactionDetailPayload {
|
|
7
7
|
query: {
|
|
8
8
|
transaction_id: string;
|
|
9
9
|
transaction_type: string;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { NestedAccountHierarchyForReport } from '../../commonStateTypes/accountView/nestedAccountID';
|
|
2
2
|
import { NestedClassHierarchyForReport } from '../../commonStateTypes/classesView/nestedClassID';
|
|
3
|
-
import {
|
|
3
|
+
import { FetchStateAndError } from '../../commonStateTypes/common';
|
|
4
4
|
import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
5
|
-
import { AccountBase } from '../../entity/account/accountState';
|
|
6
5
|
import { TransactionID } from '../../entity/transaction/stateTypes/transaction';
|
|
7
6
|
import { SupportedTransactionWithCOT } from '../../entity/transaction/transactionState';
|
|
8
7
|
import { Vendor } from '../../entity/vendor/vendorState';
|
|
@@ -17,13 +16,11 @@ export interface TransactionDetailReport extends SelectorView {
|
|
|
17
16
|
allVendors: Vendor[];
|
|
18
17
|
classHierarchyList: NestedClassHierarchyForReport[];
|
|
19
18
|
classList: ClassListSelectorView;
|
|
20
|
-
createTransferEntryStatus: FetchState;
|
|
21
19
|
deleteStatusByAttachmentName: Record<string, FetchStateAndError>;
|
|
22
20
|
isAccountingClassesEnabled: boolean;
|
|
23
21
|
linkedTransactions: SupportedTransactionWithCOT[];
|
|
24
22
|
transactionDetailLocalData: TransactionDetailLocalData;
|
|
25
23
|
transactionDetailUpdateStatus: FetchStateAndError;
|
|
26
|
-
transferAccounts: AccountBase[];
|
|
27
24
|
isUpdateNotAllowed?: boolean;
|
|
28
25
|
transaction?: SupportedTransactionWithCOT;
|
|
29
26
|
}
|
|
@@ -7,7 +7,6 @@ exports.getInitialUpdatablePeriodsForTransactionRecommendations = exports.getTra
|
|
|
7
7
|
exports.getTransactionDetailForTransaction = getTransactionDetailForTransaction;
|
|
8
8
|
const get_1 = __importDefault(require("lodash/get"));
|
|
9
9
|
const reduceFetchState_1 = require("../../commonStateTypes/reduceFetchState");
|
|
10
|
-
const accountSelector_1 = require("../../entity/account/accountSelector");
|
|
11
10
|
const tenantSelector_1 = require("../../entity/tenant/tenantSelector");
|
|
12
11
|
const transactionType_1 = require("../../entity/transaction/stateTypes/transactionType");
|
|
13
12
|
const transactionHelper_1 = require("../../entity/transaction/transactionHelper");
|
|
@@ -18,7 +17,7 @@ const accountListSelector_1 = require("../accountList/accountListSelector");
|
|
|
18
17
|
const classListSelector_1 = require("../classList/classListSelector");
|
|
19
18
|
const transactionDetailState_1 = require("./transactionDetailState");
|
|
20
19
|
const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = true) => {
|
|
21
|
-
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState,
|
|
20
|
+
const { transactionDetailState, transactionState, vendorState, vendorListState, accountState, classState, classListState, accountListState, } = state;
|
|
22
21
|
const detailKey = (0, transactionDetailState_1.getTransactionDetailKey)(transactionId);
|
|
23
22
|
const transactionDetail = (0, get_1.default)(transactionDetailState.transactionDetailById, detailKey);
|
|
24
23
|
let fetchState = {
|
|
@@ -70,14 +69,6 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
|
|
|
70
69
|
: [];
|
|
71
70
|
const transactionDetailAnyUpdateStatus = reduceUpdateFetchStates(transactionDetail);
|
|
72
71
|
const vendors = (0, vendorSelector_1.getVendorsByVendorIds)(vendorState, vendorListState.vendorIds);
|
|
73
|
-
const transferAccountsFromApi = expenseAutomationTransactionsViewState.transferAccounts.accountIds
|
|
74
|
-
.map((id) => (0, accountSelector_1.getAccountBaseForTransferAccounts)(accountState, id))
|
|
75
|
-
.filter((account) => account != null);
|
|
76
|
-
const transferAccountsList = transferAccountsFromApi.length > 0
|
|
77
|
-
? transferAccountsFromApi
|
|
78
|
-
: accountsList.accounts
|
|
79
|
-
.map((a) => (0, accountSelector_1.getAccountBase)(accountState, a.accountId, 'account_list'))
|
|
80
|
-
.filter((account) => account != null);
|
|
81
72
|
return {
|
|
82
73
|
reportId: 'transaction_detail',
|
|
83
74
|
reportTitle: 'Transaction Detail',
|
|
@@ -94,8 +85,6 @@ const getTransactionDetail = (state, transactionId, fetchLinkedTransactions = tr
|
|
|
94
85
|
accountsHierarchyList,
|
|
95
86
|
classList: classList,
|
|
96
87
|
isAccountingClassesEnabled,
|
|
97
|
-
createTransferEntryStatus: expenseAutomationTransactionsViewState.createTransferEntryStatus,
|
|
98
|
-
transferAccounts: transferAccountsList,
|
|
99
88
|
isUpdateNotAllowed: transactionDetail?.isUpdateNotAllowed,
|
|
100
89
|
transactionDetailLocalData: transactionDetail?.transactionDetailLocalData ??
|
|
101
90
|
transactionDetailState_1.initialSupportedTransactionDetail.transactionDetailLocalData,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { updateTransactions } from '../../entity/transaction/transactionReducer';
|
|
4
|
+
import { RootState } from '../../reducer';
|
|
5
|
+
import { ZeniAPI } from '../../zeniAPI';
|
|
6
|
+
import { fetchProjectTransactionList, updateTransactionListByProject, updateTransactionListByProjectFailure } from './transactionListReducer';
|
|
7
|
+
export type ActionType = ReturnType<typeof fetchProjectTransactionList> | ReturnType<typeof updateTransactions> | ReturnType<typeof updateTransactionListByProject> | ReturnType<typeof updateTransactionListByProjectFailure>;
|
|
8
|
+
export declare const fetchTransactionListByProjectEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.fetchTransactionListByProjectEpic = void 0;
|
|
7
|
+
const js_base64_1 = require("js-base64");
|
|
8
|
+
const get_1 = __importDefault(require("lodash/get"));
|
|
9
|
+
const rxjs_1 = require("rxjs");
|
|
10
|
+
const operators_1 = require("rxjs/operators");
|
|
11
|
+
const timePeriod_1 = require("../../commonStateTypes/timePeriod");
|
|
12
|
+
const transactionReducer_1 = require("../../entity/transaction/transactionReducer");
|
|
13
|
+
const responsePayload_1 = require("../../responsePayload");
|
|
14
|
+
const transactionListReducer_1 = require("./transactionListReducer");
|
|
15
|
+
const transactionListState_1 = require("./transactionListState");
|
|
16
|
+
const fetchTransactionListByProjectEpic = (actions$, state$, zeniAPI) => actions$.pipe((0, operators_1.filter)(transactionListReducer_1.fetchProjectTransactionList.match), (0, operators_1.mergeMap)((action) => {
|
|
17
|
+
const state = state$.value;
|
|
18
|
+
const key = (0, transactionListState_1.getProjectAcTranKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
|
|
19
|
+
const projectTransactions = (0, get_1.default)(state.transactionListState.byProject.transactionListByProjectKey, key, undefined);
|
|
20
|
+
if (action.payload.cacheOverride === true ||
|
|
21
|
+
projectTransactions == null ||
|
|
22
|
+
projectTransactions.hasValidState() === false) {
|
|
23
|
+
const queryParam = {
|
|
24
|
+
start_date: (0, timePeriod_1.toString)(action.payload.period.start),
|
|
25
|
+
end_date: (0, timePeriod_1.toString)(action.payload.period.end),
|
|
26
|
+
sort_by: 'create_time',
|
|
27
|
+
sort_order: 'desc',
|
|
28
|
+
account_id: action.payload.accountId,
|
|
29
|
+
account_type: action.payload.accountType,
|
|
30
|
+
zeni_project_id: action.payload.projectId,
|
|
31
|
+
};
|
|
32
|
+
const base64AccountId = (0, js_base64_1.toBase64)(action.payload.accountId);
|
|
33
|
+
return zeniAPI
|
|
34
|
+
.getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/1.0/accounts/${base64AccountId}/transactions?query=${encodeURIComponent(JSON.stringify(queryParam))}`)
|
|
35
|
+
.pipe((0, operators_1.mergeMap)((response) => {
|
|
36
|
+
if ((0, responsePayload_1.isSuccessResponse)(response) && response.data != null) {
|
|
37
|
+
const updateActions = [];
|
|
38
|
+
updateActions.push((0, transactionReducer_1.updateTransactions)(response.data.account.transactions, (value) => value.transaction_id));
|
|
39
|
+
updateActions.push((0, transactionListReducer_1.updateTransactionListByProject)(response.data));
|
|
40
|
+
return (0, rxjs_1.from)(updateActions);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
return (0, rxjs_1.of)((0, transactionListReducer_1.updateTransactionListByProjectFailure)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period, response.status));
|
|
44
|
+
}
|
|
45
|
+
}), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, transactionListReducer_1.updateTransactionListByProjectFailure)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period, (0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'fetch transaction list REST API call errored out' +
|
|
46
|
+
JSON.stringify(error))))));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return (0, rxjs_1.from)([]);
|
|
50
|
+
}
|
|
51
|
+
}));
|
|
52
|
+
exports.fetchTransactionListByProjectEpic = fetchTransactionListByProjectEpic;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { RootState } from '../../reducer';
|
|
4
|
+
import { fetchProjectTransactionList, parallelFetchProjectTransactionList } from './transactionListReducer';
|
|
5
|
+
export type ActionType = ReturnType<typeof parallelFetchProjectTransactionList> | ReturnType<typeof fetchProjectTransactionList>;
|
|
6
|
+
export declare const parallelFetchProjectTransactionListEpic: (actions$: ActionsObservable<ActionType>, state$: StateObservable<RootState>) => Observable<ActionType>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parallelFetchProjectTransactionListEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const parallelFetchClassTransactionListEpic_1 = require("./parallelFetchClassTransactionListEpic");
|
|
7
|
+
const transactionListReducer_1 = require("./transactionListReducer");
|
|
8
|
+
const transactionListState_1 = require("./transactionListState");
|
|
9
|
+
const parallelFetchProjectTransactionListEpic = (actions$, state$) => actions$.pipe((0, operators_1.filter)(transactionListReducer_1.parallelFetchProjectTransactionList.match), (0, operators_1.mergeMap)((action) => {
|
|
10
|
+
const state = state$.value.transactionListState;
|
|
11
|
+
const timePeriods = (0, parallelFetchClassTransactionListEpic_1.splitPeriod)(action.payload.period);
|
|
12
|
+
const filteredTimePeriods = timePeriods.filter((value) => {
|
|
13
|
+
if (action.payload.cacheOverride === false) {
|
|
14
|
+
return (isDataAvailableOrFetching(state.byProject, action.payload.accountId, action.payload.accountType, action.payload.projectId, value) === false);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
if (filteredTimePeriods.length > 12) {
|
|
21
|
+
console.error('Only maximum 12 parallel fetch are allowed!');
|
|
22
|
+
return (0, rxjs_1.from)([]);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const fetchActions = filteredTimePeriods.map((period) => (0, transactionListReducer_1.fetchProjectTransactionList)(action.payload.accountId, action.payload.accountType, action.payload.projectId, period, true));
|
|
26
|
+
return (0, rxjs_1.from)(fetchActions);
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
exports.parallelFetchProjectTransactionListEpic = parallelFetchProjectTransactionListEpic;
|
|
30
|
+
function isDataAvailableOrFetching(state, accountId, accountType, projectId, period) {
|
|
31
|
+
const key = (0, transactionListState_1.getProjectAcTranKey)(accountId, accountType, projectId, period);
|
|
32
|
+
const projectTransactions = state.transactionListByProjectKey[key];
|
|
33
|
+
return (projectTransactions != null &&
|
|
34
|
+
(projectTransactions.fetchState === 'In-Progress' ||
|
|
35
|
+
projectTransactions.hasValidState()));
|
|
36
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { COABalanceTimeFrame } from '../../commonStateTypes/coaBalance/coaBalance';
|
|
2
|
+
import { ID } from '../../commonStateTypes/common';
|
|
3
|
+
import { EntityOrder } from '../../commonStateTypes/selectorTypes/selectorTypes';
|
|
4
|
+
import { TimePeriod } from '../../commonStateTypes/timePeriod';
|
|
5
|
+
import { SelectorView } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
6
|
+
import { AccountBase, AccountType } from '../../entity/account/accountState';
|
|
7
|
+
import { Transaction } from '../../entity/transaction/stateTypes/transaction';
|
|
8
|
+
import { TransactionState } from '../../entity/transaction/transactionState';
|
|
9
|
+
import { TransactionListSelectorView, TransactionListState, TransactionListUIState } from './transactionListState';
|
|
10
|
+
export interface TransactionListByProjectReport extends SelectorView, TransactionListSelectorView {
|
|
11
|
+
accountId: ID;
|
|
12
|
+
accountType: AccountType;
|
|
13
|
+
filterByTimePeriod: TimePeriod;
|
|
14
|
+
projectId: ID;
|
|
15
|
+
timeframe: COABalanceTimeFrame;
|
|
16
|
+
transactionOrder: EntityOrder;
|
|
17
|
+
transactions: Transaction[];
|
|
18
|
+
uiState: TransactionListUIState;
|
|
19
|
+
account?: AccountBase;
|
|
20
|
+
}
|
|
21
|
+
export declare const getTransactionListByProject: (transactionState: TransactionState, transactionListState: TransactionListState, accountId: ID, accountType: AccountType, projectId: ID, timeframe: COABalanceTimeFrame, filterByTimePeriod: TimePeriod) => TransactionListByProjectReport;
|
|
22
|
+
export declare const getTransactionListUIStateByProjectKey: (transactionListState: TransactionListState, accountId: ID, accountType: AccountType, projectId: ID) => TransactionListUIState | undefined;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getTransactionListUIStateByProjectKey = exports.getTransactionListByProject = void 0;
|
|
7
|
+
const flatMap_1 = __importDefault(require("lodash/flatMap"));
|
|
8
|
+
const get_1 = __importDefault(require("lodash/get"));
|
|
9
|
+
const orderBy_1 = __importDefault(require("lodash/orderBy"));
|
|
10
|
+
const transactionSelector_1 = require("../../entity/transaction/transactionSelector");
|
|
11
|
+
const parallelFetchAccountTransactionListEpic_1 = require("./parallelFetchAccountTransactionListEpic");
|
|
12
|
+
const reduceTransactionListFetchState_1 = require("./reduceTransactionListFetchState");
|
|
13
|
+
const transactionListState_1 = require("./transactionListState");
|
|
14
|
+
const getTransactionListByProject = (transactionState, transactionListState, accountId, accountType, projectId, timeframe, filterByTimePeriod) => {
|
|
15
|
+
const timePeriods = (0, parallelFetchAccountTransactionListEpic_1.splitPeriod)(filterByTimePeriod); // Note: Split by months.
|
|
16
|
+
const accountTransactions = timePeriods
|
|
17
|
+
.map((thisTimePeriod) => {
|
|
18
|
+
const key = (0, transactionListState_1.getProjectAcTranKey)(accountId, accountType, projectId, thisTimePeriod);
|
|
19
|
+
return (0, get_1.default)(transactionListState.byProject.transactionListByProjectKey, key, undefined);
|
|
20
|
+
})
|
|
21
|
+
.filter((acTransaction) => acTransaction != null);
|
|
22
|
+
let account = undefined;
|
|
23
|
+
if (accountTransactions.length > 0) {
|
|
24
|
+
account = accountTransactions[0].account;
|
|
25
|
+
}
|
|
26
|
+
const fetchState = (0, reduceTransactionListFetchState_1.reduceFetchState)(accountTransactions);
|
|
27
|
+
let transactions = [];
|
|
28
|
+
if ((0, reduceTransactionListFetchState_1.isAnyFetchCompleted)(accountTransactions)) {
|
|
29
|
+
const allTransactionIDs = (0, flatMap_1.default)(accountTransactions, (value) => value.transactionIDs);
|
|
30
|
+
const transactionsUnsorted = allTransactionIDs
|
|
31
|
+
.map((transactionId) => (0, transactionSelector_1.getSupportedTransactionById)(transactionState, transactionId))
|
|
32
|
+
.filter((value) => {
|
|
33
|
+
if (value == null) {
|
|
34
|
+
console.error("Can't have null transaction at this stage!");
|
|
35
|
+
}
|
|
36
|
+
return value != null;
|
|
37
|
+
});
|
|
38
|
+
transactions = (0, orderBy_1.default)(transactionsUnsorted, (value) => value.date.valueOf(), 'desc');
|
|
39
|
+
}
|
|
40
|
+
const key = (0, transactionListState_1.getProjectAcKey)(accountId, accountType, projectId);
|
|
41
|
+
const uiState = (0, get_1.default)(transactionListState.byProject.transactionListUIStateByProjectKey, key, {});
|
|
42
|
+
return {
|
|
43
|
+
reportId: 'transaction_list_of_account_by_project',
|
|
44
|
+
reportTitle: 'Transaction List of Account By Project',
|
|
45
|
+
version: 1,
|
|
46
|
+
status: undefined,
|
|
47
|
+
fetchState: fetchState.fetchState,
|
|
48
|
+
error: fetchState.error,
|
|
49
|
+
timeframe,
|
|
50
|
+
filterByTimePeriod,
|
|
51
|
+
accountId,
|
|
52
|
+
accountType,
|
|
53
|
+
projectId,
|
|
54
|
+
account,
|
|
55
|
+
transactionOrder: 'descending_transaction_date',
|
|
56
|
+
transactions,
|
|
57
|
+
uiState,
|
|
58
|
+
latestTransactionId: transactionListState.latestTransactionId,
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
exports.getTransactionListByProject = getTransactionListByProject;
|
|
62
|
+
const getTransactionListUIStateByProjectKey = (transactionListState, accountId, accountType, projectId) => {
|
|
63
|
+
const key = (0, transactionListState_1.getProjectAcKey)(accountId, accountType, projectId);
|
|
64
|
+
return (0, get_1.default)(transactionListState.byProject.transactionListUIStateByProjectKey, key, undefined);
|
|
65
|
+
};
|
|
66
|
+
exports.getTransactionListUIStateByProjectKey = getTransactionListUIStateByProjectKey;
|
|
@@ -48,9 +48,24 @@ export interface TransactionListByClassPayload {
|
|
|
48
48
|
query: QueryClassMetaDataPayload;
|
|
49
49
|
query_definitions: Record<string, unknown>;
|
|
50
50
|
}
|
|
51
|
+
interface QueryProjectMetaDataPayload {
|
|
52
|
+
account_id: string;
|
|
53
|
+
account_type: string;
|
|
54
|
+
end_date: string;
|
|
55
|
+
group_by: string;
|
|
56
|
+
sort_order: string;
|
|
57
|
+
start_date: string;
|
|
58
|
+
zeni_project_id: string;
|
|
59
|
+
}
|
|
60
|
+
export interface TransactionListByProjectPayload {
|
|
61
|
+
account: TransactionListPayload;
|
|
62
|
+
query: QueryProjectMetaDataPayload;
|
|
63
|
+
query_definitions: Record<string, unknown>;
|
|
64
|
+
}
|
|
51
65
|
export type TransactionListByAccountResponse = ZeniAPIResponse<TransactionListByAccountPayload>;
|
|
52
66
|
export type TransactionListByEntityResponse = ZeniAPIResponse<TransactionListByEntityPayload>;
|
|
53
67
|
export type TransactionListByClassResponse = ZeniAPIResponse<TransactionListByClassPayload>;
|
|
68
|
+
export type TransactionListByProjectResponse = ZeniAPIResponse<TransactionListByProjectPayload>;
|
|
54
69
|
interface TransactionsByCategoryTypePayload {
|
|
55
70
|
query: QueryTransactionByCategoryTypeMetaDataPayload;
|
|
56
71
|
transactions: TransactionPayload[];
|
|
@@ -6,7 +6,7 @@ import { Entity } from '../../entity/genericEntity/entity';
|
|
|
6
6
|
import { TransactionPayload } from '../../entity/transaction/payloadTypes/transactionPayload';
|
|
7
7
|
import { TransactionID } from '../../entity/transaction/stateTypes/transaction';
|
|
8
8
|
import { ZeniAPIStatus } from '../../responsePayload';
|
|
9
|
-
import { TransactionListByAccountPayload, TransactionListByClassPayload, TransactionListByEntityPayload } from './transactionListPayload';
|
|
9
|
+
import { TransactionListByAccountPayload, TransactionListByClassPayload, TransactionListByEntityPayload, TransactionListByProjectPayload } from './transactionListPayload';
|
|
10
10
|
import { TransactionCategoryType, TransactionListState, TransactionListUIState } from './transactionListState';
|
|
11
11
|
export declare const initialState: TransactionListState;
|
|
12
12
|
export declare const parallelFetchAccountTransactionList: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", period: TimePeriod, accountName?: string | undefined, cacheOverride?: any, includeSubAccountTransactions?: any], {
|
|
@@ -69,7 +69,30 @@ export declare const parallelFetchAccountTransactionList: import("@reduxjs/toolk
|
|
|
69
69
|
classId: string;
|
|
70
70
|
period: TimePeriod;
|
|
71
71
|
error: ZeniAPIStatus<Record<string, unknown>>;
|
|
72
|
-
}, "transactionList/updateTransactionListByClassFailure", never, never>,
|
|
72
|
+
}, "transactionList/updateTransactionListByClassFailure", never, never>, parallelFetchProjectTransactionList: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", projectId: string, period: TimePeriod, cacheOverride?: any], {
|
|
73
|
+
accountId: string;
|
|
74
|
+
accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
|
|
75
|
+
projectId: string;
|
|
76
|
+
period: TimePeriod;
|
|
77
|
+
cacheOverride: any;
|
|
78
|
+
}, "transactionList/parallelFetchProjectTransactionList", never, never>, fetchProjectTransactionList: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", projectId: string, period: TimePeriod, cacheOverride?: any], {
|
|
79
|
+
accountId: string;
|
|
80
|
+
accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
|
|
81
|
+
projectId: string;
|
|
82
|
+
period: TimePeriod;
|
|
83
|
+
cacheOverride: any;
|
|
84
|
+
}, "transactionList/fetchProjectTransactionList", never, never>, updateTransactionListByProject: import("@reduxjs/toolkit").ActionCreatorWithPayload<TransactionListByProjectPayload, "transactionList/updateTransactionListByProject">, updateTransactionListByProjectUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
85
|
+
accountId: ID;
|
|
86
|
+
accountType: AccountType;
|
|
87
|
+
projectId: ID;
|
|
88
|
+
uiState: TransactionListUIState;
|
|
89
|
+
}, "transactionList/updateTransactionListByProjectUIState">, updateTransactionListByProjectFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[accountId: string, accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets", projectId: string, period: TimePeriod, error: ZeniAPIStatus<Record<string, unknown>>], {
|
|
90
|
+
accountId: string;
|
|
91
|
+
accountType: "cash_position" | "fixed_assets" | "bank" | "credit_card" | "expenses" | "cogs" | "income" | "cash_in" | "cash_out" | "other_income" | "other_expense" | "accounts_receivable" | "other_current_assets" | "other_assets" | "accounts_payable" | "other_current_liabilities" | "long_term_liabilities" | "equity" | "current_liabilities" | "current_assets";
|
|
92
|
+
projectId: string;
|
|
93
|
+
period: TimePeriod;
|
|
94
|
+
error: ZeniAPIStatus<Record<string, unknown>>;
|
|
95
|
+
}, "transactionList/updateTransactionListByProjectFailure", never, never>, parallelFetchTransactionListByCategoryType: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[transactionCategoryType: TransactionCategoryType, period: TimePeriod, cacheOverride?: any, minimumTransactionAmount?: Amount | undefined], {
|
|
73
96
|
transactionCategoryType: TransactionCategoryType;
|
|
74
97
|
period: TimePeriod;
|
|
75
98
|
minimumTransactionAmount: Amount | undefined;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.updateLatestTransactionId = exports.clearTransactionList = exports.updateTransactionListUIStateByCategoryType = exports.updateTransactionsListByCategoryTypeFailure = exports.updateTransactionListByCategoryType = exports.fetchTransactionsListByCategoryType = exports.parallelFetchTransactionListByCategoryType = exports.updateTransactionListByClassFailure = exports.updateTransactionListByClassUIState = exports.updateTransactionListByClass = exports.fetchClassTransactionList = exports.parallelFetchClassTransactionList = exports.updateTransactionListByAccountUIState = exports.updateTransactionListByEntityFailure = exports.updateTransactionListByEntity = exports.fetchEntityTransactionList = exports.parallelFetchEntityTransactionList = exports.updateTransactionListByAccountFailure = exports.updateTransactionListByAccount = exports.fetchAccountTransactionList = exports.parallelFetchAccountTransactionList = exports.initialState = void 0;
|
|
4
|
+
exports.updateLatestTransactionId = exports.clearTransactionList = exports.updateTransactionListUIStateByCategoryType = exports.updateTransactionsListByCategoryTypeFailure = exports.updateTransactionListByCategoryType = exports.fetchTransactionsListByCategoryType = exports.parallelFetchTransactionListByCategoryType = exports.updateTransactionListByProjectFailure = exports.updateTransactionListByProjectUIState = exports.updateTransactionListByProject = exports.fetchProjectTransactionList = exports.parallelFetchProjectTransactionList = exports.updateTransactionListByClassFailure = exports.updateTransactionListByClassUIState = exports.updateTransactionListByClass = exports.fetchClassTransactionList = exports.parallelFetchClassTransactionList = exports.updateTransactionListByAccountUIState = exports.updateTransactionListByEntityFailure = exports.updateTransactionListByEntity = exports.fetchEntityTransactionList = exports.parallelFetchEntityTransactionList = exports.updateTransactionListByAccountFailure = exports.updateTransactionListByAccount = exports.fetchAccountTransactionList = exports.parallelFetchAccountTransactionList = exports.initialState = void 0;
|
|
5
5
|
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
6
|
const timePeriod_1 = require("../../commonStateTypes/timePeriod");
|
|
7
7
|
const accountPayload_1 = require("../../entity/account/accountPayload");
|
|
@@ -41,6 +41,10 @@ exports.initialState = {
|
|
|
41
41
|
transactionListByClassKey: {},
|
|
42
42
|
transactionListUIStateByClassKey: {},
|
|
43
43
|
},
|
|
44
|
+
byProject: {
|
|
45
|
+
transactionListByProjectKey: {},
|
|
46
|
+
transactionListUIStateByProjectKey: {},
|
|
47
|
+
},
|
|
44
48
|
};
|
|
45
49
|
const transactionList = (0, toolkit_1.createSlice)({
|
|
46
50
|
name: 'transactionList',
|
|
@@ -250,6 +254,64 @@ const transactionList = (0, toolkit_1.createSlice)({
|
|
|
250
254
|
return { payload: { accountId, accountType, classId, period, error } };
|
|
251
255
|
},
|
|
252
256
|
},
|
|
257
|
+
// Transaction list by project related reducers
|
|
258
|
+
//
|
|
259
|
+
// Mirrors the by-class set; the only behavioural difference is that the
|
|
260
|
+
// server query param is `zeni_project_id` (post-Ayon's accounting #3984
|
|
261
|
+
// rename) and there's no equivalent of `include_sub_class_transactions`
|
|
262
|
+
// — projects don't have a sub-project hierarchy in this layout yet.
|
|
263
|
+
parallelFetchProjectTransactionList: {
|
|
264
|
+
reducer() {
|
|
265
|
+
// Do nothing..
|
|
266
|
+
},
|
|
267
|
+
prepare(accountId, accountType, projectId, period, cacheOverride = false) {
|
|
268
|
+
return {
|
|
269
|
+
payload: { accountId, accountType, projectId, period, cacheOverride },
|
|
270
|
+
};
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
fetchProjectTransactionList: {
|
|
274
|
+
reducer(draft, action) {
|
|
275
|
+
const key = (0, transactionListState_1.getProjectAcTranKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
|
|
276
|
+
if (action.payload.cacheOverride === true ||
|
|
277
|
+
draft.byProject.transactionListByProjectKey[key] == null ||
|
|
278
|
+
(draft.byProject.transactionListByProjectKey[key]?.hasValidState() ===
|
|
279
|
+
false &&
|
|
280
|
+
draft.byProject.transactionListByProjectKey[key]?.fetchState !=
|
|
281
|
+
'In-Progress')) {
|
|
282
|
+
draft.byProject.transactionListByProjectKey[key] = {
|
|
283
|
+
...transactionListState_1.initialProjectTransactionState,
|
|
284
|
+
fetchState: 'In-Progress',
|
|
285
|
+
error: undefined,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
prepare(accountId, accountType, projectId, period, cacheOverride = false) {
|
|
290
|
+
return {
|
|
291
|
+
payload: { accountId, accountType, projectId, period, cacheOverride },
|
|
292
|
+
};
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
updateTransactionListByProject(draft, action) {
|
|
296
|
+
doUpdateTransactionListByProject(draft.byProject.transactionListByProjectKey, action.payload);
|
|
297
|
+
},
|
|
298
|
+
updateTransactionListByProjectUIState(draft, action) {
|
|
299
|
+
const key = (0, transactionListState_1.getProjectAcKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId);
|
|
300
|
+
draft.byProject.transactionListUIStateByProjectKey[key] = Object.assign({}, draft.byProject.transactionListUIStateByProjectKey[key], action.payload.uiState);
|
|
301
|
+
},
|
|
302
|
+
updateTransactionListByProjectFailure: {
|
|
303
|
+
reducer(draft, action) {
|
|
304
|
+
const key = (0, transactionListState_1.getProjectAcTranKey)(action.payload.accountId, action.payload.accountType, action.payload.projectId, action.payload.period);
|
|
305
|
+
draft.byProject.transactionListByProjectKey[key] = {
|
|
306
|
+
...transactionListState_1.initialProjectTransactionState,
|
|
307
|
+
fetchState: 'Error',
|
|
308
|
+
error: action.payload.error,
|
|
309
|
+
};
|
|
310
|
+
},
|
|
311
|
+
prepare(accountId, accountType, projectId, period, error) {
|
|
312
|
+
return { payload: { accountId, accountType, projectId, period, error } };
|
|
313
|
+
},
|
|
314
|
+
},
|
|
253
315
|
parallelFetchTransactionListByCategoryType: {
|
|
254
316
|
reducer() {
|
|
255
317
|
// Do nothing..
|
|
@@ -344,7 +406,7 @@ const transactionList = (0, toolkit_1.createSlice)({
|
|
|
344
406
|
},
|
|
345
407
|
},
|
|
346
408
|
});
|
|
347
|
-
_a = transactionList.actions, exports.parallelFetchAccountTransactionList = _a.parallelFetchAccountTransactionList, exports.fetchAccountTransactionList = _a.fetchAccountTransactionList, exports.updateTransactionListByAccount = _a.updateTransactionListByAccount, exports.updateTransactionListByAccountFailure = _a.updateTransactionListByAccountFailure, exports.parallelFetchEntityTransactionList = _a.parallelFetchEntityTransactionList, exports.fetchEntityTransactionList = _a.fetchEntityTransactionList, exports.updateTransactionListByEntity = _a.updateTransactionListByEntity, exports.updateTransactionListByEntityFailure = _a.updateTransactionListByEntityFailure, exports.updateTransactionListByAccountUIState = _a.updateTransactionListByAccountUIState, exports.parallelFetchClassTransactionList = _a.parallelFetchClassTransactionList, exports.fetchClassTransactionList = _a.fetchClassTransactionList, exports.updateTransactionListByClass = _a.updateTransactionListByClass, exports.updateTransactionListByClassUIState = _a.updateTransactionListByClassUIState, exports.updateTransactionListByClassFailure = _a.updateTransactionListByClassFailure, exports.parallelFetchTransactionListByCategoryType = _a.parallelFetchTransactionListByCategoryType, exports.fetchTransactionsListByCategoryType = _a.fetchTransactionsListByCategoryType, exports.updateTransactionListByCategoryType = _a.updateTransactionListByCategoryType, exports.updateTransactionsListByCategoryTypeFailure = _a.updateTransactionsListByCategoryTypeFailure, exports.updateTransactionListUIStateByCategoryType = _a.updateTransactionListUIStateByCategoryType, exports.clearTransactionList = _a.clearTransactionList, exports.updateLatestTransactionId = _a.updateLatestTransactionId;
|
|
409
|
+
_a = transactionList.actions, exports.parallelFetchAccountTransactionList = _a.parallelFetchAccountTransactionList, exports.fetchAccountTransactionList = _a.fetchAccountTransactionList, exports.updateTransactionListByAccount = _a.updateTransactionListByAccount, exports.updateTransactionListByAccountFailure = _a.updateTransactionListByAccountFailure, exports.parallelFetchEntityTransactionList = _a.parallelFetchEntityTransactionList, exports.fetchEntityTransactionList = _a.fetchEntityTransactionList, exports.updateTransactionListByEntity = _a.updateTransactionListByEntity, exports.updateTransactionListByEntityFailure = _a.updateTransactionListByEntityFailure, exports.updateTransactionListByAccountUIState = _a.updateTransactionListByAccountUIState, exports.parallelFetchClassTransactionList = _a.parallelFetchClassTransactionList, exports.fetchClassTransactionList = _a.fetchClassTransactionList, exports.updateTransactionListByClass = _a.updateTransactionListByClass, exports.updateTransactionListByClassUIState = _a.updateTransactionListByClassUIState, exports.updateTransactionListByClassFailure = _a.updateTransactionListByClassFailure, exports.parallelFetchProjectTransactionList = _a.parallelFetchProjectTransactionList, exports.fetchProjectTransactionList = _a.fetchProjectTransactionList, exports.updateTransactionListByProject = _a.updateTransactionListByProject, exports.updateTransactionListByProjectUIState = _a.updateTransactionListByProjectUIState, exports.updateTransactionListByProjectFailure = _a.updateTransactionListByProjectFailure, exports.parallelFetchTransactionListByCategoryType = _a.parallelFetchTransactionListByCategoryType, exports.fetchTransactionsListByCategoryType = _a.fetchTransactionsListByCategoryType, exports.updateTransactionListByCategoryType = _a.updateTransactionListByCategoryType, exports.updateTransactionsListByCategoryTypeFailure = _a.updateTransactionsListByCategoryTypeFailure, exports.updateTransactionListUIStateByCategoryType = _a.updateTransactionListUIStateByCategoryType, exports.clearTransactionList = _a.clearTransactionList, exports.updateLatestTransactionId = _a.updateLatestTransactionId;
|
|
348
410
|
exports.default = transactionList.reducer;
|
|
349
411
|
/**
|
|
350
412
|
* Helper functions
|
|
@@ -394,3 +456,22 @@ function doUpdateTransactionListByClass(draft, payload) {
|
|
|
394
456
|
transactionIDs,
|
|
395
457
|
};
|
|
396
458
|
}
|
|
459
|
+
function doUpdateTransactionListByProject(draft, payload) {
|
|
460
|
+
const transactionIDs = payload.account.transactions.map((transactionPaylod) => transactionPaylod.transaction_id);
|
|
461
|
+
const account = (0, accountPayload_1.mapAccountBasePayloadToAccountBase)(payload.account);
|
|
462
|
+
const projectId = payload.query.zeni_project_id;
|
|
463
|
+
const start = (0, timePeriod_1.toAbsoluteDay)(payload.query.start_date);
|
|
464
|
+
const end = (0, timePeriod_1.toAbsoluteDay)(payload.query.end_date);
|
|
465
|
+
const key = (0, transactionListState_1.getProjectAcTranKey)(account.accountId, account.accountType, projectId, {
|
|
466
|
+
start,
|
|
467
|
+
end,
|
|
468
|
+
});
|
|
469
|
+
draft[key] = {
|
|
470
|
+
...transactionListState_1.initialProjectTransactionState,
|
|
471
|
+
fetchState: 'Completed',
|
|
472
|
+
error: undefined,
|
|
473
|
+
account: account,
|
|
474
|
+
projectId: projectId,
|
|
475
|
+
transactionIDs,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
@@ -45,6 +45,20 @@ export interface TransactionListByClassState {
|
|
|
45
45
|
transactionListUIStateByClassKey: Record<ClassAcKey, TransactionListUIState>;
|
|
46
46
|
}
|
|
47
47
|
export declare const initialClassTransactionState: ClassAccountTransactions;
|
|
48
|
+
export declare const getProjectAcTranKey: (accountId: ID, accountType: AccountType, projectId: ID, period: TimePeriod) => string;
|
|
49
|
+
export type ProjectAcTranKey = ReturnType<typeof getProjectAcTranKey>;
|
|
50
|
+
export declare const getProjectAcKey: (accountId: ID, accountType: AccountType, projectId: ID) => string;
|
|
51
|
+
type ProjectAcKey = ReturnType<typeof getProjectAcKey>;
|
|
52
|
+
export interface ProjectAccountTransactions extends FetchedState {
|
|
53
|
+
transactionIDs: ID[];
|
|
54
|
+
account?: AccountBase;
|
|
55
|
+
projectId?: ID;
|
|
56
|
+
}
|
|
57
|
+
export interface TransactionListByProjectState {
|
|
58
|
+
transactionListByProjectKey: Record<ProjectAcTranKey, ProjectAccountTransactions>;
|
|
59
|
+
transactionListUIStateByProjectKey: Record<ProjectAcKey, TransactionListUIState>;
|
|
60
|
+
}
|
|
61
|
+
export declare const initialProjectTransactionState: ProjectAccountTransactions;
|
|
48
62
|
export type TransactionCategoryType = 'missingReceipts' | 'miscategorizedExpense' | 'miscategorizedIncome' | 'uncategorizedIncome' | 'uncategorizedExpense';
|
|
49
63
|
export declare const getCategoryTypeTranKey: (categoryType: TransactionCategoryType, period: TimePeriod) => string;
|
|
50
64
|
type CategoryTypeTranKey = ReturnType<typeof getCategoryTypeTranKey>;
|
|
@@ -59,6 +73,7 @@ export interface TransactionListState {
|
|
|
59
73
|
byAccount: TransactionListByAccountState;
|
|
60
74
|
byClass: TransactionListByClassState;
|
|
61
75
|
byEntity: TransactionListByEntityState;
|
|
76
|
+
byProject: TransactionListByProjectState;
|
|
62
77
|
byType: Record<TransactionCategoryType, TransactionListByCategoryState>;
|
|
63
78
|
latestTransactionId?: TransactionID;
|
|
64
79
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.initialTransactionsStateByCategoryType = exports.getCategoryTypeTranKey = exports.initialClassTransactionState = exports.getClassAcKey = exports.getClassAcTranKey = exports.initialEntityTransactionState = exports.getEntityTranKey = exports.accountTransactionsInitialState = exports.getAcKey = exports.getAcTranKey = void 0;
|
|
3
|
+
exports.initialTransactionsStateByCategoryType = exports.getCategoryTypeTranKey = exports.initialProjectTransactionState = exports.getProjectAcKey = exports.getProjectAcTranKey = exports.initialClassTransactionState = exports.getClassAcKey = exports.getClassAcTranKey = exports.initialEntityTransactionState = exports.getEntityTranKey = exports.accountTransactionsInitialState = exports.getAcKey = exports.getAcTranKey = void 0;
|
|
4
4
|
const getAcTranKey = (accountId, accountType, period) => `${accountId}-${accountType}-${period.start.day}_${period.start.month}_${period.start.year}_${period.end.day}_${period.end.month}_${period.end.year}`;
|
|
5
5
|
exports.getAcTranKey = getAcTranKey;
|
|
6
6
|
const getAcKey = (accountId, accountType) => `${accountId}-${accountType}`;
|
|
@@ -38,6 +38,18 @@ exports.initialClassTransactionState = {
|
|
|
38
38
|
return this.fetchState == 'Completed';
|
|
39
39
|
},
|
|
40
40
|
};
|
|
41
|
+
const getProjectAcTranKey = (accountId, accountType, projectId, period) => `${accountId}-${accountType}-${projectId}-${period.start.day}_${period.start.month}_${period.start.year}_${period.end.day}_${period.end.month}_${period.end.year}`;
|
|
42
|
+
exports.getProjectAcTranKey = getProjectAcTranKey;
|
|
43
|
+
const getProjectAcKey = (accountId, accountType, projectId) => `${accountId}-${accountType}-${projectId}`;
|
|
44
|
+
exports.getProjectAcKey = getProjectAcKey;
|
|
45
|
+
exports.initialProjectTransactionState = {
|
|
46
|
+
transactionIDs: [],
|
|
47
|
+
fetchState: 'Not-Started',
|
|
48
|
+
error: undefined,
|
|
49
|
+
hasValidState() {
|
|
50
|
+
return this.fetchState == 'Completed';
|
|
51
|
+
},
|
|
52
|
+
};
|
|
41
53
|
const getCategoryTypeTranKey = (categoryType, period) => `${categoryType}_${period.start.day}_${period.start.month}_${period.start.year}_${period.end.day}_${period.end.month}_${period.end.year}`;
|
|
42
54
|
exports.getCategoryTypeTranKey = getCategoryTypeTranKey;
|
|
43
55
|
exports.initialTransactionsStateByCategoryType = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeniai/client-epic-state",
|
|
3
|
-
"version": "5.0.44-
|
|
3
|
+
"version": "5.0.44-betaRD1",
|
|
4
4
|
"description": "Shared module between Web & Mobile containing required abstractions for state management, async network communication. ",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "lib/esm/index.js",
|