diff --git a/packages/server-nest/src/modules/FinancialStatements/FinancialStatements.module.ts b/packages/server-nest/src/modules/FinancialStatements/FinancialStatements.module.ts index 9a1c256b5..9235e986e 100644 --- a/packages/server-nest/src/modules/FinancialStatements/FinancialStatements.module.ts +++ b/packages/server-nest/src/modules/FinancialStatements/FinancialStatements.module.ts @@ -15,12 +15,14 @@ import { SalesTaxLiabilityModule } from './modules/SalesTaxLiabilitySummary/Sale import { JournalSheetModule } from './modules/JournalSheet/JournalSheet.module'; import { ProfitLossSheetModule } from './modules/ProfitLossSheet/ProfitLossSheet.module'; import { CashflowStatementModule } from './modules/CashFlowStatement/CashflowStatement.module'; +import { VendorBalanceSummaryModule } from './modules/VendorBalanceSummary/VendorBalanceSummary.module'; @Module({ providers: [], imports: [ PurchasesByItemsModule, CustomerBalanceSummaryModule, + VendorBalanceSummaryModule, SalesByItemsModule, GeneralLedgerModule, TrialBalanceSheetModule, diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/CashFlow.ts b/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/CashFlow.ts index 5921c9661..fe7b3bec6 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/CashFlow.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/CashFlow.ts @@ -1,5 +1,5 @@ import * as R from 'ramda'; -import { defaultTo, map, set, sumBy, isEmpty, mapValues, get } from 'lodash'; +import { defaultTo, set, sumBy, isEmpty, mapValues, get } from 'lodash'; import * as mathjs from 'mathjs'; import * as moment from 'moment'; import { I18nService } from 'nestjs-i18n'; diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/Cashflow.controller.ts b/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/Cashflow.controller.ts index b98703c60..72f7f8378 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/Cashflow.controller.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/CashFlowStatement/Cashflow.controller.ts @@ -4,13 +4,17 @@ import { ICashFlowStatementQuery } from './Cashflow.types'; import { AcceptType } from '@/constants/accept-type'; import { CashflowSheetApplication } from './CashflowSheetApplication'; import { PublicRoute } from '@/modules/Auth/Jwt.guard'; +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; @Controller('reports/cashflow-statement') @PublicRoute() +@ApiTags('reports') export class CashflowController { constructor(private readonly cashflowSheetApp: CashflowSheetApplication) {} @Get() + @ApiResponse({ status: 200, description: 'Cashflow statement report' }) + @ApiOperation({ summary: 'Get cashflow statement report' }) async getCashflow( @Query() query: ICashFlowStatementQuery, @Res() res: Response, diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummary.controller.ts b/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummary.controller.ts index b82c91844..e428be789 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummary.controller.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummary.controller.ts @@ -1,12 +1,14 @@ +import { Response } from 'express'; +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { Controller, Get, Headers, Query, Res } from '@nestjs/common'; import { ICustomerBalanceSummaryQuery } from './CustomerBalanceSummary.types'; import { CustomerBalanceSummaryApplication } from './CustomerBalanceSummaryApplication'; import { AcceptType } from '@/constants/accept-type'; -import { Response } from 'express'; -import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { PublicRoute } from '@/modules/Auth/Jwt.guard'; @Controller('/reports/customer-balance-summary') @ApiTags('reports') +@PublicRoute() export class CustomerBalanceSummaryController { constructor( private readonly customerBalanceSummaryApp: CustomerBalanceSummaryApplication, diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummaryService.ts b/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummaryService.ts index e481609d6..4523844b6 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummaryService.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/CustomerBalanceSummaryService.ts @@ -36,7 +36,7 @@ export class CustomerBalanceSummaryService { const commonProps = { accountNormal: 'debit', date: asDate }; // @ts-ignore - return R.map(R.merge(commonProps))(transactions); + return R.map(R.mergeRight(commonProps))(transactions); } /** diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/_utils.ts b/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/_utils.ts index 98ccc11a3..9bee34570 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/_utils.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/CustomerBalanceSummary/_utils.ts @@ -1,16 +1,16 @@ -export const getCustomerBalanceSummaryDefaultQuery = () => { - return { - asDate: moment().format('YYYY-MM-DD'), - numberFormat: { - precision: 2, - divideOn1000: false, - showZero: false, - formatMoney: 'total', - negativeFormat: 'mines', - }, - percentageColumn: false, +import * as moment from 'moment'; - noneZero: false, - noneTransactions: true, - }; -}; +export const getCustomerBalanceSummaryDefaultQuery = () => ({ + asDate: moment().format('YYYY-MM-DD'), + numberFormat: { + precision: 2, + divideOn1000: false, + showZero: false, + formatMoney: 'total', + negativeFormat: 'mines', + }, + percentageColumn: false, + + noneZero: false, + noneTransactions: true, +}); diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/JournalSheet/JournalSheet.controller.ts b/packages/server-nest/src/modules/FinancialStatements/modules/JournalSheet/JournalSheet.controller.ts index d5dcfb2cb..75d05ed85 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/JournalSheet/JournalSheet.controller.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/JournalSheet/JournalSheet.controller.ts @@ -3,12 +3,18 @@ import { IJournalReportQuery } from './JournalSheet.types'; import { Response } from 'express'; import { AcceptType } from '@/constants/accept-type'; import { JournalSheetApplication } from './JournalSheetApplication'; +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; +import { PublicRoute } from '@/modules/Auth/Jwt.guard'; @Controller('/reports/journal') +@ApiTags('reports') +@PublicRoute() export class JournalSheetController { constructor(private readonly journalSheetApp: JournalSheetApplication) {} @Get('/') + @ApiResponse({ status: 200, description: 'Journal report' }) + @ApiOperation({ summary: 'Journal report' }) async journalSheet( @Query() query: IJournalReportQuery, @Res() res: Response, diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/ProfitLossSheet/ProfitLossSheet.controller.ts b/packages/server-nest/src/modules/FinancialStatements/modules/ProfitLossSheet/ProfitLossSheet.controller.ts index 66e833c65..8315fc695 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/ProfitLossSheet/ProfitLossSheet.controller.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/ProfitLossSheet/ProfitLossSheet.controller.ts @@ -4,8 +4,10 @@ import { IProfitLossSheetQuery } from './ProfitLossSheet.types'; import { ProfitLossSheetApplication } from './ProfitLossSheetApplication'; import { AcceptType } from '@/constants/accept-type'; import { PublicRoute } from '@/modules/Auth/Jwt.guard'; +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; @Controller('/reports/profit-loss-sheet') +@ApiTags('reports') @PublicRoute() export class ProfitLossSheetController { constructor( @@ -19,6 +21,8 @@ export class ProfitLossSheetController { * @param {string} acceptHeader */ @Get('/') + @ApiResponse({ status: 200, description: 'Profit & loss statement' }) + @ApiOperation({ summary: 'Get profit/loss statement report' }) async profitLossSheet( @Query() query: IProfitLossSheetQuery, @Res() res: Response, diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/SalesTaxLiabilitySummary/SalesTaxLiabilitySummary.controller.ts b/packages/server-nest/src/modules/FinancialStatements/modules/SalesTaxLiabilitySummary/SalesTaxLiabilitySummary.controller.ts index 01cd1467c..029dd42a8 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/SalesTaxLiabilitySummary/SalesTaxLiabilitySummary.controller.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/SalesTaxLiabilitySummary/SalesTaxLiabilitySummary.controller.ts @@ -4,8 +4,10 @@ import { AcceptType } from '@/constants/accept-type'; import { SalesTaxLiabilitySummaryApplication } from './SalesTaxLiabilitySummaryApplication'; import { Response } from 'express'; import { PublicRoute } from '@/modules/Auth/Jwt.guard'; +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; @Controller('/reports/sales-tax-liability-summary') +@ApiTags('reports') @PublicRoute() export class SalesTaxLiabilitySummaryController { constructor( @@ -13,6 +15,11 @@ export class SalesTaxLiabilitySummaryController { ) {} @Get() + @ApiResponse({ + status: 200, + description: 'Sales tax liability summary report', + }) + @ApiOperation({ summary: 'Get sales tax liability summary report' }) public async getSalesTaxLiabilitySummary( @Query() query: SalesTaxLiabilitySummaryQuery, @Res() res: Response, diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.module.ts b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.module.ts index d59599e45..6475bea39 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.module.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.module.ts @@ -5,14 +5,20 @@ import { VendorBalanceSummaryTableInjectable } from './VendorBalanceSummaryTable import { VendorBalanceSummaryExportInjectable } from './VendorBalanceSummaryExportInjectable'; import { VendorBalanceSummaryPdf } from './VendorBalanceSummaryPdf'; import { VendorBalanceSummaryApplication } from './VendorBalanceSummaryApplication'; +import { VendorBalanceSummaryRepository } from './VendorBalanceSummaryRepository'; +import { VendorBalanceSummaryMeta } from './VendorBalanceSummaryMeta'; +import { FinancialSheetCommonModule } from '../../common/FinancialSheetCommon.module'; @Module({ + imports: [FinancialSheetCommonModule], providers: [ VendorBalanceSummaryTableInjectable, VendorBalanceSummaryExportInjectable, VendorBalanceSummaryService, VendorBalanceSummaryPdf, VendorBalanceSummaryApplication, + VendorBalanceSummaryRepository, + VendorBalanceSummaryMeta ], controllers: [VendorBalanceSummaryController], }) diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.ts b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.ts index 4c2891b1d..361b15baf 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummary.ts @@ -10,27 +10,33 @@ import { ContactBalanceSummaryReport } from '../ContactBalanceSummary/ContactBal import { Vendor } from '@/modules/Vendors/models/Vendor'; import { INumberFormatQuery } from '../../types/Report.types'; import { VendorBalanceSummaryRepository } from './VendorBalanceSummaryRepository'; +import { Ledger } from '@/modules/Ledger/Ledger'; export class VendorBalanceSummaryReport extends ContactBalanceSummaryReport { readonly filter: IVendorBalanceSummaryQuery; readonly numberFormat: INumberFormatQuery; - readonly repo: VendorBalanceSummaryRepository; + readonly repository: VendorBalanceSummaryRepository; + readonly ledger: Ledger; + readonly baseCurrency: string; /** * Constructor method. - * @param {IJournalPoster} receivableLedger - * @param {IVendor[]} vendors - * @param {IVendorBalanceSummaryQuery} filter - * @param {string} baseCurrency + * @param {VendorBalanceSummaryRepository} repository - + * @param {IVendorBalanceSummaryQuery} filter - */ constructor( - repo: VendorBalanceSummaryRepository, + repository: VendorBalanceSummaryRepository, filter: IVendorBalanceSummaryQuery, ) { super(); + + this.repository = repository; + this.ledger = this.repository.ledger; + this.baseCurrency = this.repository.baseCurrency; this.filter = filter; this.numberFormat = this.filter.numberFormat; + } /** @@ -41,7 +47,7 @@ export class VendorBalanceSummaryReport extends ContactBalanceSummaryReport { private vendorMapper = ( vendor: ModelObject, ): IVendorBalanceSummaryVendor => { - const closingBalance = this.repo.ledger + const closingBalance = this.repository.ledger .whereContactId(vendor.id) .getClosingBalance(); @@ -86,7 +92,7 @@ export class VendorBalanceSummaryReport extends ContactBalanceSummaryReport { this.contactCamparsionPercentageOfColumn, ), this.vendorsMapper, - )(vendors); + )(vendors) as IVendorBalanceSummaryVendor[]; } /** @@ -94,7 +100,7 @@ export class VendorBalanceSummaryReport extends ContactBalanceSummaryReport { * @returns {IVendorBalanceSummaryData} */ public reportData(): IVendorBalanceSummaryData { - const vendors = this.getVendorsSection(this.repo.vendors); + const vendors = this.getVendorsSection(this.repository.vendors); const total = this.getContactsTotalSection(vendors); return { vendors, total }; diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryRepository.ts b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryRepository.ts index b4c3b54e4..5b9140191 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryRepository.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryRepository.ts @@ -61,9 +61,9 @@ export class VendorBalanceSummaryRepository { * Initialize the vendor balance summary repository. */ async asyncInit() { - this.initVendors(); - this.initVendorsEntries(); - this.initLedger(); + await this.initVendors(); + await this.initVendorsEntries(); + await this.initLedger(); } /** @@ -156,6 +156,6 @@ export class VendorBalanceSummaryRepository { const transactions = await this.getVendorsTransactions(date); const commonProps = { accountNormal: 'credit' }; - return R.map(R.merge(commonProps))(transactions); + return R.map(R.mergeRight(commonProps))(transactions) as ILedgerEntry[]; } } diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryService.ts b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryService.ts index 3d9e88d88..bf448742a 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryService.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryService.ts @@ -29,7 +29,7 @@ export class VendorBalanceSummaryService { const filter = { ...getVendorBalanceSummaryDefaultQuery(), ...query }; this.vendorBalanceSummaryRepository.setFilter(filter); - this.vendorBalanceSummaryRepository.asyncInit(); + await this.vendorBalanceSummaryRepository.asyncInit(); // Report instance. const reportInstance = new VendorBalanceSummaryReport( diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts index 1409cc7e2..fcc22e1cb 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/VendorBalanceSummaryTableRows.ts @@ -100,7 +100,7 @@ export class VendorBalanceSummaryTable { R.always(this.query.percentageColumn), R.concat(this.getPercentageColumnsAccessor()) ) - )([]); + )([]) as IColumnMapperMeta[]; }; /** @@ -142,13 +142,13 @@ export class VendorBalanceSummaryTable { ]; return R.compose( R.when( - R.always(this.query.percentageColumn), + () => this.query.percentageColumn, R.append({ key: 'percentage_of_column', label: this.i18n.t('contact_summary_balance.percentage_column'), }) ), - R.concat(columns) - )([]); + R.concat(columns), + )([]) as ITableColumn[]; }; } diff --git a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/utils.ts b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/utils.ts index c3b066857..0c62f8727 100644 --- a/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/utils.ts +++ b/packages/server-nest/src/modules/FinancialStatements/modules/VendorBalanceSummary/utils.ts @@ -1,4 +1,4 @@ - +import * as moment from 'moment'; export const getVendorBalanceSummaryDefaultQuery = () => { return {