const frappe = require('frappejs'); const { unique } = require('frappejs/utils'); const { getData } = require('../FinancialStatements/FinancialStatements'); class ProfitAndLoss { async run({ fromDate, toDate, periodicity }) { let income = await getData({ rootType: 'Income', balanceMustBe: 'Credit', fromDate, toDate, periodicity }); let expense = await getData({ rootType: 'Expense', balanceMustBe: 'Debit', fromDate, toDate, periodicity }); let incomeTotalRow = income.totalRow; incomeTotalRow.account = { template: `${income.totalRow.account}` }; let expenseTotalRow = expense.totalRow; expenseTotalRow.account = { template: `${expense.totalRow.account}` }; let rows = [ ...income.accounts, incomeTotalRow, { account: { template: ' ' }, isGroup: 1 }, ...expense.accounts, expenseTotalRow, { account: { template: ' ' }, isGroup: 1 } ]; rows = rows.map(row => { if (row.indent === 0) { row.account = { template: `${row.account}` }; } return row; }); const columns = unique([...income.periodList, ...expense.periodList]); let profitRow = { account: 'Total Profit' }; for (let column of columns) { profitRow[column] = (income.totalRow[column] || 0.0) - (expense.totalRow[column] || 0.0); rows.forEach(row => { if (!row.isGroup) { row[column] = row[column] || 0.0; } }); } rows.push(profitRow); return { rows, columns }; } } module.exports = ProfitAndLoss;