using FrameworkDAL.CustomCode.CodeDefine; using FrameworkDAL.DTO.Code; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; namespace FrameworkBLL.CodeDefine { public class CodeDefineSegmentBLL : ICodeDefineSegmentBLL { private readonly ICodeDefineSegmentDAL _CodeDefineSegmentDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CodeDefineSegmentBLL( ICodeDefineSegmentDAL codeDefineSegmentDAL, AutoNumber autoNumber, IValidation validation) { _CodeDefineSegmentDAL = codeDefineSegmentDAL; _AutoNumber = autoNumber; _Validation = validation; } public async Task GetSegmentsByCodeDefineId(int codeDefineId, LoginDTO loginDTO) { try { return await _CodeDefineSegmentDAL.GetSegmentsByCodeDefineId(codeDefineId, loginDTO); } catch (Exception) { throw; } } public async Task SaveCodeDefineSegment(CodeDefineSegmentDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO autoNumberDTO = null; try { await _Validation.NotEmpty(dto.CodeDefineSegmentSourceField, nameof(dto.CodeDefineSegmentSourceField)); dto.CodeDefineSegmentModifiedById = loginDTO.UserId; dto.CodeDefineSegmentModifiedOn = DateTime.UtcNow; if (dto.CodeDefineSegmentId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(1, "CODEDEFINESEGMENT", loginDTO); dto.CodeDefineSegmentId = autoNumberDTO.StartNumber; dto.CodeDefineSegmentCreatedById = loginDTO.UserId; dto.CodeDefineSegmentCreatedOn = DateTime.UtcNow; await _CodeDefineSegmentDAL.SaveCodeDefineSegment(dto, loginDTO); return $"{SuccessResponse.SaveSuccessMessage} {dto.CodeDefineSegmentId}"; } else { await _CodeDefineSegmentDAL.UpdateCodeDefineSegment(dto, loginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {dto.CodeDefineSegmentId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && dto.CodeDefineSegmentId > 0) await _AutoNumber.RollbackAutoNumber("CODEDEFINESEGMENT", dto.CodeDefineSegmentId, loginDTO); throw; } } public async Task DeleteCodeDefineSegment(int segmentId, LoginDTO loginDTO) { try { return await _CodeDefineSegmentDAL.DeleteCodeDefineSegment(segmentId, loginDTO); } catch (Exception) { throw; } } public async Task GetSelectListCodeDefineSegment(int firstNumber, int maxResult, int codeDefineId, LoginDTO loginDTO) { try { return await _CodeDefineSegmentDAL.GetSelectListCodeDefineSegment(firstNumber, maxResult, codeDefineId, loginDTO); } catch (Exception) { throw; } } } }