using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using MMDAL.DTO.MRPRun; using MMDAL.Query.MRPRun; namespace MMDAL.CustomCode.MRPRun { public class MRPReportDAL : IMRPReportDAL { private readonly IQueryExecutor _QueryExecutor; public MRPReportDAL(IQueryExecutor queryExecutor) => _QueryExecutor = queryExecutor; public async Task> GetShortageReport( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildShortageReport(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetStageWiseShortageReport( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildStageWiseShortageReport(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetMRPWorksheet( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildMRPWorksheet(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetPurchaseRequirement( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildPurchaseRequirement(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetScheduleReceipt( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildScheduleReceipt(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetMRPRunWithActions( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildMRPRunWithActions(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetMRPWithDimensionReport( MRPReportCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildMRPWithDimension(criteria); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } public async Task> GetScopedRunComparison( ScopedRunComparisonCriteriaDTO criteria, LoginDTO loginDTO, CancellationToken ct) { var (dataSql, countSql, p) = MRPReportQB.BuildScopedRunComparison(criteria, loginDTO); return await ExecutePaged(loginDTO, dataSql, countSql, p, ct) .ConfigureAwait(false); } private async Task> ExecutePaged( LoginDTO loginDTO, string dataSql, string countSql, Dapper.DynamicParameters p, CancellationToken ct) { var items = await _QueryExecutor .QueryAsync(loginDTO, dataSql, p, cancellationToken: ct) .ConfigureAwait(false); var total = await _QueryExecutor .ExecuteScalarAsync(loginDTO, countSql, p, cancellationToken: ct) .ConfigureAwait(false); return new PagedResult { Items = items?.ToList() ?? [], TotalCount = total }; } } }