public ActionResult DeleteConfirmed(int id) { VacacionesEmpleado vacacionesEmpleado = db.VacacionesEmpleados.Find(id); db.VacacionesEmpleados.Remove(vacacionesEmpleado); db.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Edit([Bind(Include = "Id,IdEmpleado,FechaDesde,FechaHasta,CorrespondienteAño,ComentarioVacacion")] VacacionesEmpleado vacacionesEmpleado) { if (ModelState.IsValid) { db.Entry(vacacionesEmpleado).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.IdEmpleado = new SelectList(db.MantenimientoEmpleados, "Id", "CodigoEmpleado", vacacionesEmpleado.IdEmpleado); return(View(vacacionesEmpleado)); }
// GET: VacacionesEmpleadoes/Details/5 public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } VacacionesEmpleado vacacionesEmpleado = db.VacacionesEmpleados.Find(id); if (vacacionesEmpleado == null) { return(HttpNotFound()); } return(View(vacacionesEmpleado)); }
// GET: VacacionesEmpleadoes/Edit/5 public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } VacacionesEmpleado vacacionesEmpleado = db.VacacionesEmpleados.Find(id); if (vacacionesEmpleado == null) { return(HttpNotFound()); } ViewBag.IdEmpleado = new SelectList(db.MantenimientoEmpleados, "Id", "CodigoEmpleado", vacacionesEmpleado.IdEmpleado); return(View(vacacionesEmpleado)); }
/// <summary> /// Calcula y [crea o edita(en caso de ya existir registro) en VacacionesEmpleado] las vacaciones del IdEmpleado ingresado /// </summary> /// <param name="idEmpleado"></param> /// <returns></returns> public async Task CalcularYRegistrarVacacionesPorEmpleado(int idEmpleado) { // ********* Creación de varibles para usar en los posteriores cálculos ************************ //---------------------------------------------------------------------------------------------- // ** obtiene el registro de vacaciones o null si no existe var registroVacaciones = await db.VacacionesEmpleado .Where(w => w.PeriodoFiscal == DateTime.Now.Year && w.IdEmpleado == idEmpleado ) .FirstOrDefaultAsync(); // ** Variable para guardar el total de vacaciones int totalDiasVacacionesEstePeriodoFiscal = 0; // ** Historial de registros en IOMP por empleado var listaRegistrosIOMP = await db.IndiceOcupacionalModalidadPartida .Include(i => i.TipoNombramiento) .Include(i => i.TipoNombramiento.RelacionLaboral) .Include(i => i.TipoNombramiento.RelacionLaboral.RegimenLaboral) .Where(w => w.IdEmpleado == idEmpleado) .OrderBy(o => o.Fecha) .ToListAsync(); // obtener registros IOMP de este año var listaRegistrosIOMPPeriodoFiscalActual = listaRegistrosIOMP .Where(w => w.Fecha.Year == DateTime.Now.Year) .ToList(); // ** Lista de acciones generadas para el empleado var listaAccionesEmpleado = await db.AccionPersonal .Include(i => i.TipoAccionPersonal) .Where(w => w.IdEmpleado == idEmpleado && w.Ejecutado == true ) .ToListAsync(); // ** Obtiene una lista de desvinculaciones del empleado var listaDesvinculacionesEmpleado = listaAccionesEmpleado .Where(w => w.TipoAccionPersonal.Definitivo == true && w.TipoAccionPersonal.DesactivarEmpleado == true ) .OrderByDescending(o => o.FechaRige); // ** Obtiene la lista de solicitudes de vacaciones aprobadas para el empleado este Período fiscal var listaVacacionesAprobadasEmpleado = await db.SolicitudVacaciones .Where(w => w.IdEmpleado == idEmpleado && w.Estado == 6 && w.FechaDesde.Year == DateTime.Now.Year ).ToListAsync(); //------------------------------------------------------------------------------------------------ // *********** Obtener la última fecha de ingreso del empleado a la institución ****************** // Variable: FechaInicio //------------------------------------------------------------------------------------------------ DateTime FechaInicioFunciones = listaRegistrosIOMP .OrderBy(o => o.Fecha) .FirstOrDefault() .Fecha; if (listaDesvinculacionesEmpleado.Count() > 0) { var UltimaDesvinculacion = listaDesvinculacionesEmpleado .OrderByDescending(o => o.FechaRige) .FirstOrDefault() .Fecha; FechaInicioFunciones = listaRegistrosIOMP .Where(w => w.Fecha > UltimaDesvinculacion ) .OrderBy(o => o.Fecha) .FirstOrDefault().Fecha; } //----------------------------------------------------------------------------------------------- // **************** Cálculo de los días totales de vacaciones por Período fiscal ***************** //Variable: totalDiasVacacionesEstePeriodoFiscal //------------------------------------------------------------------------------------------------ //// Si no hay movimientos este año se debe calcular normalmente las vacaciones dependiendo de la //// relación laboral actual del empleado if (listaRegistrosIOMPPeriodoFiscalActual.Count() == 0) { var IOMPActual = listaRegistrosIOMP .OrderByDescending(o => o.Fecha) .FirstOrDefault(); // Obtiene el total de vacaciones desde la fecha de ingreso hasta la fecha actual según // el tipo de relacion laboral actual totalDiasVacacionesEstePeriodoFiscal = (int) await CalcularVacacionesPorFechas( Convert.ToInt32(IOMPActual.TipoNombramiento.RelacionLaboral.IdRegimenLaboral), FechaInicioFunciones, DateTime.Now ); } else { Double diasPorPeriodo = 0; var Fecha1 = FechaInicioFunciones; var Fecha2 = DateTime.Now; // Obtención de los días de vacaciones de este período, hasta la fecha actual, // tomando en cuenta los diferentes registros de IOMP for (int i = 0; i < listaRegistrosIOMPPeriodoFiscalActual.Count(); i++) { if ((i + 1) < listaRegistrosIOMPPeriodoFiscalActual.Count()) { Fecha2 = listaRegistrosIOMPPeriodoFiscalActual.ElementAt(i + 1).Fecha; Fecha2 = Fecha2.AddDays(-1); } else { Fecha2 = DateTime.Now; } diasPorPeriodo = diasPorPeriodo + await CalcularVacacionesPorFechas( Convert.ToInt32(listaRegistrosIOMPPeriodoFiscalActual.ElementAt(i).TipoNombramiento.RelacionLaboral.IdRegimenLaboral), Fecha1, Fecha2 ); if ((i + 1) < listaRegistrosIOMPPeriodoFiscalActual.Count()) { Fecha1 = listaRegistrosIOMPPeriodoFiscalActual.ElementAt(i + 1).Fecha; } } totalDiasVacacionesEstePeriodoFiscal = (int)diasPorPeriodo; } //------------------------------------------------------------------------------------------------- // **** Restar los días de vacaciones solicitados aprobados y los movimientos imputables de vacaciones ****** // Variable: totalDiasVacacionesEstePeriodoFiscal // NOTA: Si algún proceso resta o aumenta vacaciones se debe agregar en esta sección //------------------------------------------------------------------------------------------------------------ var diasVacacionesAprobadasPeriodoFiscalActual = 0; var diasImputablesVacaciones = 0; var sumatoriaDiasVacacionesUsados = 0; // Obtención de los días de vacaciones aprobados // Variable: diasVacacionesAprobadasPeriodoFiscalActual foreach (var itemSolicitudes in listaVacacionesAprobadasEmpleado) { diasVacacionesAprobadasPeriodoFiscalActual = diasVacacionesAprobadasPeriodoFiscalActual + (itemSolicitudes.FechaHasta - itemSolicitudes.FechaDesde).Days; } //----------------------------------------------------- // ** Obtención de los días imputables a vacaciones var listaImputableVacaciones = listaAccionesEmpleado .Where(w => w.TipoAccionPersonal.ImputableVacaciones == true) .ToList(); foreach (var itemImputablesVacaciones in listaImputableVacaciones) { diasImputablesVacaciones = diasImputablesVacaciones + (int)itemImputablesVacaciones.NoDias; } //---------------------------------------------------- // ** Sumatoria de días de vacaciones usados sumatoriaDiasVacacionesUsados = diasVacacionesAprobadasPeriodoFiscalActual + diasImputablesVacaciones ; // ** Si no existe registro para este período fiscal, debe agregar uno nuevo if (registroVacaciones == null) { var modelo = new VacacionesEmpleado() { IdEmpleado = idEmpleado, PeriodoFiscal = DateTime.Now.Year, VacacionesGozadas = sumatoriaDiasVacacionesUsados, VacacionesNoGozadas = totalDiasVacacionesEstePeriodoFiscal }; db.VacacionesEmpleado.Add(modelo); await db.SaveChangesAsync(); } else { // ** Si existe el registro, se actualiza registroVacaciones.VacacionesNoGozadas = totalDiasVacacionesEstePeriodoFiscal; registroVacaciones.VacacionesGozadas = sumatoriaDiasVacacionesUsados; db.VacacionesEmpleado.Update(registroVacaciones); await db.SaveChangesAsync(); } }