feat(server): financial reports meta

This commit is contained in:
Ahmed Bouhuolia
2024-02-17 23:36:29 +02:00
parent d2e6cc0036
commit 06e78db49d
62 changed files with 726 additions and 474 deletions

View File

@@ -0,0 +1,26 @@
import { Inject, Service } from 'typedi';
import { IAgingSummaryMeta, IAgingSummaryQuery } from '@/interfaces';
import { AgingSummaryMeta } from './AgingSummaryMeta';
@Service()
export class APAgingSummaryMeta {
@Inject()
private agingSummaryMeta: AgingSummaryMeta;
/**
* Retrieve the aging summary meta.
* @param {number} tenantId -
* @returns {IBalanceSheetMeta}
*/
public async meta(
tenantId: number,
query: IAgingSummaryQuery
): Promise<IAgingSummaryMeta> {
const commonMeta = await this.agingSummaryMeta.meta(tenantId, query);
return {
...commonMeta,
sheetName: 'A/P Aging Summary',
};
}
}

View File

@@ -22,13 +22,12 @@ export class APAgingSummaryPdfInjectable {
query: IAPAgingSummaryQuery
): Promise<Buffer> {
const table = await this.APAgingSummaryTable.table(tenantId, query);
const sheetName = 'AR Aging Summary';
return this.tableSheetPdf.convertToPdf(
tenantId,
table.table,
sheetName,
table.meta.baseCurrency
table.meta.sheetName,
table.meta.formattedAsDate
);
}
}

View File

