예제 #1
0
        public ActionResult DeleteConfirmed(int id)
        {
            VacacionesEmpleado vacacionesEmpleado = db.VacacionesEmpleados.Find(id);

            db.VacacionesEmpleados.Remove(vacacionesEmpleado);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #2
0
 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));
 }
예제 #3
0
        // 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));
        }
예제 #4
0
        // 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();
            }
        }