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

190 lines
7 KiB
C#

using AutoMapper;
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 DiasAcreditadosPeriodoRepo : IDiasAcreditadosPeriodoRepo
{
private readonly RECHUMAContext _Context;
private readonly IMapper _mapper;
private readonly IDiasAcreditadosPeriodoHistoricoRepo _HistoricoRepo;
public DiasAcreditadosPeriodoRepo(RECHUMAContext Context, IDiasAcreditadosPeriodoHistoricoRepo historicoRepo, IMapper mapper)
{
_Context = Context;
_mapper = mapper;
_HistoricoRepo = historicoRepo;
}
public async Task<IEnumerable<DiasAcreditadosPeriodo>> GetAllDiasAcreditados()
{
try
{
var dias = await _Context.DiasAcreditadosPeriodo.ToListAsync();
return dias;
}
catch (Exception ex)
{
throw;
}
}
public async Task<IEnumerable<DiasAcreditadosPeriodo>> GetAllDiasAcreditadosId(int IdPersona)
{
try
{
var dias = await _Context.DiasAcreditadosPeriodo.Where(d => d.IdFuncionario == IdPersona
&& d.Utilizable == true)
.OrderBy(p => p.Periodo)
.ToListAsync();
return dias;
}
catch (Exception ex)
{
throw;
}
}
public async Task<DiasAcreditadosPeriodo> GetDiasAcreditados(int IdPersona)
{
try
{
var dias = await _Context.DiasAcreditadosPeriodo.FirstOrDefaultAsync(p => p.IdFuncionario == IdPersona && p.Utilizable == true);
return dias;
}
catch (Exception ex)
{
throw ex;
}
}
public async Task PostDiasAcreditados(DiasAcreditadosPeriodo diasAcreditadosPeriodo)
{
try
{
_Context.DiasAcreditadosPeriodo.Add(diasAcreditadosPeriodo);
await _Context.SaveChangesAsync();
}
catch (Exception ex)
{
throw;
}
}
public async Task<int> RebajarDiasAcreditados(int idFuncionario, int diasSolicitados, int idSolicitud)
{
try
{
var DiasAcreditados = await GetAllDiasAcreditadosId(idFuncionario);
int aux = 0;
int diasRestar = 0;
foreach (var itm in DiasAcreditados)
{
if (diasSolicitados != 0)
{
if (itm.DiasAcreditados < diasSolicitados)
{
aux = diasSolicitados - itm.DiasAcreditados.Value;
diasRestar = diasSolicitados - aux;
itm.DiasAcreditados = (short?)(itm.DiasAcreditados - diasRestar);
itm.DiasUtilizados = (short?)(itm.DiasUtilizados + diasRestar);
itm.Utilizable = false;
diasSolicitados = aux;
var data = new DiasAcreditadosPeriodoHistoricoDto
{
IdSolicitud = idSolicitud,
IdFuncionario = itm.IdFuncionario,
Periodo = itm.Periodo,
DiasSolicitados = (short)diasRestar
};
var historico = _mapper.Map<DiasAcreditadosPeriodoHistorico>(data);
await _HistoricoRepo.PostPeridoHistorico(historico);
}
else
{
itm.DiasAcreditados = (short?)(itm.DiasAcreditados - diasSolicitados);
itm.DiasUtilizados = (short?)(itm.DiasUtilizados + diasSolicitados);
itm.Utilizable = itm.DiasAcreditados.Value > 0;
var data = new DiasAcreditadosPeriodoHistoricoDto
{
IdSolicitud = idSolicitud,
IdFuncionario = itm.IdFuncionario,
Periodo = itm.Periodo,
DiasSolicitados = (short)itm.DiasUtilizados
};
var historico = _mapper.Map<DiasAcreditadosPeriodoHistorico>(data);
await _HistoricoRepo.PostPeridoHistorico(historico);
diasSolicitados = 0;
}
}
}
return await _Context.SaveChangesAsync();
}
catch (Exception)
{
throw;
}
}
public async Task<int> ReintegrarDiasAcreditados(int idFuncionario, int idSolicitud)
{
try
{
var DiasAcreditadosHistorico = await _HistoricoRepo.ObtenerPeriodoHistorico(/*idFuncionario,*/ idSolicitud);
var DiasAcreditados = await _Context.DiasAcreditadosPeriodo.Where(d => d.IdFuncionario == idFuncionario)
.OrderBy(p => p.Periodo)
.ToListAsync();
//int aux = 0;
//int diasSumar = 0;
foreach (var diasHistorico in DiasAcreditadosHistorico)
{
foreach (var diasAcreditados in DiasAcreditados)
{
if (idFuncionario != 0 && idSolicitud != 0)
{
if (diasHistorico.Periodo == diasAcreditados.Periodo)
{
//aux = (int)(diasAcreditados.DiasAcreditados + diasHistorico.DiasSolicitados);
diasAcreditados.DiasAcreditados = (short?)(diasAcreditados.DiasAcreditados + diasHistorico.DiasSolictados);
diasAcreditados.DiasUtilizados = (short?)(diasAcreditados.DiasUtilizados - diasHistorico.DiasSolictados);
diasAcreditados.Utilizable = true;
}
}
}
}
return await _Context.SaveChangesAsync();
}
catch (Exception)
{
throw;
}
}
}
}