using DMSDAL.CustomCode.Space; using DMSDAL.DTO.Space; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DMSBLL.Space { public class SpaceBLL : ISpaceBLL { private readonly ISpaceDAL _SpaceDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public SpaceBLL(ISpaceDAL SpaceDAL, AutoNumber AutoNumber, IValidation Validation) { _SpaceDAL = SpaceDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetSpace(int SpaceId, LoginDTO LoginDTO) { try { return await _SpaceDAL.GetSpace(SpaceId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveSpace(SpaceDTO SpaceDTO, LoginDTO LoginDTO) { if (SpaceDTO == null) throw new ArgumentNullException(nameof(SpaceDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(SpaceDTO.SpaceName, nameof(SpaceDTO.SpaceName)); SpaceDTO.ModifiedById = LoginDTO.UserId; SpaceDTO.ModifiedOn = DateTime.UtcNow; int initialId = (int)SpaceDTO.SpaceId; int count = 1 + initialId; if (initialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "SPACE", LoginDTO); SpaceDTO.SpaceId = AutoNumberDTO.StartNumber; SpaceDTO.CreatedById = LoginDTO.UserId; SpaceDTO.CreatedOn = DateTime.UtcNow; await _SpaceDAL.SaveSpace(SpaceDTO, LoginDTO); return "Details have been saved successfully."; } else { await _SpaceDAL.UpdateSpace(SpaceDTO, LoginDTO); return "Details have been updated successfully."; } } catch (ValidationException vex) { throw new Exception(vex.Message); } catch (Exception) { if (autoNumberDTO != null && SpaceDTO.SpaceId > 0) await _AutoNumber.RollbackAutoNumber("SPACE", (int)SpaceDTO.SpaceId, LoginDTO); throw; } } public async Task GetSelectListSpace(int FirstNumber, int MaxResult, CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _SpaceDAL.GetSelectListSpace(FirstNumber, MaxResult, criteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task DeleteSpace(int SpaceId, LoginDTO LoginDTO) { try { return await _SpaceDAL.DeleteSpace(SpaceId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSpaceList(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _SpaceDAL.GetSpaceList(CriteriaDTO, LoginDTO); } catch (Exception) { throw; } } } }