Skip to content

Commit

Permalink
Merge pull request #501 from bigcapitalhq/BIG-202
Browse files Browse the repository at this point in the history
fix: Balance sheet and P/L nested accounts
  • Loading branch information
abouolia authored Jun 12, 2024
2 parents d998d71 + cfd37f8 commit 265ea9c
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import { BalanceSheetPercentage } from './BalanceSheetPercentage';
import { BalanceSheetSchema } from './BalanceSheetSchema';
import { BalanceSheetBase } from './BalanceSheetBase';
import { BalanceSheetQuery } from './BalanceSheetQuery';
import { flatToNestedArray } from '@/utils';
import BalanceSheetRepository from './BalanceSheetRepository';

export const BalanceSheetAccounts = (Base: any) =>
class extends R.compose(
Expand Down Expand Up @@ -56,6 +58,11 @@ export const BalanceSheetAccounts = (Base: any) =>
*/
readonly i18n: any;

/**
* Balance sheet repository.
*/
readonly repository: BalanceSheetRepository;

/**
* Retrieve the accounts node of accounts types.
* @param {string} accountsTypes
Expand All @@ -78,8 +85,12 @@ export const BalanceSheetAccounts = (Base: any) =>
private reportSchemaAccountNodeMapper = (
account: IAccount
): IBalanceSheetAccountNode => {
const childrenAccountsIds = this.repository.accountsGraph.dependenciesOf(
account.id
);
const accountIds = R.uniq(R.append(account.id, childrenAccountsIds));
const total = this.repository.totalAccountsLedger
.whereAccountId(account.id)
.whereAccountsIds(accountIds)
.getClosingBalance();

return {
Expand Down Expand Up @@ -128,8 +139,19 @@ export const BalanceSheetAccounts = (Base: any) =>
private getAccountsNodesByAccountTypes = (
accountsTypes: string[]
): IBalanceSheetAccountNode[] => {
// Retrieves accounts from the given defined node account types.
const accounts = this.getAccountsByAccountTypes(accountsTypes);
return R.map(this.reportSchemaAccountNodeComposer, accounts);

// Converts the flatten accounts to tree.
const accountsTree = flatToNestedArray(accounts, {
id: 'id',
parentId: 'parentAccountId',
});
// Maps over the accounts tree.
return this.mapNodesDeep(
accountsTree,
this.reportSchemaAccountNodeComposer
);
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ export default class BalanceSheetRepository extends R.compose(
*/
public accounts: any;

/**
* @param {}
*/
public accountsGraph: any;

/**
*
*/
Expand Down Expand Up @@ -161,6 +166,8 @@ export default class BalanceSheetRepository extends R.compose(
*/
public asyncInitialize = async () => {
await this.initAccounts();
await this.initAccountsGraph();

await this.initAccountsTotalLedger();

// Date periods.
Expand Down Expand Up @@ -202,6 +209,15 @@ export default class BalanceSheetRepository extends R.compose(
this.accountsByParentType = transformToMapBy(accounts, 'accountParentType');
};

/**
* Initialize accounts graph.
*/
public initAccountsGraph = async () => {
const { Account } = this.models;

this.accountsGraph = Account.toDependencyGraph(this.accounts);
};

// ----------------------------
// # Closing Total
// ----------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { ProfitLossSheetPreviousYear } from './ProfitLossSheetPreviousYear';
import { ProfitLossSheetPreviousPeriod } from './ProfitLossSheetPreviousPeriod';
import { FinancialDateRanges } from '../FinancialDateRanges';
import { ProfitLossSheetFilter } from './ProfitLossSheetFilter';
import { flatToNestedArray } from '@/utils';

export default class ProfitLossSheet extends R.compose(
ProfitLossSheetPreviousYear,
Expand Down Expand Up @@ -82,14 +83,22 @@ export default class ProfitLossSheet extends R.compose(

/**
* Retrieve the sheet account node from the given account.
* @param {IAccount} account
* @param {IAccount} account
* @returns {IProfitLossSheetAccountNode}
*/
private accountNodeMapper = (
account: IAccount
): IProfitLossSheetAccountNode => {
// Retrieves the children account ids of the given account id.
const childrenAccountIds = this.repository.accountsGraph.dependenciesOf(
account.id
);
// Concat the children and the given account id.
const accountIds = R.uniq(R.append(account.id, childrenAccountIds));

// Retrieves the closing balance of the account included children accounts.
const total = this.repository.totalAccountsLedger
.whereAccountId(account.id)
.whereAccountsIds(accountIds)
.getClosingBalance();

return {
Expand Down Expand Up @@ -126,18 +135,19 @@ export default class ProfitLossSheet extends R.compose(
};

/**
* Retrieve report accounts nodes by the given accounts types.
* @param {string[]} types
* Retrieves report accounts nodes by the given accounts types.
* @param {string[]} types
* @returns {IBalanceSheetAccountNode}
*/
private getAccountsNodesByTypes = (
types: string[]
): IProfitLossSheetAccountNode[] => {
return R.compose(
R.map(this.accountNodeCompose),
R.flatten,
R.map(this.repository.getAccountsByType)
)(types);
const accounts = this.repository.getAccountsByType(types);
const accountsTree = flatToNestedArray(accounts, {
id: 'id',
parentId: 'parentAccountId',
});
return this.mapNodesDeep(accountsTree, this.accountNodeCompose);
};

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { defaultTo } from 'lodash';
import { castArray, defaultTo } from 'lodash';
import * as R from 'ramda';
import { Knex } from 'knex';
import { isEmpty } from 'lodash';
Expand Down Expand Up @@ -31,6 +31,11 @@ export class ProfitLossSheetRepository extends R.compose(FinancialDatePeriods)(
*/
public accounts: IAccount[];

/**
*
*/
public accountsGraph: any;

/**
* Transactions group type.
* @param {IAccountTransactionsGroupBy}
Expand Down Expand Up @@ -135,6 +140,8 @@ export class ProfitLossSheetRepository extends R.compose(FinancialDatePeriods)(
*/
public asyncInitialize = async () => {
await this.initAccounts();
await this.initAccountsGraph();

await this.initAccountsTotalLedger();

// Date Periods.
Expand Down Expand Up @@ -177,6 +184,15 @@ export class ProfitLossSheetRepository extends R.compose(FinancialDatePeriods)(
this.accountsByType = transformToMapBy(accounts, 'accountType');
};

/**
* Initialize accounts graph.
*/
private initAccountsGraph = async () => {
const { Account } = this.models;

this.accountsGraph = Account.toDependencyGraph(this.accounts);
};

// ----------------------------
// # Closing Total.
// ----------------------------
Expand Down Expand Up @@ -337,7 +353,18 @@ export class ProfitLossSheetRepository extends R.compose(FinancialDatePeriods)(
return Account.query();
};

public getAccountsByType = (type: string) => {
return defaultTo(this.accountsByType.get(type), []);
/**
*
* @param type
* @returns
*/
public getAccountsByType = (type: string[] | string) => {
return R.compose(
R.flatten,
R.map((accountType) =>
R.defaultTo([], this.accountsByType.get(accountType))
),
castArray
)(type);
};
}

0 comments on commit 265ea9c

Please sign in to comment.