using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using FMBLL.AssetTypeActivity; using FMDAL.CustomCode.AssetType; using FMDAL.DTO.AssetType; using FMDAL.DTO.AssetTypeActivity; using GB5Shared.DTO.Framework.AutoNumber; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.GenerateAutoNumber; using GB5Shared.ResponseStandard; namespace FMBLL.AssetType { public class AssetTypeBLL : IAssetTypeBLL { private readonly IAssetTypeDAL _AssetTypeDAL; private readonly AutoNumber _AutoNumber; private readonly IAssetTypeActivityBLL _AssetTypeActivityBLL; public AssetTypeBLL(IAssetTypeDAL AssetTypeDAL, AutoNumber AutoNumber, IAssetTypeActivityBLL AssetTypeActivityBLL) { _AssetTypeDAL = AssetTypeDAL; _AutoNumber = AutoNumber; _AssetTypeActivityBLL = AssetTypeActivityBLL; } public async Task> GetAssetType(int AssetTypeId, LoginDTO LoginDTO, CancellationToken ct = default) { try { var result = (await _AssetTypeDAL.GetAssetType(AssetTypeId, LoginDTO)).ToList(); foreach (var assetType in result) { var activities = await _AssetTypeActivityBLL.GetAssetTypeActivityListByAssetType(assetType.AssetTypeId, LoginDTO, ct).ConfigureAwait(false); assetType.AssetTypeActivityArray = activities.ToList(); } return result; } catch (Exception) { throw; } } public async Task SaveAssetType(AssetTypeDTO AssetTypeDTO, LoginDTO LoginDTO, CancellationToken ct = default) { try { AssetTypeDTO.TenantId = LoginDTO.ClientId; int initialId = AssetTypeDTO.AssetTypeId; int count = 1 + initialId; string message; if (initialId == 0) { AutoNumberDTO AutoNumberDTO = await _AutoNumber.GetNumberAsync(count, "ASSETTYPE", LoginDTO); AssetTypeDTO.AssetTypeId = AutoNumberDTO.StartNumber; await _AssetTypeDAL.SaveAssetType(AssetTypeDTO, LoginDTO); message = "Details saved successfully."; } else { await _AssetTypeDAL.UpdateAssetType(AssetTypeDTO, LoginDTO); message = "Details updated successfully."; var existingActivities = await _AssetTypeActivityBLL.GetAssetTypeActivityListByAssetType(AssetTypeDTO.AssetTypeId, LoginDTO, ct).ConfigureAwait(false); var incomingIds = (AssetTypeDTO.AssetTypeActivityArray ?? new List()) .Select(a => a.AssetTypeActivityId) .Where(id => id != 0) .ToHashSet(); foreach (var existing in existingActivities) { if (!incomingIds.Contains(existing.AssetTypeActivityId)) { await _AssetTypeActivityBLL.DeleteAssetTypeActivity(existing.AssetTypeActivityId, LoginDTO, ct).ConfigureAwait(false); } } } foreach (var activity in AssetTypeDTO.AssetTypeActivityArray ?? new List()) { activity.AssetTypeId = AssetTypeDTO.AssetTypeId; await _AssetTypeActivityBLL.SaveAssetTypeActivity(activity, LoginDTO, ct).ConfigureAwait(false); } return message; } catch (Exception) { throw; } } public async Task GetSelectListAssetType(CriteriaDTO criteriaDTO, LoginDTO LoginDTO) { try { return await _AssetTypeDAL.GetSelectListAssetType(criteriaDTO, LoginDTO); } catch (Exception) { throw; } } public async Task> DeleteAssetType(int AssetTypeId, LoginDTO LoginDTO) { try { return await _AssetTypeDAL.DeleteAssetType(AssetTypeId, LoginDTO); } catch (Exception) { throw; } } } }