using Complex.Application; using Complex.Application.Common; using Complex.Common.Dto; using Complex.Domain.Entities; using Microsoft.EntityFrameworkCore; namespace Complex.Application.Services.Dashboard { public interface IDashboardService { ResultDto GetManagerSummary(Guid complexId, CommonRequestDto? commonRequest = null); } public class DashboardService : IDashboardService { private readonly IComplexDBContext _complexDBContext; public DashboardService(IComplexDBContext complexDBContext) { _complexDBContext = complexDBContext; } public ResultDto GetManagerSummary(Guid complexId, CommonRequestDto? commonRequest = null) { var units = _complexDBContext.Units.Where(u => u.ComplexId == complexId); var totalUnits = units.Count(); var ownerUnits = units.Count(u => u.OwnerId != null); var tenantUnits = units.Count(u => u.TenantId != null); var today = DateOnly.FromDateTime(DateTime.Now); var activeCostCycles = _complexDBContext.CostCycles .Count(c => c.ComplexId == complexId && c.EndDate >= today); var unitPersonMobileNumbers = units .Where(u => u.OwnerId != null || u.TenantId != null) .Select(u => u.OwnerId) .Union(units.Where(u => u.TenantId != null).Select(u => u.TenantId)) .Distinct() .ToList(); var totalPersons = _complexDBContext.Persons .Count(p => unitPersonMobileNumbers.Contains(p.Id)); var result = new DashboardSummaryDto { TotalUnits = totalUnits, OwnerUnits = ownerUnits, TenantUnits = tenantUnits, ActiveCostCycles = activeCostCycles, TotalPersons = totalPersons }; return new ResultDto { Data = result, IsSuccess = true }; } } public class DashboardSummaryDto { public int TotalUnits { get; set; } public int OwnerUnits { get; set; } public int TenantUnits { get; set; } public int ActiveCostCycles { get; set; } public int TotalPersons { get; set; } } }