public ActionResult Desativar(int id)
        {
            #region validacao usuario logado

            //se a sessão de usuário não estiver preenchida, direciona para a tela de login
            if (Session["UsuarioLogado"] == null)
            {
                return(RedirectToAction("Index", "Login"));
            }

            //recebe o usuário logado
            usuarioLogado = (UsuarioLoja)(Session["UsuarioLogado"]);

            #endregion

            UsuarioLoja usuarioLoja = new UsuarioLoja()
            {
                Id     = id,
                IdLoja = usuarioLogado.IdLoja,
                Ativo  = false
            };

            string urlPost = "/Usuario/DesativarUsuarioLoja";

            retornoRequest = rest.Post(urlPost, usuarioLoja);

            return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult Editar(int id)
        {
            try
            {
                #region validacao usuario logado

                //se a sessão de usuário não estiver preenchida, direciona para a tela de login
                if (Session["UsuarioLogado"] == null)
                {
                    return(RedirectToAction("Index", "Login"));
                }

                //recebe o usuário logado
                usuarioLogado = (UsuarioLoja)(Session["UsuarioLogado"]);

                #endregion

                #region limpa as viewbags de mensagem

                ViewBag.MensagemCarregamentoEditarUsuario = null;

                #endregion

                UsuarioLoja usuarioLoja = new UsuarioLoja();

                //busca todos os cardápios da loja
                retornoRequest = rest.Get("/Usuario/BuscarUsuarioLoja/" + id);

                //se ocorrer algum erro
                if (retornoRequest.HttpStatusCode != HttpStatusCode.OK)
                {
                    ViewBag.MensagemCarregamentoEditarUsuario = retornoRequest.objeto.ToString();
                    return(View());
                }

                string jsonRetorno = retornoRequest.objeto.ToString();

                usuarioLoja = JsonConvert.DeserializeObject <UsuarioLoja>(jsonRetorno);

                return(View(usuarioLoja));
            }
            catch (Exception)
            {
                ViewBag.MensagemCarregamentoEditarUsuario = "Não foi consultar o usuário. Por favor, tente novamente ou entre em contato com nosso suporte.";
                return(View());
            }
        }
        public ActionResult AdicionarUsuario(UsuarioLoja usuarioLoja)
        {
            #region validacao usuario logado

            //se a sessão de usuário não estiver preenchida, direciona para a tela de login
            if (Session["UsuarioLogado"] == null)
            {
                return(RedirectToAction("Index", "Login"));
            }

            //recebe o usuário logado
            usuarioLogado = (UsuarioLoja)(Session["UsuarioLogado"]);

            #endregion

            #region limpa as viewbags de mensagem

            ViewBag.MensagemCadUsuario = null;

            #endregion

            #region validação dos campos

            //validação dos campos
            if (!ModelState.IsValid)
            {
                return(View("Adicionar", usuarioLoja));
            }

            #endregion

            //variável para armazenar a senha original
            string senhaSemCrip = null;

            DadosRequisicaoRest retornoRequest = new DadosRequisicaoRest();

            try
            {
                string urlPost = "/Usuario/Cadastrar/UsuarioLoja/" + usuarioLogado.UrlLoja;

                //variável para armazenar a senha original
                senhaSemCrip = usuarioLoja.Senha;

                //criptografa a senha do usuário
                usuarioLoja.Senha = CriptografiaMD5.GerarHashMd5(usuarioLoja.Senha);

                usuarioLoja.IdLoja = usuarioLogado.IdLoja;
                retornoRequest     = rest.Post(urlPost, usuarioLoja);

                if (retornoRequest.HttpStatusCode == HttpStatusCode.Unauthorized)
                {
                    usuarioLoja.Senha          = senhaSemCrip;
                    ViewBag.MensagemCadUsuario = "Já existe um usuário com este e-mail. Por favor, verifique os dados digitados";
                    return(View("Adicionar", usuarioLoja));
                }

                if (retornoRequest.HttpStatusCode != HttpStatusCode.Created)
                {
                    usuarioLoja.Senha          = senhaSemCrip;
                    ViewBag.MensagemCadUsuario = "Não foi possivel cadastrar o usuário. Por favor, tente novamente ou entre em contato com nosso suporte.";
                    return(View("Adicionar", usuarioLoja));
                }

                return(RedirectToAction("Index", "Usuario"));
            }
            catch (Exception)
            {
                usuarioLoja.Senha          = senhaSemCrip;
                ViewBag.MensagemCadUsuario = "Não foi possivel cadastrar o usuário. Por favor, tente novamente ou entre em contato com nosso suporte.";
                return(View("Adicionar", usuarioLoja));
            }
        }
        public ActionResult EditarUsuario(UsuarioLoja usuarioLoja)
        {
            #region validacao usuario logado

            //se a sessão de usuário não estiver preenchida, direciona para a tela de login
            if (Session["UsuarioLogado"] == null)
            {
                return(RedirectToAction("Index", "Login"));
            }

            //recebe o usuário logado
            usuarioLogado = (UsuarioLoja)(Session["UsuarioLogado"]);

            #endregion

            #region limpa as viewbags de mensagem

            ViewBag.MensagemEditarUsuario = null;

            #endregion

            #region validação dos campos

            //validação dos campos
            if (!ModelState.IsValid)
            {
                return(View("Editar", usuarioLoja));
            }

            #endregion

            //variável para armazenar a senha original
            string senhaSemCrip = null;

            //variável para armazenar o retorno da requisição
            DadosRequisicaoRest retornoRequest = new DadosRequisicaoRest();

            try
            {
                string urlPost = string.Format("/Usuario/AtualizarUsuarioLoja");

                //variável para armazenar a senha original
                senhaSemCrip = usuarioLoja.Senha;

                //criptografa a senha do usuário
                usuarioLoja.Senha = CriptografiaMD5.GerarHashMd5(usuarioLoja.Senha);

                usuarioLoja.IdLoja = usuarioLogado.IdLoja;
                retornoRequest     = rest.Post(urlPost, usuarioLoja);

                if (retornoRequest.HttpStatusCode != HttpStatusCode.OK)
                {
                    usuarioLoja.Senha             = senhaSemCrip;
                    ViewBag.MensagemEditarUsuario = retornoRequest.objeto.ToString();
                    return(View("Editar", usuarioLoja));
                }

                return(RedirectToAction("Index", "Usuario"));
            }
            catch (Exception)
            {
                usuarioLoja.Senha             = senhaSemCrip;
                ViewBag.MensagemEditarUsuario = "Não foi possível atualizar o usuario. Por favor, tente novamente ou entre em contato com nosso suporte.";
                return(View("Editar", usuarioLoja));
            }
        }
        public ActionResult Autenticar(Usuario usuario)
        {
            //limpa a sessão de mensagem
            //Session["MensagemAutenticacao"] = null;

            #region limpa as viewbags de mensagem

            ViewBag.MensagemAutenticacao = null;

            #endregion

            //captura a loja em questão
            Session["dominioLoja"] = BuscarUrlLoja();

            //se não conseguir capturar a loja, direciona para a tela de erro
            if (Session["dominioLoja"] == null)
            {
                ViewBag.MensagemAutenticacao = "estamos com dificuldade em buscar dados no servidor. por favor, tente atualizar a página";
                return(View("Index", usuario));
            }

            if (string.IsNullOrEmpty(usuario.Email) || string.IsNullOrEmpty(usuario.Senha))
            {
                ViewBag.MensagemAutenticacao = "preencha o login e senha";
                return(View("Index", usuario));
            }


            string dominioLoja = Session["dominioLoja"].ToString();

            DadosRequisicaoRest retornoAutenticacao = new DadosRequisicaoRest();
            DadosRequisicaoRest retornoDadosUsuario = new DadosRequisicaoRest();

            string senha = null;

            try
            {
                senha         = usuario.Senha;
                usuario.Senha = CriptografiaMD5.GerarHashMd5(usuario.Senha);

                string urlPost = string.Format("/usuario/autenticar/{0}/'{1}'", TipoUsuario.Loja, dominioLoja);

                retornoAutenticacao = rest.Post(urlPost, usuario);

                //se o usuário for autenticado, direciona para a tela home
                if (retornoAutenticacao.HttpStatusCode == HttpStatusCode.Accepted)
                {
                    UsuarioLoja usuarioLogado = new UsuarioLoja();

                    try
                    {
                        //busca os dados do usuário
                        retornoDadosUsuario = rest.Post(string.Format("usuario/buscarPorEmail/{0}/{1}", TipoUsuario.Loja, dominioLoja), usuario);

                        //verifica se os dados do usuário foram encontrados
                        if (retornoDadosUsuario.HttpStatusCode != HttpStatusCode.OK)
                        {
                            throw new Exception();
                        }

                        //converte o usuario em objeto e seta a url da loja
                        usuarioLogado         = JsonConvert.DeserializeObject <UsuarioLoja>(retornoDadosUsuario.objeto.ToString());
                        usuarioLogado.UrlLoja = dominioLoja;

                        //armazena o usuário na sessão "usuarioLogado"
                        Session["usuarioLogado"] = usuarioLogado;

                        //limpa a sessão "usuarioLogin"
                        Session["usuarioLogin"] = null;

                        //se for o usuário for admin, direciona para a tela home
                        if (usuarioLogado.NivelPermissao == 1)
                        {
                            return(RedirectToAction("Index", "Home"));
                        }
                        //senão, direciona para a tela de pedidos
                        else
                        {
                            return(RedirectToAction("Index", "Pedido"));
                        }
                    }
                    //se não for possível consultar os dados do usuário
                    catch (Exception)
                    {
                        usuario.Senha = senha;
                        ViewBag.MensagemAutenticacao = "estamos com dificuldade em buscar dados no servidor. por favor, tente novamente";
                        return(View("Index", usuario));
                    }
                }
                else if (retornoAutenticacao.HttpStatusCode == HttpStatusCode.Unauthorized)
                {
                    usuario.Senha = senha;
                    ViewBag.MensagemAutenticacao = "usuário ou senha inválida";
                    return(View("Index", usuario));
                }

                //se for algum outro erro
                else
                {
                    usuario.Senha = senha;
                    ViewBag.MensagemAutenticacao = "não foi possível realizar o login. por favor, tente novamente";
                    return(View("Index", usuario));
                }
            }
            catch (Exception)
            {
                usuario.Senha = senha;
                ViewBag.MensagemAutenticacao = "não foi possível realizar o login. por favor, tente novamente";
                return(View("Index", usuario));
            }
        }