using AccountsDAL.DTO.AccountsReports; using AccountsDAL.DTO.Reports; using AccountsDAL.Query.AccountReports; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace AccountsDAL.CustomCode.AccountReports.AccountSettlement { public class AccountSettlementWithRateReportDAL : IAccountSettlementWithRateReportDAL { private readonly IQueryExecutor _queryExecutor; public AccountSettlementWithRateReportDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task GetSettlementRegisterWithRateReport( int firstNumber, int maxResult, AccountReportCriteria criteria, List sortBy, LoginDTO loginDTO) { var (settlementFilter, parameters) = AccountReportFilterBuilder.BuildSettlementOnly(criteria); parameters.Add("UserId", loginDTO.UserId); parameters.Add("PeriodFromDate", criteria.PeriodFromDate); parameters.Add("PeriodToDate", criteria.PeriodToDate); parameters.Add("Offset", Math.Max(0, firstNumber - 1)); parameters.Add("PageSize", maxResult); var orderBy = AccountReportSortBuilder.BuildSettlementOrderBy(sortBy); var sql = AccountSettlementReportsQB.GET_SETTLEMENT_REGISTER_WITH_RATE_DETAIL .Replace("{DynamicFilter}", settlementFilter) .Replace("{OrderBy}", orderBy); var paged = await _queryExecutor .QueryPagedAsync(loginDTO, sql, parameters) .ConfigureAwait(false); var totalsSql = AccountSettlementReportsQB.GET_SETTLEMENT_REGISTER_WITH_RATE_TOTALS.Replace("{DynamicFilter}", settlementFilter); var totals = await _queryExecutor .QuerySingleAsync(loginDTO, totalsSql, parameters) .ConfigureAwait(false); return new SettlementRegisterWithRateResultDTO { Items = paged.Items ?? Enumerable.Empty(), TotalCount = paged.TotalCount, TotalVoucherDebit = totals?.TotalVoucherDebit ?? 0, TotalVoucherCredit = totals?.TotalVoucherCredit ?? 0, TotalAllocationDebit = totals?.TotalAllocationDebit ?? 0, TotalAllocationCredit = totals?.TotalAllocationCredit ?? 0 }; } } }