using FrameworkDAL.CustomCode.ServiceRequestType; using FrameworkDAL.DTO.GBPeriod; using FrameworkDAL.DTO.ServiceRequestType; 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 Microsoft.Extensions.Logging; using System; using System.ComponentModel.DataAnnotations; using System.Text.Json; using System.Threading.Tasks; namespace FrameworkBLL.ServiceRequestType { public class ServiceRequestTypeBLL : IServiceRequestTypeBLL { private readonly IServiceRequestTypeDAL _ServiceRequestTypeDAL; private readonly IValidation _Validation; private readonly AutoNumber _AutoNumber; private readonly ILogger logger; public ServiceRequestTypeBLL(IServiceRequestTypeDAL ServiceRequestTypeDAL, IValidation Validation, AutoNumber AutoNumber , ILogger Logger) { _ServiceRequestTypeDAL = ServiceRequestTypeDAL; _Validation = Validation; _AutoNumber = AutoNumber; logger = Logger; } public async Task GetServiceRequestType(int ServiceRequestTypeId, LoginDTO LoginDTO) { try { return await _ServiceRequestTypeDAL.GetServiceRequestType(ServiceRequestTypeId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveServiceRequestType(ServiceRequestTypeDTO ServiceRequestTypeDTO, LoginDTO LoginDTO) { if (ServiceRequestTypeDTO == null) throw new ArgumentNullException(nameof(ServiceRequestTypeDTO)); //AutoNumberDTO? autoNumberDTO = null; try { logger.LogInformation( "SaveServiceRequestType called with ServiceRequestTypeDTO: {@ServiceRequestTypeDTO}, LoginDTO: {@LoginDTO}", ServiceRequestTypeDTO, LoginDTO ); await _Validation.NotEmpty(ServiceRequestTypeDTO.ServiceRequestTypeCode, nameof(ServiceRequestTypeDTO.ServiceRequestTypeCode)); await _Validation.NotEmpty(ServiceRequestTypeDTO.ServiceRequestTypeName, nameof(ServiceRequestTypeDTO.ServiceRequestTypeName)); // Template JSON handling //if (ServiceRequestTypeDTO.Template is JsonElement templateJson) //{ // ServiceRequestTypeDTO.Template = templateJson.ValueKind == JsonValueKind.Null // ? null! // : templateJson.ToString(); //} ServiceRequestTypeDTO.ModifiedById = LoginDTO.UserId; ServiceRequestTypeDTO.ModifiedOn = DateTime.UtcNow; if (ServiceRequestTypeDTO.ServiceRequestTypeId == 0) { // Auto Number Generate //autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "SERVICEREQUESTTYPE", LoginDTO); //serviceRequestTypeDTO.ServiceRequestTypeId = autoNumberDTO.StartNumber; ServiceRequestTypeDTO.CreatedById = LoginDTO.UserId; ServiceRequestTypeDTO.CreatedOn = DateTime.UtcNow; await _ServiceRequestTypeDAL.SaveServiceRequestType(ServiceRequestTypeDTO, LoginDTO); return "Details have been saved successfully"; } else { await _ServiceRequestTypeDAL.UpdateServiceRequestType(ServiceRequestTypeDTO, LoginDTO); return "Details have been updated successfully"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { //if (autoNumberDTO != null && serviceRequestTypeDTO.ServiceRequestTypeId > 0) //await _AutoNumber.RollbackAutoNumber("ServiceRequestType", serviceRequestTypeDTO.ServiceRequestTypeId, LoginDTO); throw; } } public async Task DeleteServiceRequestType(int ServiceRequestTypeId, LoginDTO LoginDTO) { try { return await _ServiceRequestTypeDAL.DeleteServiceRequestType(ServiceRequestTypeId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListServiceRequestType(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _ServiceRequestTypeDAL.GetSelectionListServiceRequestType(CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } } }