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