@zeniai/client-epic-state 5.1.80 → 5.1.81
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/reportIDHelper.d.ts +1 -0
- package/lib/commonStateTypes/viewAndReport/reportIDHelper.js +13 -1
- package/lib/commonStateTypes/viewAndReport/viewAndReport.d.ts +2 -2
- package/lib/commonStateTypes/viewAndReport/viewAndReport.js +3 -0
- 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/invoicing/invoicingCommonPayload.d.ts +42 -0
- package/lib/entity/invoicing/invoicingCommonPayload.js +66 -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/tenant/clearAllEpic.d.ts +5 -1
- package/lib/entity/tenant/clearAllEpic.js +8 -0
- package/lib/epic.d.ts +9 -1
- package/lib/epic.js +14 -1
- package/lib/esm/commonStateTypes/viewAndReport/reportIDHelper.js +11 -0
- package/lib/esm/commonStateTypes/viewAndReport/viewAndReport.js +3 -0
- package/lib/esm/entity/invoicing/invoicingCommonPayload.js +61 -0
- package/lib/esm/entity/tenant/clearAllEpic.js +8 -0
- package/lib/esm/epic.js +14 -1
- package/lib/esm/index.js +18 -3
- package/lib/esm/reducer.js +12 -0
- package/lib/esm/view/dashboard/dashboardSelector.js +14 -10
- package/lib/esm/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +4 -18
- package/lib/esm/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +6 -1
- package/lib/esm/view/invoicing/createCreditNote/createCreditNotePayload.js +1 -8
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +4 -5
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +10 -11
- package/lib/esm/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +8 -10
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js +1 -1
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +1 -1
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +43 -1
- package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +2 -5
- package/lib/esm/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +1 -2
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +7 -1
- package/lib/esm/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +3 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +25 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +15 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +15 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +15 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +1 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +26 -0
- package/lib/esm/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +18 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +47 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +128 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +20 -0
- package/lib/esm/view/invoicing/invoicingQboView/invoicingQboViewState.js +1 -0
- package/lib/esm/view/invoicing/issueCreditNote/issueCreditNotePayload.js +4 -11
- package/lib/esm/view/invoicing/recordPayment/recordPaymentFormConfig.js +0 -1
- package/lib/esm/view/invoicing/recordPayment/recordPaymentPayload.js +5 -14
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeForTimeframeProjectViewEpic.js +45 -0
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewEpic.js +30 -0
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewPayload.js +1 -0
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewReducer.js +111 -0
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewSelector.js +65 -0
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewSelectorTypes.js +1 -0
- package/lib/esm/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewState.js +1 -0
- package/lib/esm/view/opExProjectView/opExForTimeframeProjectViewEpic.js +43 -0
- package/lib/esm/view/opExProjectView/opExProjectViewEpic.js +30 -0
- package/lib/esm/view/opExProjectView/opExProjectViewPayload.js +1 -0
- package/lib/esm/view/opExProjectView/opExProjectViewReducer.js +111 -0
- package/lib/esm/view/opExProjectView/opExProjectViewSelector.js +52 -0
- package/lib/esm/view/opExProjectView/opExProjectViewSelectorTypes.js +1 -0
- package/lib/esm/view/opExProjectView/opExProjectViewState.js +1 -0
- package/lib/esm/view/reportsResync/reportsClassViewRefetchingEpic.js +0 -4
- package/lib/esm/view/reportsResync/reportsProjectViewRefetchingEpic.js +30 -0
- package/lib/esm/view/reportsResync/reportsResyncEpic.js +11 -3
- package/lib/esm/view/reportsResync/reportsResyncReducer.js +9 -1
- package/lib/esm/view/revenueProjectView/revenueForTimeframeProjectViewEpic.js +35 -0
- package/lib/esm/view/revenueProjectView/revenueProjectViewEpic.js +30 -0
- package/lib/esm/view/revenueProjectView/revenueProjectViewPayload.js +1 -0
- package/lib/esm/view/revenueProjectView/revenueProjectViewReducer.js +111 -0
- package/lib/esm/view/revenueProjectView/revenueProjectViewSelector.js +58 -0
- package/lib/esm/view/revenueProjectView/revenueProjectViewSelectorTypes.js +1 -0
- package/lib/esm/view/revenueProjectView/revenueProjectViewState.js +1 -0
- package/lib/index.d.ts +26 -3
- package/lib/index.js +106 -50
- package/lib/reducer.d.ts +12 -0
- package/lib/reducer.js +12 -0
- 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/dashboard/dashboardSelector.d.ts +2 -3
- package/lib/view/dashboard/dashboardSelector.js +13 -9
- package/lib/view/expenseAutomationView/selectors/transactionCategorizationSelector.js +3 -17
- package/lib/view/financeStatement/financeStatementReducer.d.ts +1 -1
- package/lib/view/globalMerchantView/globalMerchantViewReducer.d.ts +2 -2
- package/lib/view/invoicing/createCreditNote/createCreditNoteFormConfig.js +6 -1
- package/lib/view/invoicing/createCreditNote/createCreditNotePayload.js +1 -8
- package/lib/view/invoicing/createCreditNote/createCreditNoteState.d.ts +3 -1
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.d.ts +2 -1
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/catalogDetailEditPayload.js +4 -5
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewPayload.js +10 -11
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/editInvoicingCatalogItemDetailViewState.d.ts +10 -5
- package/lib/view/invoicing/editInvoicingCatalogItemDetailView/invoicingCatalogItemFormConfig.js +8 -10
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewPayload.js +2 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewReducer.js +3 -3
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewSelector.js +2 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.d.ts +9 -2
- package/lib/view/invoicing/editInvoicingCouponDetailView/editInvoicingCouponDetailViewState.js +45 -0
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewPayload.js +2 -5
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/editInvoicingSubscriptionDetailViewState.d.ts +3 -1
- package/lib/view/invoicing/editInvoicingSubscriptionDetailView/invoicingSubscriptionFormConfig.js +1 -2
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewPayload.d.ts +4 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.d.ts +1 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewReducer.js +6 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.d.ts +4 -1
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewSelector.js +3 -0
- package/lib/view/invoicing/invoicingConfigView/invoicingConfigViewState.d.ts +4 -1
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboAccountsEpic.js +29 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboClassesEpic.js +19 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboConnectionEpic.js +19 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/fetchInvoicingQboSyncHealthEpic.js +19 -0
- package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.d.ts +2 -0
- package/lib/view/invoicing/invoicingQboView/epics/invoicingQboViewActionType.js +2 -0
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/retryInvoicingQboSyncTaskEpic.js +30 -0
- package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.d.ts +6 -0
- package/lib/view/invoicing/invoicingQboView/epics/startInvoicingQboBackfillEpic.js +22 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.d.ts +79 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewPayload.js +52 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.d.ts +25 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewReducer.js +132 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.d.ts +21 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewSelector.js +24 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.d.ts +14 -0
- package/lib/view/invoicing/invoicingQboView/invoicingQboViewState.js +2 -0
- package/lib/view/invoicing/issueCreditNote/issueCreditNotePayload.js +4 -11
- package/lib/view/invoicing/issueCreditNote/issueCreditNoteState.d.ts +3 -2
- package/lib/view/invoicing/recordPayment/recordPaymentFormConfig.js +0 -1
- package/lib/view/invoicing/recordPayment/recordPaymentPayload.js +5 -14
- package/lib/view/invoicing/recordPayment/recordPaymentState.d.ts +4 -2
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeForTimeframeProjectViewEpic.d.ts +9 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeForTimeframeProjectViewEpic.js +49 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewEpic.d.ts +6 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewEpic.js +34 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewPayload.d.ts +11 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewPayload.js +2 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewReducer.d.ts +33 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewReducer.js +115 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewSelector.d.ts +13 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewSelector.js +69 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewSelectorTypes.d.ts +21 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewSelectorTypes.js +2 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewState.d.ts +20 -0
- package/lib/view/netBurnOrIncomeProjectView/netBurnOrIncomeProjectViewState.js +2 -0
- package/lib/view/opExProjectView/opExForTimeframeProjectViewEpic.d.ts +9 -0
- package/lib/view/opExProjectView/opExForTimeframeProjectViewEpic.js +47 -0
- package/lib/view/opExProjectView/opExProjectViewEpic.d.ts +6 -0
- package/lib/view/opExProjectView/opExProjectViewEpic.js +34 -0
- package/lib/view/opExProjectView/opExProjectViewPayload.d.ts +6 -0
- package/lib/view/opExProjectView/opExProjectViewPayload.js +2 -0
- package/lib/view/opExProjectView/opExProjectViewReducer.d.ts +33 -0
- package/lib/view/opExProjectView/opExProjectViewReducer.js +115 -0
- package/lib/view/opExProjectView/opExProjectViewSelector.d.ts +12 -0
- package/lib/view/opExProjectView/opExProjectViewSelector.js +56 -0
- package/lib/view/opExProjectView/opExProjectViewSelectorTypes.d.ts +19 -0
- package/lib/view/opExProjectView/opExProjectViewSelectorTypes.js +2 -0
- package/lib/view/opExProjectView/opExProjectViewState.d.ts +20 -0
- package/lib/view/opExProjectView/opExProjectViewState.js +2 -0
- package/lib/view/reimbursementCard/reimbursementCardSelector.d.ts +1 -1
- package/lib/view/reportsResync/reportsClassViewRefetchingEpic.d.ts +1 -2
- package/lib/view/reportsResync/reportsClassViewRefetchingEpic.js +0 -4
- package/lib/view/reportsResync/reportsProjectViewRefetchingEpic.d.ts +10 -0
- package/lib/view/reportsResync/reportsProjectViewRefetchingEpic.js +34 -0
- package/lib/view/reportsResync/reportsResyncEpic.d.ts +2 -2
- package/lib/view/reportsResync/reportsResyncEpic.js +10 -2
- package/lib/view/reportsResync/reportsResyncReducer.d.ts +5 -3
- package/lib/view/reportsResync/reportsResyncReducer.js +10 -2
- package/lib/view/revenueProjectView/revenueForTimeframeProjectViewEpic.d.ts +9 -0
- package/lib/view/revenueProjectView/revenueForTimeframeProjectViewEpic.js +39 -0
- package/lib/view/revenueProjectView/revenueProjectViewEpic.d.ts +6 -0
- package/lib/view/revenueProjectView/revenueProjectViewEpic.js +34 -0
- package/lib/view/revenueProjectView/revenueProjectViewPayload.d.ts +9 -0
- package/lib/view/revenueProjectView/revenueProjectViewPayload.js +2 -0
- package/lib/view/revenueProjectView/revenueProjectViewReducer.d.ts +33 -0
- package/lib/view/revenueProjectView/revenueProjectViewReducer.js +115 -0
- package/lib/view/revenueProjectView/revenueProjectViewSelector.d.ts +12 -0
- package/lib/view/revenueProjectView/revenueProjectViewSelector.js +62 -0
- package/lib/view/revenueProjectView/revenueProjectViewSelectorTypes.d.ts +19 -0
- package/lib/view/revenueProjectView/revenueProjectViewSelectorTypes.js +2 -0
- package/lib/view/revenueProjectView/revenueProjectViewState.d.ts +20 -0
- package/lib/view/revenueProjectView/revenueProjectViewState.js +2 -0
- package/lib/view/tasksCard/tasksCardSelector.d.ts +1 -1
- package/lib/view/topEx/topExSelector.d.ts +1 -1
- package/package.json +1 -1
- package/lib/esm/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +0 -44
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.d.ts +0 -5
- package/lib/view/invoicing/editInvoicingCouponDetailView/invoicingCouponFormConfig.js +0 -48
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchNetBurnOrIncomeProjectViewEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const netBurnOrIncomeProjectViewReducer_1 = require("./netBurnOrIncomeProjectViewReducer");
|
|
7
|
+
const fetchNetBurnOrIncomeProjectViewEpic = (actions$, state) => actions$.pipe((0, operators_1.filter)(netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeProjectView.match), (0, operators_1.switchMap)((action) => {
|
|
8
|
+
const { cacheOverride } = action.payload;
|
|
9
|
+
if (cacheOverride === true) {
|
|
10
|
+
return (0, rxjs_1.from)([
|
|
11
|
+
(0, netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeForTimeframeProjectView)('month'),
|
|
12
|
+
(0, netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeForTimeframeProjectView)('quarter'),
|
|
13
|
+
(0, netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeForTimeframeProjectView)('year'),
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const fetchActions = [];
|
|
18
|
+
const projectFetchState = state.value.netBurnOrIncomeProjectViewState.fetchState;
|
|
19
|
+
if (projectFetchState['month'].fetchState !== 'In-Progress' &&
|
|
20
|
+
projectFetchState['month'].fetchState !== 'Completed') {
|
|
21
|
+
fetchActions.push((0, netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeForTimeframeProjectView)('month'));
|
|
22
|
+
}
|
|
23
|
+
if (projectFetchState['quarter'].fetchState !== 'In-Progress' &&
|
|
24
|
+
projectFetchState['quarter'].fetchState !== 'Completed') {
|
|
25
|
+
fetchActions.push((0, netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeForTimeframeProjectView)('quarter'));
|
|
26
|
+
}
|
|
27
|
+
if (projectFetchState['year'].fetchState !== 'In-Progress' &&
|
|
28
|
+
projectFetchState['year'].fetchState !== 'Completed') {
|
|
29
|
+
fetchActions.push((0, netBurnOrIncomeProjectViewReducer_1.fetchNetBurnOrIncomeForTimeframeProjectView)('year'));
|
|
30
|
+
}
|
|
31
|
+
return (0, rxjs_1.from)(fetchActions);
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
exports.fetchNetBurnOrIncomeProjectViewEpic = fetchNetBurnOrIncomeProjectViewEpic;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { COABalanceGroupedPayloadV2 } from '../../commonPayloadTypes/v2/coaBalancePayload';
|
|
2
|
+
import { ZeniReportResponse } from '../../responsePayload';
|
|
3
|
+
import { ReportByProjectMetadataPayloadV2, SectionByProjectCOABalanceGroupedPayloadV2 } from '../profitAndLossProjectView/profitAndLossProjectViewPayload';
|
|
4
|
+
export interface NetBurnOrIncomeProjectViewPayload extends ReportByProjectMetadataPayloadV2 {
|
|
5
|
+
cogs: SectionByProjectCOABalanceGroupedPayloadV2;
|
|
6
|
+
expenses: SectionByProjectCOABalanceGroupedPayloadV2;
|
|
7
|
+
gross_burn: COABalanceGroupedPayloadV2;
|
|
8
|
+
income: SectionByProjectCOABalanceGroupedPayloadV2;
|
|
9
|
+
net_burn_or_income: COABalanceGroupedPayloadV2;
|
|
10
|
+
}
|
|
11
|
+
export type NetBurnOrIncomeReportProjectViewResponse = ZeniReportResponse<NetBurnOrIncomeProjectViewPayload>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AccountViewMode, ID } from '../../commonStateTypes/common';
|
|
2
|
+
import { ZeniAPIStatus, ZeniReportData } from '../../responsePayload';
|
|
3
|
+
import { NetBurnOrIncomeProjectViewPayload } from './netBurnOrIncomeProjectViewPayload';
|
|
4
|
+
import { NetBurnOrIncomeProjectViewState } from './netBurnOrIncomeProjectViewState';
|
|
5
|
+
export declare const initialState: NetBurnOrIncomeProjectViewState;
|
|
6
|
+
export declare const fetchNetBurnOrIncomeProjectView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[cacheOverride?: boolean | undefined], {
|
|
7
|
+
cacheOverride: boolean;
|
|
8
|
+
}, "netBurnOrIncomeProjectView/fetchNetBurnOrIncomeProjectView", never, never>, fetchNetBurnOrIncomeForTimeframeProjectView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[timeframe: "month" | "year" | "quarter", fetchFullReport?: boolean | undefined, cacheOverride?: boolean | undefined], {
|
|
9
|
+
timeframe: "month" | "year" | "quarter";
|
|
10
|
+
fetchFullReport: boolean;
|
|
11
|
+
cacheOverride: boolean;
|
|
12
|
+
}, "netBurnOrIncomeProjectView/fetchNetBurnOrIncomeForTimeframeProjectView", never, never>, updateNetBurnOrIncomeForTimeframeProjectView: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
13
|
+
report: ZeniReportData<NetBurnOrIncomeProjectViewPayload>;
|
|
14
|
+
timeframe: "month" | "quarter" | "year";
|
|
15
|
+
}, "netBurnOrIncomeProjectView/updateNetBurnOrIncomeForTimeframeProjectView">, updateNetBurnOrIncomeForTimeframeProjectViewFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[error: ZeniAPIStatus<Record<string, unknown>>, timeframe: "month" | "year" | "quarter"], {
|
|
16
|
+
error: ZeniAPIStatus<Record<string, unknown>>;
|
|
17
|
+
timeframe: "month" | "year" | "quarter";
|
|
18
|
+
}, "netBurnOrIncomeProjectView/updateNetBurnOrIncomeForTimeframeProjectViewFailure", never, never>, updateProjectsToFilterOut: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
19
|
+
projectsToFilterOut: ID[];
|
|
20
|
+
}, "netBurnOrIncomeProjectView/updateProjectsToFilterOut">, updateNetBurnOrIncomeProjectViewUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
21
|
+
nodeCollapseState?: {
|
|
22
|
+
isCollapsed: boolean;
|
|
23
|
+
nodeId: ID;
|
|
24
|
+
};
|
|
25
|
+
scrollPosition?: {
|
|
26
|
+
scrollTop: number;
|
|
27
|
+
scrollLeft?: number;
|
|
28
|
+
};
|
|
29
|
+
}, "netBurnOrIncomeProjectView/updateNetBurnOrIncomeProjectViewUIState">, updateProjectViewAccountViewMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
30
|
+
viewMode: AccountViewMode;
|
|
31
|
+
}, "netBurnOrIncomeProjectView/updateProjectViewAccountViewMode">, resetProjectNodeCollapseState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"netBurnOrIncomeProjectView/resetProjectNodeCollapseState">, clearNetBurnOrIncomeProjectView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"netBurnOrIncomeProjectView/clearNetBurnOrIncomeProjectView">;
|
|
32
|
+
declare const _default: import("redux").Reducer<NetBurnOrIncomeProjectViewState>;
|
|
33
|
+
export default _default;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.clearNetBurnOrIncomeProjectView = exports.resetProjectNodeCollapseState = exports.updateProjectViewAccountViewMode = exports.updateNetBurnOrIncomeProjectViewUIState = exports.updateProjectsToFilterOut = exports.updateNetBurnOrIncomeForTimeframeProjectViewFailure = exports.updateNetBurnOrIncomeForTimeframeProjectView = exports.fetchNetBurnOrIncomeForTimeframeProjectView = exports.fetchNetBurnOrIncomeProjectView = exports.initialState = void 0;
|
|
5
|
+
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
|
+
const viewAndReportPayloadv2_1 = require("../../commonPayloadTypes/v2/viewAndReportPayloadv2");
|
|
7
|
+
exports.initialState = {
|
|
8
|
+
fetchState: {
|
|
9
|
+
month: {
|
|
10
|
+
fetchState: 'Not-Started',
|
|
11
|
+
error: undefined,
|
|
12
|
+
},
|
|
13
|
+
quarter: {
|
|
14
|
+
fetchState: 'Not-Started',
|
|
15
|
+
error: undefined,
|
|
16
|
+
},
|
|
17
|
+
year: {
|
|
18
|
+
fetchState: 'Not-Started',
|
|
19
|
+
error: undefined,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
firstMonthOfFY: 1,
|
|
23
|
+
projectIds: [],
|
|
24
|
+
reportId: 'net_burn_or_income_by_projects',
|
|
25
|
+
reportTitle: 'Net Income',
|
|
26
|
+
uiState: {
|
|
27
|
+
accountViewMode: 'account_group',
|
|
28
|
+
nodeCollapseState: {},
|
|
29
|
+
projectsToFilterOut: [],
|
|
30
|
+
scrollPosition: undefined,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const netBurnOrIncomeProjectView = (0, toolkit_1.createSlice)({
|
|
34
|
+
name: 'netBurnOrIncomeProjectView',
|
|
35
|
+
initialState: exports.initialState,
|
|
36
|
+
reducers: {
|
|
37
|
+
fetchNetBurnOrIncomeProjectView: {
|
|
38
|
+
prepare(cacheOverride = false) {
|
|
39
|
+
return { payload: { cacheOverride } };
|
|
40
|
+
},
|
|
41
|
+
reducer(
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
43
|
+
_draft,
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
45
|
+
_action) {
|
|
46
|
+
// nothing to do here
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
fetchNetBurnOrIncomeForTimeframeProjectView: {
|
|
50
|
+
prepare(timeframe, fetchFullReport = true, cacheOverride = false) {
|
|
51
|
+
return { payload: { timeframe, fetchFullReport, cacheOverride } };
|
|
52
|
+
},
|
|
53
|
+
reducer(draft, action) {
|
|
54
|
+
const timeframe = action.payload.timeframe;
|
|
55
|
+
draft.fetchState[timeframe].fetchState = 'In-Progress';
|
|
56
|
+
draft.fetchState[timeframe].error = undefined;
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
updateNetBurnOrIncomeForTimeframeProjectView(draft, action) {
|
|
60
|
+
doUpdateNetBurnOrIncomeProjectView(draft, action.payload.timeframe, action.payload.report);
|
|
61
|
+
},
|
|
62
|
+
updateNetBurnOrIncomeForTimeframeProjectViewFailure: {
|
|
63
|
+
prepare(error, timeframe) {
|
|
64
|
+
return {
|
|
65
|
+
payload: {
|
|
66
|
+
error,
|
|
67
|
+
timeframe,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
reducer(draft, action) {
|
|
72
|
+
draft.fetchState[action.payload.timeframe] = {
|
|
73
|
+
fetchState: 'Error',
|
|
74
|
+
error: action.payload.error,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
updateProjectsToFilterOut(draft, action) {
|
|
79
|
+
draft.uiState.projectsToFilterOut = action.payload.projectsToFilterOut;
|
|
80
|
+
},
|
|
81
|
+
updateNetBurnOrIncomeProjectViewUIState(draft, action) {
|
|
82
|
+
const { nodeCollapseState, scrollPosition } = action.payload;
|
|
83
|
+
if (nodeCollapseState != null) {
|
|
84
|
+
draft.uiState.nodeCollapseState = Object.assign({}, draft.uiState.nodeCollapseState, {
|
|
85
|
+
[nodeCollapseState.nodeId]: nodeCollapseState.isCollapsed,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (scrollPosition != null) {
|
|
89
|
+
draft.uiState.scrollPosition = scrollPosition;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
updateProjectViewAccountViewMode(draft, action) {
|
|
93
|
+
draft.uiState.accountViewMode = action.payload.viewMode;
|
|
94
|
+
},
|
|
95
|
+
resetProjectNodeCollapseState(draft) {
|
|
96
|
+
draft.uiState.nodeCollapseState = {};
|
|
97
|
+
},
|
|
98
|
+
clearNetBurnOrIncomeProjectView(draft) {
|
|
99
|
+
Object.assign(draft, exports.initialState);
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
_a = netBurnOrIncomeProjectView.actions, exports.fetchNetBurnOrIncomeProjectView = _a.fetchNetBurnOrIncomeProjectView, exports.fetchNetBurnOrIncomeForTimeframeProjectView = _a.fetchNetBurnOrIncomeForTimeframeProjectView, exports.updateNetBurnOrIncomeForTimeframeProjectView = _a.updateNetBurnOrIncomeForTimeframeProjectView, exports.updateNetBurnOrIncomeForTimeframeProjectViewFailure = _a.updateNetBurnOrIncomeForTimeframeProjectViewFailure, exports.updateProjectsToFilterOut = _a.updateProjectsToFilterOut, exports.updateNetBurnOrIncomeProjectViewUIState = _a.updateNetBurnOrIncomeProjectViewUIState, exports.updateProjectViewAccountViewMode = _a.updateProjectViewAccountViewMode, exports.resetProjectNodeCollapseState = _a.resetProjectNodeCollapseState, exports.clearNetBurnOrIncomeProjectView = _a.clearNetBurnOrIncomeProjectView;
|
|
104
|
+
exports.default = netBurnOrIncomeProjectView.reducer;
|
|
105
|
+
const doUpdateNetBurnOrIncomeProjectView = (draft, timeframe, netBurnReport) => {
|
|
106
|
+
const report = (0, viewAndReportPayloadv2_1.mapReportPayloadV2ToReportV2)(netBurnReport.report);
|
|
107
|
+
draft.dataAvailable = report.dataAvailable;
|
|
108
|
+
draft.firstMonthOfFY = report.firstMonthOfFY;
|
|
109
|
+
draft.bookCloseDate = report.bookCloseDate;
|
|
110
|
+
draft.status = report.status;
|
|
111
|
+
draft.fetchState[timeframe].fetchState = 'Completed';
|
|
112
|
+
if (draft.projectIds.length <= 0) {
|
|
113
|
+
draft.projectIds = netBurnReport.report.projects.map((project) => project.accounting_project_id);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { COABalancesFilterProjectView } from '../../commonStateTypes/coaBalance/coaBalancesFilterProjectView';
|
|
2
|
+
import { AccountState } from '../../entity/account/accountState';
|
|
3
|
+
import { ProjectState } from '../../entity/project/projectReducer';
|
|
4
|
+
import { SectionProjectViewState } from '../../entity/sectionProjectView/sectionProjectViewState';
|
|
5
|
+
import { RootState } from '../../reducer';
|
|
6
|
+
import { NetBurnOrIncomeWithForecastState } from '../netBurnOrIncome/netBurnOrIncomeState';
|
|
7
|
+
import { NetBurnOrIncomeClassesViewCalculatedSectionID, NetBurnOrIncomeClassesViewSectionID } from '../netBurnOrIncomeClassesView/netBurnOrIncomeClassesViewSelectorTypes';
|
|
8
|
+
import { NetBurnOrIncomeProjectViewReport } from './netBurnOrIncomeProjectViewSelectorTypes';
|
|
9
|
+
import { NetBurnOrIncomeProjectViewState } from './netBurnOrIncomeProjectViewState';
|
|
10
|
+
export declare const netBurnOrIncomeProjectIdsInOrder: (NetBurnOrIncomeClassesViewSectionID | NetBurnOrIncomeClassesViewCalculatedSectionID)[];
|
|
11
|
+
export declare const getNetBurnOrIncomeProjectView: (filter: COABalancesFilterProjectView, accountState: AccountState, projectState: ProjectState, sectionsState: SectionProjectViewState, netBurnOrIncomeWithForecastState: NetBurnOrIncomeWithForecastState, netBurnOrIncomeProjectViewState: NetBurnOrIncomeProjectViewState) => NetBurnOrIncomeProjectViewReport;
|
|
12
|
+
export declare const getNetBurnOrIncomeProjectViewForSelectedRange: (state: RootState) => NetBurnOrIncomeProjectViewReport;
|
|
13
|
+
export declare const getNetBurnOrIncomeProjectViewForHighlightedRange: (state: RootState) => NetBurnOrIncomeProjectViewReport;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getNetBurnOrIncomeProjectViewForHighlightedRange = exports.getNetBurnOrIncomeProjectViewForSelectedRange = exports.getNetBurnOrIncomeProjectView = exports.netBurnOrIncomeProjectIdsInOrder = void 0;
|
|
4
|
+
const toolkit_1 = require("@reduxjs/toolkit");
|
|
5
|
+
const getDifferenceOfBalancesGroupedByPeriod_1 = require("../../commonStateTypes/coaBalance/classBalances/getDifferenceOfBalancesGroupedByPeriod");
|
|
6
|
+
const getSumOfBalancesGroupedByPeriod_1 = require("../../commonStateTypes/coaBalance/classBalances/getSumOfBalancesGroupedByPeriod");
|
|
7
|
+
const coaBalance_1 = require("../../commonStateTypes/coaBalance/coaBalance");
|
|
8
|
+
const coaBalancesFilterProjectView_1 = require("../../commonStateTypes/coaBalance/coaBalancesFilterProjectView");
|
|
9
|
+
const reduceFetchState_1 = require("../../commonStateTypes/reduceFetchState");
|
|
10
|
+
const projectSelector_1 = require("../../entity/project/projectSelector");
|
|
11
|
+
const sectionProjectViewSelector_1 = require("../../entity/sectionProjectView/sectionProjectViewSelector");
|
|
12
|
+
const netBurnOrIncomeClassesViewSelectorTypes_1 = require("../netBurnOrIncomeClassesView/netBurnOrIncomeClassesViewSelectorTypes");
|
|
13
|
+
exports.netBurnOrIncomeProjectIdsInOrder = ['income', 'cogs', 'expenses', 'grossBurn', 'netBurnOrIncome'];
|
|
14
|
+
const getNetBurnOrIncomeProjectView = (filter, accountState, projectState, sectionsState, netBurnOrIncomeWithForecastState, netBurnOrIncomeProjectViewState) => {
|
|
15
|
+
const fetchState = (0, reduceFetchState_1.reduceFetchStateParallelTimeframes)([
|
|
16
|
+
netBurnOrIncomeProjectViewState.fetchState.month,
|
|
17
|
+
netBurnOrIncomeProjectViewState.fetchState.quarter,
|
|
18
|
+
netBurnOrIncomeProjectViewState.fetchState.year,
|
|
19
|
+
]);
|
|
20
|
+
const reportId = 'net_burn_or_income_by_projects';
|
|
21
|
+
const sections = {};
|
|
22
|
+
const calculatedSections = {};
|
|
23
|
+
if (fetchState.fetchState === 'Completed') {
|
|
24
|
+
netBurnOrIncomeClassesViewSelectorTypes_1.ALL_NETBURN_OR_INCOME_CLASSES_VIEW_SECTION_IDS.forEach((sectionId) => {
|
|
25
|
+
sections[`${sectionId}`] = (0, sectionProjectViewSelector_1.getSectionProjectViewReport)(accountState, projectState, sectionsState, netBurnOrIncomeProjectViewState.projectIds, {
|
|
26
|
+
reportId,
|
|
27
|
+
sectionId,
|
|
28
|
+
}, filter);
|
|
29
|
+
});
|
|
30
|
+
const grossBurnBalancesByPeriod = (0, getSumOfBalancesGroupedByPeriod_1.getSumOfBalancesByGroupedByPeriod)([
|
|
31
|
+
sections['expenses'].sectionBalancesTotalByPeriod,
|
|
32
|
+
sections['cogs'].sectionBalancesTotalByPeriod,
|
|
33
|
+
]);
|
|
34
|
+
calculatedSections['grossBurn'] = (0, coaBalance_1.getCOABalances)(grossBurnBalancesByPeriod, filter);
|
|
35
|
+
const netBurnOrIncomeBalances = (0, getDifferenceOfBalancesGroupedByPeriod_1.getDifferenceOfBalancesGroupedByPeriod)(sections['income'].sectionBalancesTotalByPeriod, grossBurnBalancesByPeriod);
|
|
36
|
+
calculatedSections['netBurnOrIncome'] = (0, coaBalance_1.getCOABalances)(netBurnOrIncomeBalances, filter);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
sections,
|
|
40
|
+
calculatedSections,
|
|
41
|
+
reportId: netBurnOrIncomeProjectViewState.reportId,
|
|
42
|
+
reportTitle: netBurnOrIncomeProjectViewState.reportTitle,
|
|
43
|
+
firstMonthOfFY: netBurnOrIncomeProjectViewState.firstMonthOfFY,
|
|
44
|
+
dataAvailable: netBurnOrIncomeProjectViewState.dataAvailable,
|
|
45
|
+
bookCloseDate: netBurnOrIncomeProjectViewState.bookCloseDate,
|
|
46
|
+
version: netBurnOrIncomeProjectViewState.version,
|
|
47
|
+
status: netBurnOrIncomeProjectViewState.status,
|
|
48
|
+
fetchState: fetchState.fetchState,
|
|
49
|
+
error: fetchState.error,
|
|
50
|
+
filter,
|
|
51
|
+
uiState: netBurnOrIncomeProjectViewState.uiState,
|
|
52
|
+
projects: (0, projectSelector_1.getProjectsByIds)(projectState, netBurnOrIncomeProjectViewState.projectIds),
|
|
53
|
+
projectsToFilterOut: netBurnOrIncomeProjectViewState.uiState.projectsToFilterOut,
|
|
54
|
+
idsInOrder: exports.netBurnOrIncomeProjectIdsInOrder,
|
|
55
|
+
runwayAndAverages: netBurnOrIncomeWithForecastState.netBurnOrIncome.runwayAndAverages,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
exports.getNetBurnOrIncomeProjectView = getNetBurnOrIncomeProjectView;
|
|
59
|
+
exports.getNetBurnOrIncomeProjectViewForSelectedRange = (0, toolkit_1.createSelector)((state) => state.accountState, (state) => state.projectState, (state) => state.sectionProjectViewState, (state) => state.netBurnOrIncomeState, (state) => state.netBurnOrIncomeProjectViewState, (accountState, projectState, sectionsState, netBurnOrIncomeState, netBurnOrIncomeProjectViewState) => {
|
|
60
|
+
const { timeframe, selectedCOABalancesRange, selectedAdditionalBalances } = netBurnOrIncomeState.uiState;
|
|
61
|
+
const noFilter = (0, coaBalancesFilterProjectView_1.newBalancesFilterProjectView)(netBurnOrIncomeState.netBurnOrIncome.firstMonthOfFY, timeframe, selectedCOABalancesRange.numberOfPeriods, selectedCOABalancesRange.thisPeriod, 'ascending_date', selectedAdditionalBalances, netBurnOrIncomeProjectViewState.uiState.projectsToFilterOut);
|
|
62
|
+
return (0, exports.getNetBurnOrIncomeProjectView)(noFilter, accountState, projectState, sectionsState, netBurnOrIncomeState, netBurnOrIncomeProjectViewState);
|
|
63
|
+
});
|
|
64
|
+
exports.getNetBurnOrIncomeProjectViewForHighlightedRange = (0, toolkit_1.createSelector)((state) => state.accountState, (state) => state.projectState, (state) => state.sectionProjectViewState, (state) => state.netBurnOrIncomeState, (state) => state.netBurnOrIncomeProjectViewState, (accountState, projectState, sectionsState, netBurnOrIncomeState, netBurnOrIncomeProjectViewState) => {
|
|
65
|
+
const { timeframe, highlightedCOABalancesRange, selectedAdditionalBalances, maxNumOfPeriodsToHighlight, } = netBurnOrIncomeState.uiState;
|
|
66
|
+
const filter = (0, coaBalancesFilterProjectView_1.newBalancesFilterProjectView)(netBurnOrIncomeState.netBurnOrIncome.firstMonthOfFY, timeframe, highlightedCOABalancesRange?.numberOfPeriods ??
|
|
67
|
+
maxNumOfPeriodsToHighlight, highlightedCOABalancesRange?.thisPeriod, 'ascending_date', selectedAdditionalBalances, netBurnOrIncomeProjectViewState.uiState.projectsToFilterOut);
|
|
68
|
+
return (0, exports.getNetBurnOrIncomeProjectView)(filter, accountState, projectState, sectionsState, netBurnOrIncomeState, netBurnOrIncomeProjectViewState);
|
|
69
|
+
});
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { COABalancesFilterProjectView } from '../../commonStateTypes/coaBalance/coaBalancesFilterProjectView';
|
|
2
|
+
import { ID } from '../../commonStateTypes/common';
|
|
3
|
+
import { DataAvailable } from '../../commonStateTypes/dataAvailable';
|
|
4
|
+
import { CalculatedSection } from '../../commonStateTypes/selectorTypes/selectorTypes';
|
|
5
|
+
import { SelectorReport } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
6
|
+
import { Project } from '../../entity/project/projectState';
|
|
7
|
+
import { SectionProjectViewReport } from '../../entity/sectionProjectView/sectionProjectViewSelectorTypes';
|
|
8
|
+
import { RunwayAndAverages } from '../netBurnOrIncome/netBurnOrIncomeState';
|
|
9
|
+
import { NetBurnOrIncomeClassesViewCalculatedSectionID, NetBurnOrIncomeClassesViewSectionID } from '../netBurnOrIncomeClassesView/netBurnOrIncomeClassesViewSelectorTypes';
|
|
10
|
+
import { NetBurnOrIncomeProjectViewUIState } from './netBurnOrIncomeProjectViewState';
|
|
11
|
+
export interface NetBurnOrIncomeProjectViewReport extends SelectorReport {
|
|
12
|
+
calculatedSections: Record<NetBurnOrIncomeClassesViewCalculatedSectionID, CalculatedSection>;
|
|
13
|
+
filter: COABalancesFilterProjectView;
|
|
14
|
+
idsInOrder: (NetBurnOrIncomeClassesViewSectionID | NetBurnOrIncomeClassesViewCalculatedSectionID)[];
|
|
15
|
+
projects: Project[];
|
|
16
|
+
projectsToFilterOut: ID[];
|
|
17
|
+
runwayAndAverages: RunwayAndAverages;
|
|
18
|
+
sections: Record<NetBurnOrIncomeClassesViewSectionID, SectionProjectViewReport>;
|
|
19
|
+
uiState: NetBurnOrIncomeProjectViewUIState;
|
|
20
|
+
dataAvailable?: DataAvailable;
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AccountViewMode, FetchStateAndError, ID } from '../../commonStateTypes/common';
|
|
2
|
+
import { Report } from '../../commonStateTypes/viewAndReport/viewAndReport';
|
|
3
|
+
export interface NetBurnOrIncomeProjectViewUIState {
|
|
4
|
+
accountViewMode: AccountViewMode;
|
|
5
|
+
nodeCollapseState: Record<ID, boolean>;
|
|
6
|
+
projectsToFilterOut: ID[];
|
|
7
|
+
scrollPosition: {
|
|
8
|
+
scrollTop: number;
|
|
9
|
+
scrollLeft?: number;
|
|
10
|
+
} | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface NetBurnOrIncomeProjectViewState extends Report {
|
|
13
|
+
fetchState: {
|
|
14
|
+
month: FetchStateAndError;
|
|
15
|
+
quarter: FetchStateAndError;
|
|
16
|
+
year: FetchStateAndError;
|
|
17
|
+
};
|
|
18
|
+
projectIds: ID[];
|
|
19
|
+
uiState: NetBurnOrIncomeProjectViewUIState;
|
|
20
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { updateProjects } from '../../entity/project/projectReducer';
|
|
4
|
+
import { updateSectionProjectView } from '../../entity/sectionProjectView/sectionProjectViewReducer';
|
|
5
|
+
import { RootState } from '../../reducer';
|
|
6
|
+
import { ZeniAPI } from '../../zeniAPI';
|
|
7
|
+
import { fetchOpExForTimeframeProjectView, updateOpExForTimeframeProjectView, updateOpExForTimeframeProjectViewFailure } from './opExProjectViewReducer';
|
|
8
|
+
export type ActionType = ReturnType<typeof fetchOpExForTimeframeProjectView> | ReturnType<typeof updateOpExForTimeframeProjectView> | ReturnType<typeof updateOpExForTimeframeProjectViewFailure> | ReturnType<typeof updateProjects> | ReturnType<typeof updateSectionProjectView>;
|
|
9
|
+
export declare const fetchOpExForTimeframeProjectViewEpic: (actions$: ActionsObservable<ActionType>, _: StateObservable<RootState>, zeniAPI: ZeniAPI) => Observable<ActionType>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchOpExForTimeframeProjectViewEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const projectReducer_1 = require("../../entity/project/projectReducer");
|
|
7
|
+
const sectionProjectViewReducer_1 = require("../../entity/sectionProjectView/sectionProjectViewReducer");
|
|
8
|
+
const responsePayload_1 = require("../../responsePayload");
|
|
9
|
+
const opExProjectViewReducer_1 = require("./opExProjectViewReducer");
|
|
10
|
+
const fetchOpExForTimeframeProjectViewEpic = (actions$, _, zeniAPI) => actions$.pipe((0, operators_1.filter)(opExProjectViewReducer_1.fetchOpExForTimeframeProjectView.match), (0, operators_1.mergeMap)((action) => {
|
|
11
|
+
const getTimeSeriesGroup = (timeframe) => {
|
|
12
|
+
switch (timeframe) {
|
|
13
|
+
case 'month':
|
|
14
|
+
return 'months';
|
|
15
|
+
case 'quarter':
|
|
16
|
+
return 'quarters';
|
|
17
|
+
case 'year':
|
|
18
|
+
return 'years';
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const queryValue = {
|
|
22
|
+
is_full_response: action.payload.fetchFullReport,
|
|
23
|
+
time_series_groups: [getTimeSeriesGroup(action.payload.timeframe)],
|
|
24
|
+
is_group_by_project: true,
|
|
25
|
+
};
|
|
26
|
+
return zeniAPI
|
|
27
|
+
.getJSON(`${zeniAPI.apiEndPoints.accountMicroServiceBaseUrl}/2.0/reports/operating_expenses?query=${encodeURIComponent(JSON.stringify(queryValue))}`)
|
|
28
|
+
.pipe((0, operators_1.mergeMap)((response) => {
|
|
29
|
+
if (response.data != null && (0, responsePayload_1.isSuccessResponse)(response)) {
|
|
30
|
+
const actions = [];
|
|
31
|
+
const report = response.data.report;
|
|
32
|
+
const currency = report.currency;
|
|
33
|
+
actions.push((0, projectReducer_1.updateProjects)(report.projects));
|
|
34
|
+
actions.push((0, sectionProjectViewReducer_1.updateSectionProjectView)(action.payload.timeframe, 'expenses', 'operating_expenses_by_projects', report.expenses, report.accounts, currency));
|
|
35
|
+
actions.push((0, opExProjectViewReducer_1.updateOpExForTimeframeProjectView)({
|
|
36
|
+
timeframe: action.payload.timeframe,
|
|
37
|
+
report: response.data,
|
|
38
|
+
}));
|
|
39
|
+
return (0, rxjs_1.from)(actions);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
return (0, rxjs_1.of)((0, opExProjectViewReducer_1.updateOpExForTimeframeProjectViewFailure)(response.status, action.payload.timeframe));
|
|
43
|
+
}
|
|
44
|
+
}), (0, operators_1.catchError)((error) => (0, rxjs_1.of)((0, opExProjectViewReducer_1.updateOpExForTimeframeProjectViewFailure)((0, responsePayload_1.createZeniAPIStatus)('Unexpected Error', 'OpEx by Projects REST API call errored out' +
|
|
45
|
+
(error instanceof Error ? error.message : String(error))), action.payload.timeframe))));
|
|
46
|
+
}));
|
|
47
|
+
exports.fetchOpExForTimeframeProjectViewEpic = fetchOpExForTimeframeProjectViewEpic;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ActionsObservable, StateObservable } from 'redux-observable';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { RootState } from '../../reducer';
|
|
4
|
+
import { fetchOpExForTimeframeProjectView, fetchOpExProjectView } from './opExProjectViewReducer';
|
|
5
|
+
export type ActionType = ReturnType<typeof fetchOpExProjectView> | ReturnType<typeof fetchOpExForTimeframeProjectView>;
|
|
6
|
+
export declare const fetchOpExProjectViewEpic: (actions$: ActionsObservable<ActionType>, state: StateObservable<RootState>) => Observable<ActionType>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchOpExProjectViewEpic = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const operators_1 = require("rxjs/operators");
|
|
6
|
+
const opExProjectViewReducer_1 = require("./opExProjectViewReducer");
|
|
7
|
+
const fetchOpExProjectViewEpic = (actions$, state) => actions$.pipe((0, operators_1.filter)(opExProjectViewReducer_1.fetchOpExProjectView.match), (0, operators_1.switchMap)((action) => {
|
|
8
|
+
const { cacheOverride } = action.payload;
|
|
9
|
+
if (cacheOverride === true) {
|
|
10
|
+
return (0, rxjs_1.from)([
|
|
11
|
+
(0, opExProjectViewReducer_1.fetchOpExForTimeframeProjectView)('month'),
|
|
12
|
+
(0, opExProjectViewReducer_1.fetchOpExForTimeframeProjectView)('quarter'),
|
|
13
|
+
(0, opExProjectViewReducer_1.fetchOpExForTimeframeProjectView)('year'),
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const fetchActions = [];
|
|
18
|
+
const projectFetchState = state.value.opExProjectViewState.fetchState;
|
|
19
|
+
if (projectFetchState['month'].fetchState !== 'In-Progress' &&
|
|
20
|
+
projectFetchState['month'].fetchState !== 'Completed') {
|
|
21
|
+
fetchActions.push((0, opExProjectViewReducer_1.fetchOpExForTimeframeProjectView)('month'));
|
|
22
|
+
}
|
|
23
|
+
if (projectFetchState['quarter'].fetchState !== 'In-Progress' &&
|
|
24
|
+
projectFetchState['quarter'].fetchState !== 'Completed') {
|
|
25
|
+
fetchActions.push((0, opExProjectViewReducer_1.fetchOpExForTimeframeProjectView)('quarter'));
|
|
26
|
+
}
|
|
27
|
+
if (projectFetchState['year'].fetchState !== 'In-Progress' &&
|
|
28
|
+
projectFetchState['year'].fetchState !== 'Completed') {
|
|
29
|
+
fetchActions.push((0, opExProjectViewReducer_1.fetchOpExForTimeframeProjectView)('year'));
|
|
30
|
+
}
|
|
31
|
+
return (0, rxjs_1.from)(fetchActions);
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
exports.fetchOpExProjectViewEpic = fetchOpExProjectViewEpic;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ZeniReportResponse } from '../../responsePayload';
|
|
2
|
+
import { ReportByProjectMetadataPayloadV2, SectionByProjectCOABalanceGroupedPayloadV2 } from '../profitAndLossProjectView/profitAndLossProjectViewPayload';
|
|
3
|
+
export interface OpExProjectViewPayload extends ReportByProjectMetadataPayloadV2 {
|
|
4
|
+
expenses: SectionByProjectCOABalanceGroupedPayloadV2;
|
|
5
|
+
}
|
|
6
|
+
export type OpExReportProjectViewResponse = ZeniReportResponse<OpExProjectViewPayload>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AccountViewMode, ID } from '../../commonStateTypes/common';
|
|
2
|
+
import { ZeniAPIStatus, ZeniReportData } from '../../responsePayload';
|
|
3
|
+
import { OpExProjectViewPayload } from './opExProjectViewPayload';
|
|
4
|
+
import { OpExProjectViewState } from './opExProjectViewState';
|
|
5
|
+
export declare const initialState: OpExProjectViewState;
|
|
6
|
+
export declare const fetchOpExProjectView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[cacheOverride?: boolean | undefined], {
|
|
7
|
+
cacheOverride: boolean;
|
|
8
|
+
}, "opExProjectView/fetchOpExProjectView", never, never>, fetchOpExForTimeframeProjectView: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[timeframe: "month" | "year" | "quarter", fetchFullReport?: boolean | undefined, cacheOverride?: boolean | undefined], {
|
|
9
|
+
timeframe: "month" | "year" | "quarter";
|
|
10
|
+
fetchFullReport: boolean;
|
|
11
|
+
cacheOverride: boolean;
|
|
12
|
+
}, "opExProjectView/fetchOpExForTimeframeProjectView", never, never>, updateOpExForTimeframeProjectView: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
13
|
+
report: ZeniReportData<OpExProjectViewPayload>;
|
|
14
|
+
timeframe: "month" | "quarter" | "year";
|
|
15
|
+
}, "opExProjectView/updateOpExForTimeframeProjectView">, updateOpExForTimeframeProjectViewFailure: import("@reduxjs/toolkit").ActionCreatorWithPreparedPayload<[error: ZeniAPIStatus<Record<string, unknown>>, timeframe: "month" | "year" | "quarter"], {
|
|
16
|
+
error: ZeniAPIStatus<Record<string, unknown>>;
|
|
17
|
+
timeframe: "month" | "year" | "quarter";
|
|
18
|
+
}, "opExProjectView/updateOpExForTimeframeProjectViewFailure", never, never>, updateProjectsToFilterOut: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
19
|
+
projectsToFilterOut: ID[];
|
|
20
|
+
}, "opExProjectView/updateProjectsToFilterOut">, updateOpExProjectViewUIState: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
21
|
+
nodeCollapseState?: {
|
|
22
|
+
isCollapsed: boolean;
|
|
23
|
+
nodeId: ID;
|
|
24
|
+
};
|
|
25
|
+
scrollPosition?: {
|
|
26
|
+
scrollTop: number;
|
|
27
|
+
scrollLeft?: number;
|
|
28
|
+
};
|
|
29
|
+
}, "opExProjectView/updateOpExProjectViewUIState">, updateProjectViewAccountViewMode: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
30
|
+
viewMode: AccountViewMode;
|
|
31
|
+
}, "opExProjectView/updateProjectViewAccountViewMode">, resetProjectNodeCollapseState: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"opExProjectView/resetProjectNodeCollapseState">, clearOpExProjectView: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"opExProjectView/clearOpExProjectView">;
|
|
32
|
+
declare const _default: import("redux").Reducer<OpExProjectViewState>;
|
|
33
|
+
export default _default;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.clearOpExProjectView = exports.resetProjectNodeCollapseState = exports.updateProjectViewAccountViewMode = exports.updateOpExProjectViewUIState = exports.updateProjectsToFilterOut = exports.updateOpExForTimeframeProjectViewFailure = exports.updateOpExForTimeframeProjectView = exports.fetchOpExForTimeframeProjectView = exports.fetchOpExProjectView = exports.initialState = void 0;
|
|
5
|
+
const toolkit_1 = require("@reduxjs/toolkit");
|
|
6
|
+
const viewAndReportPayloadv2_1 = require("../../commonPayloadTypes/v2/viewAndReportPayloadv2");
|
|
7
|
+
exports.initialState = {
|
|
8
|
+
fetchState: {
|
|
9
|
+
month: {
|
|
10
|
+
fetchState: 'Not-Started',
|
|
11
|
+
error: undefined,
|
|
12
|
+
},
|
|
13
|
+
quarter: {
|
|
14
|
+
fetchState: 'Not-Started',
|
|
15
|
+
error: undefined,
|
|
16
|
+
},
|
|
17
|
+
year: {
|
|
18
|
+
fetchState: 'Not-Started',
|
|
19
|
+
error: undefined,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
firstMonthOfFY: 1,
|
|
23
|
+
projectIds: [],
|
|
24
|
+
reportId: 'operating_expenses_by_projects',
|
|
25
|
+
reportTitle: 'operating_expenses_by_projects',
|
|
26
|
+
uiState: {
|
|
27
|
+
accountViewMode: 'account_group',
|
|
28
|
+
nodeCollapseState: {},
|
|
29
|
+
projectsToFilterOut: [],
|
|
30
|
+
scrollPosition: undefined,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const opExProjectView = (0, toolkit_1.createSlice)({
|
|
34
|
+
name: 'opExProjectView',
|
|
35
|
+
initialState: exports.initialState,
|
|
36
|
+
reducers: {
|
|
37
|
+
fetchOpExProjectView: {
|
|
38
|
+
prepare(cacheOverride = false) {
|
|
39
|
+
return { payload: { cacheOverride } };
|
|
40
|
+
},
|
|
41
|
+
reducer(
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
43
|
+
_draft,
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
45
|
+
_action) {
|
|
46
|
+
// nothing to do here
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
fetchOpExForTimeframeProjectView: {
|
|
50
|
+
prepare(timeframe, fetchFullReport = true, cacheOverride = false) {
|
|
51
|
+
return { payload: { timeframe, fetchFullReport, cacheOverride } };
|
|
52
|
+
},
|
|
53
|
+
reducer(draft, action) {
|
|
54
|
+
const timeframe = action.payload.timeframe;
|
|
55
|
+
draft.fetchState[timeframe].fetchState = 'In-Progress';
|
|
56
|
+
draft.fetchState[timeframe].error = undefined;
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
updateOpExForTimeframeProjectView(draft, action) {
|
|
60
|
+
doUpdateOpExProjectView(draft, action.payload.timeframe, action.payload.report);
|
|
61
|
+
},
|
|
62
|
+
updateOpExForTimeframeProjectViewFailure: {
|
|
63
|
+
prepare(error, timeframe) {
|
|
64
|
+
return {
|
|
65
|
+
payload: {
|
|
66
|
+
error,
|
|
67
|
+
timeframe,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
reducer(draft, action) {
|
|
72
|
+
draft.fetchState[action.payload.timeframe] = {
|
|
73
|
+
fetchState: 'Error',
|
|
74
|
+
error: action.payload.error,
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
updateProjectsToFilterOut(draft, action) {
|
|
79
|
+
draft.uiState.projectsToFilterOut = action.payload.projectsToFilterOut;
|
|
80
|
+
},
|
|
81
|
+
updateOpExProjectViewUIState(draft, action) {
|
|
82
|
+
const { nodeCollapseState, scrollPosition } = action.payload;
|
|
83
|
+
if (nodeCollapseState != null) {
|
|
84
|
+
draft.uiState.nodeCollapseState = Object.assign({}, draft.uiState.nodeCollapseState, {
|
|
85
|
+
[nodeCollapseState.nodeId]: nodeCollapseState.isCollapsed,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (scrollPosition != null) {
|
|
89
|
+
draft.uiState.scrollPosition = scrollPosition;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
updateProjectViewAccountViewMode(draft, action) {
|
|
93
|
+
draft.uiState.accountViewMode = action.payload.viewMode;
|
|
94
|
+
},
|
|
95
|
+
resetProjectNodeCollapseState(draft) {
|
|
96
|
+
draft.uiState.nodeCollapseState = {};
|
|
97
|
+
},
|
|
98
|
+
clearOpExProjectView(draft) {
|
|
99
|
+
Object.assign(draft, exports.initialState);
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
_a = opExProjectView.actions, exports.fetchOpExProjectView = _a.fetchOpExProjectView, exports.fetchOpExForTimeframeProjectView = _a.fetchOpExForTimeframeProjectView, exports.updateOpExForTimeframeProjectView = _a.updateOpExForTimeframeProjectView, exports.updateOpExForTimeframeProjectViewFailure = _a.updateOpExForTimeframeProjectViewFailure, exports.updateProjectsToFilterOut = _a.updateProjectsToFilterOut, exports.updateOpExProjectViewUIState = _a.updateOpExProjectViewUIState, exports.updateProjectViewAccountViewMode = _a.updateProjectViewAccountViewMode, exports.resetProjectNodeCollapseState = _a.resetProjectNodeCollapseState, exports.clearOpExProjectView = _a.clearOpExProjectView;
|
|
104
|
+
exports.default = opExProjectView.reducer;
|
|
105
|
+
const doUpdateOpExProjectView = (draft, timeframe, opExReport) => {
|
|
106
|
+
const report = (0, viewAndReportPayloadv2_1.mapReportPayloadV2ToReportV2)(opExReport.report);
|
|
107
|
+
draft.dataAvailable = report.dataAvailable;
|
|
108
|
+
draft.firstMonthOfFY = report.firstMonthOfFY;
|
|
109
|
+
draft.bookCloseDate = report.bookCloseDate;
|
|
110
|
+
draft.status = report.status;
|
|
111
|
+
draft.fetchState[timeframe].fetchState = 'Completed';
|
|
112
|
+
if (draft.projectIds.length <= 0) {
|
|
113
|
+
draft.projectIds = opExReport.report.projects.map((project) => project.accounting_project_id);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { COABalancesFilterProjectView } from '../../commonStateTypes/coaBalance/coaBalancesFilterProjectView';
|
|
2
|
+
import { AccountState } from '../../entity/account/accountState';
|
|
3
|
+
import { ProjectState } from '../../entity/project/projectReducer';
|
|
4
|
+
import { SectionProjectViewState } from '../../entity/sectionProjectView/sectionProjectViewState';
|
|
5
|
+
import { RootState } from '../../reducer';
|
|
6
|
+
import { OpExClassesViewCalculatedSectionID, OpExClassesViewSectionID } from '../opExClassesView/opExClassesViewSelectorTypes';
|
|
7
|
+
import { OpExProjectViewReport } from './opExProjectViewSelectorTypes';
|
|
8
|
+
import { OpExProjectViewState } from './opExProjectViewState';
|
|
9
|
+
export declare const opExProjectIdsInOrder: (OpExClassesViewSectionID | OpExClassesViewCalculatedSectionID)[];
|
|
10
|
+
export declare const getOpExProjectView: (filter: COABalancesFilterProjectView, accountState: AccountState, projectState: ProjectState, sectionsState: SectionProjectViewState, opExProjectViewState: OpExProjectViewState) => OpExProjectViewReport;
|
|
11
|
+
export declare const getOpExProjectViewForSelectedRange: (state: RootState) => OpExProjectViewReport;
|
|
12
|
+
export declare const getOpExProjectViewForHighlightedRange: (state: RootState) => OpExProjectViewReport;
|