mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 14:20:31 +00:00
fix: Trial balance sheet adjusted balance (#273)
This commit is contained in:
@@ -10,13 +10,26 @@ import {
|
||||
} from '@/interfaces';
|
||||
import FinancialSheet from '../FinancialSheet';
|
||||
import { allPassedConditionsPass, flatToNestedArray } from 'utils';
|
||||
import { TrialBalanceSheetRepository } from './TrialBalanceSheetRepository';
|
||||
|
||||
export default class TrialBalanceSheet extends FinancialSheet {
|
||||
tenantId: number;
|
||||
query: ITrialBalanceSheetQuery;
|
||||
accounts: IAccount & { type: IAccountType }[];
|
||||
journalFinancial: any;
|
||||
baseCurrency: string;
|
||||
/**
|
||||
* Trial balance sheet query.
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
*/
|
||||
private query: ITrialBalanceSheetQuery;
|
||||
|
||||
/**
|
||||
* Trial balance sheet repository.
|
||||
* @param {TrialBalanceSheetRepository}
|
||||
*/
|
||||
private repository: TrialBalanceSheetRepository;
|
||||
|
||||
/**
|
||||
* Organization base currency.
|
||||
* @param {string}
|
||||
*/
|
||||
private baseCurrency: string;
|
||||
|
||||
/**
|
||||
* Constructor method.
|
||||
@@ -28,20 +41,58 @@ export default class TrialBalanceSheet extends FinancialSheet {
|
||||
constructor(
|
||||
tenantId: number,
|
||||
query: ITrialBalanceSheetQuery,
|
||||
accounts: IAccount & { type: IAccountType }[],
|
||||
journalFinancial: any,
|
||||
repository: TrialBalanceSheetRepository,
|
||||
baseCurrency: string
|
||||
) {
|
||||
super();
|
||||
|
||||
this.tenantId = tenantId;
|
||||
this.query = query;
|
||||
this.accounts = accounts;
|
||||
this.journalFinancial = journalFinancial;
|
||||
this.repository = repository;
|
||||
this.numberFormat = this.query.numberFormat;
|
||||
this.baseCurrency = baseCurrency;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the closing credit of the given account.
|
||||
* @param {number} accountId
|
||||
* @returns {number}
|
||||
*/
|
||||
public getClosingAccountCredit(accountId: number) {
|
||||
const depsAccountsIds =
|
||||
this.repository.accountsDepGraph.dependenciesOf(accountId);
|
||||
|
||||
return this.repository.totalAccountsLedger
|
||||
.whereAccountsIds([accountId, ...depsAccountsIds])
|
||||
.getClosingCredit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the closing debit of the given account.
|
||||
* @param {number} accountId
|
||||
* @returns {number}
|
||||
*/
|
||||
public getClosingAccountDebit(accountId: number) {
|
||||
const depsAccountsIds =
|
||||
this.repository.accountsDepGraph.dependenciesOf(accountId);
|
||||
|
||||
return this.repository.totalAccountsLedger
|
||||
.whereAccountsIds([accountId, ...depsAccountsIds])
|
||||
.getClosingDebit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the closing total of the given account.
|
||||
* @param {number} accountId
|
||||
* @returns {number}
|
||||
*/
|
||||
public getClosingAccountTotal(accountId: number) {
|
||||
const credit = this.getClosingAccountCredit(accountId);
|
||||
const debit = this.getClosingAccountDebit(accountId);
|
||||
|
||||
return debit - credit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Account mapper.
|
||||
* @param {IAccount} account
|
||||
@@ -50,23 +101,28 @@ export default class TrialBalanceSheet extends FinancialSheet {
|
||||
private accountTransformer = (
|
||||
account: IAccount & { type: IAccountType }
|
||||
): ITrialBalanceAccount => {
|
||||
const trial = this.journalFinancial.getTrialBalanceWithDepands(account.id);
|
||||
const debit = this.getClosingAccountDebit(account.id);
|
||||
const credit = this.getClosingAccountCredit(account.id);
|
||||
const balance = this.getClosingAccountTotal(account.id);
|
||||
|
||||
return {
|
||||
id: account.id,
|
||||
parentAccountId: account.parentAccountId,
|
||||
name: account.name,
|
||||
formattedName: account.code
|
||||
? `${account.name} - ${account.code}`
|
||||
: `${account.name}`,
|
||||
code: account.code,
|
||||
accountNormal: account.accountNormal,
|
||||
|
||||
credit: trial.credit,
|
||||
debit: trial.debit,
|
||||
balance: trial.balance,
|
||||
credit,
|
||||
debit,
|
||||
balance,
|
||||
currencyCode: this.baseCurrency,
|
||||
|
||||
formattedCredit: this.formatNumber(trial.credit),
|
||||
formattedDebit: this.formatNumber(trial.debit),
|
||||
formattedBalance: this.formatNumber(trial.balance),
|
||||
formattedCredit: this.formatNumber(credit),
|
||||
formattedDebit: this.formatNumber(debit),
|
||||
formattedBalance: this.formatNumber(balance),
|
||||
};
|
||||
};
|
||||
|
||||
@@ -117,10 +173,7 @@ export default class TrialBalanceSheet extends FinancialSheet {
|
||||
private filterNoneTransactions = (
|
||||
accountNode: ITrialBalanceAccount
|
||||
): boolean => {
|
||||
const entries = this.journalFinancial.getAccountEntriesWithDepents(
|
||||
accountNode.id
|
||||
);
|
||||
return entries.length > 0;
|
||||
return false === this.repository.totalAccountsLedger.isEmpty();
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -200,11 +253,11 @@ export default class TrialBalanceSheet extends FinancialSheet {
|
||||
*/
|
||||
public reportData(): ITrialBalanceSheetData {
|
||||
// Don't return noting if the journal has no transactions.
|
||||
if (this.journalFinancial.isEmpty()) {
|
||||
if (this.repository.totalAccountsLedger.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
// Retrieve accounts nodes.
|
||||
const accounts = this.accountsSection(this.accounts);
|
||||
const accounts = this.accountsSection(this.repository.accounts);
|
||||
|
||||
// Retrieve account node.
|
||||
const total = this.tatalSection(accounts);
|
||||
|
||||
Reference in New Issue
Block a user