using System.Runtime.CompilerServices; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using TMSDAL.CustomCode.Reports; using TMSDAL.DTO.Reports; using TMSDAL.Query.Reports; namespace TMSDAL.CustomCode.Reports.NominationApprovalSlaRegister { public class NominationApprovalSlaRegisterDAL : INominationApprovalSlaRegisterDAL { private readonly IQueryExecutor _queryExecutor; public NominationApprovalSlaRegisterDAL(IQueryExecutor queryExecutor) { _queryExecutor = queryExecutor; } public async Task> GetNominationApprovalSlaRegister( int firstNumber, int maxResult, TmsReportCriteria criteria, LoginDTO login, CancellationToken ct) { var (filter, parameters) = BuildFilter(criteria, login); parameters.Add("Offset", Math.Max(0, firstNumber - 1)); parameters.Add("PageSize", maxResult > 0 ? maxResult : 500); var sql = ComplianceReportsQB.GET_NOMINATION_APPROVAL_SLA_REGISTER.Replace("{DynamicFilter}", filter); return await _queryExecutor .QueryPagedAsync(login, sql, parameters) .ConfigureAwait(false); } public async IAsyncEnumerable GetNominationApprovalSlaRegisterStream( int firstNumber, int maxResult, TmsReportCriteria criteria, LoginDTO login, [EnumeratorCancellation] CancellationToken ct) { var (filter, parameters) = BuildFilter(criteria, login); var sql = ComplianceReportsQB.GET_NOMINATION_APPROVAL_SLA_REGISTER.Replace("{DynamicFilter}", filter); await foreach (var row in _queryExecutor .QueryStreamAsync(login, sql, parameters, ct) .ConfigureAwait(false)) { yield return row; } } private static (string Filter, Dapper.DynamicParameters Parameters) BuildFilter(TmsReportCriteria criteria, LoginDTO login) { var filter = new System.Text.StringBuilder(); var p = new Dapper.DynamicParameters(); p.Add("TenantId", login.ClientId); TmsReportFilterBuilder.AppendEmployee(filter, p, criteria, "TE.EMPLOYEEID"); TmsReportFilterBuilder.AppendInstance(filter, p, criteria, "TE.INSTANCEID"); TmsReportFilterBuilder.AppendDateRange(filter, p, criteria, "TE.NOMINATEDON"); return (filter.ToString(), p); } } }