using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AdminDAL.CustomCode.Division; using AdminDAL.DTO.Division; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.ResponseStandard; using GB5Shared.GenerateAutoNumber; using GB5Shared.Validation; using System.ComponentModel.DataAnnotations; using GB5Shared.Resource.Response; namespace AdminBLL.Division { public class DivisionBLL : IDivisionBLL { private readonly IDivisionDAL _DivisionDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public DivisionBLL(IDivisionDAL IDivisionDAL, AutoNumber AutoNumber,IValidation validation) { _DivisionDAL = IDivisionDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task GetDivision(int DivisionId, LoginDTO LoginDTO) { try { return await _DivisionDAL.GetDivision(DivisionId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDivision(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _DivisionDAL.GetSelectListDivision(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveDivision(DivisionDTO DivisionDTO, LoginDTO LoginDTO) { if (DivisionDTO == null) throw new ArgumentNullException(nameof(DivisionDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(DivisionDTO.DivisionCode, nameof(DivisionDTO.DivisionCode)); await _Validation.NotEmpty(DivisionDTO.DivisionName, nameof(DivisionDTO.DivisionName)); DivisionDTO.DivisionModifiedById = LoginDTO.UserId; DivisionDTO.DivisionModifiedOn = DateTime.UtcNow; int initialId = DivisionDTO.DivisionId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "DIVISION", LoginDTO); DivisionDTO.DivisionId = AutoNumberDTO.StartNumber; DivisionDTO.DivisionCreatedById = LoginDTO.UserId; DivisionDTO.DivisionCreatedOn = DateTime.UtcNow; await _DivisionDAL.SaveDivision(DivisionDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {DivisionDTO.DivisionId}"; } else { await _DivisionDAL.UpdateDivision(DivisionDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {DivisionDTO.DivisionId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && DivisionDTO.DivisionId > 0) await _AutoNumber.RollbackAutoNumber("DIVISION", DivisionDTO.DivisionId, LoginDTO); throw; } } public async Task DeleteDivision(int DivisionId,LoginDTO LoginDTO) { try { return await _DivisionDAL.DeleteDivision(DivisionId, LoginDTO); } catch(Exception) { throw; } } } }