ca4fb959aa
Invoice-basis report showing taxable vs non-taxable sales, tax billed by GL account, monthly trend table/chart, and full invoice detail grid. Non-taxable invoice rows shaded grey for easy scanning. Quick-preset date buttons (This Month, Last Month, YTD, Last Year) for common filing periods. CSV export formatted for accountants and tax-filing software. Gated behind AllowAccounting() like other financial reports. - SalesTaxReportDto + 3 supporting DTOs in FinancialReportDtos.cs - GetSalesTaxReportAsync on IFinancialReportService + implementation - GenerateSalesTaxReportPdfAsync on IPdfService + QuestPDF implementation - SalesTax / SalesTaxPdf / SalesTaxCsv actions in ReportsController - Views/Reports/SalesTax.cshtml with Chart.js monthly trend chart - Landing page card added to Finance section - HelpKnowledgeBase and Help/Reports.cshtml updated with full docs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
1.3 KiB
C#
27 lines
1.3 KiB
C#
using PowderCoating.Application.DTOs.Accounting;
|
|
|
|
namespace PowderCoating.Application.Interfaces;
|
|
|
|
/// <summary>
|
|
/// Read-only service for financial aggregate reports. All methods query the database
|
|
/// with AsNoTracking and return pre-shaped DTOs — no tracked entities are returned.
|
|
/// Implemented in Infrastructure; uses ApplicationDbContext directly.
|
|
/// </summary>
|
|
public interface IFinancialReportService
|
|
{
|
|
/// <summary>Returns a Profit & Loss report for the given company and date range.</summary>
|
|
Task<ProfitAndLossDto> GetProfitAndLossAsync(int companyId, DateTime from, DateTime to);
|
|
|
|
/// <summary>Returns a Balance Sheet snapshot as of the given date.</summary>
|
|
Task<BalanceSheetDto> GetBalanceSheetAsync(int companyId, DateTime asOf);
|
|
|
|
/// <summary>Returns an AR Aging report bucketed at 0-30, 31-60, 61-90, and 90+ days.</summary>
|
|
Task<ArAgingReportDto> GetArAgingAsync(int companyId, DateTime asOf);
|
|
|
|
/// <summary>Returns a Sales & Income report for the given company and date range.</summary>
|
|
Task<SalesIncomeReportDto> GetSalesAndIncomeAsync(int companyId, DateTime from, DateTime to);
|
|
|
|
/// <summary>Returns an invoice-basis Sales Tax Liability report for the given company and date range.</summary>
|
|
Task<SalesTaxReportDto> GetSalesTaxReportAsync(int companyId, DateTime from, DateTime to);
|
|
}
|