public Respuesta Login([FromBody] Usuario usuario_login)
        {
            int       login_type = 2;
            Respuesta respuesta  = new Respuesta(); respuesta.resultado = 0;

            try
            {
                using (MacEntities db = new MacEntities())
                {
                    var usuario = (from u in db.tbl_usuarios
                                   where u.usuario == usuario_login.nombre_usuario
                                   select u).FirstOrDefault();
                    if (usuario == null)
                    {
                        respuesta.mensaje = "Usuario no encontrado."; return(respuesta);
                    }
                    if (!(bool)usuario.activo)
                    {
                        respuesta.mensaje = "Usuario inactivo."; return(respuesta);
                    }

                    Token api_token = new Token()
                    {
                        login_clave = false
                    };
                    //var clave2 = Tools.GetSHA256(usuario_login.clave);
                    var clave2 = usuario_login.clave;
                    if (usuario.clave != clave2)
                    {
                        if (usuario.clave == usuario_login.clave && usuario.clave2 == null)
                        {
                            api_token.login_clave = false;
                        }
                        else
                        {
                            respuesta.mensaje = "Contraseña incorrecta."; return(respuesta);
                        }
                    }



                    var token = (from t in db.tbl_api_tokens
                                 where t.id_usuario == usuario.id &&
                                 t.estatus == 1
                                 select t).FirstOrDefault();

                    if (token != null)
                    {
                        token.estatus         = 0;
                        db.Entry(token).State = System.Data.Entity.EntityState.Modified;
                        if (db.SaveChanges() < 1)
                        {
                            respuesta.mensaje = "Su sesión previa no pudo ser cerrada."; return(respuesta);
                        }
                    }//if token !=null
                    string         token_string = Guid.NewGuid().ToString();
                    tbl_api_tokens new_token    = new tbl_api_tokens()
                    {
                        id_usuario     = usuario.id,
                        estatus        = 1,
                        nombre         = usuario.nombre.ToString(),
                        apellido       = usuario.apellido.ToString(),
                        fecha_registro = DateTime.Now,
                        id_centro      = usuario.id_centro,
                        token          = Tools.GetSHA256(token_string)
                    };

                    db.tbl_api_tokens.Add(new_token);
                    if (db.SaveChanges() < 1)
                    {
                        respuesta.mensaje = "No se pudo iniciar una nueva sesión.";
                        return(respuesta);
                    }
                    api_token.rol        = (int)usuario.id_rol;
                    api_token.usuario    = usuario.usuario;
                    api_token.id_usuario = (int)new_token.id_usuario;
                    api_token.nombre     = usuario.nombre;
                    api_token.apellido   = usuario.apellido;
                    api_token.token      = token_string;
                    api_token.id_centro  = (int)usuario.id_centro;

                    respuesta.mensaje   = "Inicio de sesión exitoso.";
                    respuesta.resultado = 1;
                    respuesta.data      = api_token;
                } //using
            }     //try
            catch (DbEntityValidationException ex)
            {
                respuesta.mensaje = "Errores econtrados.";
                List <Error> error_list = new List <Error>();
                foreach (var errors in ex.EntityValidationErrors)
                {
                    foreach (var error in errors.ValidationErrors)
                    {
                        // get the error message
                        error_list.Add(new Error(error.ErrorMessage));
                    } //inner foreach
                }     //foreach
                respuesta.data = error_list;
            }         //DbEntityValidationException ex
            catch (Exception e) { respuesta.mensaje = "Error, intente mas tarde."; respuesta.data = e; }



            try
            {
                using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["APIDB"].ConnectionString))
                {
                    connection.Open();
                    SqlTransaction transaction = connection.BeginTransaction();
                    SqlCommand     cmd         = new SqlCommand($"select * from tbl_usuarios where nombre={usuario_login.nombre };", connection, transaction);
                    cmd.CommandType = CommandType.Text;

                    //List<Template> templates = new List<Template>();
                    Template templateData = new Template();

                    using (var rdr = cmd.ExecuteReader())
                    {
                        rdr.Read();

                        //templateData = new Template
                        //{
                        //    id = GetNullable<int>(rdr, nameof(templateData.id)),
                        //    name = rdr[nameof(templateData.name)].ToString(),
                        //    description = rdr[nameof(templateData.description)].ToString(),
                        //    date_reg = GetNullable<DateTime>(rdr, nameof(templateData.date_reg)),
                        //    user_reg = rdr[nameof(templateData.user_reg)].ToString(),
                        //    status = GetNullable<int>(rdr, nameof(templateData.status)),
                        //    url = rdr[nameof(templateData.url)].ToString(),
                        //};

                        //templates.Add(templateData);


                        rdr.Close();
                        respuesta.resultado = 1;
                        respuesta.mensaje   = "Operación exitosa";

                        respuesta.data = templateData;
                    }
                }
            }
            catch (Exception ex)
            {
                respuesta.resultado = 0;
                respuesta.mensaje   = ex.Message;
                respuesta.data      = ex;
            }

            return(respuesta);
        }//login
        public Respuesta login([FromBody] Usuario usuario_login)
        {
            int       login_type = 2;
            Respuesta respuesta  = new Respuesta(); respuesta.resultado = 0;

            try
            {
                using (MacEntities db = new MacEntities())
                {
                    var usuario = (from u in db.tbl_usuarios
                                   where u.usuario == usuario_login.nombre_usuario
                                   select u).FirstOrDefault();
                    if (usuario == null)
                    {
                        respuesta.mensaje = "Usuario no encontrado."; return(respuesta);
                    }
                    if (!(bool)usuario.activo)
                    {
                        respuesta.mensaje = "Usuario inactivo."; return(respuesta);
                    }

                    Token api_token = new Token()
                    {
                        login_clave = false
                    };
                    //var clave2 = Tools.GetSHA256(usuario_login.clave);
                    var clave2 = usuario_login.clave;
                    if (usuario.clave != clave2)
                    {
                        if (usuario.clave == usuario_login.clave && usuario.clave2 == null)
                        {
                            api_token.login_clave = false;
                        }
                        else
                        {
                            respuesta.mensaje = "Contraseña incorrecta."; return(respuesta);
                        }
                    }



                    var token = (from t in db.tbl_api_tokens
                                 where t.id_usuario == usuario.id &&
                                 t.estatus == 1
                                 select t).FirstOrDefault();

                    if (token != null)
                    {
                        token.estatus         = 0;
                        db.Entry(token).State = System.Data.Entity.EntityState.Modified;
                        if (db.SaveChanges() < 1)
                        {
                            respuesta.mensaje = "Su sesión previa no pudo ser cerrada."; return(respuesta);
                        }
                    }//if token !=null
                    string         token_string = Guid.NewGuid().ToString();
                    tbl_api_tokens new_token    = new tbl_api_tokens()
                    {
                        id_usuario     = usuario.id,
                        estatus        = 1,
                        nombre         = usuario.nombre.ToString(),
                        apellido       = usuario.apellido.ToString(),
                        fecha_registro = DateTime.Now,
                        id_centro      = usuario.id_centro,
                        token          = Tools.GetSHA256(token_string)
                    };

                    db.tbl_api_tokens.Add(new_token);
                    if (db.SaveChanges() < 1)
                    {
                        respuesta.mensaje = "No se pudo iniciar una nueva sesión.";
                        return(respuesta);
                    }
                    api_token.rol        = (int)usuario.id_rol;
                    api_token.usuario    = usuario.usuario;
                    api_token.id_usuario = (int)new_token.id_usuario;
                    api_token.nombre     = usuario.nombre;
                    api_token.apellido   = usuario.apellido;
                    api_token.token      = token_string;
                    api_token.id_centro  = (int)usuario.id_centro;


                    var calendario =
                        (from ca in db.tbl_usuarios_calendarios
                         where ca.id_usuario == usuario.id
                         select ca).FirstOrDefault();

                    if (calendario.url_calendario == null || calendario.url_calendario == "" || calendario == null)
                    {
                        api_token.calendar = false;
                    }
                    else
                    {
                        api_token.calendar = true;
                    }


                    respuesta.mensaje   = "Inicio de sesión exitoso.";
                    respuesta.resultado = 1;
                    respuesta.data      = api_token;
                } //using
            }     //try
            catch (DbEntityValidationException ex)
            {
                respuesta.mensaje = "Errores econtrados.";
                List <Error> error_list = new List <Error>();
                foreach (var errors in ex.EntityValidationErrors)
                {
                    foreach (var error in errors.ValidationErrors)
                    {
                        // get the error message
                        error_list.Add(new Error(error.ErrorMessage));
                    } //inner foreach
                }     //foreach
                respuesta.data = error_list;
            }         //DbEntityValidationException ex
            catch (Exception e) { respuesta.mensaje = "Error, intente mas tarde."; respuesta.data = e; }

            return(respuesta);
        }//login