using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using FrameworkDAL.CustomCode.CriteriaConfig; 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; namespace FrameworkBLL.CriteriaConfig { public class CriteriaConfigBLL : ICriteriaConfigBLL { private readonly ICriteriaConfigDAL _CriteriaConfigDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public CriteriaConfigBLL(ICriteriaConfigDAL ICriteriaConfigDAL, AutoNumber AutoNumber, IValidation Validation) { _CriteriaConfigDAL = ICriteriaConfigDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetCriteriaConfig(int CriteriaConfigId, LoginDTO LoginDTO) { try { return await _CriteriaConfigDAL.GetCriteriaConfig(CriteriaConfigId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveCriteriaConfig(CriteriaConfigDTO CriteriaConfigDTO, LoginDTO LoginDTO) { string message = ""; var currentTime = DateTime.UtcNow; if (CriteriaConfigDTO == null) throw new ArgumentNullException(nameof(CriteriaConfigDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(CriteriaConfigDTO.CriteriaConfigName, nameof(CriteriaConfigDTO.CriteriaConfigName)); CriteriaConfigDTO.CriteriaConfigModifiedById = LoginDTO.UserId; CriteriaConfigDTO.CriteriaConfigModifiedOn = currentTime; int count = 1; if (CriteriaConfigDTO.CriteriaConfigId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "CRITERIACONFIG", LoginDTO); CriteriaConfigDTO.CriteriaConfigId = autoNumberDTO.StartNumber; int nextId = CriteriaConfigDTO.CriteriaConfigId + 1; if (CriteriaConfigDTO.CriteriaConfigSectionArray != null) { foreach (var section in CriteriaConfigDTO.CriteriaConfigSectionArray) { section.CriteriaConfigSectionId = nextId++; section.CriteriaConfigId = CriteriaConfigDTO.CriteriaConfigId; section.CriteriaConfigSectionCreatedById = LoginDTO.UserId; section.CriteriaConfigSectionCreatedOn = currentTime; section.CriteriaConfigSectionModifiedById = LoginDTO.UserId; section.CriteriaConfigSectionModifiedOn = currentTime; if (section.CriteriaConfigAttributeArray != null) { foreach (var attribute in section.CriteriaConfigAttributeArray) { attribute.CriteriaConfigAttributeId = nextId++; attribute.CriteriaSectionId = section.CriteriaConfigSectionId; } } } } CriteriaConfigDTO.CriteriaConfigCreatedById = LoginDTO.UserId; CriteriaConfigDTO.CriteriaConfigCreatedOn = currentTime; await _CriteriaConfigDAL.SaveCriteriaConfig(CriteriaConfigDTO, LoginDTO); message = $"{SuccessResponse.SaveSuccessMessage} {CriteriaConfigDTO.CriteriaConfigId}"; } else { if (CriteriaConfigDTO.CriteriaConfigSectionArray != null) { foreach (var section in CriteriaConfigDTO.CriteriaConfigSectionArray) { section.CriteriaConfigSectionModifiedById = LoginDTO.UserId; section.CriteriaConfigSectionModifiedOn = currentTime; if (section.CriteriaConfigSectionId == 0) { section.CriteriaConfigSectionCreatedById = LoginDTO.UserId; section.CriteriaConfigSectionCreatedOn = currentTime; } } } await _CriteriaConfigDAL.UpdateCriteriaConfig(CriteriaConfigDTO, LoginDTO); message = $"{SuccessResponse.UpdateSuccessMessage} {CriteriaConfigDTO.CriteriaConfigId}"; } if (CriteriaConfigDTO.CriteriaConfigIsDefault == 0 && CriteriaConfigDTO.UserVsPortletId > 0) { await _CriteriaConfigDAL.UpdateUserVsPortlet(CriteriaConfigDTO.CriteriaConfigId, CriteriaConfigDTO.UserVsPortletId, LoginDTO); } return message; } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && CriteriaConfigDTO.CriteriaConfigId > 0) { await _AutoNumber.RollbackAutoNumber("CRITERIACONFIG", CriteriaConfigDTO.CriteriaConfigId, LoginDTO); } throw; } } public async Task> DeleteCriteriaConfig(int CriteriaConfigId, LoginDTO LoginDTO) { try { return await _CriteriaConfigDAL.DeleteCriteriaConfig(CriteriaConfigId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListCriteriaConfig(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _CriteriaConfigDAL.GetSelectListCriteriaConfig(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception ex) { throw new Exception("Error in GetSelectListCriteriaConfig", ex); } } } }