TFS_ANTIGUO/TPAtesa_RecHuma/REC-HUMA.INFRASTRUCTURE/Repositories/SolicitudVacacionesRepo.cs
2026-06-26 10:14:39 -06:00

144 lines
4.8 KiB
C#

using Microsoft.EntityFrameworkCore;
using REC_HUMA.CORE.DTOs;
using REC_HUMA.CORE.Entities;
using REC_HUMA.CORE.Interfaces;
using REC_HUMA.INFRASTRUCTURE;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace REC_HUMA.INFRASTRUCTURE.Repositories
{
public class SolicitudVacacionesRepo : ISolicitudVacacionesRepo
{
private readonly RECHUMAContext _Context;
private readonly IDiasAcreditadosPeriodoRepo _diasAcreditadosPeriodoRepo;
public SolicitudVacacionesRepo(RECHUMAContext Context, IDiasAcreditadosPeriodoRepo diasAcreditadosPeriodoRepo)
{
_Context = Context;
_diasAcreditadosPeriodoRepo = diasAcreditadosPeriodoRepo;
}
public async Task<IEnumerable<SolicitudVacaciones>> GetSolicitudes()
{
try
{
var solicitudes = await _Context.SolicitudVacaciones.Where(s => s.EstadoSolicitud == 3).AsNoTracking().ToListAsync();
return solicitudes;
}
catch (Exception ex)
{
throw;
}
}
public async Task<IEnumerable<SolicitudVacaciones>> GetSolicitudesId(int IdPersona)
{
try
{
var solicitudes = await _Context.SolicitudVacaciones.Where(s => s.IdPersona == IdPersona).AsNoTracking().ToListAsync();
return solicitudes;
}
catch (Exception ex)
{
throw;
}
}
public async Task<SolicitudVacaciones> GetSolicitud(int IdSolicitud, int IdPersona)
{
try
{
var solicitud = await _Context.SolicitudVacaciones.OrderByDescending(s => s.IdSolicitud).FirstOrDefaultAsync(s => s.IdSolicitud == IdSolicitud && s.IdPersona == IdPersona && s.EstadoSolicitud == 3);
return solicitud;
}
catch (Exception ex)
{
throw;
}
}
public async Task PostSolicitud(SolicitudVacaciones solicitudVacaciones)
{
try
{
_Context.SolicitudVacaciones.Add(solicitudVacaciones);
await _Context.SaveChangesAsync();
await _diasAcreditadosPeriodoRepo.RebajarDiasAcreditados(solicitudVacaciones.IdPersona, (int)solicitudVacaciones.DiasSolicitados, solicitudVacaciones.IdSolicitud);
}
catch (Exception ex)
{
throw;
}
}
public async Task<bool> AprobarSolicitud(SolicitudVacaciones solicitudVacaciones)
{
try
{
var solicitudActual = await GetSolicitud(solicitudVacaciones.IdSolicitud, solicitudVacaciones.IdPersona);
solicitudActual.EstadoSolicitud = 1;
solicitudActual.FechaAprobacion = DateTime.Now;
solicitudActual.AprobadoPor = solicitudVacaciones.AprobadoPor;
solicitudActual.Comentarios = solicitudVacaciones.Comentarios;
int rows = await _Context.SaveChangesAsync();
return rows > 0;
}
catch (Exception ex)
{
throw;
}
}
public async Task<bool> AnularSolicitud(SolicitudVacaciones solicitudVacaciones)
{
try
{
var solicitudActual = await GetSolicitud(solicitudVacaciones.IdSolicitud, solicitudVacaciones.IdPersona);
solicitudActual.EstadoSolicitud = 4;
solicitudActual.FechaAnulacion = DateTime.Now;
solicitudActual.AnuladoPor = solicitudVacaciones.AnuladoPor;
solicitudActual.Comentarios = solicitudVacaciones.Comentarios;
int rows = await _Context.SaveChangesAsync();
await _diasAcreditadosPeriodoRepo.ReintegrarDiasAcreditados(solicitudActual.IdPersona, solicitudActual.IdSolicitud);
return rows > 0;
}
catch (Exception ex)
{
throw;
}
}
public async Task<bool> DenegarSolicitud(SolicitudVacaciones solicitudVacaciones)
{
var solicitudActual = await GetSolicitud(solicitudVacaciones.IdSolicitud, solicitudVacaciones.IdPersona);
solicitudActual.EstadoSolicitud = 2;
solicitudActual.FechaDenegado = DateTime.Now;
solicitudActual.DenegadoPor = solicitudVacaciones.DenegadoPor;
solicitudActual.Comentarios = solicitudVacaciones.Comentarios;
int rows = await _Context.SaveChangesAsync();
await _diasAcreditadosPeriodoRepo.ReintegrarDiasAcreditados(solicitudActual.IdPersona, solicitudActual.IdSolicitud);
return rows > 0;
}
}
}