using System.Diagnostics.Tracing; using MicroORM.Interfaces; using MieSystem.Models; namespace MieSystem.Services; public class AsistenciaService { private readonly IRepository _repo; public AsistenciaService(IRepository expe) { _repo = expe; } public Task SaveAsync(Asistencia expediente) { return _repo.SaveAsync(expediente); } public Task GetByIdAsync(object id) { return _repo.GetByIdAsync(id); } public Task> GetAllAsync() { return _repo.GetAllAsync(); } public Task> 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(sql, new {Anio = añoSeleccionado, Mes = mesSeleccionado}); } public Task 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(sql, new { Anio = año, Mes = mes }); } public bool GuardarAsistenciasMasivasAsync(List lst) { try { _repo.SaveAsyncList(lst); return true; } catch (Exception e) { Console.WriteLine(e); return true; } } }