using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using GB5Shared.DTO.Framework.AutoNumber; using FrameworkDAL.CustomCode.Lov; using FrameworkDAL.DTO.Lov; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Validation; using System.ComponentModel.DataAnnotations; using GB5Shared.Resource.Response; namespace FrameworkBLL.Lov { public class LovBLL : ILovBLL { private readonly ILovDAL _LovDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public LovBLL(ILovDAL LovDAL, AutoNumber AutoNumber, IValidation validation) { _LovDAL = LovDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetLov(int LovId, LoginDTO LoginDTO) { try { return await _LovDAL.GetLov(LovId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveLov(LovDTO LovDTO, LoginDTO LoginDTO) { if (LovDTO == null) throw new ArgumentNullException(nameof(LovDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(LovDTO.LovCode, nameof(LovDTO.LovCode)); await _Validation.NotEmpty(LovDTO.LovName, nameof(LovDTO.LovName)); LovDTO.LovModifiedById = LoginDTO.UserId; LovDTO.LovModifiedOn = DateTime.UtcNow; int InitialId = LovDTO.LovId; int count = 1 + InitialId; if (InitialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "LOV", LoginDTO); LovDTO.LovId = AutoNumberDTO.StartNumber; LovDTO.LovCreatedById = LoginDTO.UserId; LovDTO.LovCreatedOn = DateTime.UtcNow; await _LovDAL.SaveLov(LovDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {LovDTO.LovId}"; } else { await _LovDAL.UpdateLov(LovDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {LovDTO.LovId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && LovDTO.LovId > 0) await _AutoNumber.RollbackAutoNumber("LOV", LovDTO.LovId, LoginDTO); throw; } } public async Task GetSelectListLov(int FirstNumber,int MaxResult,CriteriaDTO CriteriaDTO,LoginDTO LoginDTO) { try { return await _LovDAL.GetSelectListLov(FirstNumber,MaxResult,CriteriaDTO,LoginDTO); } catch { throw; } } public async Task DeleteLov(int LovId, LoginDTO LoginDTO) { try { return await _LovDAL.DeleteLov(LovId, LoginDTO); } catch (Exception) { throw; } } } }