using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using FrameworkDAL.CustomCode.CriteriaAttribute; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using System.ComponentModel.DataAnnotations; namespace FrameworkBLL.CriteriaAttribute { public class CriteriaAttributeBLL : ICriteriaAttributeBLL { private readonly ICriteriaAttributeDAL _CriteriaAttributeDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CriteriaAttributeBLL(ICriteriaAttributeDAL CriteriaAttributeDAL, AutoNumber AutoNumber, IValidation Validation) { _CriteriaAttributeDAL = CriteriaAttributeDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetSelectListCriteriaAttribute(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _CriteriaAttributeDAL.GetSelectListCriteriaAttribute(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task GetCriteriaAttribute(int CriteriaAttributeId, LoginDTO LoginDTO) { try { return await _CriteriaAttributeDAL.GetCriteriaAttribute(CriteriaAttributeId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveCriteriaAttribute(CriteriaAttributeDTO CriteriaAttributeDTO, LoginDTO LoginDTO) { if (CriteriaAttributeDTO == null) throw new ArgumentNullException(nameof(CriteriaAttributeDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(CriteriaAttributeDTO.CriteriaAttributeName, nameof(CriteriaAttributeDTO.CriteriaAttributeName)); CriteriaAttributeDTO.CriteriaAttributeModifiedById = LoginDTO.UserId; CriteriaAttributeDTO.CriteriaAttributeModifiedOn = DateTime.UtcNow; int count = 1; if (CriteriaAttributeDTO.CriteriaAttributeId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "CRITERIAATTRIBUTE", LoginDTO); CriteriaAttributeDTO.CriteriaAttributeId = autoNumberDTO.StartNumber; CriteriaAttributeDTO.CriteriaAttributeCreatedById = LoginDTO.UserId; CriteriaAttributeDTO.CriteriaAttributeCreatedOn = DateTime.UtcNow; await _CriteriaAttributeDAL.SaveCriteriaAttribute(CriteriaAttributeDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {CriteriaAttributeDTO.CriteriaAttributeId}"; } else { await _CriteriaAttributeDAL.UpdateCriteriaAttribute(CriteriaAttributeDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {CriteriaAttributeDTO.CriteriaAttributeId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && CriteriaAttributeDTO.CriteriaAttributeId > 0) await _AutoNumber.RollbackAutoNumber("CRITERIAATTRIBUTE", CriteriaAttributeDTO.CriteriaAttributeId, LoginDTO); throw; } } public async Task DeleteCriteriaAttribute(int CriteriaAttributeId, LoginDTO LoginDTO) { try { return await _CriteriaAttributeDAL.DeleteCriteriaAttribute(CriteriaAttributeId, LoginDTO); } catch (Exception) { throw; } } } }