using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using Newtonsoft.Json; using WiDAL.DTOs; using WiDAL.Query.Wi; namespace WiDAL.CustomCode.LineMap; public class LineMapDAL : ILineMapDAL { private readonly IQueryExecutor _qe; public LineMapDAL(IQueryExecutor qe) => _qe = qe; public async Task GetCurrentMapAsync(int productionLineId, int routingVersionId, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync(login, LineMapQB.GET_CURRENT_MAP, new { ProductionLineId = productionLineId, RoutingVersionId = routingVersionId, TenantId = login.ClientId}, cancellationToken: ct).ConfigureAwait(false); return JsonConvert.SerializeObject(result); } public async Task GetStaffingGapAsync(int productionLineId, int routingDetailId, DateOnly effectiveto, DateOnly rosterDate,int shiftId,LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, LineMapQB.GET_STAFFING_GAP, new { ProductionLineId = productionLineId, RoutingDetailId = routingDetailId, EffectiveTo = effectiveto, RosterDate = rosterDate, ShiftId = shiftId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return JsonConvert.SerializeObject(result); } public async Task GetByIdAsync(int lineOperationMapId, LoginDTO login, CancellationToken ct) { return await _qe.QuerySingleAsync(login, LineMapQB.GET_BY_ID, new { LineOperationMapId = lineOperationMapId, DatabaseName = login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); } public async Task CloseCurrentAsync(int productionLineId, int routingDetailId, DateOnly effectiveTo, LoginDTO login, CancellationToken ct) { return await _qe.ExecuteAsync(login, LineMapQB.CLOSE_CURRENT, new { ProductionLineId = productionLineId, RoutingDetailId = routingDetailId, EffectiveTo = effectiveTo, UserId = login.UserId, DatabaseName = login.DatabaseName }, cancellationToken: ct).ConfigureAwait(false); } public async Task InsertNewAsync(LineOperationMapDTO dto, LoginDTO login, CancellationToken ct) { return await _qe.ExecuteAsync(login, LineMapQB.INSERT_NEW, new { dto.ProductionLineId, dto.RoutingDetailId, dto.WorkstationId, dto.EffectiveFrom, dto.ManpowerCount, IsActive = dto.IsActive ? 1 : 0, dto.Remarks, UserId = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); } }