public ActionResult ValidarCodigoRestablecerPassword(string email, string codigo)
        {
            Respuesta R           = new Respuesta();
            string    emailCode64 = Funcion.ConvertirBase64(email);
            bool      resultado   = Funcion.EmailEsValido(email);

            if (!resultado)
            {
                //Email no valido
                R = Funcion.RespuestaProceso("Email_No_Valido", emailCode64, null, email + EngineData.EmailNoValido());
                return(Json(R));
            }
            string code = Metodo.ObtenerCodigoRestablecerPassword(email).Trim();

            codigo    = codigo.Trim();
            resultado = Funcion.CompareString(code, codigo.Trim());
            if (!resultado)
            {
                //El codigo ingresado no coincide
                R = Funcion.RespuestaProceso("Codigo_No_Match", emailCode64, Funcion.ConvertirBase64("1E-9R-2R-8O"), email + EngineData.CodigoNoCoincide());
                return(Json(R));
            }
            int act = Metodo.UpdateResetPassword(email, codigo, true);

            if (act >= 1)
            {
                System.Web.HttpContext.Current.Session["Email"] = email;
                R = Funcion.RespuestaProceso("Exito", emailCode64, null, "Exito");
            }
            else
            {
                //Error al validar el codigo
                Funcion.ConstruirSucesoLog("Error al validar codigo*Home/ValidarCodigoRestablecerPassword*" + email, Metodo);
                R = Funcion.RespuestaProceso("Error", emailCode64, null, email + EngineData.ErrorInternoServidor());
            }
            return(Json(R));
        }
        public ActionResult NotificacionRestablecerPassword(string email)
        {
            Respuesta R           = new Respuesta();
            string    emailCode64 = Funcion.ConvertirBase64(email);
            bool      resultado   = Funcion.EmailEsValido(email);

            if (!resultado)
            {
                //Email no valido
                R = Funcion.RespuestaProceso("Email_No_Valido", emailCode64, null, email + EngineData.EmailNoValido());
                return(Json(R));
            }
            Guid identidad = Metodo.ObtenerIdentidadCliente(email);

            if (identidad == Guid.Empty)
            {
                // Email no registrado
                R = Funcion.RespuestaProceso("Email_No_Registrado", emailCode64, null, email + EngineData.EmailNoRegistrado());
                return(Json(R));
            }

            string         codigo = Funcion.ConstruirCodigo();
            string         enlaze = Funcion.CrearEnlazeRestablecerPassword(Metodo, email, codigo);
            EstructuraMail model  = new EstructuraMail();

            model = Funcion.SetEstructuraMailResetPassword(enlaze, email, codigo, model);
            ResetPassword resetPassword = new ResetPassword();

            resetPassword = Funcion.SetResetPassword(email, codigo);
            resultado     = Metodo.InsertarResetPassword(resetPassword);
            if (!resultado)
            {
                // Error insertando codigo
                R = Funcion.RespuestaProceso("Error_Insertando_Codigo", emailCode64, null, email + EngineData.ErrorInternoServidor());
                return(Json(R));
            }
            resultado = Notificacion.EnviarMailNotificacion(model);
            if (resultado)
            {
                R = Funcion.RespuestaProceso("Exito", email, null, email + EngineData.EnvioCodigoRestablecerPassword()); //Envio de codigo restablecer password
            }
            else
            {
                R = Funcion.RespuestaProceso("Error", email, null, email + EngineData.ErrorEnviandoMail()); //Error enviando notificacion
            }
            return(Json(R));
        }
        public ActionResult State(int Id = 0, string email = "", string identidad = "", string date = "", string status = "", string ide = "", string type = "", string cultureInfo = "", Respuesta K = null)
        {
            System.Web.HttpContext.Current.Session["Usuario"] = EngineData.usuarioTemporal;
            Respuesta R           = new Respuesta();
            bool      resultado   = false;
            Guid      guidCliente = Guid.Empty;
            string    emailCode64 = string.Empty;

            //Validar email
            if (email != string.Empty && email != null)
            {
                if (Funcion.CadenaBase64Valida(email))
                {
                    email = Funcion.DecodeBase64(email);
                }

                resultado   = Funcion.EmailEsValido(email);
                emailCode64 = Funcion.ConvertirBase64(email);
                if (!resultado)
                {
                    if (K.RespuestaAccion != string.Empty && K.RespuestaAccion != null)
                    {
                        R = Funcion.RespuestaProceso(K.RespuestaAccion, emailCode64, null, email + EngineData.EmailNoValido());
                    }
                    else if (type != string.Empty && type != null)
                    {
                        R = Funcion.RespuestaProceso("Index", emailCode64, null, email + EngineData.EmailNoValido());
                    }
                    return(View(R));
                }
            }

            //Validar GUID de identidad
            if (identidad != string.Empty && identidad != null && type != string.Empty && type != null)
            {
                if (type == EngineData.RegisterManager)
                {
                    guidCliente = Metodo.ObtenerIdentidadGerente(email);
                }
                else
                {
                    guidCliente = Metodo.ObtenerIdentidadCliente(email);
                }

                string identificador = Funcion.EncodeMd5(guidCliente.ToString());
                resultado = Funcion.CompareString(identidad, identificador);
                if (!resultado)
                {
                    R = Funcion.RespuestaProceso("Open", emailCode64, null, EngineData.ErrorInternoServidor());
                    Funcion.ConstruirSucesoLog("GUID no concuerda*Home/State*" + email, Metodo);
                    return(View(R));
                }
            }

            //validar tiempo de expiracion del link
            if (date != string.Empty && date != null && type != string.Empty && type != null)
            {
                date = date.Replace('*', ' ');
                date = date.Replace('+', ' ');
                date = date.Replace('a', ' ');
                date = date.Replace('p', ' ');
                date = date.Replace('m', ' ');
                date = date.Trim();
                Funcion.SetCultureInfo(cultureInfo);
                //CultureInfo ci = new CultureInfo(cultureInfo);
                //Thread.CurrentThread.CurrentUICulture = ci;
                //Thread.CurrentThread.CurrentCulture = ci;
                DateTime fechaEnvio      = Convert.ToDateTime(date);
                DateTime fechaActivacion = DateTime.UtcNow;
                resultado = Funcion.EstatusLink(fechaEnvio, fechaActivacion);
                if (!resultado)
                {
                    if (type == EngineData.Register)
                    {
                        string contraseña = Metodo.ObtenerPasswordCliente(email);
                        contraseña = contraseña.Replace(email, "");
                        resultado  = Funcion.EnviarNuevaNotificacion(Notificacion, Metodo, email, EngineData.Register, contraseña);
                    }
                    else if (type == EngineData.Test)
                    {
                        resultado = Funcion.EnviarNuevaNotificacion(Notificacion, Metodo, email, EngineData.Test);
                    }
                    else if (type == EngineData.RegisterManager)
                    {
                        resultado = Funcion.EnviarNuevaNotificacion(Notificacion, Metodo, email, EngineData.RegisterManager);
                    }

                    R = Funcion.RespuestaProceso("Index", emailCode64, null, EngineData.TiempoLinkExpiro());
                    return(View(R));
                }
            }

            //Activacion tiempo de prueba
            if (type == EngineData.Test)
            {
                Cliente client = Funcion.ConstruirActualizarClienteTest(Metodo, email, identidad);
                int     act    = Metodo.UpdateClienteTest(client);
                if (act > 0)
                {
                    R = Funcion.RespuestaProceso("Contact", emailCode64, null, EngineData.ActivacionExitosa());
                }
                else
                {
                    R = Funcion.RespuestaProceso("Index", emailCode64, null, EngineData.ActivacionFallida());
                }
            }
            //Activacion cuenta del cliente
            else if (type == EngineData.Register)
            {
                string         password = ide;
                ActivarCliente model    = new ActivarCliente();
                model = Funcion.ConstruirActivarCliente(Metodo, email, password);
                int act = Metodo.ClienteRegistroActivacion(model);
                if (act >= 1)
                {
                    R = Funcion.RespuestaProceso("Login", emailCode64, null, EngineData.ActivacionExitosa());
                }
                else
                {
                    R = Funcion.RespuestaProceso("Login", emailCode64, null, EngineData.ActivacionFallida());
                }
            }
            // Enviar a restablecer password
            else if (type == EngineData.ResetPassword)
            {
                if (ide == string.Empty || ide == null)
                {
                    R = Funcion.RespuestaProceso("Open", emailCode64, null, EngineData.ErrorInternoServidor());
                    Funcion.ConstruirSucesoLog("CODIGO restablecer password vacio*Home/State*" + email, Metodo);
                    return(View(R));
                }
                string codigo = Funcion.DecodeBase64(ide);
                string code   = Metodo.ObtenerCodigoRestablecerPassword(email);
                resultado = Funcion.CompareString(codigo, code);
                if (!resultado)
                {
                    R = Funcion.RespuestaProceso("Open", emailCode64, null, EngineData.ErrorInternoServidor());
                    Funcion.ConstruirSucesoLog("CODIGO restablecer password no coinciden*Home/State*" + email, Metodo);
                    return(View(R));
                }
                System.Web.HttpContext.Current.Session["Email"] = email;
                R = Funcion.RespuestaProceso(null, emailCode64, "codeVerify", EngineData.IngreseCodigoVerificacion());
                return(RedirectToAction("EditPasswordNotify", "Home", R));
            }
            //Resdireccionar a actualizar el perfil de administrador
            else if (type == EngineData.RegisterManager)
            {
                Gerente G = new Gerente();
                G.Email = email;
                G.Id    = EngineData.IdActivacion;
                return(RedirectToAction("Update", "Manager", G));
            }

            if (K.RespuestaAccion != null)
            {
                return(View(K));
            }


            return(View(R));
        }