public ActionResult SinAcceso()
 {
     //Validar Inicio de Sesión
     Models.Helpers Helpers = new Models.Helpers();
     if (Helpers.GetUserLogin())
     {
         return(View());
     }
     else
     {
         return(RedirectToAction("Index", "Login"));
     }
 }
        // se usa este actualmente
        public static void PrevisualizarProcesarDeducciones(int monedaDeducciones, List <ViewModelTasasDeCambio> objMonedas, int userId, DateTime fechaInicio, DateTime fechaFin, List <ViewModelListaErrores> listaErrores, ref int errores, ERP_GMEDINAEntities db, List <V_PlanillaDeducciones> oDeducciones, tbEmpleados empleadoActual, decimal SalarioBase, decimal?totalIngresosEmpleado, ref decimal?colaboradorDeducciones, ref decimal totalAFP, ref decimal?totalInstitucionesFinancieras, ref decimal?totalOtrasDeducciones, ref decimal?adelantosSueldo, out decimal?totalDeduccionesEmpleado, ref decimal?totalDeduccionesIndividuales, out decimal?netoAPagarColaborador, V_InformacionColaborador InformacionDelEmpleadoActual)
        {
            #region Procesar deducciones

            // instancia del helper
            Models.Helpers objHelpers = new Models.Helpers();

            // id del usuario logueado
            int idUser = userId;

            // validar que la planilla tenga deducciones
            if (oDeducciones.Count > 0)
            {
                // obtener id del tipo de moneda del sueldo del colaborador
                int idMonedaColaborador = db.tbSueldos.Where(x => x.emp_Id == InformacionDelEmpleadoActual.emp_Id && x.sue_Estado == true).Select(x => x.tmon_Id).FirstOrDefault();

                ViewModelTasasDeCambio tasaDeCambio = new ViewModelTasasDeCambio();

                // si el tipo de moneda del colaborador es distinto de la moneda de las deducciones seleccionada en el frontend, hacer la conversion
                if (idMonedaColaborador != monedaDeducciones)
                {
                    // no tengo idea de que estaba haciendo aquí gg
                    tasaDeCambio = objMonedas.Where(x => x.tmon_Id == idMonedaColaborador).FirstOrDefault();
                }

                // deducciones de la planilla
                foreach (var iterDeducciones in oDeducciones)
                {
                    try
                    {
                        decimal?porcentajeColaborador     = iterDeducciones.cde_PorcentajeColaborador;
                        decimal?porcentajeEmpresa         = iterDeducciones.cde_PorcentajeEmpresa;
                        decimal?montoDeduccionColaborador = SalarioBase;

                        // si el tipo de moneda del colaborador es distinto de la moneda de las deducciones seleccionada en el frontend, hacer la conversion
                        if (idMonedaColaborador != monedaDeducciones)
                        {
                            montoDeduccionColaborador = (SalarioBase * tasaDeCambio.tmon_Cambio);
                        }

                        try
                        {
                            // verificar techos deducciones
                            List <tbTechosDeducciones> oTechosDeducciones = db.tbTechosDeducciones
                                                                            .Where(x => x.cde_IdDeducciones == iterDeducciones.cde_IdDeducciones &&
                                                                                   x.tddu_Activo == true)
                                                                            .OrderBy(x => x.tddu_Techo)
                                                                            .ToList();
                            if (oTechosDeducciones.Count() > 0)
                            {
                                foreach (var techosDeduccionesIter in oTechosDeducciones)
                                {
                                    try
                                    {
                                        if (SalarioBase > techosDeduccionesIter.tddu_Techo)
                                        {
                                            montoDeduccionColaborador = techosDeduccionesIter.tddu_Techo;
                                            porcentajeColaborador     = techosDeduccionesIter.tddu_PorcentajeColaboradores;
                                            porcentajeEmpresa         = techosDeduccionesIter.tddu_PorcentajeEmpresa;
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        listaErrores.Add(new ViewModelListaErrores
                                        {
                                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                                            Error             = $"Error al cargar techo de la deducción: {iterDeducciones.cde_DescripcionDeduccion}. Detalles del techo: Techo {techosDeduccionesIter.tddu_Techo}, porcentaje colaborador : {techosDeduccionesIter.tddu_PorcentajeColaboradores}, porcentaje empresa: {techosDeduccionesIter.tddu_PorcentajeEmpresa}.",
                                            PosibleSolucion   = "Verifique que la información de esta deducción y sus respectivos techos esté completa y/o correcta."
                                        });
                                        errores++;
                                    }
                                }
                                // si la moneda de las deducciones es distintas al tipo de moneda del colaborador, convertir a la moneda del colaborador
                                // antes de agregarlo al reporte final

                                if (idMonedaColaborador != monedaDeducciones)
                                {
                                    colaboradorDeducciones = Math.Round(((decimal)colaboradorDeducciones) / tasaDeCambio.tmon_Cambio, 2);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            listaErrores.Add(new ViewModelListaErrores
                            {
                                Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                                NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                                Error             = $"Error al cargar techos de la deducción: {iterDeducciones.cde_DescripcionDeduccion}.",
                                PosibleSolucion   = "Verifique que la información de esta deducción y sus respectivos techos esté completa y/o correcta."
                            });
                            errores++;
                        }

                        //sumar las deducciones
                        colaboradorDeducciones += Math.Round((decimal)(montoDeduccionColaborador * porcentajeColaborador) / 100, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deducción {iterDeducciones.cde_DescripcionDeduccion}.",
                            PosibleSolucion   = "Verifique que la información de esta deducción y sus respectivos techos (si los tiene) esté completa y/o correcta."
                        });
                        errores++;
                    }
                }
            }


            //instituciones financieras
            List <tbDeduccionInstitucionFinanciera> oDeduInstiFinancieras = db.tbDeduccionInstitucionFinanciera
                                                                            .Where(x => x.emp_Id == empleadoActual.emp_Id &&
                                                                                   x.deif_Activo == true &&
                                                                                   x.deif_Pagado == false &&
                                                                                   x.deif_FechaCrea >= fechaInicio &&
                                                                                   x.deif_FechaCrea <= fechaFin)
                                                                            .ToList();

            if (oDeduInstiFinancieras.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduInstiFinancierasIterador in oDeduInstiFinancieras)
                {
                    try
                    {
                        totalInstitucionesFinancieras += Math.Round((decimal)oDeduInstiFinancierasIterador.deif_Monto, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deduccion por institución financiera {oDeduInstiFinancierasIterador.tbInstitucionesFinancieras.insf_DescInstitucionFinanc} - {oDeduInstiFinancierasIterador.deif_Comentarios} - {oDeduInstiFinancierasIterador.deif_Monto}.",
                            PosibleSolucion   = "Verifique que la información de esta deducción sea correcta de acuerdo al formato leído por el sistema."
                        });
                        errores++;
                    }
                }
            }
            // deducciones afp
            List <tbDeduccionAFP> oDeduccionAfp = db.tbDeduccionAFP
                                                  .Where(af => af.emp_Id == empleadoActual.emp_Id &&
                                                         af.dafp_Activo == true)
                                                  .ToList();

            // respaldo de where's comentados de deduccion afp
            // af.dafp_Pagado != true &&
            // af.dafp_FechaCrea >= fechaInicio &&
            // af.dafp_FechaCrea <= fechaFin

            if (oDeduccionAfp.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionAfpIter in oDeduccionAfp)
                {
                    try
                    {
                        totalAFP += Math.Round(oDeduccionAfpIter.dafp_AporteLps, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deduccion AFP. {oDeduccionAfpIter.tbAFP.afp_Descripcion} - {oDeduccionAfpIter.dafp_AporteLps}",
                            PosibleSolucion   = "Verifique que la información de esta deducción esté correcta y/o completa."
                        });
                        errores++;
                    }
                }
            }

            // deducciones por equipo de trabajo
            List <tbDeduccionesExtraordinarias> oDeduccionesExtrasColaborador = db.tbDeduccionesExtraordinarias
                                                                                .Where(DEX => DEX.tbEquipoEmpleados.emp_Id == empleadoActual.emp_Id &&
                                                                                       DEX.dex_MontoRestante > 0 &&
                                                                                       DEX.dex_Activo == true)
                                                                                .ToList();

            if (oDeduccionesExtrasColaborador.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionesExtrasColaboradorIterador in oDeduccionesExtrasColaborador)
                {
                    try
                    {
                        totalOtrasDeducciones += oDeduccionesExtrasColaboradorIterador.dex_MontoRestante <= oDeduccionesExtrasColaboradorIterador.dex_Cuota ? oDeduccionesExtrasColaboradorIterador.dex_MontoRestante : oDeduccionesExtrasColaboradorIterador.dex_Cuota;
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deduccion extra. {oDeduccionesExtrasColaboradorIterador.dex_ObservacionesComentarios} - {oDeduccionesExtrasColaboradorIterador.dex_Cuota}",
                            PosibleSolucion   = "Verifique que la información de esta deducción esté correcta y/o completa."
                        });
                        errores++;
                    }
                }
            }

            // adelantos de sueldo
            List <tbAdelantoSueldo> oAdelantosSueldo = db.tbAdelantoSueldo
                                                       .Where(x => x.emp_Id == empleadoActual.emp_Id &&
                                                              x.adsu_Activo == true && x.adsu_Deducido == false &&
                                                              x.adsu_FechaAdelanto >= fechaInicio &&
                                                              x.adsu_FechaAdelanto <= fechaFin)
                                                       .ToList();

            if (oAdelantosSueldo.Count > 0)
            {
                // sumarlas todas
                foreach (var oAdelantosSueldoIterador in oAdelantosSueldo)
                {
                    try
                    {
                        adelantosSueldo += Math.Round((decimal)oAdelantosSueldoIterador.adsu_Monto, 2);
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar adelanto de sueldo. {oAdelantosSueldoIterador.adsu_RazonAdelanto} - {oAdelantosSueldoIterador.adsu_Monto}",
                            PosibleSolucion   = "Verifique que la información de dicho adelanto esté completa y/o correcta."
                        });
                        errores++;
                    }
                }
            }

            // deducciones individuales
            List <tbDeduccionesIndividuales> oDeduccionesIndiColaborador = db.tbDeduccionesIndividuales
                                                                           .Where(DEX => DEX.emp_Id == empleadoActual.emp_Id &&
                                                                                  DEX.dei_Monto > 0 &&
                                                                                  DEX.dei_Pagado != true &&
                                                                                  DEX.dei_Activo == true)
                                                                           .ToList();

            if (oDeduccionesIndiColaborador.Count > 0)
            {
                // sumarlas todas
                foreach (var oDeduccionesIndiColaboradorIterador in oDeduccionesIndiColaborador)
                {
                    try
                    {
                        totalDeduccionesIndividuales += oDeduccionesIndiColaboradorIterador.dei_Monto <= oDeduccionesIndiColaboradorIterador.dei_MontoCuota ? oDeduccionesIndiColaboradorIterador.dei_MontoCuota : oDeduccionesIndiColaboradorIterador.dei_MontoCuota;
                    }
                    catch (Exception ex)
                    {
                        listaErrores.Add(new ViewModelListaErrores
                        {
                            Identidad         = InformacionDelEmpleadoActual.per_Identidad,
                            NombreColaborador = InformacionDelEmpleadoActual.per_Nombres + " " + InformacionDelEmpleadoActual.per_Apellidos,
                            Error             = $"Error al procesar deducción individual. {oDeduccionesIndiColaboradorIterador.dei_Motivo} - {oDeduccionesIndiColaboradorIterador.dei_MontoCuota}",
                            PosibleSolucion   = "Verifique que la de dicha deducción esté completa y/o correcta."
                        });
                        errores++;
                    }
                }
            }

            // totales
            totalDeduccionesEmpleado = Math.Round((decimal)totalOtrasDeducciones, 2) + totalInstitucionesFinancieras + colaboradorDeducciones + totalAFP + adelantosSueldo + totalDeduccionesIndividuales;
            netoAPagarColaborador    = totalIngresosEmpleado - totalDeduccionesEmpleado;

            #endregion
        }