mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 14:20:31 +00:00
feat: export reports csv and xlsx (#286)
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import { TableSheet } from '@/lib/Xlsx/TableSheet';
|
||||
import { ITrialBalanceSheetQuery } from '@/interfaces';
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { TrialBalanceSheetTableInjectable } from './TrialBalanceSheetTableInjectable';
|
||||
|
||||
@Service()
|
||||
export class TrialBalanceExportInjectable {
|
||||
@Inject()
|
||||
private trialBalanceSheetTable: TrialBalanceSheetTableInjectable;
|
||||
|
||||
/**
|
||||
* Retrieves the trial balance sheet in XLSX format.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<Buffer>}
|
||||
*/
|
||||
public async xlsx(tenantId: number, query: ITrialBalanceSheetQuery) {
|
||||
const table = await this.trialBalanceSheetTable.table(tenantId, query);
|
||||
|
||||
const tableSheet = new TableSheet(table.table);
|
||||
const tableCsv = tableSheet.convertToXLSX();
|
||||
|
||||
return tableSheet.convertToBuffer(tableCsv, 'xlsx');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the trial balance sheet in CSV format.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<Buffer>}
|
||||
*/
|
||||
public async csv(
|
||||
tenantId: number,
|
||||
query: ITrialBalanceSheetQuery
|
||||
): Promise<string> {
|
||||
const table = await this.trialBalanceSheetTable.table(tenantId, query);
|
||||
|
||||
const tableSheet = new TableSheet(table.table);
|
||||
const tableCsv = tableSheet.convertToCSV();
|
||||
|
||||
return tableCsv;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { TrialBalanceSheetTableInjectable } from './TrialBalanceSheetTableInjectable';
|
||||
import { TrialBalanceExportInjectable } from './TrialBalanceExportInjectable';
|
||||
import { ITrialBalanceSheetQuery, ITrialBalanceStatement } from '@/interfaces';
|
||||
import TrialBalanceSheetService from './TrialBalanceSheetInjectable';
|
||||
|
||||
@Service()
|
||||
export class TrialBalanceSheetApplication {
|
||||
@Inject()
|
||||
private sheetService: TrialBalanceSheetService;
|
||||
|
||||
@Inject()
|
||||
private tablable: TrialBalanceSheetTableInjectable;
|
||||
|
||||
@Inject()
|
||||
private exportable: TrialBalanceExportInjectable;
|
||||
|
||||
/**
|
||||
* Retrieves the trial balance sheet.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<ITrialBalanceStatement>}
|
||||
*/
|
||||
public sheet(
|
||||
tenantId: number,
|
||||
query: ITrialBalanceSheetQuery
|
||||
): Promise<ITrialBalanceStatement> {
|
||||
return this.sheetService.trialBalanceSheet(tenantId, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the trial balance sheet in table format.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<ITrialBalanceSheetTable>}
|
||||
*/
|
||||
public table(tenantId: number, query: ITrialBalanceSheetQuery) {
|
||||
return this.tablable.table(tenantId, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the trial balance sheet in CSV format.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<Buffer>}
|
||||
*/
|
||||
public csv(tenantId: number, query: ITrialBalanceSheetQuery) {
|
||||
return this.exportable.csv(tenantId, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the trial balance sheet in XLSX format.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<Buffer>}
|
||||
*/
|
||||
public async xlsx(tenantId: number, query: ITrialBalanceSheetQuery) {
|
||||
return this.exportable.xlsx(tenantId, query);
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
import { Service, Inject } from 'typedi';
|
||||
import moment from 'moment';
|
||||
import TenancyService from '@/services/Tenancy/TenancyService';
|
||||
import Journal from '@/services/Accounting/JournalPoster';
|
||||
import {
|
||||
ITrialBalanceSheetMeta,
|
||||
ITrialBalanceSheetQuery,
|
||||
@@ -13,7 +12,6 @@ import InventoryService from '@/services/Inventory/Inventory';
|
||||
import { parseBoolean } from 'utils';
|
||||
import { Tenant } from '@/system/models';
|
||||
import { TrialBalanceSheetRepository } from './TrialBalanceSheetRepository';
|
||||
import { TrialBalanceSheetTable } from './TrialBalanceSheetTable';
|
||||
|
||||
@Service()
|
||||
export default class TrialBalanceSheetService extends FinancialSheet {
|
||||
@@ -30,7 +28,7 @@ export default class TrialBalanceSheetService extends FinancialSheet {
|
||||
* Defaults trial balance sheet filter query.
|
||||
* @return {IBalanceSheetQuery}
|
||||
*/
|
||||
get defaultQuery(): ITrialBalanceSheetQuery {
|
||||
private get defaultQuery(): ITrialBalanceSheetQuery {
|
||||
return {
|
||||
fromDate: moment().startOf('year').format('YYYY-MM-DD'),
|
||||
toDate: moment().format('YYYY-MM-DD'),
|
||||
@@ -54,7 +52,7 @@ export default class TrialBalanceSheetService extends FinancialSheet {
|
||||
* @param {number} tenantId - Tenant id.
|
||||
* @returns {ITrialBalanceSheetMeta}
|
||||
*/
|
||||
reportMetadata(tenantId: number): ITrialBalanceSheetMeta {
|
||||
private reportMetadata(tenantId: number): ITrialBalanceSheetMeta {
|
||||
const settings = this.tenancy.settings(tenantId);
|
||||
|
||||
const isCostComputeRunning =
|
||||
@@ -89,7 +87,6 @@ export default class TrialBalanceSheetService extends FinancialSheet {
|
||||
...this.defaultQuery,
|
||||
...query,
|
||||
};
|
||||
|
||||
const tenant = await Tenant.query()
|
||||
.findById(tenantId)
|
||||
.withGraphFetched('metadata');
|
||||
@@ -120,27 +117,4 @@ export default class TrialBalanceSheetService extends FinancialSheet {
|
||||
meta: this.reportMetadata(tenantId),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the trial balance sheet table.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<any>}
|
||||
*/
|
||||
public async trialBalanceSheetTable(
|
||||
tenantId: number,
|
||||
query: ITrialBalanceSheetQuery
|
||||
) {
|
||||
const trialBalance = await this.trialBalanceSheet(tenantId, query);
|
||||
const table = new TrialBalanceSheetTable(trialBalance.data, query, {});
|
||||
|
||||
return {
|
||||
table: {
|
||||
columns: table.tableColumns(),
|
||||
rows: table.tableRows(),
|
||||
},
|
||||
meta: trialBalance.meta,
|
||||
query: trialBalance.query,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
import { Inject, Service } from 'typedi';
|
||||
import { ITrialBalanceSheetQuery, ITrialBalanceSheetTable } from '@/interfaces';
|
||||
import { TrialBalanceSheetTable } from './TrialBalanceSheetTable';
|
||||
import TrialBalanceSheetService from './TrialBalanceSheetInjectable';
|
||||
|
||||
@Service()
|
||||
export class TrialBalanceSheetTableInjectable {
|
||||
@Inject()
|
||||
private sheet: TrialBalanceSheetService;
|
||||
|
||||
/**
|
||||
* Retrieves the trial balance sheet table.
|
||||
* @param {number} tenantId
|
||||
* @param {ITrialBalanceSheetQuery} query
|
||||
* @returns {Promise<ITrialBalanceSheetTable>}
|
||||
*/
|
||||
public async table(
|
||||
tenantId: number,
|
||||
query: ITrialBalanceSheetQuery
|
||||
): Promise<ITrialBalanceSheetTable> {
|
||||
const trialBalance = await this.sheet.trialBalanceSheet(tenantId, query);
|
||||
const table = new TrialBalanceSheetTable(trialBalance.data, query, {});
|
||||
|
||||
return {
|
||||
table: {
|
||||
columns: table.tableColumns(),
|
||||
rows: table.tableRows(),
|
||||
},
|
||||
meta: trialBalance.meta,
|
||||
query: trialBalance.query,
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user