using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading; using System.Threading.Tasks; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using MMDAL.DTO.VendorComparison; using MMDAL.Query.VendorComparison; namespace MMDAL.CustomCode.VendorComparison { public class VendorComparisonDAL : IVendorComparisonDAL { private readonly IQueryExecutor _QueryExecutor; public VendorComparisonDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task> GetVendorComparisonDetail( VendorComparisonFilterDTO filter, int firstNumber, int maxResult, LoginDTO loginDTO, CancellationToken ct = default) { var parameters = new { filter.DocumentId, filter.ItemId, filter.SkuId, filter.ItemCategoryId, filter.ItemSubCategoryId, filter.ItemGroupId, filter.BuyerId, FirstNumber = firstNumber, MaxResult = maxResult }; return await _QueryExecutor.QueryAsync( loginDTO, VendorComparisonQB.GET_VENDOR_COMPARISON_DETAIL, parameters, cancellationToken: ct); } // Type=1 (Detail) only. Two-statement batch (seed #tempvendor, then read the charges // aggregated against it) — see VendorComparisonQB.GET_VENDOR_COMPARISON_CHARGES. Both // statements must share one connection since temp tables are connection-scoped; // QueryMultipleAsync guarantees that without needing an explicit transaction here. public async Task> GetVendorComparisonCharges( VendorComparisonFilterDTO filter, LoginDTO loginDTO, CancellationToken ct = default) { var parameters = new { filter.DocumentId, filter.ItemId, filter.SkuId, filter.ItemCategoryId, filter.ItemSubCategoryId, filter.ItemGroupId, filter.BuyerId }; // Explicit CommandType.Text disambiguates from the StoredProcedure-defaulting overload // (this is a multi-statement SQL batch, not a stored procedure call). using var grid = await _QueryExecutor.QueryMultipleAsync( loginDTO, VendorComparisonQB.GET_VENDOR_COMPARISON_CHARGES, parameters, null, CommandType.Text); var charges = await grid.ReadAsync(); return charges.ToList(); } public async Task UpdateVendorDetail(VendorComparisonUpdateDTO dto, LoginDTO loginDTO, CancellationToken ct = default) { return await _QueryExecutor.ExecuteAsync( loginDTO, VendorComparisonQB.UPDATE_VENDOR_DETAIL, new { dto.ItemPartyId, dto.PartyStatus, dto.SharePercentage }, cancellationToken: ct); } } }