using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System.Text.Json; using WiDAL.CustomCode.Workstation; using WiDAL.DTOs; namespace WiBLL.Workstation; public class WorkstationBLL : IWorkstationBLL { private readonly IWorkstationDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public WorkstationBLL(IWorkstationDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetListAsync(int workCenterId, bool activeOnly, LoginDTO login, CancellationToken ct) => await _dal.GetListAsync(workCenterId, activeOnly, login, ct).ConfigureAwait(false); public async Task GetSelectListWorkstation( int firstNumber, int maxResult, CriteriaDTO criteriaDTO, LoginDTO loginDTO) => await _dal.GetSelectListWorkstation(firstNumber, maxResult, loginDTO) .ConfigureAwait(false); public async Task GetByIdAsync(int workstationId, LoginDTO login, CancellationToken ct) { var dto = await _dal.GetByIdAsync(workstationId, login, ct).ConfigureAwait(false); return JsonSerializer.Serialize(dto); } public async Task SaveAsync(WorkstationDTO dto, LoginDTO login, CancellationToken ct) { await _validation.NotEmpty(dto.WorkstationCode, nameof(dto.WorkstationCode)).ConfigureAwait(false); await _validation.NotEmpty(dto.WorkstationName, nameof(dto.WorkstationName)).ConfigureAwait(false); bool isNew = dto.WorkstationId == 0; if (isNew) { var an = await _autoNumber.GetNumberAsync(1, "WIEXECUTION", login).ConfigureAwait(false); dto.WorkstationId = an.StartNumber; try { await _dal.InsertAsync(dto, login, ct).ConfigureAwait(false); } catch { await _autoNumber.RollbackAutoNumber("WIEXECUTION", dto.WorkstationId, login).ConfigureAwait(false); throw; } return string.Format(SuccessResponse.SaveSuccessWithCodeAndName, dto.WorkstationCode,dto.WorkstationName); } await _dal.UpdateAsync(dto, login, ct).ConfigureAwait(false); return string.Format(SuccessResponse.UpdateSuccessWithCodeAndName, dto.WorkstationCode, dto.WorkstationName); } public async Task DeleteWorkStation(int WorkStationId, LoginDTO loginDTO) { try { return await _dal.DeleteWorkStation(WorkStationId, loginDTO); } catch (Exception) { throw; } } }