using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using CostingDAL.CustomCode.ResourceType; using CostingDAL.DTO.ResourceType; 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 CostingBLL.ResourceType { public class ResourceTypeBLL : IResourceTypeBLL { private readonly IResourceTypeDAL _ResourceTypeDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public ResourceTypeBLL(IResourceTypeDAL ResourceTypeDAL, AutoNumber AutoNumber, IValidation Validation) { _ResourceTypeDAL = ResourceTypeDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetSelectListResourceType(CriteriaDTO criteriaDTO, LoginDTO loginDTO) { try { return await _ResourceTypeDAL.GetSelectListResourceType(criteriaDTO, loginDTO); } catch (Exception) { throw; } } public async Task GetResourceType(int ResourceTypeId, LoginDTO LoginDTO) { try { return await _ResourceTypeDAL.GetResourceType( ResourceTypeId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveResourceType(ResourceTypeDTO ResourceTypeDTO, LoginDTO LoginDTO) { if (ResourceTypeDTO == null) throw new ArgumentNullException(nameof(ResourceTypeDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(ResourceTypeDTO.ResourceTypeCode, nameof(ResourceTypeDTO.ResourceTypeCode)); await _Validation.NotEmpty(ResourceTypeDTO.ResourceTypeName, nameof(ResourceTypeDTO.ResourceTypeName)); ResourceTypeDTO.ResourceTypeModifiedById = LoginDTO.UserId; ResourceTypeDTO.ResourceTypeModifiedOn = DateTime.UtcNow; int initialId = ResourceTypeDTO.ResourceTypeId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "RESOURCETYPE", LoginDTO); ResourceTypeDTO.ResourceTypeId = AutoNumberDTO.StartNumber; ResourceTypeDTO.ResourceTypeCreatedById = LoginDTO.UserId; ResourceTypeDTO.ResourceTypeCreatedOn = DateTime.UtcNow; await _ResourceTypeDAL.SaveResourceType(ResourceTypeDTO, LoginDTO); return $"{SuccessResponse.SaveSuccessName} {ResourceTypeDTO.ResourceTypeName}"; } else { await _ResourceTypeDAL.UpdateResourceType(ResourceTypeDTO, LoginDTO); return $"{SuccessResponse.UpdateSuccessName} {ResourceTypeDTO.ResourceTypeName}"; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && ResourceTypeDTO.ResourceTypeId > 0) await _AutoNumber.RollbackAutoNumber("RESOURCETYPE", ResourceTypeDTO.ResourceTypeId, LoginDTO); throw; } } public async Task DeleteResourceType(int ResourceTypeId, LoginDTO LoginDTO) { try { return await _ResourceTypeDAL.DeleteResourceType(ResourceTypeId, LoginDTO); } catch (Exception) { throw; } } } }