using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FrameworkDAL.CustomCode.Merge; using FrameworkDAL.DTO.Merge; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.ResponseStandard; using GB5Shared.GenerateAutoNumber; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.Validation; using GB5Shared.Resource.Response; using System.ComponentModel.DataAnnotations; namespace FrameworkBLL.Merge { public class MergeBLL : IMergeBLL { private readonly IMergeDAL _MergeDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public MergeBLL(IMergeDAL MergeDAL, AutoNumber AutoNumber,IValidation Validation) { _MergeDAL = MergeDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetMerge(int MergeId, LoginDTO LoginDTO) { try { return await _MergeDAL.GetMerge(MergeId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveMerge(MergeDTO MergeDTO, LoginDTO LoginDTO) { if (MergeDTO == null) throw new ArgumentNullException(nameof(MergeDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(MergeDTO.MergeCode, nameof(MergeDTO.MergeCode)); await _Validation.NotEmpty(MergeDTO.MergeName, nameof(MergeDTO.MergeName)); MergeDTO.MergeModifiedById = LoginDTO.UserId; MergeDTO.MergeModifiedOn = DateTime.UtcNow; int count = 1; if (MergeDTO.MergeId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "MERGE", LoginDTO); MergeDTO.MergeId = autoNumberDTO.StartNumber; MergeDTO.MergeCreatedById = LoginDTO.UserId; MergeDTO.MergeCreatedOn = DateTime.UtcNow; await _MergeDAL.SaveMerge(MergeDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessMessage} {MergeDTO.MergeId}"; } else { await _MergeDAL.UpdateMerge(MergeDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessMessage} {MergeDTO.MergeId}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && MergeDTO.MergeId > 0) await _AutoNumber.RollbackAutoNumber("MERGE", MergeDTO.MergeId, LoginDTO); throw; } } public async Task GetSelectListMerge(int FirstNumber, int MaxResult, CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _MergeDAL.GetSelectListMerge(FirstNumber, MaxResult, criteriaDTO, LoginDTO); } catch (Exception ex) { throw new Exception("Error while fetching Merge select list.", ex); } } public async Task DeleteMerge(int MergeId, LoginDTO LoginDTO) { try { return await _MergeDAL.DeleteMerge(MergeId, LoginDTO); } catch (Exception) { throw; } } } }