public async Task CreateAsync(Usuario usuario)
        {
            try
            {
                var c = crudUsuario.Exists <Usuario>(usuario);

                if (c != null)
                {
                    // Ya existe un usuario con esos datos
                    throw new BussinessException(10);
                }

                crudUsuario.Create(usuario);

                var mng = new Rol_UsuarioManager();
                foreach (string rol in usuario.Roles)
                {
                    var rolUsuario = new Rol_Usuario
                    {
                        IdRol     = rol,
                        IdUsuario = usuario.Identificacion
                    };

                    mng.Create(rolUsuario);
                }

                Response response = await EnviarCorreoManager.GetInstance().ExecuteVerificacionUsuario(usuario);
            }
            catch (Exception ex)
            {
                ExceptionManager.GetInstance().Process(ex);
            }
        }
        private string[] GetRolesUsuario(string id)
        {
            var mng        = new Rol_UsuarioManager();
            var rolUsuario = new Rol_Usuario
            {
                IdUsuario = id
            };

            String[] roles = mng.RetrieveAllById(rolUsuario).Select(p => p.IdRol).ToArray();
            return(roles);
        }
        public async Task CreateYEnviar(LlaveQR llave, Usuario usuario)
        {
            try
            {
                UsuarioManager mngU = new UsuarioManager();
                Usuario        u    = null;
                try
                {
                    u = mngU.RetrieveAll().FindAll(FindCorreo).First <Usuario>();
                }
                catch (Exception ex)
                {
                    throw new BussinessException(12);
                }
                //validar si existe
                if (u != null)
                {
                    //validar estado del usuario
                    switch (u.ValorEstado)
                    {
                    case "3":
                        //El usuario existe pero aún no ha verificado su cuenta
                        throw new BussinessException(8);

                    case "2":
                        //El usuario existe pero su contraseña ha expirado
                        throw new BussinessException(9);

                    case "0":
                        //El usuario existe pero se encuentra inactivo
                        throw new BussinessException(9);
                    }

                    var mngRoles   = new Rol_UsuarioManager();
                    var rolUsuario = new Rol_Usuario
                    {
                        IdUsuario = u.Identificacion,
                        IdRol     = "CLT"
                    };
                    var roles = mngRoles.RetrieveAllById(rolUsuario);
                    //validar que el usuario sea un cliente

                    foreach (Rol_Usuario rol in roles)
                    {
                        if (rol.IdRol.Equals("CLT") == false)
                        {
                            throw new Exception("El usuario no es válido");
                        }
                    }


                    var QR = new LlaveQR();
                    do
                    {
                        llave.CodigoQR = RandomString(8);
                        QR             = crudLlaveQR.Retrieve <LlaveQR>(llave);
                    } while (QR != null);

                    llave.ImagenQR = getImagenQR(llave.CodigoQR);

                    crudLlaveQR.Create(llave);
                    await EnviarCorreoManager.GetInstance().ExecuteCorreoCodigoQR(u.Correo, llave);
                }
                else
                {
                    //no existe ese usuario
                    throw new BussinessException(12);
                }

                bool FindCorreo(Usuario usu)
                {
                    if (usu.Correo == usuario.Correo)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.GetInstance().Process(ex);
            }
        }
        public List <Hotel> GetHotelesPorUsuario(string id)
        {
            var mngRoles   = new Rol_UsuarioManager();
            var rolUsuario = new Rol_Usuario
            {
                IdUsuario = id
            };
            List <Hotel> allHoteles = RetrieveAll();
            var          roles      = mngRoles.RetrieveAllById(rolUsuario);

            if (roles == null)
            {
                return(allHoteles.FindAll(FindHotelesActivos));
            }

            foreach (Rol_Usuario rol in roles)
            {
                switch (rol.IdRol)
                {
                case "ADM":
                    return(allHoteles);

                case "GRT":
                    return(allHoteles.FindAll(FindHotelesGerente));

                case "CLT":
                    return(allHoteles.FindAll(FindHotelesActivos));

                default:
                    Hotel usuarioHotel = new Hotel()
                    {
                        IdGerente = id
                    };
                    return(allHoteles = crudHotel.RetrieveAllByRol <Hotel>(usuarioHotel));
                }
            }
            return(allHoteles.FindAll(FindHotelesActivos));

            bool FindHotelesGerente(Hotel hotel)
            {
                if (hotel.IdGerente == id)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }

            bool FindHotelesActivos(Hotel hotel)
            {
                if (hotel.Estado == "Activo")
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }