using AdminDAL.CustomCode.Department; using AdminDAL.DTO.Department; 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; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace AdminBLL.Department { public class DepartmentBLL : IDepartmentBLL { private readonly IDepartmentDAL _DepartmentDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public DepartmentBLL(IDepartmentDAL DepartmentDAL, AutoNumber autoNumber, IValidation validation) { _DepartmentDAL = DepartmentDAL; _AutoNumber = autoNumber; _Validation = validation; } public async Task GetDepartment(int DepartmentId, LoginDTO LoginDTO) { try { return await _DepartmentDAL.GetDepartment(DepartmentId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDepartment(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _DepartmentDAL.GetSelectListDepartment(LoginDTO, CriteriaDTO); } catch (Exception) { throw; } } public async Task SaveDepartment(DepartmentDTO dto, LoginDTO loginDTO) { if (dto == null) throw new ArgumentNullException(nameof(dto)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(dto.DepartmentCode, nameof(dto.DepartmentCode)); await _Validation.NotEmpty(dto.DepartmentName, nameof(dto.DepartmentName)); dto.DepartmentModifiedById = loginDTO.UserId; dto.DepartmentModifiedOn = DateTime.UtcNow; if (dto.DepartmentId == 0) { autoNumberDTO = await _AutoNumber.GetNumberAsync(1, "DEPARTMENT", loginDTO); dto.DepartmentId = autoNumberDTO.StartNumber; dto.DepartmentCreatedById = loginDTO.UserId; dto.DepartmentCreatedOn = DateTime.UtcNow; await _DepartmentDAL.SaveDepartment(dto, loginDTO); return $"{SuccessResponse.SaveSuccessMessage} {dto.DepartmentId}"; } else { await _DepartmentDAL.UpdateDepartment(dto, loginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {dto.DepartmentId}"; } } catch (Exception) { throw; } } public async Task DeleteDepartment(int departmentId, LoginDTO loginDTO) { try { return await _DepartmentDAL.DeleteDepartment(departmentId, loginDTO); } catch (Exception) { throw; } } } }