using ComplianceDAL.DTO.Analytics; using ComplianceDAL.Query.ComplianceAnalytics; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace ComplianceDAL.CustomCode.ComplianceAnalytics; public class ComplianceAnalyticsDAL(IQueryExecutor qe) : IComplianceAnalyticsDAL { public async Task GetGSTSummaryAsync( string gstin, string returnPeriod, LoginDTO login, CancellationToken ct) => await qe.QuerySingleAsync(login, ComplianceAnalyticsQB.GET_GST_SUMMARY, new { GSTIN = gstin, ReturnPeriod = returnPeriod, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); public async Task> GetOUWiseSummaryAsync( string returnPeriod, string gstin, LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAnalyticsQB.GET_OUWISE_SUMMARY, new { ReturnPeriod = returnPeriod, GSTIN = gstin ?? "", ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } public async Task> GetHSNSummaryAsync( string returnPeriod, string gstin, LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAnalyticsQB.GET_HSN_SUMMARY, new { ReturnPeriod = returnPeriod, GSTIN = gstin ?? "", ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } public async Task> GetFilingStatusSummaryAsync( int periodYear, string gstin, LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAnalyticsQB.GET_FILING_STATUS_SUMMARY, new { PeriodYear = periodYear, GSTIN = gstin ?? "", ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } public async Task<(List Items, int Total)> GetExceptionReportAsync( string returnPeriod, int page, int pageSize, LoginDTO login, CancellationToken ct) { int offset = (page - 1) * pageSize; var items = await qe.QueryAsync(login, ComplianceAnalyticsQB.GET_EXCEPTION_REPORT, new { ReturnPeriod = returnPeriod, PageSize = pageSize, Offset = offset, ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); var total = await qe.ExecuteScalarAsync(login, ComplianceAnalyticsQB.GET_EXCEPTION_COUNT, new { ReturnPeriod = returnPeriod, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); return (items.ToList(), total); } public async Task<(decimal TaxableValue, decimal TotalIGST, decimal TotalCGST, decimal TotalSGST, decimal TotalCess, int TotalDocuments)> GetOutwardAggregateAsync( string gstin, string returnPeriod, LoginDTO login, CancellationToken ct) { var row = await qe.QuerySingleAsync(login, ComplianceAnalyticsQB.GET_OUTWARD_AGGREGATE_FOR_SUMMARY, new { GSTIN = gstin, ReturnPeriod = returnPeriod, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); if (row is null) return (0, 0, 0, 0, 0, 0); return ((decimal)row.TotalTaxableValue, (decimal)row.TotalIGST, (decimal)row.TotalCGST, (decimal)row.TotalSGST, (decimal)row.TotalCess, (int)row.TotalDocuments); } public async Task<(decimal ITCIGST, decimal ITCCGST, decimal ITCSGST)> GetInwardITCAggregateAsync( string gstin, string returnPeriod, LoginDTO login, CancellationToken ct) { var row = await qe.QuerySingleAsync(login, ComplianceAnalyticsQB.GET_INWARD_ITC_FOR_SUMMARY, new { GSTIN = gstin, ReturnPeriod = returnPeriod, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); if (row is null) return (0, 0, 0); return ((decimal)row.TotalITCIGST, (decimal)row.TotalITCCGST, (decimal)row.TotalITCSGST); } public async Task UpsertPeriodSummaryAsync(PeriodSummaryDTO dto, LoginDTO login, CancellationToken ct) => await qe.ExecuteIdentityAsync(login, ComplianceAnalyticsQB.UPSERT_PERIOD_SUMMARY, new { dto.GSTIN, dto.PeriodYear, dto.PeriodMonth, dto.SummaryType, dto.TotalTaxableValue, dto.TotalIGST, dto.TotalCGST, dto.TotalSGST, dto.TotalCess, dto.TotalITCIGST, dto.TotalITCCGST, dto.TotalITCSGST, dto.TotalDocuments, dto.InvalidDocuments, ClientId = login.ClientId, DatabaseName = login.DatabaseName }); public async Task> GetPeriodSummaryListAsync( string gstin, int periodYear, string summaryType, LoginDTO login, CancellationToken ct) { var rows = await qe.QueryAsync(login, ComplianceAnalyticsQB.GET_PERIOD_SUMMARY_LIST, new { GSTIN = gstin, PeriodYear = periodYear, SummaryType = summaryType ?? "", ClientId = login.ClientId, DatabaseName = login.DatabaseName }, cancellationToken: ct); return rows.ToList(); } }