using System.ComponentModel.DataAnnotations; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Validation; using MMDAL.CustomCode.NDTCertificate; using MMDAL.DTO.NDTCertificate; namespace MMBLL.NDTCertificate { public class NDTCertificateBLL : INDTCertificateBLL { private readonly INDTCertificateDAL _NDTCertificateDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public NDTCertificateBLL(INDTCertificateDAL NDTCertificateDAL, AutoNumber AutoNumber, IValidation Validation) { _NDTCertificateDAL = NDTCertificateDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetNDTCertificate(int NDTCertificateId, LoginDTO LoginDTO) { try { return await _NDTCertificateDAL.GetNDTCertificate(NDTCertificateId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListNDTCertificate(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _NDTCertificateDAL.GetSelectListNDTCertificate(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task SaveNDTCertificate(NDTCertificateDTO NDTCertificateDTO, LoginDTO LoginDTO) { if (NDTCertificateDTO == null) throw new ArgumentNullException(nameof(NDTCertificateDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(NDTCertificateDTO.NDTCertificateCertificateNo, nameof(NDTCertificateDTO.NDTCertificateCertificateNo)); await _Validation.NotEmpty(NDTCertificateDTO.NDTCertificateInspectorName, nameof(NDTCertificateDTO.NDTCertificateInspectorName)); await _Validation.NotEmpty(NDTCertificateDTO.NDTCertificateInspectorLevel, nameof(NDTCertificateDTO.NDTCertificateInspectorLevel)); NDTCertificateDTO.NDTCertificateModifiedById = LoginDTO.UserId; NDTCertificateDTO.NDTCertificateModifiedOn = DateTime.UtcNow; int initialId = NDTCertificateDTO.NDTCertificateId; if (initialId == 0) { autoNumberDTO = await _AutoNumber.GetNumberAsync(1, "NDTCERTIFICATE", LoginDTO); NDTCertificateDTO.NDTCertificateId = autoNumberDTO.StartNumber; NDTCertificateDTO.NDTCertificateCreatedById = LoginDTO.UserId; NDTCertificateDTO.NDTCertificateCreatedOn = DateTime.UtcNow; await _NDTCertificateDAL.SaveNDTCertificate(NDTCertificateDTO, LoginDTO); return "Details Saved Successfully."; } else { await _NDTCertificateDAL.UpdateNDTCertificate(NDTCertificateDTO, LoginDTO); return "Details Updated Successfully."; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && NDTCertificateDTO.NDTCertificateId > 0) await _AutoNumber.RollbackAutoNumber("NDTCERTIFICATE", NDTCertificateDTO.NDTCertificateId, LoginDTO); throw; } } public async Task DeleteNDTCertificate(int NDTCertificateId, LoginDTO LoginDTO) { try { return await _NDTCertificateDAL.DeleteNDTCertificate(NDTCertificateId, LoginDTO); } catch (Exception) { throw; } } } }