using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Logging; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.GB5Solution; using GB5Shared.Resource.Response; using GB5Shared.ResponseStandard; using GB5Shared.Validation; using MMDAL.CustomCode.Terms; using MMDAL.DTO.Terms; using System; using System.Threading.Tasks; namespace MMBLL.Terms { public class TermsBLL : ITermsBLL { private readonly ITermsDAL _TermsDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public TermsBLL(ITermsDAL TermsDAL, AutoNumber AutoNumber, IValidation Validation) { _TermsDAL = TermsDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task DeleteTerms(int TermsId, LoginDTO LoginDTO) { try { return await _TermsDAL.DeleteTerms(TermsId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListTerms(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _TermsDAL.GetSelectListTerms(CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task GetTerms(int TermsId, LoginDTO LoginDTO) { try { return await _TermsDAL.GetTerms(TermsId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveTerms(TermsDTO termsDTO, LoginDTO LoginDTO) { if (termsDTO == null) throw new ArgumentNullException(nameof(termsDTO)); AutoNumberDTO? autoNumberDTO = null; try { termsDTO.TermsModifiedById = LoginDTO.UserId; termsDTO.TermsModifiedOn = DateTime.UtcNow; if (termsDTO.TermsId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(1, "TERMS", LoginDTO); termsDTO.TermsId = autoNumberDTO.StartNumber; termsDTO.TermsCreatedById = LoginDTO.UserId; termsDTO.TermsCreatedOn = DateTime.UtcNow; await _TermsDAL.SaveTerms(termsDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {termsDTO.TermsId}"; } else { await _TermsDAL.UpdateTerms(termsDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {termsDTO.TermsId}"; } } catch (Exception ex) { if (autoNumberDTO != null && termsDTO.TermsId > 0) await _AutoNumber.RollbackAutoNumber("TERMS", termsDTO.TermsId, LoginDTO); string error = await _Validation.HandleException(ex, $"{ErrorResponse.SaveErrorMessage}"); throw new Exception(error); } } } }