UNPKG

@railzai/railz-visualizations

Version:
191 lines 8.1 kB
/*! * Accounting Data as a Service™ is the solution that makes sense of your business customers' financial data. * Built with Stencil * Copyright (c) FIS. */ import { isNil, pick } from 'lodash-es'; import { format, parseISO } from 'date-fns'; import Translations from '../../config/translations/en.json'; import { formatDate, formatSeries, isStatements } from '../../helpers/utils'; import { ALL_FONTS, RAILZ_BALANCE_SHEET_COLORS, RAILZ_CASHFLOW_COLORS, RAILZ_INCOME_STATEMENT_COLORS, } from '../../types'; import { RVReportTypes, RVReportTypesUrlMapping } from '../../types/enum/report-type'; import { RequestServiceInstance } from '../../services/request'; import { errorLog } from '../../services/logger'; import { RAILZ_DATE_FORMAT } from '../../types/constants/date'; /** * Setup Highcharts options for bar charts */ export const getOptionsBarChart = ({ categories, series, colors, chart, }) => ({ chart: { height: chart === null || chart === void 0 ? void 0 : chart.height, type: 'column', backgroundColor: (chart === null || chart === void 0 ? void 0 : chart.backgroundColor) || '#ffffff', style: Object.assign({ fontFamily: (chart === null || chart === void 0 ? void 0 : chart.fontFamily) || ALL_FONTS }, chart === null || chart === void 0 ? void 0 : chart.style), reflow: true, marginTop: 0, spacingTop: 0, spacingRight: 0, marginRight: 0, events: { load() { // eslint-disable-next-line @typescript-eslint/no-this-alias const chart = this; setTimeout(() => { if (!isNil(chart)) { try { chart.reflow(); } catch (e) { } } }, 0); }, }, }, colors: colors || ['#3BCFF0', '#FFED8C', '#003032'], title: null, xAxis: Object.assign({ categories: categories, offset: 50, labels: { style: Object.assign({ color: '#55565B' }, chart === null || chart === void 0 ? void 0 : chart.label), } }, chart === null || chart === void 0 ? void 0 : chart.xAxisStyle), yAxis: Object.assign({ gridLineDashStyle: 'longdash', endOnTick: false, title: null, labels: { style: Object.assign({ color: '#55565B' }, chart === null || chart === void 0 ? void 0 : chart.label), } }, chart === null || chart === void 0 ? void 0 : chart.yAxisStyle), credits: { enabled: false, }, plotOptions: { column: { stacking: 'normal', }, series: { pointWidth: 12, }, }, legend: Object.assign({ align: 'left', itemMarginTop: 8 }, chart === null || chart === void 0 ? void 0 : chart.legend), series: series, exporting: { enabled: false, }, }); /** * Formats data into Highcharts format for cashflow statement */ export const formatCashflowData = ({ summary, reportFrequency, chart, date, }) => { const categories = formatDate(summary, reportFrequency, date); const financingActivities = formatSeries(summary, Translations.RV_FINANCING_ACTIVITIES, 'financingActivities'); const investingActivities = formatSeries(summary, Translations.RV_INVESTING_ACTIVITIES, 'investingActivities'); const operatingActivities = formatSeries(summary, Translations.RV_OPERATING_ACTIVITIES, 'operatingActivities'); const netCash = Object.assign({ type: 'spline', marker: { enabled: false, }, states: { hover: { lineWidth: 0, }, }, enableMouseTracking: false }, formatSeries(summary, Translations.RV_NET_CASH, 'netCash')); const series = [financingActivities, investingActivities, netCash, operatingActivities].filter((seriesData) => (seriesData === null || seriesData === void 0 ? void 0 : seriesData.data.length) > 0); return { categories, series: series, colors: (chart === null || chart === void 0 ? void 0 : chart.colors) || RAILZ_CASHFLOW_COLORS, }; }; /** * Formats data into Highcharts format for balance sheet */ export const formatBalanceSheetData = ({ summary, reportFrequency, chart, date, }) => { const categories = formatDate(summary, reportFrequency, date); const currentAssets = formatSeries(summary, Translations.RV_CURRENT_ASSETS, 'currentAssets'); const currentLiabilities = formatSeries(summary, Translations.RV_CURRENT_LIABILITIES, 'currentLiabilities'); const nonCurrentAssets = formatSeries(summary, Translations.RV_NON_CURRENT_ASSETS, 'nonCurrentAssets'); const nonCurrentLiabilities = formatSeries(summary, Translations.RV_NON_CURRENT_LIABILITIES, 'nonCurrentLiabilities'); const equity = Object.assign({ type: 'spline', marker: { enabled: false, }, states: { hover: { lineWidth: 0, }, }, enableMouseTracking: false }, formatSeries(summary, Translations.RV_EQUITY, 'equity')); const series = [ currentAssets, currentLiabilities, nonCurrentAssets, nonCurrentLiabilities, equity, ].filter((seriesData) => (seriesData === null || seriesData === void 0 ? void 0 : seriesData.data.length) > 0); return { categories, series: series, colors: (chart === null || chart === void 0 ? void 0 : chart.colors) || RAILZ_BALANCE_SHEET_COLORS, }; }; /** * Formats data into Highcharts format for income statement */ export const formatIncomeStatementData = ({ summary, reportFrequency, chart, date, }) => { const categories = formatDate(summary, reportFrequency, date); const costOfGoodsSold = formatSeries(summary, Translations.RV_COST_OF_GOODS_SOLD, 'costOfGoodsSold'); const operatingExpenses = formatSeries(summary, Translations.RV_OPERATING_EXPENSES, 'operatingExpenses'); const operatingIncome = formatSeries(summary, Translations.RV_OPERATING_INCOME, 'operatingIncome'); const otherExpenses = formatSeries(summary, Translations.RV_OTHER_EXPENSES, 'otherExpenses'); const otherIncome = formatSeries(summary, Translations.RV_OTHER_INCOME, 'otherIncome'); const netIncome = Object.assign({ type: 'spline', marker: { enabled: false, }, states: { hover: { lineWidth: 0, }, }, enableMouseTracking: false }, formatSeries(summary, Translations.RV_NET_INCOME, 'netIncome')); const series = [ costOfGoodsSold, netIncome, operatingExpenses, operatingIncome, otherExpenses, otherIncome, ].filter((seriesData) => (seriesData === null || seriesData === void 0 ? void 0 : seriesData.data.length) > 0); return { categories, series: series, colors: (chart === null || chart === void 0 ? void 0 : chart.colors) || RAILZ_INCOME_STATEMENT_COLORS, }; }; /** * Formats retrieved data into Highcharts format based on different report type */ export const formatData = (statementParameter) => { if (statementParameter.reportType === RVReportTypes.BALANCE_SHEET) return formatBalanceSheetData(statementParameter); if (statementParameter.reportType === RVReportTypes.CASHFLOW_STATEMENTS) return formatCashflowData(statementParameter); if (statementParameter.reportType === RVReportTypes.INCOME_STATEMENTS) return formatIncomeStatementData(statementParameter); }; /** * Make API call based on expected parameters for financial statements data type */ export const getReportData = async ({ filter, }) => { let reportData; try { const startDate = format(parseISO(filter.startDate), RAILZ_DATE_FORMAT); const endDate = format(parseISO(filter.endDate), RAILZ_DATE_FORMAT); const allParameters = pick(Object.assign(Object.assign({}, filter), { startDate, endDate }), ['startDate', 'endDate', 'reportFrequency', 'connectionUuid']); reportData = await RequestServiceInstance.getReportData({ path: RVReportTypesUrlMapping[filter.reportType], filter: allParameters, }); } catch (error) { errorLog(Translations.RV_NOT_ABLE_TO_RETRIEVE_REPORT_DATA, error); reportData = { error }; } return reportData; }; /** * Checks whether we need to add reconstruct: true to the params or not * @param {RVStatementsFilter} filter - Current filter * @returns {boolean} */ export const shouldAddReconstructParam = (filter) => { return isStatements(filter.reportType); }; //# sourceMappingURL=statements-chart.utils.js.map