using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using PERMDAL.DTOs; using PERMDAL.Interfaces; using PERMDAL.QueryBuilders; namespace PERMDAL.Implementations; public class KRADAL : IKRADAL { private readonly IQueryExecutor _qe; private readonly AutoNumber _autoNumber; public KRADAL(IQueryExecutor queryExecutor, AutoNumber autoNumber) { _qe = queryExecutor; _autoNumber = autoNumber; } public async Task GetKRAAsync(int kraId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync( login, KRAQB.GET_BY_ID, new { KRAId = kraId, TenantId = login.ClientId }) .ConfigureAwait(false); public async Task> GetKRAListAsync( short? status, short? nature, int page, int pageSize, LoginDTO login, CancellationToken ct) { var param = new { TenantId = login.ClientId, Status = status, Nature = nature, Offset = (page - 1) * pageSize, PageSize = pageSize }; return await _qe.QueryAsync(login, KRAQB.GET_LIST, param, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); } public async Task> GetKRASelectListAsync(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _qe.QueryWithCriteriaAsync( login, KRAQB.GET_SELECT_LIST, new { TenantId = login.ClientId }, criteriaDTO, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveKRAAsync(KRADTO dto, LoginDTO login, CancellationToken ct) { var auto = await _autoNumber.GetAutoNumber(1, "KRA", login).ConfigureAwait(false); dto.KRAId = auto.StartNumber; var param = new { dto.KRAId, dto.KRAName, dto.Description, dto.Section, dto.Nature, dto.DepartmentId, dto.Remarks, dto.SortOrder, dto.Status, dto.SourceType, TenantId = login.ClientId, CreatedById = login.UserId, ModifiedById = login.UserId }; return await _qe.ExecuteAsync(login, KRAQB.INSERT, param, cancellationToken: ct) .ConfigureAwait(false); } public async Task UpdateKRAAsync(KRADTO dto, LoginDTO login, CancellationToken ct) { var param = new { dto.KRAId, dto.KRAName, dto.Description, dto.Section, dto.Nature, dto.DepartmentId, dto.Remarks, dto.Status, TenantId = login.ClientId, ModifiedById = login.UserId }; return await _qe.ExecuteAsync(login, KRAQB.UPDATE, param, cancellationToken: ct) .ConfigureAwait(false); } public async Task DeleteKRAAsync(int kraId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, KRAQB.DELETE, new { KRAId = kraId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); public async Task KRANameExistsAsync(string name, int excludeKRAId, LoginDTO login, CancellationToken ct) { int count = await _qe.ExecuteScalarAsync( login, KRAQB.EXISTS_NAME, new { KRAName = name, TenantId = login.ClientId, KRAId = excludeKRAId }, cancellationToken: ct) .ConfigureAwait(false); return count > 0; } }