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 System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WiDAL.CustomCode.WiStepExecution; using WiDAL.DTOs; namespace WiBLL.WiStepExecution { public class WiStepExecutionBLL : IWiStepExecutionBLL { private readonly IWiStepExecutionDAL _dal; private readonly AutoNumber _autoNumber; private readonly IValidation _validation; public WiStepExecutionBLL(IWiStepExecutionDAL dal, AutoNumber autoNumber, IValidation validation) { _dal = dal; _autoNumber = autoNumber; _validation = validation; } public async Task GetById(int WiStepExecutionId, LoginDTO login, CancellationToken ct) => await _dal.GetById(WiStepExecutionId, login, ct).ConfigureAwait(false); public async Task Save(WiStepExecutionDTO dto, LoginDTO login, CancellationToken ct) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO? autoNumberDTO = null; try { bool isNew = dto.WiStepExecutionId == 0; if (isNew) { autoNumberDTO = await _autoNumber.GetNumberAsync(1, "WISTEPEXECUTION", login); dto.WiStepExecutionId = autoNumberDTO.StartNumber; } // ✅ pass isNew to DAL await _dal.Save(dto, isNew, login, ct); return isNew ? $"{SuccessResponse.SaveSuccess}" : $"{SuccessResponse.UpdateSuccess}"; } catch { if (autoNumberDTO != null && dto.WiStepExecutionId > 0) { await _autoNumber.RollbackAutoNumber("WISTEPEXECUTION", dto.WiStepExecutionId, login); } throw; } } public async Task GetSelectListWiStepExecution(CriteriaDTO criteriaDTO, LoginDTO login, CancellationToken ct) => await _dal.GetSelectListWiStepExecution(criteriaDTO, login, ct); public async Task DeleteWiStepExecution(int WiStepExecutionId, LoginDTO loginDTO) { try { return await _dal.DeleteWiStepExecution(WiStepExecutionId, loginDTO); } catch (Exception) { throw; } } } }