mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-22 15:50:32 +00:00
feat(server): balance sheet meta
This commit is contained in:
@@ -18,4 +18,4 @@ block content
|
|||||||
each row in table.rows
|
each row in table.rows
|
||||||
tr
|
tr
|
||||||
each cell in row.cells
|
each cell in row.cells
|
||||||
td= cell.value
|
td!= cell.value
|
||||||
@@ -16,7 +16,7 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo
|
|||||||
/**
|
/**
|
||||||
* Router constructor.
|
* Router constructor.
|
||||||
*/
|
*/
|
||||||
router() {
|
public router() {
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.get(
|
router.get(
|
||||||
@@ -32,7 +32,7 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo
|
|||||||
/**
|
/**
|
||||||
* Validation schema.
|
* Validation schema.
|
||||||
*/
|
*/
|
||||||
get validationSchema(): ValidationChain[] {
|
private get validationSchema(): ValidationChain[] {
|
||||||
return [
|
return [
|
||||||
query('from_date').optional().isISO8601(),
|
query('from_date').optional().isISO8601(),
|
||||||
query('to_date').optional().isISO8601(),
|
query('to_date').optional().isISO8601(),
|
||||||
@@ -61,7 +61,7 @@ export default class GeneralLedgerReportController extends BaseFinancialReportCo
|
|||||||
* @param {Request} req -
|
* @param {Request} req -
|
||||||
* @param {Response} res -
|
* @param {Response} res -
|
||||||
*/
|
*/
|
||||||
async generalLedger(req: Request, res: Response, next: NextFunction) {
|
private async generalLedger(req: Request, res: Response, next: NextFunction) {
|
||||||
const { tenantId } = req;
|
const { tenantId } = req;
|
||||||
const filter = this.matchedQueryData(req);
|
const filter = this.matchedQueryData(req);
|
||||||
const accept = this.accepts(req);
|
const accept = this.accepts(req);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import {
|
|||||||
INumberFormatQuery,
|
INumberFormatQuery,
|
||||||
IFormatNumberSettings,
|
IFormatNumberSettings,
|
||||||
IFinancialSheetBranchesQuery,
|
IFinancialSheetBranchesQuery,
|
||||||
|
IFinancialSheetCommonMeta,
|
||||||
} from './FinancialStatements';
|
} from './FinancialStatements';
|
||||||
import { IFinancialTable } from './Table';
|
import { IFinancialTable } from './Table';
|
||||||
|
|
||||||
@@ -63,11 +64,7 @@ export interface IBalanceSheetQuery extends IFinancialSheetBranchesQuery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Balance sheet meta.
|
// Balance sheet meta.
|
||||||
export interface IBalanceSheetMeta {
|
export interface IBalanceSheetMeta extends IFinancialSheetCommonMeta {}
|
||||||
isCostComputeRunning: boolean;
|
|
||||||
organizationName: string;
|
|
||||||
baseCurrency: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IBalanceSheetFormatNumberSettings
|
export interface IBalanceSheetFormatNumberSettings
|
||||||
extends IFormatNumberSettings {
|
extends IFormatNumberSettings {
|
||||||
|
|||||||
@@ -43,3 +43,11 @@ export enum ReportsAction {
|
|||||||
export interface IFinancialSheetBranchesQuery {
|
export interface IFinancialSheetBranchesQuery {
|
||||||
branchesIds?: number[];
|
branchesIds?: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IFinancialSheetCommonMeta {
|
||||||
|
organizationName: string;
|
||||||
|
baseCurrency: string;
|
||||||
|
dateFormat: string;
|
||||||
|
isCostComputeRunning: boolean;
|
||||||
|
sheetName: string;
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,15 +4,12 @@ import {
|
|||||||
IBalanceSheetStatementService,
|
IBalanceSheetStatementService,
|
||||||
IBalanceSheetQuery,
|
IBalanceSheetQuery,
|
||||||
IBalanceSheetStatement,
|
IBalanceSheetStatement,
|
||||||
IBalanceSheetMeta,
|
|
||||||
} from '@/interfaces';
|
} from '@/interfaces';
|
||||||
import TenancyService from '@/services/Tenancy/TenancyService';
|
import TenancyService from '@/services/Tenancy/TenancyService';
|
||||||
import Journal from '@/services/Accounting/JournalPoster';
|
|
||||||
import BalanceSheetStatement from './BalanceSheet';
|
import BalanceSheetStatement from './BalanceSheet';
|
||||||
import InventoryService from '@/services/Inventory/Inventory';
|
|
||||||
import { parseBoolean } from 'utils';
|
|
||||||
import { Tenant } from '@/system/models';
|
import { Tenant } from '@/system/models';
|
||||||
import BalanceSheetRepository from './BalanceSheetRepository';
|
import BalanceSheetRepository from './BalanceSheetRepository';
|
||||||
|
import { BalanceSheetMetaInjectable } from './BalanceSheetMeta';
|
||||||
|
|
||||||
@Service()
|
@Service()
|
||||||
export default class BalanceSheetStatementService
|
export default class BalanceSheetStatementService
|
||||||
@@ -22,7 +19,7 @@ export default class BalanceSheetStatementService
|
|||||||
private tenancy: TenancyService;
|
private tenancy: TenancyService;
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
private inventoryService: InventoryService;
|
private balanceSheetMeta: BalanceSheetMetaInjectable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defaults balance sheet filter query.
|
* Defaults balance sheet filter query.
|
||||||
@@ -62,33 +59,6 @@ export default class BalanceSheetStatementService
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve the balance sheet meta.
|
|
||||||
* @param {number} tenantId -
|
|
||||||
* @returns {IBalanceSheetMeta}
|
|
||||||
*/
|
|
||||||
private reportMetadata(tenantId: number): IBalanceSheetMeta {
|
|
||||||
const settings = this.tenancy.settings(tenantId);
|
|
||||||
|
|
||||||
const isCostComputeRunning =
|
|
||||||
this.inventoryService.isItemsCostComputeRunning(tenantId);
|
|
||||||
|
|
||||||
const organizationName = settings.get({
|
|
||||||
group: 'organization',
|
|
||||||
key: 'name',
|
|
||||||
});
|
|
||||||
const baseCurrency = settings.get({
|
|
||||||
group: 'organization',
|
|
||||||
key: 'base_currency',
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
|
||||||
isCostComputeRunning: parseBoolean(isCostComputeRunning, false),
|
|
||||||
organizationName,
|
|
||||||
baseCurrency,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve balance sheet statement.
|
* Retrieve balance sheet statement.
|
||||||
* @param {number} tenantId
|
* @param {number} tenantId
|
||||||
@@ -122,12 +92,15 @@ export default class BalanceSheetStatementService
|
|||||||
i18n
|
i18n
|
||||||
);
|
);
|
||||||
// Balance sheet data.
|
// Balance sheet data.
|
||||||
const balanceSheetData = balanceSheetInstanace.reportData();
|
const data = balanceSheetInstanace.reportData();
|
||||||
|
|
||||||
|
// Balance sheet meta.
|
||||||
|
const meta = await this.balanceSheetMeta.meta(tenantId);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: balanceSheetData,
|
|
||||||
query: filter,
|
query: filter,
|
||||||
meta: this.reportMetadata(tenantId),
|
data,
|
||||||
|
meta,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import { Inject, Service } from 'typedi';
|
||||||
|
import { FinancialSheetMeta } from '../FinancialSheetMeta';
|
||||||
|
import { IBalanceSheetMeta } from '@/interfaces';
|
||||||
|
|
||||||
|
@Service()
|
||||||
|
export class BalanceSheetMetaInjectable {
|
||||||
|
@Inject()
|
||||||
|
private financialSheetMeta: FinancialSheetMeta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the balance sheet meta.
|
||||||
|
* @param {number} tenantId -
|
||||||
|
* @returns {IBalanceSheetMeta}
|
||||||
|
*/
|
||||||
|
public async meta(tenantId: number): Promise<IBalanceSheetMeta> {
|
||||||
|
const commonMeta = await this.financialSheetMeta.meta(tenantId);
|
||||||
|
|
||||||
|
return {
|
||||||
|
...commonMeta,
|
||||||
|
sheetName: 'Balance Sheet',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,12 +22,11 @@ export class BalanceSheetPdfInjectable {
|
|||||||
query: IBalanceSheetQuery
|
query: IBalanceSheetQuery
|
||||||
): Promise<Buffer> {
|
): Promise<Buffer> {
|
||||||
const table = await this.balanceSheetTable.table(tenantId, query);
|
const table = await this.balanceSheetTable.table(tenantId, query);
|
||||||
const sheetName = 'Balance Sheet';
|
|
||||||
|
|
||||||
return this.tableSheetPdf.convertToPdf(
|
return this.tableSheetPdf.convertToPdf(
|
||||||
tenantId,
|
tenantId,
|
||||||
table.table,
|
table.table,
|
||||||
sheetName,
|
table.meta.sheetName,
|
||||||
table.meta.baseCurrency
|
table.meta.baseCurrency
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
import { TenantMetadata } from '@/system/models';
|
||||||
|
import { Inject, Service } from 'typedi';
|
||||||
|
import InventoryService from '../Inventory/Inventory';
|
||||||
|
import { IFinancialSheetCommonMeta } from '@/interfaces';
|
||||||
|
|
||||||
|
@Service()
|
||||||
|
export class FinancialSheetMeta {
|
||||||
|
@Inject()
|
||||||
|
private inventoryService: InventoryService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the common meta data of the financial sheet.
|
||||||
|
* @param {number} tenantId
|
||||||
|
* @returns {Promise<IFinancialSheetCommonMeta>}
|
||||||
|
*/
|
||||||
|
async meta(tenantId: number): Promise<IFinancialSheetCommonMeta> {
|
||||||
|
const tenantMetadata = await TenantMetadata.query().findOne({ tenantId });
|
||||||
|
|
||||||
|
const organizationName = tenantMetadata.name;
|
||||||
|
const baseCurrency = tenantMetadata.baseCurrency;
|
||||||
|
const dateFormat = tenantMetadata.dateFormat;
|
||||||
|
|
||||||
|
const isCostComputeRunning =
|
||||||
|
this.inventoryService.isItemsCostComputeRunning(tenantId);
|
||||||
|
|
||||||
|
return {
|
||||||
|
organizationName,
|
||||||
|
baseCurrency,
|
||||||
|
dateFormat,
|
||||||
|
isCostComputeRunning,
|
||||||
|
sheetName: '',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -57,6 +57,12 @@ export class TableSheetPdf {
|
|||||||
* @returns {ITableRow[]}
|
* @returns {ITableRow[]}
|
||||||
*/
|
*/
|
||||||
private tablePdfRows = (rows: ITableRow[]): ITableRow[] => {
|
private tablePdfRows = (rows: ITableRow[]): ITableRow[] => {
|
||||||
return R.compose(FinancialTableStructure.flatNestedTree)(rows);
|
const curriedFlatNestedTree = R.curry(
|
||||||
|
FinancialTableStructure.flatNestedTree
|
||||||
|
);
|
||||||
|
const flatNestedTree = curriedFlatNestedTree(R.__, {
|
||||||
|
nestedPrefix: '<span style="padding-left: 15px;"></span>',
|
||||||
|
});
|
||||||
|
return R.compose(flatNestedTree)(rows);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import BaseModel from 'models/Model';
|
|||||||
|
|
||||||
export default class TenantMetadata extends BaseModel {
|
export default class TenantMetadata extends BaseModel {
|
||||||
baseCurrency: string;
|
baseCurrency: string;
|
||||||
|
name: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Table name.
|
* Table name.
|
||||||
|
|||||||
Reference in New Issue
Block a user