mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-22 15:50:32 +00:00
feat: financial reports meta
This commit is contained in:
@@ -29,10 +29,12 @@ export type ITransactionsByCustomersData = ITransactionsByCustomersCustomer[];
|
|||||||
export interface ITransactionsByCustomersStatement {
|
export interface ITransactionsByCustomersStatement {
|
||||||
data: ITransactionsByCustomersData;
|
data: ITransactionsByCustomersData;
|
||||||
query: ITransactionsByCustomersFilter;
|
query: ITransactionsByCustomersFilter;
|
||||||
|
meta: ITransactionsByCustomersMeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ITransactionsByCustomersTable extends IFinancialTable {
|
export interface ITransactionsByCustomersTable extends IFinancialTable {
|
||||||
query: ITransactionsByCustomersFilter;
|
query: ITransactionsByCustomersFilter;
|
||||||
|
meta: ITransactionsByCustomersMeta;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ITransactionsByCustomersService {
|
export interface ITransactionsByCustomersService {
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import moment from 'moment';
|
||||||
|
import { Inject, Service } from 'typedi';
|
||||||
|
import { FinancialSheetMeta } from '../FinancialSheetMeta';
|
||||||
|
import {
|
||||||
|
ITransactionsByCustomersFilter,
|
||||||
|
ITransactionsByCustomersMeta,
|
||||||
|
} from '@/interfaces';
|
||||||
|
|
||||||
|
@Service()
|
||||||
|
export class TransactionsByCustomersMeta {
|
||||||
|
@Inject()
|
||||||
|
private financialSheetMeta: FinancialSheetMeta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the transactions by customers meta.
|
||||||
|
* @param {number} tenantId -
|
||||||
|
* @returns {IBalanceSheetMeta}
|
||||||
|
*/
|
||||||
|
public async meta(
|
||||||
|
tenantId: number,
|
||||||
|
query: ITransactionsByCustomersFilter
|
||||||
|
): Promise<ITransactionsByCustomersMeta> {
|
||||||
|
const commonMeta = await this.financialSheetMeta.meta(tenantId);
|
||||||
|
const formattedToDate = moment(query.toDate).format('YYYY/MM/DD');
|
||||||
|
const formattedFromDate = moment(query.fromDate).format('YYYY/MM/DD');
|
||||||
|
const formattedDateRange = `From ${formattedFromDate} | To ${formattedToDate}`;
|
||||||
|
|
||||||
|
return {
|
||||||
|
...commonMeta,
|
||||||
|
sheetName: 'Transactions By Customers',
|
||||||
|
formattedFromDate,
|
||||||
|
formattedToDate,
|
||||||
|
formattedDateRange,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,7 +13,7 @@ export class TransactionsByCustomersPdf {
|
|||||||
/**
|
/**
|
||||||
* Retrieves the transactions by customers in PDF format.
|
* Retrieves the transactions by customers in PDF format.
|
||||||
* @param {number} tenantId - Tenant ID.
|
* @param {number} tenantId - Tenant ID.
|
||||||
* @param {IBalanceSheetQuery} query - Balance sheet query.
|
* @param {ITransactionsByCustomersFilter} query - Balance sheet query.
|
||||||
* @returns {Promise<Buffer>}
|
* @returns {Promise<Buffer>}
|
||||||
*/
|
*/
|
||||||
public async pdf(
|
public async pdf(
|
||||||
@@ -24,13 +24,11 @@ export class TransactionsByCustomersPdf {
|
|||||||
tenantId,
|
tenantId,
|
||||||
query
|
query
|
||||||
);
|
);
|
||||||
const sheetName = 'Transactions By Customers';
|
|
||||||
|
|
||||||
return this.tableSheetPdf.convertToPdf(
|
return this.tableSheetPdf.convertToPdf(
|
||||||
tenantId,
|
tenantId,
|
||||||
table.table,
|
table.table,
|
||||||
sheetName,
|
table.meta.sheetName,
|
||||||
table.meta.baseCurrency
|
table.meta.formattedDateRange
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import TransactionsByCustomers from './TransactionsByCustomers';
|
|||||||
import Ledger from '@/services/Accounting/Ledger';
|
import Ledger from '@/services/Accounting/Ledger';
|
||||||
import TransactionsByCustomersRepository from './TransactionsByCustomersRepository';
|
import TransactionsByCustomersRepository from './TransactionsByCustomersRepository';
|
||||||
import { Tenant } from '@/system/models';
|
import { Tenant } from '@/system/models';
|
||||||
|
import { TransactionsByCustomersMeta } from './TransactionsByCustomersMeta';
|
||||||
|
|
||||||
export class TransactionsByCustomersSheet
|
export class TransactionsByCustomersSheet
|
||||||
implements ITransactionsByCustomersService
|
implements ITransactionsByCustomersService
|
||||||
@@ -22,6 +23,9 @@ export class TransactionsByCustomersSheet
|
|||||||
@Inject()
|
@Inject()
|
||||||
private reportRepository: TransactionsByCustomersRepository;
|
private reportRepository: TransactionsByCustomersRepository;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
private transactionsByCustomersMeta: TransactionsByCustomersMeta;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defaults balance sheet filter query.
|
* Defaults balance sheet filter query.
|
||||||
* @return {ICustomerBalanceSummaryQuery}
|
* @return {ICustomerBalanceSummaryQuery}
|
||||||
@@ -160,10 +164,12 @@ export class TransactionsByCustomersSheet
|
|||||||
i18n
|
i18n
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const meta = await this.transactionsByCustomersMeta.meta(tenantId, filter);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: reportInstance.reportData(),
|
data: reportInstance.reportData(),
|
||||||
query: filter,
|
query: filter,
|
||||||
meta: {},
|
meta,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import * as R from 'ramda';
|
import * as R from 'ramda';
|
||||||
import { tableRowMapper } from 'utils';
|
import { tableRowMapper } from 'utils';
|
||||||
import { ITransactionsByCustomersCustomer, ITableRow, ITableColumn } from '@/interfaces';
|
import {
|
||||||
|
ITransactionsByCustomersCustomer,
|
||||||
|
ITableRow,
|
||||||
|
ITableColumn,
|
||||||
|
} from '@/interfaces';
|
||||||
import TransactionsByContactsTableRows from '../TransactionsByContact/TransactionsByContactTableRows';
|
import TransactionsByContactsTableRows from '../TransactionsByContact/TransactionsByContactTableRows';
|
||||||
|
|
||||||
enum ROW_TYPE {
|
enum ROW_TYPE {
|
||||||
@@ -78,6 +82,14 @@ export class TransactionsByCustomersTable extends TransactionsByContactsTableRow
|
|||||||
* @returns {ITableColumn[]}
|
* @returns {ITableColumn[]}
|
||||||
*/
|
*/
|
||||||
public tableColumns = (): ITableColumn[] => {
|
public tableColumns = (): ITableColumn[] => {
|
||||||
return [];
|
return [
|
||||||
}
|
{ key: 'customer_name', label: 'Customer name' },
|
||||||
|
{ key: 'account_name', label: 'Account Name' },
|
||||||
|
{ key: 'ref_type', label: 'Reference Type' },
|
||||||
|
{ key: 'transaction_type', label: 'Transaction Type' },
|
||||||
|
{ key: 'credit', label: 'Credit' },
|
||||||
|
{ key: 'debit', label: 'Debit' },
|
||||||
|
{ key: 'running_balance', label: 'Running Balance' },
|
||||||
|
];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ export class TransactionsByVendorApplication {
|
|||||||
* Retrieves the transactions by vendor in XLSX format.
|
* Retrieves the transactions by vendor in XLSX format.
|
||||||
* @param {number} tenantId
|
* @param {number} tenantId
|
||||||
* @param {ITransactionsByVendorsFilter} query
|
* @param {ITransactionsByVendorsFilter} query
|
||||||
|
* @returns {Promise<Buffer>}
|
||||||
*/
|
*/
|
||||||
public xlsx(
|
public xlsx(
|
||||||
tenantId: number,
|
tenantId: number,
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import TransactionsByVendor from './TransactionsByVendor';
|
|||||||
import Ledger from '@/services/Accounting/Ledger';
|
import Ledger from '@/services/Accounting/Ledger';
|
||||||
import TransactionsByVendorRepository from './TransactionsByVendorRepository';
|
import TransactionsByVendorRepository from './TransactionsByVendorRepository';
|
||||||
import { Tenant } from '@/system/models';
|
import { Tenant } from '@/system/models';
|
||||||
|
import { TransactionsByVendorMeta } from './TransactionsByVendorMeta';
|
||||||
|
|
||||||
export class TransactionsByVendorsInjectable
|
export class TransactionsByVendorsInjectable
|
||||||
implements ITransactionsByVendorsService
|
implements ITransactionsByVendorsService
|
||||||
@@ -22,6 +23,9 @@ export class TransactionsByVendorsInjectable
|
|||||||
@Inject()
|
@Inject()
|
||||||
private reportRepository: TransactionsByVendorRepository;
|
private reportRepository: TransactionsByVendorRepository;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
private transactionsByVendorMeta: TransactionsByVendorMeta;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defaults balance sheet filter query.
|
* Defaults balance sheet filter query.
|
||||||
* @return {IVendorBalanceSummaryQuery}
|
* @return {IVendorBalanceSummaryQuery}
|
||||||
@@ -165,10 +169,12 @@ export class TransactionsByVendorsInjectable
|
|||||||
tenant.metadata.baseCurrency,
|
tenant.metadata.baseCurrency,
|
||||||
i18n
|
i18n
|
||||||
);
|
);
|
||||||
|
const meta = await this.transactionsByVendorMeta.meta(tenantId, filter);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: reportInstance.reportData(),
|
data: reportInstance.reportData(),
|
||||||
query: filter,
|
query: filter,
|
||||||
meta: {},
|
meta,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
import moment from 'moment';
|
||||||
|
import { Inject, Service } from 'typedi';
|
||||||
|
import { FinancialSheetMeta } from '../FinancialSheetMeta';
|
||||||
|
import {
|
||||||
|
ITransactionsByVendorMeta,
|
||||||
|
ITransactionsByVendorsFilter,
|
||||||
|
} from '@/interfaces';
|
||||||
|
|
||||||
|
@Service()
|
||||||
|
export class TransactionsByVendorMeta {
|
||||||
|
@Inject()
|
||||||
|
private financialSheetMeta: FinancialSheetMeta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the transactions by vendor meta.
|
||||||
|
* @param {number} tenantId -
|
||||||
|
* @returns {Promise<ITransactionsByVendorMeta>}
|
||||||
|
*/
|
||||||
|
public async meta(
|
||||||
|
tenantId: number,
|
||||||
|
query: ITransactionsByVendorsFilter
|
||||||
|
): Promise<ITransactionsByVendorMeta> {
|
||||||
|
const commonMeta = await this.financialSheetMeta.meta(tenantId);
|
||||||
|
const formattedToDate = moment(query.toDate).format('YYYY/MM/DD');
|
||||||
|
const formattedFromDate = moment(query.fromDate).format('YYYY/MM/DD');
|
||||||
|
const formattedDateRange = `From ${formattedFromDate} | To ${formattedToDate}`;
|
||||||
|
|
||||||
|
return {
|
||||||
|
...commonMeta,
|
||||||
|
sheetName: 'Transactions By Vendor',
|
||||||
|
formattedFromDate,
|
||||||
|
formattedToDate,
|
||||||
|
formattedDateRange,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,13 +22,12 @@ export class TransactionsByVendorsPdf {
|
|||||||
query: ITransactionsByVendorsFilter
|
query: ITransactionsByVendorsFilter
|
||||||
): Promise<Buffer> {
|
): Promise<Buffer> {
|
||||||
const table = await this.transactionsByVendorTable.table(tenantId, query);
|
const table = await this.transactionsByVendorTable.table(tenantId, query);
|
||||||
const sheetName = 'Transactions By Vendors';
|
|
||||||
|
|
||||||
return this.tableSheetPdf.convertToPdf(
|
return this.tableSheetPdf.convertToPdf(
|
||||||
tenantId,
|
tenantId,
|
||||||
table.table,
|
table.table,
|
||||||
sheetName,
|
table.meta.sheetName,
|
||||||
table.meta.baseCurrency
|
table.meta.formattedDateRange
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ export class TransactionsByVendorsTable extends TransactionsByContactsTableRows
|
|||||||
accessor: 'closingBalance.formattedAmount',
|
accessor: 'closingBalance.formattedAmount',
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...tableRowMapper(vendor, columns, { rowTypes: [ROW_TYPE.VENDOR] }),
|
...tableRowMapper(vendor, columns, { rowTypes: [ROW_TYPE.VENDOR] }),
|
||||||
children: R.pipe(
|
children: R.pipe(
|
||||||
@@ -82,6 +81,14 @@ export class TransactionsByVendorsTable extends TransactionsByContactsTableRows
|
|||||||
* @returns {ITableColumn[]}
|
* @returns {ITableColumn[]}
|
||||||
*/
|
*/
|
||||||
public tableColumns = (): ITableColumn[] => {
|
public tableColumns = (): ITableColumn[] => {
|
||||||
return [];
|
return [
|
||||||
|
{ key: 'vendor_name', label: 'Vendor name' },
|
||||||
|
{ key: 'account_name', label: 'Account Name' },
|
||||||
|
{ key: 'ref_type', label: 'Reference Type' },
|
||||||
|
{ key: 'transaction_type', label: 'Transaction Type' },
|
||||||
|
{ key: 'credit', label: 'Credit' },
|
||||||
|
{ key: 'debit', label: 'Debit' },
|
||||||
|
{ key: 'running_balance', label: 'Running Balance' },
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ import NumberFormatDropdown from '@/components/NumberFormatDropdown';
|
|||||||
import { useARAgingSummaryContext } from './ARAgingSummaryProvider';
|
import { useARAgingSummaryContext } from './ARAgingSummaryProvider';
|
||||||
import withARAgingSummaryActions from './withARAgingSummaryActions';
|
import withARAgingSummaryActions from './withARAgingSummaryActions';
|
||||||
import withARAgingSummary from './withARAgingSummary';
|
import withARAgingSummary from './withARAgingSummary';
|
||||||
|
import withDialogActions from '@/containers/Dialog/withDialogActions';
|
||||||
|
|
||||||
import { compose, safeInvoke } from '@/utils';
|
import { compose, safeInvoke } from '@/utils';
|
||||||
import { ARAgingSummaryExportMenu } from './components';
|
import { ARAgingSummaryExportMenu } from './components';
|
||||||
import withDialogActions from '@/containers/Dialog/withDialogActions';
|
|
||||||
import { DialogsName } from '@/constants/dialogs';
|
import { DialogsName } from '@/constants/dialogs';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
|
|
||||||
import { useRequestQuery } from '../../useQueryRequest';
|
import { useRequestQuery } from '../../useQueryRequest';
|
||||||
import { useDownloadFile } from '../../useDownloadFile';
|
import { useDownloadFile } from '../../useDownloadFile';
|
||||||
import { useRequestPdf } from '../../useRequestPdf';
|
import { useRequestPdf } from '../../useRequestPdf';
|
||||||
import t from '../types';
|
import t from '../types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve balance sheet.
|
* Fetches balance sheet data.
|
||||||
|
* @param {Object} query - The query parameters for the request.
|
||||||
|
* @param {Object} props - Additional options for the request.
|
||||||
|
* @returns {Object} The response object from the useRequestQuery hook.
|
||||||
*/
|
*/
|
||||||
export function useBalanceSheet(query, props) {
|
export function useBalanceSheet(query, props) {
|
||||||
return useRequestQuery(
|
return useRequestQuery(
|
||||||
@@ -25,6 +29,12 @@ export function useBalanceSheet(query, props) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiates a download of the balance sheet in XLSX format.
|
||||||
|
* @param {Object} query - The query parameters for the request.
|
||||||
|
* @param {Object} args - Additional configurations for the download.
|
||||||
|
* @returns {Function} A function to trigger the file download.
|
||||||
|
*/
|
||||||
export const useBalanceSheetXlsxExport = (query, args) => {
|
export const useBalanceSheetXlsxExport = (query, args) => {
|
||||||
return useDownloadFile({
|
return useDownloadFile({
|
||||||
url: '/financial_statements/balance_sheet',
|
url: '/financial_statements/balance_sheet',
|
||||||
@@ -39,6 +49,12 @@ export const useBalanceSheetXlsxExport = (query, args) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiates a download of the balance sheet in CSV format.
|
||||||
|
* @param {Object} query - The query parameters for the request.
|
||||||
|
* @param {Object} args - Additional configurations for the download.
|
||||||
|
* @returns {Function} A function to trigger the file download.
|
||||||
|
*/
|
||||||
export const useBalanceSheetCsvExport = (query, args) => {
|
export const useBalanceSheetCsvExport = (query, args) => {
|
||||||
return useDownloadFile({
|
return useDownloadFile({
|
||||||
url: '/financial_statements/balance_sheet',
|
url: '/financial_statements/balance_sheet',
|
||||||
@@ -54,7 +70,9 @@ export const useBalanceSheetCsvExport = (query, args) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the balance sheet pdf document data.
|
* Fetches balance sheet data in PDF format.
|
||||||
|
* @param {Object} [query={}] - The query parameters for the request.
|
||||||
|
* @returns {Object} The response object from the useRequestPdf hook.
|
||||||
*/
|
*/
|
||||||
export function useBalanceSheetPdf(query = {}) {
|
export function useBalanceSheetPdf(query = {}) {
|
||||||
return useRequestPdf({
|
return useRequestPdf({
|
||||||
|
|||||||
Reference in New Issue
Block a user