using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FrameworkDAL.CustomCode.UserGroup; using FrameworkDAL.DTO.User; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.Resource.Response; using System.ComponentModel.DataAnnotations; using GB5Shared.Validation; namespace FrameworkBLL.UserGroup { public class UserGroupBLL : IUserGroupBLL { private readonly IUserGroupDAL _UserGroupDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public UserGroupBLL(IUserGroupDAL IUserGroupDAL, AutoNumber AutoNumber,IValidation validation) { _UserGroupDAL = IUserGroupDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetUserGroupOnUserId(int UserId, LoginDTO LoginDTO) { try { return await _UserGroupDAL.GetUserGroupOnUserId(UserId, LoginDTO); } catch (Exception) { throw; } } public async Task GetUserGroup(int UserGroupId, LoginDTO LoginDTO) { try { return await _UserGroupDAL.GetUserGroup(UserGroupId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveUserGroup(UserGroupDTO UserGroupDTO, LoginDTO LoginDTO) { if (UserGroupDTO == null) throw new ArgumentNullException(nameof(UserGroupDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(UserGroupDTO.UserGroupCode, nameof(UserGroupDTO.UserGroupCode)); await _Validation.NotEmpty(UserGroupDTO.UserGroupName, nameof(UserGroupDTO.UserGroupName)); UserGroupDTO.UserGroupModifiedById = LoginDTO.UserId; UserGroupDTO.UserGroupModifiedOn = DateTime.UtcNow; bool isNew = UserGroupDTO.UserGroupId == 0; if (isNew) { int detailCount = UserGroupDTO.UserGroupDetailArray?.Count ?? 0; int totalRequired = 1 + detailCount; autoNumberDTO = await _AutoNumber.GetNumberAsync(totalRequired, "USERGROUP", LoginDTO); int nextId = autoNumberDTO.StartNumber; UserGroupDTO.UserGroupId = nextId++; UserGroupDTO.UserGroupCreatedById = LoginDTO.UserId; UserGroupDTO.UserGroupCreatedOn = DateTime.UtcNow; if (UserGroupDTO.UserGroupDetailArray?.Count > 0) { foreach (var detail in UserGroupDTO.UserGroupDetailArray) { detail.UserGroupDetailId = nextId++; detail.UserGroupId = UserGroupDTO.UserGroupId; } } await _UserGroupDAL.SaveUserGroup(UserGroupDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage}{UserGroupDTO.UserGroupId}"; } else { await _UserGroupDAL.UpdateUserGroup(UserGroupDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage}{UserGroupDTO.UserGroupId}"; } } catch { if (autoNumberDTO != null && UserGroupDTO.UserGroupId > 0) { await _AutoNumber.RollbackAutoNumber("USERGROUP", autoNumberDTO.StartNumber, LoginDTO); } throw; } } public async Task DeleteUserGroup(int UserGroupId, LoginDTO LoginDTO) { try { var detailsResult = await _UserGroupDAL.DeleteUserGroupDetail(UserGroupId, LoginDTO); if (detailsResult <= 0) return $"{ErrorResponse.DeleteNotFoundMessage}"; var parentResult = await _UserGroupDAL.DeleteUserGroup(UserGroupId, LoginDTO); if (parentResult <= 0) return $"{ErrorResponse.DeleteNotFoundMessage}"; return $"{SuccessResponse.DeleteSuccessMessage}"; } catch (Exception ex) { throw new Exception($"Error Deleting UserGroup ID {UserGroupId}", ex); } } public async Task GetSelectListUserGroup(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _UserGroupDAL.GetSelectListUserGroup(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } } }