public ActionResult DeleteConfirmed(int id)
        {
            UsuarioAutorizado usuarioAutorizado = db.UsuarioAutorizado.Find(id);

            db.UsuarioAutorizado.Remove(usuarioAutorizado);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 public ActionResult Edit([Bind(Include = "UsuarioAutorizadoId,Usuario,Password,Alcaldia,FechaInicio,FechaFinal")] UsuarioAutorizado usuarioAutorizado)
 {
     if (ModelState.IsValid)
     {
         db.Entry(usuarioAutorizado).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(usuarioAutorizado));
 }
        public ActionResult Create([Bind(Include = "UsuarioAutorizadoId,Usuario,Password,Alcaldia,FechaInicio,FechaFinal")] UsuarioAutorizado usuarioAutorizado)
        {
            if (ModelState.IsValid)
            {
                db.UsuarioAutorizado.Add(usuarioAutorizado);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(usuarioAutorizado));
        }
        // GET: Cnp/UsuarioAutorizadoes/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            UsuarioAutorizado usuarioAutorizado = db.UsuarioAutorizado.Find(id);

            if (usuarioAutorizado == null)
            {
                return(HttpNotFound());
            }
            return(View(usuarioAutorizado));
        }
        public UsuarioAutorizado LoginUsuario(string usuario, string contrasenia)
        {
            try
            {
                UsuarioAutorizado oUsuarioAutorizado = new UsuarioAutorizado();
                var qUsuario = (from a in ctx.Usuarios
                                join b in ctx.Personas on a.PersonaId equals b.PersonaId
                                join c in ctx.Parametros on new { a = a.RolId, b = 100 } equals new { a = c.ParametroId, b = c.GrupoId }
                                where a.NombreUsuario == usuario && a.Contrasenia == contrasenia
                                select new UsuarioAutorizado
                {
                    UsuarioId = a.UsuarioId,
                    PersonaId = a.PersonaId,
                    EmpresaId = a.EmpresaId,
                    NombreUsuario = a.NombreUsuario,
                    NombreCompleto = b.Nombres + " " + b.ApellidoPaterno,
                    FechaCaduca = a.FechaCaduca.Value,
                    RolId = a.RolId,
                    foto = b.Foto,
                    Rol = c.Valor1
                }).FirstOrDefault();
                if (qUsuario != null)
                {
                    var qAutu = GetAutorizacion(qUsuario.RolId);
                    qUsuario.Autorizacion = qAutu;
                }
                else
                {
                    return(null);
                }

                return(qUsuario);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
    /// <summary>
    /// Actualiza la tabla de usuario autorizado con los datos del nuevo inicio de sesión
    /// </summary>
    /// <param name="usuarioAutorizado">Usuario Autorizado con información de Token, Hora de Registro, Permisos, etc.</param>
    /// <returns>Regresa verdadero si actualizó el usuario</returns>
    public static bool ActualizarUsuarioAutorizado(UsuarioAutorizado usuarioAutorizado)
    {
        string query = "INSERT INTO UsuarioAutorizado (Token, Usuario, HoraRegistro, TiempoPrestamo, Permisos, Cliente) " +
            "VALUES (@Token, @Usuario, @HoraRegistro, @TiempoPrestamo, @Permisos, @Cliente)";

        using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringBD"].ConnectionString))
        {
            sqlConnection.Open();
            using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
            {
                #region llenar el comando con parametros
                sqlCommand.Parameters.AddWithValue("@Token", usuarioAutorizado.Token);
                sqlCommand.Parameters.AddWithValue("@Usuario", usuarioAutorizado.Usuario);
                sqlCommand.Parameters.AddWithValue("@HoraRegistro", usuarioAutorizado.HoraRegistro);
                sqlCommand.Parameters.AddWithValue("@TiempoPrestamo", 1337);
                sqlCommand.Parameters.AddWithValue("@Permisos", usuarioAutorizado.Permisos);
                sqlCommand.Parameters.AddWithValue("@Cliente", usuarioAutorizado.Cliente);
                #endregion

                //regresar el resultado
                return sqlCommand.ExecuteNonQuery() > 0 ? true : false;
            }
        }
    }
    public string IniciaSesion(string usuario, string contrasena, string recordar)
    {
        //HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
        //verificar si el usuario y la contraseña son correctos
        UsuarioAutorizado usuarioAutorizado = AutentificacionBD.IniciaSesion(usuario, contrasena);
        //if ((Plataforma.AppID == "zeek" && usuarioAutorizado.Plataforma == 0)||(Plataforma.AppID == "CMovil" && usuarioAutorizado.Plataforma == 1))
        if ( usuarioAutorizado.Plataforma == 0 || usuarioAutorizado.Plataforma == 1 || usuarioAutorizado.Plataforma == 2 || usuarioAutorizado.Plataforma == 3)

        {
            //si el usuario y la contraseña son correctas, verificar el estado de su factura
            if (usuarioAutorizado.Status == (int)TipoEstadoAutentificacion.Autorizado)
            {
                //traer el estado de la factura
                int estadoFactura = AutentificacionBD.EstadoFactura(usuarioAutorizado.Cliente);

                //si tiene factura(s) pendiente(s), asignar al estado -1 significa que no hay factura pendiente
                if (estadoFactura != -1)
                {
                    if (estadoFactura == 0) /// se cancela el servicio por falta de pago.
                    {
                        usuarioAutorizado.Status = (int)TipoEstadoAutentificacion.FaltaPago;
                    }
                    else
                    {
                        usuarioAutorizado.Status = (int)TipoEstadoAutentificacion.ProximoAVencer;
                    }
                }
            }

            //si el usuario y contraseña fueron correctos y no tiene el servicio suspendido por factura
            if (usuarioAutorizado.Status == (int)TipoEstadoAutentificacion.Autorizado || usuarioAutorizado.Status == (int)TipoEstadoAutentificacion.ProximoAVencer)
            {
                //buscar si hay aviso global
                usuarioAutorizado.MensajeGlobal = AutentificacionBD.AvisoGlobal();

                //verificar si es una subcuenta
                if (usuarioAutorizado.Permisos[0] == 7 || usuarioAutorizado.Permisos[1] == 1 || usuarioAutorizado.Permisos[1] == 2)
                    usuarioAutorizado.Nombre = AutentificacionBD.NombreSubcuenta(usuarioAutorizado.Usuario);//se cambia el nombre del usuario por la descripción de la subcuenta.

                //validar el token del usuario, si no existe en base de datos, crea uno.
                usuarioAutorizado.Token = AutentificacionBD.ValidaToken(usuarioAutorizado.Usuario);

                //eliminar el previo usuario autorizado en bases de datos, si existe.
                AutentificacionBD.EliminaUsuarioAutorizado(usuarioAutorizado.Usuario);

                //Actualizar el usuario autorizado en base de datos, con la nueva fecha de registro, utilizando el mismo token
                AutentificacionBD.ActualizarUsuarioAutorizado(usuarioAutorizado);

                //Creamos la cookie
                HttpCookie cookie = System.Web.HttpContext.Current.Request.Cookies["Usuario"];
                if (cookie == null)
                    cookie = new HttpCookie("Usuario");

                else
                {
                    HttpContext.Current.Response.Cookies["Usuario"].Expires = DateTime.Now.AddDays(-1);
                    cookie = new HttpCookie("Usuario");
                }
                Codificador codificador = new Codificador();

                cookie.Values.Add("UsuarioID", codificador.Encripta(usuarioAutorizado.Usuario));
                cookie.Values.Add("Cliente", codificador.Encripta(usuarioAutorizado.Cliente));
                cookie.Values.Add("Nombre", codificador.Encripta(usuarioAutorizado.Nombre));
                cookie.Values.Add("Token", codificador.Encripta(usuarioAutorizado.Token.ToString()));
                cookie.Values.Add("Permisos", string.Join(",", usuarioAutorizado.Permisos));
                cookie.Values.Add("Status", usuarioAutorizado.Status.ToString());
                cookie.Values.Add("Recordar", recordar);
                if (recordar == "false")
                    cookie.Values.Add("Accesado", "1");
                cookie.Values.Add("Version", Plataforma.version);
                //cookie.Values.Add("Global", codificador.Encripta("360369693134316")); //usuario de globalMaps

                cookie.Expires = DateTime.Now.AddDays(20);
                System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
            }

            ///Creo un nuevo objeto "UsuarioAutorizado" para solo regresar los datos necesarios a la hora de hacer login
            UsuarioAutorizado usuarioAutorizadoJson = new UsuarioAutorizado();
            usuarioAutorizadoJson.Status = usuarioAutorizado.Status;
            usuarioAutorizadoJson.Nombre = usuarioAutorizado.Nombre;
            usuarioAutorizadoJson.MensajePersonal = usuarioAutorizado.MensajePersonal;
            usuarioAutorizadoJson.MensajeGlobal = usuarioAutorizado.MensajeGlobal;
            usuarioAutorizadoJson.MensajeEstado = usuarioAutorizado.MensajeEstado;
            //regresar el usuario autorizado serializado como Json, omitiendo los valores default y los valores nulos.
            string json = JsonConvert.SerializeObject(usuarioAutorizadoJson, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore, NullValueHandling = NullValueHandling.Ignore });
            return json;
        }
        else
        {
            return "plataformaIncorrecta";
        }
    }
    /// <summary>
    /// Método que Autentifica a un usuario en el sistema de coordenada móvil
    /// </summary>
    /// <param name="usuario">Nombre del Usuario (No encriptado) la encriptación se hace internamente.</param>
    /// <param name="contrasena">Contraseña del usuario (No encriptada) la encriptación se hace internamente.</param>
    /// <returns>Regresa un UsuarioAutorizado que contiene su UsuarioID, Cliente, Descripción, Permisos, Zona, Aviso Personal y Nombre</returns>
    public static UsuarioAutorizado IniciaSesion(string usuario, string contrasena)
    {
        //Encriptamos el usuario y la contraseña
        Codificador codificador = new Codificador();
        string usuarioEncriptado = codificador.Encripta(usuario);
        string contrasenaEncriptada = codificador.Encripta(contrasena);

        //query para seleccionar a un usuario en base a su nombre de usuario y contraseña
        string query = "SELECT u.UsuarioID, u.Cliente, u.Descripcion, u.Permisos, u.Zona, u.aviso_personal, c.Nombre, c.Plataforma " +
            "FROM Usuario AS u INNER JOIN Cliente AS c ON u.Cliente = c.ClienteID " +
            "WHERE u.Nombre = @usuario AND u.Contrasena = @contrasena";

        //Por default, declaramos un usuario autorizado con contraseña incorrecta.
        UsuarioAutorizado usuarioAutorizado = new UsuarioAutorizado();
        usuarioAutorizado.Status = (int)TipoEstadoAutentificacion.Incorrecto;

        //abrir conexión a bases de datos, utilizando la cadena de configuración localizada en el archivo web.config
        using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionStringBD"].ConnectionString))
        {
            sqlConnection.Open();
            using (SqlCommand sqlCommand = new SqlCommand(query, sqlConnection))
            {
                //agregar los parámetros usuario y contraseña al comando a ejecutarse en bases de datos
                sqlCommand.Parameters.AddWithValue("@usuario", usuarioEncriptado);
                sqlCommand.Parameters.AddWithValue("@contrasena", contrasenaEncriptada);

                //ejecutar el comando
                using (SqlDataReader sqlDataReader = sqlCommand.ExecuteReader())
                {
                    //si existe un registro con ese usuario y contraseña
                    if (sqlDataReader.Read())
                    {
                        #region llenar los campos de usuario
                        usuarioAutorizado.Usuario = (string)sqlDataReader["UsuarioID"];
                        usuarioAutorizado.Cliente = (string)sqlDataReader["Cliente"];
                        if (!sqlDataReader.IsDBNull(5)) // el aviso personal puede ser nulo en base de datos
                            usuarioAutorizado.MensajePersonal = (string)sqlDataReader["aviso_personal"];
                        /*
                         Convertir byte to string
                         System.Text.Encoding enc = System.Text.Encoding.ASCII;
                         string myString = enc.GetString(myByteArray );
                        */
                        usuarioAutorizado.Permisos = (byte[])sqlDataReader["Permisos"];
                        usuarioAutorizado.Nombre = (string)sqlDataReader["Nombre"];
                        usuarioAutorizado.Plataforma = (int)sqlDataReader["Plataforma"];
                        //cuentas de aliados comerciales comienzan con <'aliado'>, el cual no se le muestra al cliente
                        if (usuarioAutorizado.Nombre.StartsWith("<"))
                            usuarioAutorizado.Nombre.Substring(usuarioAutorizado.Cliente.IndexOf('>') + 1).Trim();

                        usuarioAutorizado.HoraRegistro = DateTime.Now;
                        usuarioAutorizado.Status = (int)TipoEstadoAutentificacion.Autorizado;
                        #endregion
                    }
                }

                // código para concatenar los avisos de reportes automáticos por vencer
                if (!string.IsNullOrEmpty(usuarioAutorizado.Cliente))
                {
                    if (!usuarioAutorizado.Usuario.EndsWith("SC"))
                    {
                        System.Collections.ArrayList aMensajesDeCliente = new System.Collections.ArrayList();
                        query = "SELECT     aviso FROM         AutomaticosPorVencer WHERE     (clienteid = '" + usuarioAutorizado.Cliente + "')";
                        using (SqlCommand cmd = new SqlCommand(query, sqlConnection))
                        {
                            using (SqlDataReader rdr = cmd.ExecuteReader())
                            {
                                while (rdr.Read())
                                {
                                    if (!rdr.IsDBNull(0))
                                        aMensajesDeCliente.Add(rdr.GetString(0));
                                }
                            }
                        }

                        if (aMensajesDeCliente.Count > 0)
                        {
                            Console.WriteLine("La cuenta autentificada tiene reportes automáticos por vencer");
                            if (usuarioAutorizado.MensajePersonal == "")
                            {
                                if (aMensajesDeCliente.Count == 1)
                                {
                                    usuarioAutorizado.MensajePersonal = "Uno de sus reportes automáticos configurados está por vencer:\n\n";
                                    usuarioAutorizado.MensajePersonal += " - " + aMensajesDeCliente[0].ToString();
                                    usuarioAutorizado.MensajePersonal += "\n\nLe sugerimos ampliar la fecha de término si desea seguir recibiendo el reporte automático.";
                                }
                                else
                                {
                                    usuarioAutorizado.MensajePersonal = "Sus siguientes reportes automáticos configurados están por vencer:\n\n";
                                    foreach (string var in aMensajesDeCliente)
                                    {
                                        usuarioAutorizado.MensajePersonal += " -" + var + "\n";
                                    }
                                    usuarioAutorizado.MensajePersonal += "\nLe sugerimos ampliar la fecha de término si desea seguir recibiendo estos reportes automáticos.";
                                }
                            }
                            else
                            {
                                if (aMensajesDeCliente.Count == 1)
                                {
                                    usuarioAutorizado.MensajePersonal += "\n\nUno de sus reportes automáticos configurados está por vencer:\n\n";
                                    usuarioAutorizado.MensajePersonal += " - " + aMensajesDeCliente[0].ToString();
                                    usuarioAutorizado.MensajePersonal += "\n\nLe sugerimos ampliar la fecha de término si desea seguir recibiendo el reporte automático.";
                                }
                                else
                                {
                                    usuarioAutorizado.MensajePersonal += "\n\nSus siguientes reportes automáticos configurados están por vencer:\n\n";
                                    foreach (string var in aMensajesDeCliente)
                                    {
                                        usuarioAutorizado.MensajePersonal += " -" + var + "\n";
                                    }
                                    usuarioAutorizado.MensajePersonal += "\nLe sugerimos ampliar la fecha de término si desea seguir recibiendo estos reportes automáticos.";
                                }
                            }
                        }
                    }
                }
            }
        }

        // regresar el usuarioAutorizado, ya sea que lo encontró o no.
        return usuarioAutorizado;
    }