@@ -1,18 +1,19 @@
import moment from 'moment';
import { Inject, Service } from 'typedi';
import { isEmpty } from 'lodash';
import { IAPAgingSummaryQuery, IARAgingSummaryMeta } from '@/interfaces';
import { IAPAgingSummaryQuery, IAPAgingSummarySheet } from '@/interfaces';
import TenancyService from '@/services/Tenancy/TenancyService';
import APAgingSummarySheet from './APAgingSummarySheet';
import { Tenant } from '@/system/models';
import { APAgingSummaryMeta } from './APAgingSummaryMeta';
@Service()
export class APAgingSummaryService {
@Inject()
tenancy: TenancyService;
private tenancy: TenancyService;
@Inject('logger')
logger: any;
@Inject()
private APAgingSummaryMeta: APAgingSummaryMeta;
/**
* Default report query.
@@ -35,35 +36,16 @@ export class APAgingSummaryService {
};
}
/**
* Retrieve the balance sheet meta.
* @param {number} tenantId -
* @returns {IBalanceSheetMeta}
*/
reportMetadata(tenantId: number): IARAgingSummaryMeta {
const settings = this.tenancy.settings(tenantId);
const organizationName = settings.get({
group: 'organization',
key: 'name',
});
const baseCurrency = settings.get({
group: 'organization',
key: 'base_currency',
});
return {
organizationName,
baseCurrency,
};
}
/**
* Retrieve A/P aging summary report.
* @param {number} tenantId -
* @param {IAPAgingSummaryQuery} query -
* @returns {Promise<IAPAgingSummarySheet>}
*/
async APAgingSummary(tenantId: number, query: IAPAgingSummaryQuery) {
public async APAgingSummary(
tenantId: number,
query: IAPAgingSummaryQuery
): Promise<IAPAgingSummarySheet> {
const { Bill } = this.tenancy.models(tenantId);
const { vendorRepository } = this.tenancy.repositories(tenantId);
@@ -111,11 +93,14 @@ export class APAgingSummaryService {
const data = APAgingSummaryReport.reportData();
const columns = APAgingSummaryReport.reportColumns();
// Retrieve the aging summary report meta.
const meta = await this.APAgingSummaryMeta.meta(tenantId, filter);
return {
data,
columns,
query: filter,
meta: this.reportMetadata(tenantId),
meta,
};
}
}

View File

@@ -0,0 +1,26 @@
import { Inject, Service } from 'typedi';
import { IAgingSummaryMeta, IAgingSummaryQuery } from '@/interfaces';
import { AgingSummaryMeta } from './AgingSummaryMeta';
@Service()
export class ARAgingSummaryMeta {
@Inject()
private agingSummaryMeta: AgingSummaryMeta;
/**
* Retrieve the aging summary meta.
* @param {number} tenantId -
* @returns {IBalanceSheetMeta}
*/
public async meta(
tenantId: number,
query: IAgingSummaryQuery
): Promise<IAgingSummaryMeta> {
const commonMeta = await this.agingSummaryMeta.meta(tenantId, query);
return {
...commonMeta,
sheetName: 'A/R Aging Summary',
};
}
}

View File

@@ -22,13 +22,12 @@ export class ARAgingSummaryPdfInjectable {
query: IARAgingSummaryQuery
): Promise<Buffer> {
const table = await this.ARAgingSummaryTable.table(tenantId, query);
const sheetName = 'AR Aging Summary';
return this.tableSheetPdf.convertToPdf(
tenantId,
table.table,
sheetName,
table.meta.baseCurrency
table.meta.sheetName,
table.meta.formattedDateRange
);
}
}

View File

@@ -1,18 +1,19 @@
import moment from 'moment';
import { Inject, Service } from 'typedi';
import { isEmpty } from 'lodash';
import { IARAgingSummaryQuery, IARAgingSummaryMeta } from '@/interfaces';
import { IARAgingSummaryQuery } from '@/interfaces';
import TenancyService from '@/services/Tenancy/TenancyService';
import ARAgingSummarySheet from './ARAgingSummarySheet';
import { Tenant } from '@/system/models';
import { ARAgingSummaryMeta } from './ARAgingSummaryMeta';
@Service()
export default class ARAgingSummaryService {
@Inject()
tenancy: TenancyService;
private tenancy: TenancyService;
@Inject('logger')
logger: any;
@Inject()
private ARAgingSummaryMeta: ARAgingSummaryMeta;
/**
* Default report query.
@@ -35,29 +36,6 @@ export default class ARAgingSummaryService {
};
}
/**
* Retrieve the balance sheet meta.
* @param {number} tenantId -
* @returns {IBalanceSheetMeta}
*/
reportMetadata(tenantId: number): IARAgingSummaryMeta {
const settings = this.tenancy.settings(tenantId);
const organizationName = settings.get({
group: 'organization',
key: 'name',
});
const baseCurrency = settings.get({
group: 'organization',
key: 'base_currency',
});
return {
organizationName,
baseCurrency,
};
}
/**
* Retrieve A/R aging summary report.
* @param {number} tenantId - Tenant id.
@@ -110,11 +88,14 @@ export default class ARAgingSummaryService {
const data = ARAgingSummaryReport.reportData();
const columns = ARAgingSummaryReport.reportColumns();
// Retrieve the aging summary report meta.
const meta = await this.ARAgingSummaryMeta.meta(tenantId, filter);
return {
data,
columns,
query: filter,
meta: this.reportMetadata(tenantId),
meta,
};
}
}

View File

@@ -19,6 +19,7 @@ export class ARAgingSummaryTableInjectable {
query: IARAgingSummaryQuery
): Promise<IARAgingSummaryTable> {
const report = await this.ARAgingSummarySheet.ARAgingSummary(
tenantId,
query
);

View File

@@ -0,0 +1,30 @@
import { Inject } from 'typedi';
import { FinancialSheetMeta } from '../FinancialSheetMeta';
import { IAgingSummaryMeta, IAgingSummaryQuery } from '@/interfaces';
import moment from 'moment';
export class AgingSummaryMeta {
@Inject()
private financialSheetMeta: FinancialSheetMeta;
/**
* Retrieve the aging summary meta.
* @param {number} tenantId -
* @returns {IBalanceSheetMeta}
*/
public async meta(
tenantId: number,
query: IAgingSummaryQuery
): Promise<IAgingSummaryMeta> {
const commonMeta = await this.financialSheetMeta.meta(tenantId);
const formattedAsDate = moment(query.asDate).format('YYYY/MM/DD');
const formattedDateRange = `As ${formattedAsDate}`;
return {
...commonMeta,
sheetName: 'A/P Aging Summary',
formattedAsDate,
formattedDateRange,
};
}
}