mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 22:30:31 +00:00
191 lines
4.6 KiB
JavaScript
191 lines
4.6 KiB
JavaScript
import { omit, chain } from 'lodash';
|
|
import moment from 'moment';
|
|
|
|
export const mapBalanceSheetToTableRows = (accounts) => {
|
|
return accounts.map((account) => {
|
|
return {
|
|
...account,
|
|
children: mapBalanceSheetToTableRows([
|
|
...(account.children ? account.children : []),
|
|
...(account.total && account.children && account.children.length > 0
|
|
? [
|
|
{
|
|
name: `Total ${account.name}`,
|
|
row_types: ['total-row', account.section_type],
|
|
total: { ...account.total },
|
|
...(account.total_periods && {
|
|
total_periods: account.total_periods,
|
|
}),
|
|
},
|
|
]
|
|
: []),
|
|
]),
|
|
};
|
|
});
|
|
};
|
|
|
|
export const profitLossToTableRowsMapper = () => {};
|
|
|
|
export const journalToTableRowsMapper = (journal) => {
|
|
const TYPES = {
|
|
ENTRY: 'ENTRY',
|
|
TOTAL_ENTRIES: 'TOTAL_ENTRIES',
|
|
EMPTY_ROW: 'EMPTY_ROW',
|
|
};
|
|
|
|
const entriesMapper = (transaction) => {
|
|
return transaction.entries.map((entry, index) => ({
|
|
...(index === 0
|
|
? {
|
|
date: transaction.date,
|
|
reference_type: transaction.reference_type,
|
|
reference_id: transaction.reference_id,
|
|
reference_type_formatted: transaction.reference_type_formatted,
|
|
}
|
|
: {}),
|
|
rowType: TYPES.ENTRY,
|
|
...entry,
|
|
}));
|
|
};
|
|
|
|
return chain(journal)
|
|
.map((transaction) => {
|
|
const entries = entriesMapper(transaction);
|
|
|
|
return [
|
|
...entries,
|
|
{
|
|
rowType: TYPES.TOTAL_ENTRIES,
|
|
currency_code: transaction.currency_code,
|
|
credit: transaction.credit,
|
|
debit: transaction.debit,
|
|
formatted_credit: transaction.formatted_credit,
|
|
formatted_debit: transaction.formatted_debit,
|
|
},
|
|
{
|
|
rowType: TYPES.EMPTY_ROW,
|
|
},
|
|
];
|
|
})
|
|
.flatten()
|
|
.value();
|
|
};
|
|
|
|
export const generalLedgerToTableRows = (accounts) => {
|
|
return chain(accounts)
|
|
.map((account) => {
|
|
return {
|
|
name: '',
|
|
code: account.code,
|
|
rowType: 'ACCOUNT_ROW',
|
|
date: account.name,
|
|
children: [
|
|
{
|
|
...account.opening_balance,
|
|
name: 'Opening balance',
|
|
rowType: 'OPENING_BALANCE',
|
|
},
|
|
...account.transactions.map((transaction) => ({
|
|
...transaction,
|
|
name: account.name,
|
|
code: account.code,
|
|
date: moment(transaction.date).format('DD MMM YYYY'),
|
|
})),
|
|
{
|
|
...account.closing_balance,
|
|
name: 'Closing balance',
|
|
rowType: 'CLOSING_BALANCE',
|
|
},
|
|
],
|
|
};
|
|
})
|
|
.value();
|
|
};
|
|
|
|
export const ARAgingSummaryTableRowsMapper = (sheet, total) => {
|
|
const rows = [];
|
|
|
|
const mapAging = (agingPeriods) => {
|
|
return agingPeriods.reduce((acc, aging, index) => {
|
|
acc[`aging-${index}`] = aging.total.formatted_amount;
|
|
return acc;
|
|
}, {});
|
|
};
|
|
sheet.customers.forEach((customer) => {
|
|
const agingRow = mapAging(customer.aging);
|
|
|
|
rows.push({
|
|
rowType: 'customer',
|
|
name: customer.customer_name,
|
|
...agingRow,
|
|
current: customer.current.formatted_amount,
|
|
total: customer.total.formatted_amount,
|
|
});
|
|
});
|
|
if (rows.length <= 0) {
|
|
return [];
|
|
}
|
|
return [
|
|
...rows,
|
|
{
|
|
name: '',
|
|
rowType: 'total',
|
|
current: sheet.total.current.formatted_amount,
|
|
...mapAging(sheet.total.aging),
|
|
total: sheet.total.total.formatted_amount,
|
|
},
|
|
];
|
|
};
|
|
|
|
export const APAgingSummaryTableRowsMapper = (sheet, total) => {
|
|
const rows = [];
|
|
|
|
const mapAging = (agingPeriods) => {
|
|
return agingPeriods.reduce((acc, aging, index) => {
|
|
acc[`aging-${index}`] = aging.total.formatted_amount;
|
|
return acc;
|
|
}, {});
|
|
};
|
|
sheet.vendors.forEach((vendor) => {
|
|
const agingRow = mapAging(vendor.aging);
|
|
|
|
rows.push({
|
|
rowType: 'vendor',
|
|
name: vendor.vendor_name,
|
|
...agingRow,
|
|
current: vendor.current.formatted_amount,
|
|
total: vendor.total.formatted_amount,
|
|
});
|
|
});
|
|
if (rows.length <= 0) {
|
|
return [];
|
|
}
|
|
return [
|
|
...rows,
|
|
{
|
|
name: '',
|
|
rowType: 'total',
|
|
current: sheet.total.current.formatted_amount,
|
|
...mapAging(sheet.total.aging),
|
|
total: sheet.total.total.formatted_amount,
|
|
},
|
|
];
|
|
};
|
|
|
|
export const mapTrialBalanceSheetToRows = (sheet) => {
|
|
const results = [];
|
|
|
|
if (sheet.accounts) {
|
|
sheet.accounts.forEach((account) => {
|
|
results.push(account);
|
|
});
|
|
}
|
|
if (sheet.total) {
|
|
results.push({
|
|
rowType: 'total',
|
|
...sheet.total,
|
|
});
|
|
}
|
|
return results;
|
|
};
|