mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-18 13:50:31 +00:00
WIP Financial statements.
This commit is contained in:
@@ -3,11 +3,19 @@ import t from 'store/types';
|
||||
|
||||
export const fetchGeneralLedger = ({ query }) => {
|
||||
return (dispatch) => new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.GENERAL_LEDGER_SHEET_LOADING,
|
||||
loading: true,
|
||||
})
|
||||
ApiService.get('/financial_statements/general_ledger', { params: query }).then((response) => {
|
||||
dispatch({
|
||||
type: t.GENERAL_LEDGER_STATEMENT_SET,
|
||||
data: response.data,
|
||||
});
|
||||
dispatch({
|
||||
type: t.GENERAL_LEDGER_SHEET_LOADING,
|
||||
loading: false,
|
||||
});
|
||||
resolve(response);
|
||||
}).catch((error) => { reject(error); });
|
||||
});
|
||||
@@ -15,12 +23,20 @@ export const fetchGeneralLedger = ({ query }) => {
|
||||
|
||||
export const fetchBalanceSheet = ({ query }) => {
|
||||
return (dispatch) => new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.BALANCE_SHEET_LOADING,
|
||||
loading: true,
|
||||
});
|
||||
ApiService.get('/financial_statements/balance_sheet', { params: query }).then((response) => {
|
||||
dispatch({
|
||||
type: t.BALANCE_SHEET_STATEMENT_SET,
|
||||
data: response.data,
|
||||
query: query,
|
||||
});
|
||||
dispatch({
|
||||
type: t.BALANCE_SHEET_LOADING,
|
||||
loading: false,
|
||||
});
|
||||
resolve(response);
|
||||
}).catch((error) => { reject(error); });
|
||||
});
|
||||
@@ -50,9 +66,9 @@ export const fetchProfitLossSheet = ({ query }) => {
|
||||
return (dispatch) => new Promise((resolve, reject) => {
|
||||
dispatch({
|
||||
type: t.PROFIT_LOSS_SHEET_LOADING,
|
||||
loading: false,
|
||||
loading: true,
|
||||
});
|
||||
ApiService.get('/financial_statements/profit_loss_sheet').then((response) => {
|
||||
ApiService.get('/financial_statements/profit_loss_sheet', { params: query }).then((response) => {
|
||||
dispatch({
|
||||
type: t.PROFIT_LOSS_SHEET_SET,
|
||||
profitLoss: response.data.profitLoss,
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
import { createReducer } from '@reduxjs/toolkit';
|
||||
import t from 'store/types';
|
||||
import {
|
||||
getBalanceSheetIndexByQuery,
|
||||
// getBalanceSheetIndexByQuery,
|
||||
getFinancialSheetIndexByQuery,
|
||||
// getFinancialSheetIndexByQuery,
|
||||
} from './financialStatements.selectors';
|
||||
import {omit} from 'lodash';
|
||||
|
||||
const initialState = {
|
||||
balanceSheets: [],
|
||||
balanceSheet: {
|
||||
sheets: [],
|
||||
loading: false,
|
||||
},
|
||||
trialBalance: {
|
||||
sheets: [],
|
||||
loading: false,
|
||||
@@ -72,22 +75,61 @@ const mapJournalTableRows = (journal) => {
|
||||
}, []);
|
||||
}
|
||||
|
||||
|
||||
const mapProfitLossToTableRows = (profitLoss) => {
|
||||
return [
|
||||
{
|
||||
name: 'Income',
|
||||
total: profitLoss.income.total,
|
||||
children: [
|
||||
...profitLoss.income.accounts,
|
||||
{
|
||||
name: 'Total Income',
|
||||
total: profitLoss.income.total,
|
||||
rowType: 'income_total',
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Expenses',
|
||||
total: profitLoss.expenses.total,
|
||||
children: [
|
||||
...profitLoss.expenses.accounts,
|
||||
{
|
||||
name: 'Total Expenses',
|
||||
total: profitLoss.expenses.total,
|
||||
rowType: 'expense_total',
|
||||
}
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Net Income',
|
||||
total: profitLoss.net_income.total,
|
||||
rowType: 'net_income',
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
export default createReducer(initialState, {
|
||||
[t.BALANCE_SHEET_STATEMENT_SET]: (state, action) => {
|
||||
const index = getBalanceSheetIndexByQuery(state.balanceSheets, action.query);
|
||||
|
||||
const index = getFinancialSheetIndexByQuery(state.balanceSheet.sheets, action.query);
|
||||
|
||||
const balanceSheet = {
|
||||
balances: action.data.balance_sheet,
|
||||
accounts: action.data.accounts,
|
||||
columns: Object.values(action.data.columns),
|
||||
query: action.data.query,
|
||||
};
|
||||
if (index !== -1) {
|
||||
state.balanceSheets[index] = balanceSheet;
|
||||
state.balanceSheet.sheets[index] = balanceSheet;
|
||||
} else {
|
||||
state.balanceSheets.push(balanceSheet);
|
||||
state.balanceSheet.sheets.push(balanceSheet);
|
||||
}
|
||||
},
|
||||
|
||||
[t.BALANCE_SHEET_LOADING]: (state, action) => {
|
||||
state.balanceSheet.loading = !!action.loading;
|
||||
},
|
||||
|
||||
[t.TRAIL_BALANCE_STATEMENT_SET]: (state, action) => {
|
||||
const index = getFinancialSheetIndexByQuery(state.trialBalance.sheets, action.query);
|
||||
const trailBalanceSheet = {
|
||||
@@ -139,13 +181,18 @@ export default createReducer(initialState, {
|
||||
}
|
||||
},
|
||||
|
||||
[t.GENERAL_LEDGER_SHEET_LOADING]: (state, action) => {
|
||||
state.generalLedger.loading = !!action.loading;
|
||||
},
|
||||
|
||||
[t.PROFIT_LOSS_SHEET_SET]: (state, action) => {
|
||||
const index = getFinancialSheetIndexByQuery(state.profitLoss.sheets, action.query);
|
||||
|
||||
|
||||
const profitLossSheet = {
|
||||
query: action.query,
|
||||
profitLoss: action.profitLoss,
|
||||
columns: action.columns,
|
||||
tableRows: mapProfitLossToTableRows(action.profitLoss),
|
||||
};
|
||||
if (index !== -1) {
|
||||
state.profitLoss.sheets[index] = profitLossSheet;
|
||||
|
||||
@@ -38,97 +38,19 @@ export const getFinancialSheetColumns = (sheets, index) => {
|
||||
* @param {array} sheets
|
||||
* @param {number} index
|
||||
*/
|
||||
export const getFinancialSheetsQuery = (sheets, index) => {
|
||||
export const getFinancialSheetQuery = (sheets, index) => {
|
||||
const sheet = getFinancialSheet(sheets, index);
|
||||
return (sheet && sheet.query) ? sheet.columns : {};
|
||||
return (sheet && sheet.query) ? sheet.query : {};
|
||||
};
|
||||
|
||||
|
||||
// Balance Sheet.
|
||||
export const getBalanceSheetByQuery = (balanceSheets, query) => {
|
||||
return balanceSheets.find(balanceSheet => {
|
||||
return getObjectDiff(query, balanceSheet.query).length === 0;
|
||||
});
|
||||
};
|
||||
|
||||
export const getBalanceSheetIndexByQuery = (balanceSheets, query) => {
|
||||
return balanceSheets.findIndex((balanceSheet) => {
|
||||
return getObjectDiff(query, balanceSheet.query).length === 0;
|
||||
});
|
||||
};
|
||||
|
||||
export const getBalanceSheetByIndex = (balanceSheets, sheetIndex) => {
|
||||
return balanceSheets[sheetIndex];
|
||||
};
|
||||
|
||||
export const getBalanceSheetQuery = (balanceSheets, sheetIndex) => {
|
||||
if (typeof balanceSheets[sheetIndex] === 'object') {
|
||||
return balanceSheets[sheetIndex].query || {};
|
||||
}
|
||||
return {};
|
||||
};
|
||||
|
||||
export const getBalanceSheetAssetsAccounts = (balanceSheets, sheetIndex) => {
|
||||
if (typeof balanceSheets[sheetIndex] === 'object') {
|
||||
return balanceSheets[sheetIndex].balances.assets.accounts || [];
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
export const getBalanceSheetLiabilitiesAccounts = (balanceSheets, sheetIndex) => {
|
||||
if (typeof balanceSheets[sheetIndex] === 'object') {
|
||||
return balanceSheets[sheetIndex].balances.liabilities_equity.accounts || [];
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
export const getBalanceSheetColumns = (balanceSheets, sheetIndex) => {
|
||||
if (typeof balanceSheets[sheetIndex] === 'object') {
|
||||
return balanceSheets[sheetIndex].columns;
|
||||
}
|
||||
return [];
|
||||
export const getFinancialSheetAccounts = (sheets, index) => {
|
||||
const sheet = getFinancialSheet(sheets, index);
|
||||
return (sheet && sheet.accounts) ? sheet.accounts : [];
|
||||
};
|
||||
|
||||
|
||||
// Trial Balance Sheet.
|
||||
export const getTrialBalanceSheetIndex = (trialBalanceSheets, query) => {
|
||||
return trialBalanceSheets.find((trialBalanceSheet) => {
|
||||
return getObjectDiff(query, trialBalanceSheet.query).length === 0;
|
||||
});
|
||||
};
|
||||
|
||||
export const getTrialBalanceAccounts = (trialBalanceSheets, sheetIndex) => {
|
||||
if (typeof trialBalanceSheets[sheetIndex] === 'object') {
|
||||
return trialBalanceSheets[sheetIndex].accounts;
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
export const getTrialBalanceQuery = (trialBalanceSheets, sheetIndex) => {
|
||||
if (typeof trialBalanceSheets[sheetIndex] === 'object') {
|
||||
return trialBalanceSheets[sheetIndex].query;
|
||||
}
|
||||
return [];
|
||||
};
|
||||
|
||||
// Profit/Loss Sheet selectors.
|
||||
export const getProfitLossSheetIndex = (profitLossSheets, query) => {
|
||||
return profitLossSheets.find((profitLossSheet) => {
|
||||
return getObjectDiff(query, profitLossSheet.query).length === 0;
|
||||
});
|
||||
}
|
||||
|
||||
export const getProfitLossSheet = (profitLossSheets, index) => {
|
||||
return (typeof profitLossSheets[index] !== 'undefined') ?
|
||||
profitLossSheets[index] : null;
|
||||
};
|
||||
|
||||
export const getProfitLossSheetColumns = (profitLossSheets, index) => {
|
||||
const sheet = getProfitLossSheet(profitLossSheets, index);
|
||||
return (sheet) ? sheet.columns : [];
|
||||
};
|
||||
|
||||
export const getProfitLossSheetAccounts = (profitLossSheets, index) => {
|
||||
const sheet = getProfitLossSheet(profitLossSheets, index);
|
||||
return (sheet) ? sheet.accounts : [];
|
||||
export const getFinancialSheetTableRows = (sheets, index) => {
|
||||
const sheet = getFinancialSheet(sheets, index);
|
||||
return (sheet && sheet.tableRows) ? sheet.tableRows : [];
|
||||
};
|
||||
@@ -2,9 +2,14 @@
|
||||
|
||||
export default {
|
||||
GENERAL_LEDGER_STATEMENT_SET: 'GENERAL_LEDGER_STATEMENT_SET',
|
||||
GENERAL_LEDGER_SHEET_LOADING: 'GENERAL_LEDGER_SHEET_LOADING',
|
||||
|
||||
BALANCE_SHEET_STATEMENT_SET: 'BALANCE_SHEET_STATEMENT_SET',
|
||||
BALANCE_SHEET_LOADING: 'BALANCE_SHEET_LOADING',
|
||||
|
||||
TRAIL_BALANCE_STATEMENT_SET: 'TRAIL_BALANCE_STATEMENT_SET',
|
||||
TRIAL_BALANCE_SHEET_LOADING: 'TRIAL_BALANCE_SHEET_LOADING',
|
||||
|
||||
JOURNAL_SHEET_SET: 'JOURNAL_SHEET_SET',
|
||||
JOURNAL_SHEET_LOADING: 'JOURNAL_SHEET_LOADING',
|
||||
|
||||
|
||||
Reference in New Issue
Block a user