using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using CRMDAL.CustomCode.SLA; using CRMDAL.DTO.SLA; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Newtonsoft.Json; namespace CRMBLL.SLA { public class SLABLL : ISLABLL { private readonly ISLADAL _SLADAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public SLABLL(ISLADAL SLADAL, AutoNumber AutoNumber, IValidation Validation) { _SLADAL = SLADAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetSLA(int SLAId, LoginDTO LoginDTO) { try { return await _SLADAL.GetSLA(SLAId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListSLA(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _SLADAL.GetSelectListSLA(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task SaveSLA(SLADTO SLADTO, LoginDTO LoginDTO) { if (SLADTO == null) throw new ArgumentNullException(nameof(SLADTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(SLADTO.SLACode, nameof(SLADTO.SLACode)); await _Validation.NotEmpty(SLADTO.SLAName, nameof(SLADTO.SLAName)); SLADTO.SLAModifiedById = LoginDTO.UserId; SLADTO.SLAModifiedOn = DateTime.UtcNow; bool isNew = SLADTO.SLAId == 0; if (isNew) { int detailCount = SLADTO.SLADetailArray?.Count ?? 0; int totalRequired = 1 + detailCount; autoNumberDTO = await _AutoNumber.GetNumberAsync(totalRequired, "SERVICELEVELAGREEMENT", LoginDTO); int nextId = autoNumberDTO.StartNumber; SLADTO.SLAId = nextId++; SLADTO.SLACreatedById = LoginDTO.UserId; SLADTO.SLACreatedOn = DateTime.UtcNow; if (SLADTO.SLADetailArray?.Count > 0) { foreach (var detail in SLADTO.SLADetailArray) { detail.SLADetailId = nextId++; detail.SLAId = SLADTO.SLAId; } } await _SLADAL.SaveSLA(SLADTO, LoginDTO); return $"{SuccessResponse.SaveSuccess}"; } else { await _SLADAL.UpdateSLA(SLADTO, LoginDTO); return $"{SuccessResponse.UpdateSuccess}"; } } catch { if (autoNumberDTO != null && SLADTO.SLAId > 0) { await _AutoNumber.RollbackAutoNumber("SERVICELEVELAGREEMENT", autoNumberDTO.StartNumber, LoginDTO); } throw; } } public async Task DeleteSLA(int SLAId, LoginDTO LoginDTO) { try { var detailsResult = await _SLADAL.DeleteSLADetail(SLAId, LoginDTO); if (detailsResult <= 0) return $"{ErrorResponse.DeleteNotFoundMessage}"; var parentResult = await _SLADAL.DeleteSLA(SLAId, LoginDTO); if (parentResult <= 0) return $"{ErrorResponse.DeleteNotFoundMessage}"; return $"{SuccessResponse.DeleteSuccessMessage}"; } catch (Exception ex) { throw new Exception($"Error While Deleting SLA Id {SLAId}", ex); } } } }