using FrameworkDAL.CustomCode.Program; using FrameworkDAL.DTO.Project; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; namespace FrameworkBLL.Program { public class ProgramBLL : IProgramBLL { private readonly IProgramDAL _ProgramDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public ProgramBLL(IProgramDAL ProgramDAL, AutoNumber AutoNumber, IValidation Validation) { _ProgramDAL = ProgramDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetProgram(int ProgramId, LoginDTO LoginDTO) { try { return await _ProgramDAL.GetProgram(ProgramId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveProgram(ProgramDTO ProgramDTO, LoginDTO LoginDTO) { if (ProgramDTO == null) throw new ArgumentNullException(nameof(ProgramDTO)); AutoNumberDTO? autoNumberDTO = null; try { //await _Validation.NotEmpty(ProgramDTO.ProgramCode, nameof(ProgramDTO.ProgramCode)); await _Validation.NotEmpty(ProgramDTO.ProgramName, nameof(ProgramDTO.ProgramName)); ProgramDTO.ProgramModifiedById = LoginDTO.UserId; ProgramDTO.ProgramModifiedOn = DateTime.UtcNow; int count = 1; if (ProgramDTO.ProgramId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "PROGRAM", LoginDTO); ProgramDTO.ProgramId = autoNumberDTO.StartNumber; ProgramDTO.ProgramCreatedById = LoginDTO.UserId; ProgramDTO.ProgramCreatedOn = DateTime.UtcNow; await _ProgramDAL.SaveProgram(ProgramDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {ProgramDTO.ProgramId}"; } else { await _ProgramDAL.UpdateProgram(ProgramDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {ProgramDTO.ProgramId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && ProgramDTO.ProgramId > 0) await _AutoNumber.RollbackAutoNumber("PROGRAM", ProgramDTO.ProgramId, LoginDTO); throw; } } public async Task DeleteProgram(int ProgramId, LoginDTO LoginDTO) { try { return await _ProgramDAL.DeleteProgram(ProgramId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListProgram(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _ProgramDAL.GetSelectListProgram(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } } }