using FrameworkDAL.CustomCode.GcmType; using FrameworkDAL.DTO.Formula; using FrameworkDAL.DTO.Gcm; using FrameworkDAL.Query.GcmType; 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.ComponentModel.DataAnnotations; namespace FrameworkBLL.GcmType { public class GcmTypeBLL : IGcmTypeBLL { private readonly IGcmTypeDAL _GcmTypeDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public GcmTypeBLL(IGcmTypeDAL gcmTypeDAL, AutoNumber autoNumber, IValidation IValidation) { _GcmTypeDAL = gcmTypeDAL; _AutoNumber = autoNumber; _Validation = IValidation; } public async Task GetSelectListGcmType(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _GcmTypeDAL.GetSelectListGcmType(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task GetGCMType(int GCMTypeId, LoginDTO LoginDTO) { try { return await _GcmTypeDAL.GetGCMType(GCMTypeId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveGCMType(GcmTypeDTO GcmTypeDTO, LoginDTO LoginDTO) { if (GcmTypeDTO == null) throw new ArgumentNullException(nameof(GcmTypeDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(GcmTypeDTO.GcmTypeCode, nameof(GcmTypeDTO.GcmTypeCode)); GcmTypeDTO.GcmTypeModifiedById = LoginDTO.UserId; GcmTypeDTO.GcmTypeModifiedOn = DateTime.UtcNow; if (GcmTypeDTO.GcmTypeId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(1, "GcmType", LoginDTO); GcmTypeDTO.GcmTypeId = autoNumberDTO.StartNumber; GcmTypeDTO.GcmTypeCreatedById = LoginDTO.UserId; GcmTypeDTO.GcmTypeCreatedOn = DateTime.UtcNow; await _GcmTypeDAL.SaveGCMType(GcmTypeDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {GcmTypeDTO.GcmTypeId}"; } else { await _GcmTypeDAL.UpdateGCMType(GcmTypeDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {GcmTypeDTO.GcmTypeId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && GcmTypeDTO.GcmTypeId > 0) await _AutoNumber.RollbackAutoNumber("GcmType", GcmTypeDTO.GcmTypeId, LoginDTO); throw; } } public async Task DeleteGCMType(int GCMTypeId, LoginDTO LoginDTO) { try { return await _GcmTypeDAL.DeleteGCMType(GCMTypeId, LoginDTO); } catch (Exception) { throw; } } } }