89 lines
2.9 KiB
C#
89 lines
2.9 KiB
C#
using Microsoft.EntityFrameworkCore;
|
|
using Asistencia.Models;
|
|
|
|
namespace Asistencia.Data.Repositories;
|
|
|
|
public class AsistenciaRepository
|
|
{
|
|
private readonly AppDbContext _context;
|
|
|
|
public AsistenciaRepository(AppDbContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
public async Task<AsistenciaProfesor?> BuscarSesionActivaAsync(int idCursoAbierto, DateTime fecha)
|
|
{
|
|
return await _context.AsistenciasProfesor
|
|
.FirstOrDefaultAsync(a =>
|
|
a.IdCursoAbierto == idCursoAbierto &&
|
|
a.FechaAsistencia.Date == fecha.Date &&
|
|
a.Estado == "Activa");
|
|
}
|
|
|
|
public async Task<AsistenciaProfesor> IniciarSesionAsync(int idCursoAbierto, string rut, DateTime fecha, string horaInicio)
|
|
{
|
|
var sesion = new AsistenciaProfesor
|
|
{
|
|
IdCursoAbierto = idCursoAbierto,
|
|
RutPasaporte = rut,
|
|
FechaAsistencia = fecha,
|
|
HoraInicio = horaInicio,
|
|
Estado = "Activa"
|
|
};
|
|
_context.AsistenciasProfesor.Add(sesion);
|
|
await _context.SaveChangesAsync();
|
|
return sesion;
|
|
}
|
|
|
|
public async Task<bool> FinalizarSesionAsync(int idSesion, string horaFin)
|
|
{
|
|
var sesion = await _context.AsistenciasProfesor.FindAsync(idSesion);
|
|
if (sesion == null) return false;
|
|
|
|
sesion.HoraFin = horaFin;
|
|
sesion.Estado = "Finalizada";
|
|
await _context.SaveChangesAsync();
|
|
return true;
|
|
}
|
|
|
|
public async Task<Dictionary<int, int>> ObtenerAsistenciaAlumnosAsync(int idCursoAbierto, DateTime fecha)
|
|
{
|
|
var alumnos = await _context.DetallesContrato
|
|
.Where(d => d.IdCursoAbierto == idCursoAbierto)
|
|
.ToListAsync();
|
|
|
|
var asistencias = await _context.AsistenciasAlumno
|
|
.Where(a => alumnos.Select(al => al.IdDetalleContrato).Contains(a.IdDetalleContrato)
|
|
&& a.FechaAsistencia.Date == fecha.Date)
|
|
.ToListAsync();
|
|
|
|
return asistencias.ToDictionary(a => a.IdDetalleContrato, a => a.IdTipoAsistencia);
|
|
}
|
|
|
|
public async Task GuardarAsistenciaAlumnoAsync(int idDetalleContrato, DateTime fecha, string hora, int tipoAsistencia)
|
|
{
|
|
var existing = await _context.AsistenciasAlumno
|
|
.FirstOrDefaultAsync(a => a.IdDetalleContrato == idDetalleContrato
|
|
&& a.FechaAsistencia.Date == fecha.Date);
|
|
|
|
if (existing != null)
|
|
{
|
|
existing.IdTipoAsistencia = tipoAsistencia;
|
|
existing.Hora = hora;
|
|
}
|
|
else
|
|
{
|
|
_context.AsistenciasAlumno.Add(new AsistenciaAlumno
|
|
{
|
|
IdDetalleContrato = idDetalleContrato,
|
|
FechaAsistencia = fecha,
|
|
Hora = hora,
|
|
IdTipoAsistencia = tipoAsistencia
|
|
});
|
|
}
|
|
|
|
await _context.SaveChangesAsync();
|
|
}
|
|
}
|