mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 12:20:31 +00:00
68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import {
|
|
IBalanceSheetDOO,
|
|
IBalanceSheetQuery,
|
|
} from './BalanceSheet.types';
|
|
import { BalanceSheetRepository } from './BalanceSheetRepository';
|
|
import { BalanceSheetMetaInjectable } from './BalanceSheetMeta';
|
|
import { Inject, Injectable } from '@nestjs/common';
|
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
import { events } from '@/common/events/events';
|
|
import { BalanceSheet } from './BalanceSheet';
|
|
import { getBalanceSheetDefaultQuery } from './constants';
|
|
import { TenancyContext } from '@/modules/Tenancy/TenancyContext.service';
|
|
import { I18nService } from 'nestjs-i18n';
|
|
|
|
@Injectable()
|
|
export class BalanceSheetInjectable {
|
|
constructor(
|
|
private readonly balanceSheetMeta: BalanceSheetMetaInjectable,
|
|
private readonly eventPublisher: EventEmitter2,
|
|
private readonly tenancyContext: TenancyContext,
|
|
private readonly i18n: I18nService,
|
|
|
|
@Inject(BalanceSheetRepository.name)
|
|
private readonly balanceSheetRepository: BalanceSheetRepository,
|
|
) {}
|
|
|
|
/**
|
|
* Retrieve balance sheet statement.
|
|
* @param {IBalanceSheetQuery} query - Balance sheet query.
|
|
* @return {Promise<IBalanceSheetStatement>}
|
|
*/
|
|
public async balanceSheet(
|
|
query: IBalanceSheetQuery,
|
|
): Promise<IBalanceSheetDOO> {
|
|
const filter = {
|
|
...getBalanceSheetDefaultQuery(),
|
|
...query,
|
|
};
|
|
const tenantMetadata = await this.tenancyContext.getTenantMetadata(true);
|
|
|
|
// Loads all resources.
|
|
await this.balanceSheetRepository.asyncInitialize(filter);
|
|
|
|
// Balance sheet report instance.
|
|
const balanceSheetInstanace = new BalanceSheet(
|
|
filter,
|
|
this.balanceSheetRepository,
|
|
tenantMetadata.baseCurrency,
|
|
this.i18n,
|
|
);
|
|
// Balance sheet data.
|
|
const data = balanceSheetInstanace.reportData();
|
|
|
|
// Balance sheet meta.
|
|
const meta = await this.balanceSheetMeta.meta(filter);
|
|
|
|
// Triggers `onBalanceSheetViewed` event.
|
|
await this.eventPublisher.emitAsync(events.reports.onBalanceSheetViewed, {
|
|
query,
|
|
});
|
|
return {
|
|
query: filter,
|
|
data,
|
|
meta,
|
|
};
|
|
}
|
|
}
|