144 lines
4.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|