using AccountsDAL.CustomCode.AccountReports; using AccountsDAL.DTO.AccountsReports; using AccountsDAL.DTO.Reports; using AccountsDAL.Query.Reports; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AccountsDAL.CustomCode.Reports { public class BSReportDAL : IBSReportDAL { private readonly IQueryExecutor _queryExecutor; public BSReportDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task> GetBSVertical(int groupType, AccountReportCriteria criteria, LoginDTO loginDTO) { var (filter, parameters) = AccountReportFilterBuilder.Build(criteria, loginDTO); parameters.Add("CurrencyBasis", criteria.CurrencyBasis); parameters.Add("AsOnDate", criteria.AsOnDate); var (sql, defaultOrderBy) = groupType switch { 1 => (BSVerticalHorizontalReportQB.GET_BS_VERTICAL_ACCOUNTGROUP, "AG.ACCOUNTGROUPCODE"), 2 => (BSVerticalHorizontalReportQB.GET_BS_VERTICAL_ACCOUNTSCHEDULE, "AGS.ACCOUNTSCHEDULECODE"), _ => (BSVerticalHorizontalReportQB.GET_BS_VERTICAL_ACCOUNT, "ACC.ACCOUNTCODE"), }; var finalSql = sql.Replace("{DynamicFilter}", filter).Replace("{OrderBy}", defaultOrderBy); var rows = await _queryExecutor .QueryAsync(loginDTO, finalSql, parameters) .ConfigureAwait(false); return rows.ToList(); } public async Task> GetBSHorizontal(int groupType, AccountReportCriteria criteria, LoginDTO loginDTO) { var (filter, parameters) = AccountReportFilterBuilder.Build(criteria, loginDTO); parameters.Add("CurrencyBasis", criteria.CurrencyBasis); parameters.Add("AsOnDate", criteria.AsOnDate); // Horizontal's CTEs reference {DynamicFilter} twice (once per Liability/Asset side) — // one Replace covering both occurrences is sufficient, same as PAndLReportDAL. var sql = groupType switch { 1 => BSVerticalHorizontalReportQB.GET_BS_HORIZONTAL_ACCOUNTGROUP, 2 => BSVerticalHorizontalReportQB.GET_BS_HORIZONTAL_ACCOUNTSCHEDULE, _ => BSVerticalHorizontalReportQB.GET_BS_HORIZONTAL_ACCOUNT, }; var finalSql = sql.Replace("{DynamicFilter}", filter); var rows = await _queryExecutor .QueryAsync(loginDTO, finalSql, parameters) .ConfigureAwait(false); return rows.ToList(); } } }