using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using WiDAL.CustomCode.WiSubProcess; using WiDAL.DTOs; namespace WiBLL.WiSubProcess; public class WiSubProcessBLL : IWiSubProcessBLL { private readonly IWiSubProcessDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public WiSubProcessBLL(IWiSubProcessDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetWiSubProcessList( int firstNumber, int maxResult, CriteriaDTO criteriaDTO, LoginDTO loginDTO) => await _dal.GetWiSubProcessList(firstNumber, maxResult, loginDTO) .ConfigureAwait(false); public async Task GetById(int wiSubProcessId, LoginDTO login, CancellationToken ct) => await _dal.GetById(wiSubProcessId, login, ct).ConfigureAwait(false); public async Task Save(WiSubProcessDTO dto, LoginDTO login, CancellationToken ct) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO? autoNumberDTO = null; try { await _validation.NotEmpty(dto.WiSubProcessCode, nameof(dto.WiSubProcessCode)); await _validation.NotEmpty(dto.WiSubProcessName, nameof(dto.WiSubProcessName)); dto.TenantId = login.ClientId; dto.ModifiedById = login.UserId; bool isNew = dto.WiSubProcessId == 0; if (isNew) { autoNumberDTO = await _autoNumber.GetNumberAsync(1, "WISUBPROCESS", login); dto.WiSubProcessId = autoNumberDTO.StartNumber; dto.CreatedById = login.UserId; } await _dal.Save(dto, isNew, login, ct); return isNew ? string.Format(SuccessResponse.SaveSuccessWithCodeAndName,dto.WiSubProcessCode,dto.WiSubProcessName) : string.Format(SuccessResponse.UpdateSuccessWithCodeAndName,dto.WiSubProcessCode,dto.WiSubProcessName); } catch { if (autoNumberDTO != null && dto.WiSubProcessId > 0) { await _autoNumber.RollbackAutoNumber("WISUBPROCESS", dto.WiSubProcessId, login); } throw; } } public async Task GetSelectListWiSubProcess(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _dal.GetSelectListWiSubProcess(criteriaDTO, login, ct); public async Task DeleteWiSubProcess(int WiSubProcessId, LoginDTO loginDTO) { try { return await _dal.DeleteWiSubProcess(WiSubProcessId, loginDTO); } catch (Exception) { throw; } } }