Files
bigcapital/packages/server/src/modules/FinancialStatements/modules/TransactionsByCustomer/TransactionsByCustomersService.ts
Ahmed Bouhuolia c83132b867 fix(financial-statements): use stored date format settings in all reports
- Replace hardcoded date formats ('YYYY/MM/DD') in all Meta classes with meta.dateFormat
- Add IFinancialReportMeta interface with baseCurrency and dateFormat fields
- Add DEFAULT_REPORT_META constant with default date format 'YYYY MMM DD'
- Update all sheet classes to accept IFinancialReportMeta parameter
- Update all services to pass dateFormat from meta to sheet constructors
- Fix customer/vendor transactions date formatting in table rows
- Add TenancyModule to SalesTaxLiabilityModule for dependency injection
- Make dateFormat optional in JournalSheet and GeneralLedger query types

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-25 07:05:31 +02:00

63 lines
2.1 KiB
TypeScript

import { I18nService } from 'nestjs-i18n';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { Injectable } from '@nestjs/common';
import {
ITransactionsByCustomersFilter,
ITransactionsByCustomersStatement,
} from './TransactionsByCustomer.types';
import { TransactionsByCustomersRepository } from './TransactionsByCustomersRepository';
import { TransactionsByCustomersMeta } from './TransactionsByCustomersMeta';
import { getTransactionsByCustomerDefaultQuery } from './utils';
import { TransactionsByCustomers } from './TransactionsByCustomers';
import { events } from '@/common/events/events';
@Injectable()
export class TransactionsByCustomersSheet {
constructor(
private readonly transactionsByCustomersMeta: TransactionsByCustomersMeta,
private readonly transactionsByCustomersRepository: TransactionsByCustomersRepository,
private readonly eventPublisher: EventEmitter2,
private readonly i18n: I18nService,
) {}
/**
* Retrieve transactions by by the customers.
* @param {number} tenantId
* @param {ITransactionsByCustomersFilter} query
* @return {Promise<ITransactionsByCustomersStatement>}
*/
public async transactionsByCustomers(
query: ITransactionsByCustomersFilter,
): Promise<ITransactionsByCustomersStatement> {
const filter = {
...getTransactionsByCustomerDefaultQuery(),
...query,
};
this.transactionsByCustomersRepository.setFilter(filter);
await this.transactionsByCustomersRepository.asyncInit();
// Retrieve the meta first to get date format.
const meta = await this.transactionsByCustomersMeta.meta(filter);
// Transactions by customers data mapper.
const reportInstance = new TransactionsByCustomers(
filter,
this.transactionsByCustomersRepository,
this.i18n,
{ baseCurrency: meta.baseCurrency, dateFormat: meta.dateFormat },
);
// Triggers `onCustomerTransactionsViewed` event.
await this.eventPublisher.emitAsync(
events.reports.onCustomerTransactionsViewed,
{ query },
);
return {
data: reportInstance.reportData(),
query: filter,
meta,
};
}
}