using AccountsDAL.DTO.AccountsReports; using AccountsDAL.DTO.Instrument; using AccountsDAL.Query.AccountReports; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AccountsDAL.CustomCode.AccountReports.BRSDashboard { public class BRSDashboardDAL : IBRSDashboardDAL { private readonly IQueryExecutor _queryExecutor; public BRSDashboardDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetBRSDashboard( List? bankAccountIds, LoginDTO loginDTO, CancellationToken ct) { var accessibleOuIds = (await _queryExecutor .QueryAsync(loginDTO, BRSDashboardQB.GET_ACCESSIBLE_OU_IDS, new { UserId = loginDTO.UserId }, cancellationToken: ct) .ConfigureAwait(false)).ToList(); if (accessibleOuIds.Count == 0) return new BRSDashboardResultDTO(); var bankAccountIdsCsv = bankAccountIds is { Count: > 0 } ? string.Join(",", bankAccountIds) : ""; var summary = (await _queryExecutor .QueryAsync(loginDTO, BRSDashboardQB.GET_BRS_SUMMARY, new { OuIds = accessibleOuIds, PeriodId = loginDTO.WorkPeriodId, BankAccountIds = bankAccountIdsCsv }, cancellationToken: ct) .ConfigureAwait(false)).ToList(); var detail = (await _queryExecutor .QueryAsync(loginDTO, BRSDashboardQB.GET_BRS_DETAIL, new { OuIds = accessibleOuIds, BankAccountIds = bankAccountIdsCsv }, cancellationToken: ct) .ConfigureAwait(false)).ToList(); if (summary.Count > 0) { var totals = new BRSSummaryReportDTO { AccountName = "Total", TotalBookBalance = summary.Sum(s => s.BookBalance), TotalLessNotcr = summary.Sum(s => s.LessNotcr), TotalAddNotDr = summary.Sum(s => s.AddNotDr), TotalCalculatedBalance = summary.Sum(s => s.CalculatedBalance), }; foreach (var row in summary) { row.TotalBookBalance = totals.TotalBookBalance; row.TotalLessNotcr = totals.TotalLessNotcr; row.TotalAddNotDr = totals.TotalAddNotDr; row.TotalCalculatedBalance = totals.TotalCalculatedBalance; } } return new BRSDashboardResultDTO { Summary = summary, Detail = detail }; } } }