93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
using System.Diagnostics.Tracing;
|
|
using MicroORM.Interfaces;
|
|
using MieSystem.Models;
|
|
|
|
namespace MieSystem.Services;
|
|
|
|
public class AsistenciaService
|
|
{
|
|
private readonly IRepository<Asistencia> _repo;
|
|
|
|
public AsistenciaService(IRepository<Asistencia> expe)
|
|
{
|
|
_repo = expe;
|
|
}
|
|
public Task<int> SaveAsync(Asistencia expediente)
|
|
{
|
|
return _repo.SaveAsync(expediente);
|
|
}
|
|
|
|
public Task<Asistencia?> GetByIdAsync(object id)
|
|
{
|
|
return _repo.GetByIdAsync(id);
|
|
}
|
|
|
|
public Task<IEnumerable<Asistencia>> GetAllAsync()
|
|
{
|
|
return _repo.GetAllAsync();
|
|
}
|
|
|
|
public Task<IEnumerable<Asistencia>> GetAsistenciasPorMesAsync(int añoSeleccionado, int mesSeleccionado)
|
|
{
|
|
var sql = @"
|
|
SELECT
|
|
id,
|
|
expediente_id as ExpedienteId,
|
|
fecha,
|
|
estado,
|
|
hora_entrada as HoraEntrada,
|
|
hora_salida as HoraSalida,
|
|
observaciones,
|
|
fecha_registro as FechaRegistro,
|
|
usuario_registro as UsuarioRegistro
|
|
FROM asistencia
|
|
WHERE EXTRACT(YEAR FROM fecha) = @Anio
|
|
AND EXTRACT(MONTH FROM fecha) = @Mes
|
|
ORDER BY fecha, expediente_id";
|
|
|
|
return _repo.QueryAsync<Asistencia>(sql, new {Anio = añoSeleccionado, Mes = mesSeleccionado});
|
|
}
|
|
|
|
public Task<EstadisticasMes?> GetEstadisticasMesAsync(int año, int mes)
|
|
{
|
|
var sql = @"
|
|
SELECT
|
|
COALESCE(COUNT(*), 0) as Total,
|
|
COALESCE(COUNT(CASE WHEN estado = 'P' THEN 1 END), 0) as Presentes,
|
|
COALESCE(COUNT(CASE WHEN estado = 'T' THEN 1 END), 0) as Tardes,
|
|
COALESCE(COUNT(CASE WHEN estado = 'F' THEN 1 END), 0) as Faltas,
|
|
COALESCE(ROUND(
|
|
COUNT(CASE WHEN estado = 'P' THEN 1 END) * 100.0 /
|
|
NULLIF(COUNT(*), 0),
|
|
2
|
|
), 0) as PorcentajePresentes,
|
|
COALESCE(ROUND(
|
|
COUNT(CASE WHEN estado = 'T' THEN 1 END) * 100.0 /
|
|
NULLIF(COUNT(*), 0),
|
|
2
|
|
), 0) as PorcentajeTardes,
|
|
COALESCE(ROUND(
|
|
COUNT(CASE WHEN estado = 'F' THEN 1 END) * 100.0 /
|
|
NULLIF(COUNT(*), 0),
|
|
2
|
|
), 0) as PorcentajeFaltas
|
|
FROM asistencia
|
|
WHERE EXTRACT(YEAR FROM fecha) = @Anio
|
|
AND EXTRACT(MONTH FROM fecha) = @Mes";
|
|
|
|
return _repo.QuerySingleAsync<EstadisticasMes?>(sql, new { Anio = año, Mes = mes });
|
|
}
|
|
public bool GuardarAsistenciasMasivasAsync(List<Asistencia> lst)
|
|
{
|
|
try
|
|
{
|
|
_repo.SaveAsyncList(lst);
|
|
return true;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine(e);
|
|
return true;
|
|
}
|
|
}
|
|
} |