using FrameworkDAL.CustomCode.GCM; using FrameworkDAL.DTO.Gcm; 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.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FrameworkBLL.GCM { public class GCMBLL : IGCMBLL { private readonly IGCMDAL _GCMDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public GCMBLL(IGCMDAL IGCMDAL, AutoNumber AutoNumber, IValidation validation) { _GCMDAL = IGCMDAL; _AutoNumber = AutoNumber; _Validation = validation; } public async Task> GetSelectListGCM(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO, bool IsCount = false) => await _GCMDAL.GetSelectListGCM(FirstNumber, MaxResult, CriteriaDTO, LoginDTO, IsCount).ConfigureAwait(false); public async Task GetSelectListGCMCount(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) => await _GCMDAL.GetSelectListGCMCount(CriteriaDTO, LoginDTO).ConfigureAwait(false); public async Task GetGCM(int GcmId, LoginDTO LoginDTO) { try { return await _GCMDAL.GetGCM(GcmId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveGCM(GcmDTO GcmDTO, LoginDTO LoginDTO) { if (GcmDTO == null) throw new ArgumentNullException(nameof(GcmDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(GcmDTO.GcmCode, nameof(GcmDTO.GcmCode)); await _Validation.NotEmpty(GcmDTO.GcmName, nameof(GcmDTO.GcmName)); GcmDTO.GcmModifiedById = LoginDTO.UserId; GcmDTO.GcmModifiedOn = DateTime.UtcNow; int InitialId = GcmDTO.GcmId; int count = 1 + InitialId; if (InitialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "GCM", LoginDTO); GcmDTO.GcmId = AutoNumberDTO.StartNumber; GcmDTO.GcmCreatedById = LoginDTO.UserId; GcmDTO.GcmCreatedOn = DateTime.UtcNow; await _GCMDAL.SaveGCM(GcmDTO, LoginDTO); return $"Details Saved Successfully."; } else { await _GCMDAL.UpdateGCM(GcmDTO, LoginDTO); return $"Details Updated Successfully."; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && GcmDTO.GcmId > 0) await _AutoNumber.RollbackAutoNumber("GCM", GcmDTO.GcmId, LoginDTO); throw; } } public async Task DeleteGCM(int GCMId, LoginDTO LoginDTO) { try { return await _GCMDAL.DeleteGCM(GCMId, LoginDTO); } catch (Exception) { throw; } } } }