using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using FrameworkDAL.CustomCode.Dataset; using FrameworkDAL.DTO.Dataset; 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.Dataset { public class DatasetBLL : IDatasetBLL { private readonly IDatasetDAL _DatasetDAL; private readonly AutoNumber _AutoNumber; private readonly IValidation _Validation; public DatasetBLL(IDatasetDAL DatasetDAL, AutoNumber AutoNumber, IValidation Validation) { _DatasetDAL = DatasetDAL; _AutoNumber = AutoNumber; _Validation = Validation; } public async Task GetDataset(int DatasetId, LoginDTO LoginDTO) { try { return await _DatasetDAL.GetDataset(DatasetId, LoginDTO); } catch (Exception) { throw; } } public async Task SaveDataset(DatasetDTO DatasetDTO, LoginDTO loginDTO) { if (DatasetDTO == null) throw new ArgumentNullException(nameof(DatasetDTO)); AutoNumberDTO? autoNumberDTO = null; try { await _Validation.NotEmpty(DatasetDTO.DatasetCode, nameof(DatasetDTO.DatasetCode)); await _Validation.NotEmpty(DatasetDTO.DatasetName, nameof(DatasetDTO.DatasetName)); DatasetDTO.DatasetModifiedById = loginDTO.UserId; DatasetDTO.DatasetModifiedOn = DateTime.UtcNow; int count = 1; if (DatasetDTO.DatasetId == 0) { autoNumberDTO = await _AutoNumber.GetAutoNumber(count, "DATASET", loginDTO); DatasetDTO.DatasetId = autoNumberDTO.StartNumber; DatasetDTO.DatasetCreatedById = loginDTO.UserId; DatasetDTO.DatasetCreatedOn = DateTime.UtcNow; if (DatasetDTO.DatasetDetailArray != null) { foreach (var child in DatasetDTO.DatasetDetailArray) { child.DatasetDetailId = DatasetDTO.DatasetId++; child.DatasetId = DatasetDTO.DatasetId; } } await _DatasetDAL.SaveDataset(DatasetDTO, loginDTO); return $"Dataset saved successfully with DatasetId {DatasetDTO.DatasetId}."; } else { await _DatasetDAL.UpdateDataset(DatasetDTO, loginDTO); return $"Dataset updated successfully with DatasetId {DatasetDTO.DatasetId}."; } } catch { if (autoNumberDTO != null && DatasetDTO.DatasetId > 0) await _AutoNumber.RollbackAutoNumber("DATASET", DatasetDTO.DatasetId, loginDTO); throw; } } public async Task> DeleteDataset(int DatasetId, LoginDTO LoginDTO) { try { return await _DatasetDAL.DeleteDataset(DatasetId, LoginDTO); } catch (Exception) { throw; } } public async Task GetSelectListDataset(int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { return await _DatasetDAL.GetSelectListDataset(FirstNumber, MaxResult, CriteriaDTO, LoginDTO); } catch (Exception ex) { throw new Exception("Error in GetSelectListDataset", ex); } } } }