feat: implement core domain models, authentication service, and UI components for the attendance system
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user