Files
Complex/Complex.Application/Services/DashboardService.cs

71 lines
2.3 KiB
C#

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<DashboardSummaryDto> GetManagerSummary(Guid complexId, CommonRequestDto? commonRequest = null);
}
public class DashboardService : IDashboardService
{
private readonly IComplexDBContext _complexDBContext;
public DashboardService(IComplexDBContext complexDBContext)
{
_complexDBContext = complexDBContext;
}
public ResultDto<DashboardSummaryDto> 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<DashboardSummaryDto>
{
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; }
}
}