using AdminDAL.CustomCode.OrganizationGroup; using AdminDAL.DTO.OrganizationGroup; 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.ComponentModel.DataAnnotations; namespace AdminBLL.OrganizationGroup { public class OrganizationGroupBLL : IOrganizationGroupBLL { private readonly IOrganizationGroupDAL _OrganizationGroupDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public OrganizationGroupBLL(IOrganizationGroupDAL organizationGroupDAL, AutoNumber autoNumber, IValidation validation) { _OrganizationGroupDAL = organizationGroupDAL; _AutoNumber = autoNumber; _Validation = validation; } public async Task GetSelectListOrganizationGroup(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _OrganizationGroupDAL.GetSelectListOrganizationGroup(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task GetOrganizationGroup(int OrganizationGroupId, LoginDTO LoginDTO) { try { return await _OrganizationGroupDAL.GetOrganizationGroup(OrganizationGroupId, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteOrganizationGroup(int OrganizationGroupId, LoginDTO LoginDTO) { try { return await _OrganizationGroupDAL.DeleteOrganizationGroup(OrganizationGroupId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveOrganizationGroup(OrganizationGroupDTO OrganizationGroupDTO, LoginDTO LoginDTO) { if (OrganizationGroupDTO == null) throw new ArgumentNullException(nameof(OrganizationGroupDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(OrganizationGroupDTO.OrganizationGroupCode, nameof(OrganizationGroupDTO.OrganizationGroupCode)); await _Validation.NotEmpty(OrganizationGroupDTO.OrganizationGroupName, nameof(OrganizationGroupDTO.OrganizationGroupName)); OrganizationGroupDTO.OrganizationGroupModifiedById = LoginDTO.UserId; OrganizationGroupDTO.OrganizationGroupModifiedOn = DateTime.UtcNow; bool isNew = OrganizationGroupDTO.OrganizationGroupId == 0; if (isNew) { autoNumberDTO = await _AutoNumber.GetAutoNumber(1, "ORGANIZATIONGROUP", LoginDTO); OrganizationGroupDTO.OrganizationGroupId = autoNumberDTO.StartNumber; OrganizationGroupDTO.OrganizationGroupCreatedById = LoginDTO.UserId; OrganizationGroupDTO.OrganizationGroupCreatedOn = DateTime.UtcNow; await _OrganizationGroupDAL.SaveOrganizationGroup(OrganizationGroupDTO, LoginDTO); } else { await _OrganizationGroupDAL.DeleteOrganizationGroupDetails(OrganizationGroupDTO.OrganizationGroupId, LoginDTO); await _OrganizationGroupDAL.UpdateOrganizationGroup(OrganizationGroupDTO, LoginDTO); } if (OrganizationGroupDTO.OrganizationGroupDetailArray != null) { short slNo = 1; foreach (var detail in OrganizationGroupDTO.OrganizationGroupDetailArray) { detail.OrganizationGroupId = OrganizationGroupDTO.OrganizationGroupId; detail.OrganizationGroupDetailSlNo = slNo++; var detailAutoNumber = await _AutoNumber.GetAutoNumber(1, "ORGANIZATIONGROUPDETAIL", LoginDTO); detail.OrganizationGroupDetailId = detailAutoNumber.StartNumber; await _OrganizationGroupDAL.SaveOrganizationGroupDetail(detail, LoginDTO); } } return isNew ? $"{SuccessResponse.SaveSuccessMessage} {OrganizationGroupDTO.OrganizationGroupId}" : $"{SuccessResponse.UpdateSuccessMessage} {OrganizationGroupDTO.OrganizationGroupId}"; } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && OrganizationGroupDTO.OrganizationGroupId > 0) await _AutoNumber.RollbackAutoNumber("ORGANIZATIONGROUP", OrganizationGroupDTO.OrganizationGroupId, LoginDTO); throw; } } public async Task GetOUDetailsFromOuGroup(int OrganizationGroupId, int FirstNumber, int MaxResult, LoginDTO LoginDTO) { try { return await _OrganizationGroupDAL.GetOUDetailsFromOuGroup(OrganizationGroupId, FirstNumber, MaxResult, LoginDTO); } catch (Exception) { throw; } } } }