using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace DXPDAL.VendorPo; public class VendorPoDAL : IVendorPoDAL { private readonly IQueryExecutor _QueryExecutor; public VendorPoDAL(IQueryExecutor queryExecutor) { _QueryExecutor = queryExecutor; } public async Task GetPoHeaderAsync(int mmHeadId, int partyId, LoginDTO tenantLogin, CancellationToken ct) { return await _QueryExecutor.QuerySingleAsync( tenantLogin, VendorPoQB.GET_PO_HEADER, new { MMHeadId = mmHeadId, PartyId = partyId }, cancellationToken: ct).ConfigureAwait(false); } public async Task> GetPoDetailsAsync(int mmHeadId, LoginDTO tenantLogin, CancellationToken ct) { return await _QueryExecutor.QueryAsync( tenantLogin, VendorPoQB.GET_PO_DETAILS, new { MMHeadId = mmHeadId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); } public async Task> GetPartyOuLinksAsync(int partyId, LoginDTO tenantLogin, CancellationToken ct) { return await _QueryExecutor.QueryAsync( tenantLogin, VendorPoQB.GET_PARTY_OU_LINKS, new { PartyId = partyId }, cancellationToken: ct).ConfigureAwait(false) ?? Enumerable.Empty(); } public async Task FindNewlyCreatedDocumentAsync( string referenceNumber, int bizTransactionTypeId, int partyId, LoginDTO tenantLogin, CancellationToken ct) { // QueryAsync + FirstOrDefault, not QuerySingleAsync — ORDER BY ... DESC is a tie-breaker, // not a guarantee of exactly one row, so this must tolerate more than one match. var rows = await _QueryExecutor.QueryAsync( tenantLogin, VendorPoQB.FIND_NEWLY_CREATED_DOCUMENT, new { ReferenceNumber = referenceNumber, BizTransactionTypeId = bizTransactionTypeId, PartyId = partyId }, cancellationToken: ct).ConfigureAwait(false); return rows?.FirstOrDefault(); } }