Files
bigcapital/server/src/services/FinancialStatements/TransactionsByContact/TransactionsByContactTableRows.ts

82 lines
2.5 KiB
TypeScript

import moment from 'moment';
import * as R from 'ramda';
import { tableMapper, tableRowMapper } from 'utils';
import { ITransactionsByContactsContact, ITableRow } from 'interfaces';
enum ROW_TYPE {
OPENING_BALANCE = 'OPENING_BALANCE',
CLOSING_BALANCE = 'CLOSING_BALANCE',
TRANSACTION = 'TRANSACTION',
CUSTOMER = 'CUSTOMER',
}
export default class TransactionsByContactsTableRows {
private dateAccessor = (value): string => {
return moment(value.date).format('YYYY MMM DD');
};
/**
* Retrieve the table rows of contact transactions.
* @param {ITransactionsByCustomersCustomer} contact
* @returns {ITableRow[]}
*/
protected contactTransactions = (
contact: ITransactionsByContactsContact
): ITableRow[] => {
const columns = [
{ key: 'date', accessor: this.dateAccessor },
{ key: 'account', accessor: 'accountName' },
{ key: 'transactionType', accessor: 'transactionType' },
{ key: 'transactionNumber', accessor: 'transactionNumber' },
{ key: 'credit', accessor: 'credit.formattedAmount' },
{ key: 'debit', accessor: 'debit.formattedAmount' },
{ key: 'runningBalance', accessor: 'runningBalance.formattedAmount' },
];
return tableMapper(contact.transactions, columns, {
rowTypes: [ROW_TYPE.TRANSACTION],
});
};
/**
* Retrieve the table row of contact opening balance.
* @param {ITransactionsByCustomersCustomer} contact
* @returns {ITableRow}
*/
protected contactOpeningBalance = (
contact: ITransactionsByContactsContact
): ITableRow => {
const columns = [
{ key: 'openingBalanceLabel', value: this.i18n.__('Opening balance') },
...R.repeat({ key: 'empty', value: '' }, 5),
{
key: 'openingBalanceValue',
accessor: 'openingBalance.formattedAmount',
},
];
return tableRowMapper(contact, columns, {
rowTypes: [ROW_TYPE.OPENING_BALANCE],
});
};
/**
* Retrieve the table row of contact closing balance.
* @param {ITransactionsByCustomersCustomer} contact -
* @returns {ITableRow}
*/
protected contactClosingBalance = (
contact: ITransactionsByContactsContact
): ITableRow => {
const columns = [
{ key: 'closingBalanceLabel', value: this.i18n.__('Closing balance') },
...R.repeat({ key: 'empty', value: '' }, 5),
{
key: 'closingBalanceValue',
accessor: 'closingBalance.formattedAmount',
},
];
return tableRowMapper(contact, columns, {
rowTypes: [ROW_TYPE.CLOSING_BALANCE],
});
};
}