Files
bigcapital/packages/server/src/services/FinancialStatements/TransactionsByReference/TransactionsByReferenceReport.ts
2023-02-03 11:57:50 +02:00

82 lines
2.4 KiB
TypeScript

import {
IAccount,
IAccountTransaction,
INumberFormatQuery,
ITransactionsByReferenceQuery,
ITransactionsByReferenceTransaction,
} from '@/interfaces';
import FinancialSheet from '../FinancialSheet';
export default class TransactionsByReference extends FinancialSheet {
readonly transactions: IAccountTransaction[];
readonly query: ITransactionsByReferenceQuery;
readonly baseCurrency: string;
readonly numberFormat: INumberFormatQuery;
/**
* Constructor method.
* @param {IAccountTransaction[]} transactions
* @param {ITransactionsByReferenceQuery} query
* @param {string} baseCurrency
*/
constructor(
transactions: (IAccountTransaction & { account: IAccount }) [],
query: ITransactionsByReferenceQuery,
baseCurrency: string
) {
super();
this.transactions = transactions;
this.query = query;
this.baseCurrency = baseCurrency;
this.numberFormat = this.query.numberFormat;
}
/**
* Mappes the given account transaction to report transaction.
* @param {IAccountTransaction} transaction
* @returns {ITransactionsByReferenceTransaction}
*/
private transactionMapper = (
transaction: IAccountTransaction
): ITransactionsByReferenceTransaction => {
return {
date: this.getDateMeta(transaction.date),
credit: this.getAmountMeta(transaction.credit, { money: false }),
debit: this.getAmountMeta(transaction.debit, { money: false }),
referenceTypeFormatted: transaction.referenceTypeFormatted,
referenceType: transaction.referenceType,
referenceId: transaction.referenceId,
contactId: transaction.contactId,
contactType: transaction.contactType,
contactTypeFormatted: transaction.contactType,
accountName: transaction.account.name,
accountCode: transaction.account.code,
accountId: transaction.accountId,
};
};
/**
* Mappes the given accounts transactions to report transactions.
* @param {IAccountTransaction} transaction
* @returns {ITransactionsByReferenceTransaction}
*/
private transactionsMapper = (
transactions: IAccountTransaction[]
): ITransactionsByReferenceTransaction[] => {
return transactions.map(this.transactionMapper);
};
/**
* Retrieve the report data.
* @returns {ITransactionsByReferenceTransaction}
*/
public reportData(): ITransactionsByReferenceTransaction[] {
return this.transactionsMapper(this.transactions);
}
}