71 lines
2.3 KiB
C#
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; }
|
|
}
|
|
}
|