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