Files
Antifraude.Net/Antifraude.Net/bdAntifraudeMYSQL/Utilidades.cs

318 lines
20 KiB
C#

using Microsoft.EntityFrameworkCore;
using bdAntifraudeMYSQL.clases;
using bdAntifraudeMYSQL.db;
namespace bdAntifraudeMYSQL;
public enum NivelLogs
{
SIN_LOGS,
TODOS_LOGS,
MODIFICACIONES_Y_ELIMINACIONES
}
public static class Utilidades
{
public static List<PuestoPersona> ObtienePuestoPersona(bdAntifraudeMYSQL.dbcontext.antifraudeContext bd, int idPersona)
{
List<TIPOS_PERSONAL> listaTP = bd.TIPOS_PERSONAL.ToList();
List<PuestoPersona> puestosnuevos = new List<PuestoPersona>();
try
{
List<VIDA_ADMINISTRATIVA> listaVA = bd.VIDA_ADMINISTRATIVA.Where(x => x.IDPERSONAL == idPersona && x.IDMOTIVO != null)
.Include(v => v.IDMOTIVONavigation)
.ThenInclude(r => r.IDTIPOAPTOSNavigation)
.Include(v => v.NIVEL_OLDNavigation)
.Include(v => v.NIVELCNavigation)
.Include(v => v.GRUPOTNavigation)
.Include(v => v.OCUPACION_OLDNavigation)
.Include(v => v.IDPERSONALNavigation)
.Include(v => v.IDPUESTONavigation)
.ThenInclude(i => i.IDRPTDESNavigation)
.ThenInclude(r => r.IDDEPARTAMENTONavigation)
.Include(i => i.GRUPOTNavigation)
.Include(v => v.IDPUESTONavigation)
.ThenInclude(n => n.IDRPTDESNavigation)
.ThenInclude(gr => gr.GRUPO1Navigation)
.Include(v => v.IDPUESTONavigation)
.ThenInclude(n => n.IDRPTDESNavigation)
.ThenInclude(grr => grr.GRUPO2Navigation)
.Include(v => v.IDPUESTONavigation)
.ThenInclude(n => n.IDRPTDESNavigation)
.ThenInclude(nv => nv.IDNIVEL_RPTNavigation)
.OrderBy(x => x.FECHA).ThenBy(x => x.NUM_REG)
.AsNoTracking().ToList();
//.Include(v => v.IDSERVICIOADSCRITONavigation)
//.Include(v => v.IDUNIDADADMINISTRATIVANavigation)
if (listaVA.Count > 0)
{
List<VIDA_ADMINISTRATIVA> ToPoyCese = listaVA
.Where(x => x.MotivoTipo.Contains("TOMA POSESIÓN") ||
x.MotivoTipo.Contains("TOMA POSESION") ||
x.MotivoTipo.Contains("CESE") ||
x.MotivoTipo.Contains("BAJA")).ToList();
if (ToPoyCese.Count > 0)
{
int NumActo = ToPoyCese.Count;
for (int np = 0, loopTo = NumActo - 1; np <= loopTo; np += 2)
{
PuestoPersona pues = new PuestoPersona();
puestosnuevos.Add(pues);
VIDA_ADMINISTRATIVA vidaAdmin = ToPoyCese[np];
if (vidaAdmin?.IDMOTIVONavigation?.DESCRIPCION == "ACTIVO")
{
np = np + 1;
vidaAdmin = ToPoyCese[np];
}
//pues.Puesto = vidaAdmin.DENOMINACION_OLD;
pues.Puesto = vidaAdmin.IDPUESTONavigation.DESPUESCOM;
if (vidaAdmin?.IDPUESTO != null)
{
pues.Puesto = pues.Puesto + "*";
}
//pues.Nivel = vidaAdmin.DescripcionNivel;
pues.Nivel = vidaAdmin.IDPUESTONavigation.IDRPTDESNavigation.IDNIVEL_RPTNavigation.NIVEL1;
pues.Adscripcion = vidaAdmin.DescripcionAdscripcion(listaTP);
//pues.servicioAdscrito = vidaAdmin.IDSERVICIOADSCRITO != null ? bd.SERVICIOS.First(x => x.IDSERVICIO == vidaAdmin.IDSERVICIOADSCRITONavigation.IDSERVICIO).DESCRIPCION : "";
//pues.unidadAdministrativa = vidaAdmin.IDUNIDADADMINISTRATIVA != null ? bd.UNIDADADMINISTRATIVA.First(y => y.IDUNIDADADMINISTRATIVA == vidaAdmin.IDUNIDADADMINISTRATIVANavigation.IDUNIDADADMINISTRATIVA).LITERAL_DEPARTAMENTO : "";
pues.Grupo = vidaAdmin.IDPUESTONavigation.IDRPTDESNavigation.GRUPO1Navigation?.GRUPO1; //vidaAdmin.DescripcionGrupo1;
if (vidaAdmin.IDPUESTONavigation.IDRPTDESNavigation.GRUPO2Navigation?.GRUPO1 != null)
{
pues.Grupo = pues.Grupo.Trim() + "/" + vidaAdmin.IDPUESTONavigation.IDRPTDESNavigation.GRUPO2Navigation.GRUPO1;
}
if (pues.Grupo.Trim() == "")
{
pues.Grupo = vidaAdmin.GRUPOTNavigation.GRUPO1;
}
if (pues.Adscripcion.Trim() == "")
{
if ("|I|II|III|IV|V|".Trim().Contains("|" + pues.Grupo.Trim() + "|"))
{
pues.Adscripcion = "Laboral temporal";
}
else
{
pues.Adscripcion = "Funcionario";
}
}
if (vidaAdmin.FECHA.HasValue)
{
pues.FechaToPo = (DateTime)vidaAdmin.FECHA;
}
pues.MotivoToPo = vidaAdmin.IDMOTIVONavigation.DESCRIPCION;
if (vidaAdmin.OCUPACION_OLD != null)
{
pues.CaracterOcu = vidaAdmin.OCUPACION_OLDNavigation.DESCRIPCION;
}
Anos_Meses_Dias TiemSer = new Anos_Meses_Dias();
if (np + 2 <= NumActo)
{
VIDA_ADMINISTRATIVA vidaAdmin2 = ToPoyCese[np + 1];
if (!vidaAdmin2.IDMOTIVONavigation.TIPMOT.Trim().Contains("CESE") && vidaAdmin2.IDMOTIVONavigation.TIPMOT.Trim().Contains("BAJA"))
{
if (vidaAdmin2.FECHA > vidaAdmin.FECHA)
{
string motDes = vidaAdmin2.IDMOTIVONavigation.DESCRIPCION;
if (motDes == "ACTIVO" || motDes == "NOMBRAMIENTO" || motDes.Contains("REINGRESO PLAZA") || motDes.Contains("SERVICIOS ESPECIALES") || motDes.Contains("EXCEDENCIA"))
{
pues.FechaCese = (DateTime)vidaAdmin2.FECHA;
pues.MotivoCese = vidaAdmin2.IDMOTIVONavigation.DESCRIPCION;
if (motDes.Contains("REINGRESO PLAZA") || motDes.Contains("ACTIVO") || motDes.Contains("SERVICIOS ESPECIALES"))
{
for (int npn = np - 1; npn >= 0; npn -= 1)
{
if (ToPoyCese[npn].IDMOTIVONavigation.DESCRIPCION != "SERVICIOS ESPECIALES")
{
pues.MotivoCese = ToPoyCese[npn].IDMOTIVONavigation.DESCRIPCION;
pues.Puesto = "********";
pues.Nivel = "***";
pues.Grupo = "***";
pues.Adscripcion = "***";
if ((npn + 2) <= (NumActo - 1) && ToPoyCese[npn + 2].FECHA == pues.FechaCese)
{
pues.FechaCese = pues.FechaCese.AddDays(-1);
}
npn = 0;
PuestoPersona ppll = puestosnuevos[puestosnuevos.Count - 2];
if (ppll.FechaCese == pues.FechaToPo && ppll.MotivoCese != "CAMBIO DE SITUACIÓN ADMINISTRATIVA (CON RESERVA DE PUESTO)" && ppll.MotivoCese != "SERVICIOS ESPECIALES")
{
pues.FechaToPo = pues.FechaToPo.AddDays(+1);
}
}
}
}
}
else
{
pues.FechaCese = vidaAdmin2.FECHA.Value.AddDays(-1);
pues.MotivoCese = "SUPUESTO CESE NO EXISTE EN VIDAADMINISTRATIVA";
}
}
else
{
if (vidaAdmin2.FECHA.HasValue)
{
pues.FechaCese = vidaAdmin2.FECHA.Value;
}
pues.MotivoCese = vidaAdmin2.IDMOTIVONavigation?.DESCRIPCION;
}
PuestoPersona ppl = puestosnuevos[puestosnuevos.Count - 2];
if (puestosnuevos.Count - 2 >= 0 && ppl.FechaCese == pues.FechaToPo)
{
if (pues.MotivoToPo == "SERVICIOS ESPECIALES" && !(ppl.FechaCese == pues.FechaToPo && ppl.FechaToPo == pues.FechaToPo))
{
pues.FechaToPo = pues.FechaToPo.AddDays(+1);
pues.Puesto = "********";
pues.Nivel = "***";
pues.Grupo = "***";
pues.Adscripcion = "***";
}
}
TiemSer = AnosMesesDias(pues.FechaToPo, pues.FechaCese);
pues.AnosSer = TiemSer.Anos;
pues.MesesSer = TiemSer.Meses;
pues.DiasSer = TiemSer.Dias;
}
else
{
pues.FechaCese = (DateTime)vidaAdmin2.FECHA;
pues.MotivoCese = vidaAdmin2.IDMOTIVONavigation.DESCRIPCION;
if (pues.FechaToPo == pues.FechaCese && pues.MotivoCese.Contains("COMISIÓN DE SERVICIOS") && np + 2 <= NumActo)
{
pues.MotivoToPo = vidaAdmin2.IDMOTIVONavigation.DESCRIPCION;
pues.MotivoCese = ToPoyCese[np + 2].IDMOTIVONavigation.DESCRIPCION;
pues.FechaCese = ToPoyCese[np + 2].FECHA.Value.AddDays(-1);
pues.Puesto = "********";
pues.Nivel = "***";
pues.Grupo = "***";
pues.Adscripcion = "***";
}
if (((np + 2) < (NumActo - 1)) && pues.FechaCese == ToPoyCese[np + 2].FECHA && pues.FechaToPo != pues.FechaCese && ToPoyCese[np + 2].IDMOTIVONavigation.DESCRIPCION != "SERVICIOS ESPECIALES")
{
pues.FechaCese = pues.FechaCese.AddDays(-1);
}
if (puestosnuevos.Count >= 2 && pues.FechaToPo == puestosnuevos[puestosnuevos.Count - 2].FechaCese)
{
var puestoant = puestosnuevos[puestosnuevos.Count - 2];
if (pues.MotivoToPo == "NOMBRAMIENTO")
{
puestoant.FechaCese = puestoant.FechaCese.AddDays(-1);
TiemSer = AnosMesesDias(puestoant.FechaToPo, puestoant.FechaCese);
puestoant.AnosSer = TiemSer.Anos;
puestoant.MesesSer = TiemSer.Meses;
puestoant.DiasSer = TiemSer.Dias;
}
if (pues.MotivoToPo == "SERVICIOS ESPECIALES")
{
pues.FechaToPo = pues.FechaToPo.AddDays(1);
}
}
TiemSer = AnosMesesDias(pues.FechaToPo, pues.FechaCese);
pues.AnosSer = TiemSer.Anos;
pues.MesesSer = TiemSer.Meses;
pues.DiasSer = TiemSer.Dias;
if (pues.MotivoToPo == "SERVICIOS ESPECIALES" && (pues.MotivoCese == "REVOCACIÓN O CESE" || pues.MotivoCese == "CAMBIO DE SITUACIÓN ADMINISTRATIVA (CON RESERVA DE PUESTO)"))
{
pues.Puesto = "********";
pues.Nivel = "***";
pues.Grupo = "***";
pues.Adscripcion = "***";
}
}
}
else
{
TiemSer = AnosMesesDias(pues.FechaToPo, DateTime.Now);
pues.AnosSer = TiemSer.Anos;
pues.MesesSer = TiemSer.Meses;
pues.DiasSer = TiemSer.Dias;
if (pues.MotivoToPo.Contains("SERVICIOS ESPECIALES") && pues.MotivoCese == null)
{
pues.Puesto = "********";
pues.Nivel = "***";
pues.Grupo = "***";
pues.Adscripcion = "***";
}
np = NumActo;
}
if ((np + 2) <= (NumActo - 1) && ToPoyCese[np + 2].FECHA.Value.Subtract(pues.FechaCese).Days > 1 && ToPoyCese[np + 2].IDMOTIVONavigation.DESCRIPCION == "SERVICIOS ESPECIALES")
{
var puesnue = new PuestoPersona();
puestosnuevos.Add(puesnue);
puesnue.MotivoToPo = pues.MotivoCese;
puesnue.MotivoCese = pues.MotivoCese;
puesnue.FechaToPo = pues.FechaCese.AddDays(1);
puesnue.FechaCese = ToPoyCese[np + 2].FECHA.Value.AddDays(-1);
puesnue.Puesto = "********";
puesnue.Nivel = "***";
puesnue.Grupo = "***";
puesnue.Adscripcion = "***";
TiemSer = AnosMesesDias(puesnue.FechaToPo, puesnue.FechaCese);
puesnue.AnosSer = TiemSer.Anos;
puesnue.MesesSer = TiemSer.Meses;
puesnue.DiasSer = TiemSer.Dias;
}
if ((np + 2) <= (NumActo - 1) && ToPoyCese[np + 2].FECHA == pues.FechaCese && ToPoyCese[np + 2].IDMOTIVONavigation.DESCRIPCION != "SERVICIOS ESPECIALES" && ToPoyCese[np + 2].IDMOTIVONavigation.DESCRIPCION != "ACTIVO" && pues.FechaToPo != pues.FechaCese)
{
pues.FechaCese = pues.FechaCese.AddDays(-1);
TiemSer = AnosMesesDias(pues.FechaToPo, pues.FechaCese);
pues.AnosSer = TiemSer.Anos;
pues.MesesSer = TiemSer.Meses;
pues.DiasSer = TiemSer.Dias;
}
}
}
}
}
catch (Exception ex)
{
var a = 1;
}
return puestosnuevos.OrderByDescending(x => x.FechaToPo).ToList();
}
public static Anos_Meses_Dias AnosMesesDias(DateTime fechaInicio, DateTime fechaFin)
{
//DateTime fechaFinAjustada = (fechaFin.Date == DateTime.Today)
// ? fechaFin.AddDays(1)
// : fechaFin;
if (fechaFin < fechaInicio)
throw new ArgumentException("La fecha final debe ser mayor o igual que la fecha de inicio.");
int anos = fechaFin.Year - fechaInicio.Year;
int meses = fechaFin.Month - fechaInicio.Month;
int dias = fechaFin.Day - fechaInicio.Day;
// Ajustar cuando la diferencia en días es negativa (no se completó el mes)
if (dias < 0)
{
meses--;
int diasMesAnterior = DateTime.DaysInMonth(
fechaFin.Month == 1 ? fechaFin.Year - 1 : fechaFin.Year,
fechaFin.Month == 1 ? 12 : fechaFin.Month - 1);
dias += diasMesAnterior;
}
// Ajustar cuando la diferencia en meses es negativa (no se completó el año)
if (meses < 0)
{
anos--;
meses += 12;
}
return new Anos_Meses_Dias { Anos = anos, Meses = meses, Dias = dias };
}
}