public async Task <ActionResult> MudarSenha(int?id)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_lerescrever_clienteempresausuario_mudarsenha))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        if (cliente_empresa_usuario == null)
                        {
                            return(HttpNotFound());
                        }

                        var empresa        = (int)Session["Empresa"];
                        var acesso_empresa = cliente_empresa_usuario.cus_empresa.Equals(empresa);

                        if (!acesso_empresa)
                        {
                            return(View("~/Views/Shared/_OutraEmpresa.cshtml"));
                        }

                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_lerescrever_clienteempresausuario_mudarsenha))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        if (cliente_empresa_usuario == null)
                        {
                            return(HttpNotFound());
                        }
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> MudarSenha([Bind(Include = "cus_codigo,cus_usuario,cus_senha,cus_lembrar_me,cus_nome,cus_sobrenome,cus_endereco,cus_numero,cus_complemento,cus_bairro,cus_cidade,cus_estado,cus_cep,cus_telefone,cus_email,cus_ativo,cus_empresa")] cliente_empresa_usuario cliente_empresa_usuario)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_lerescrever_clienteempresausuario_mudarsenha))
                    {
                        if (ModelState.IsValid)
                        {
                            cliente_empresa_usuario.cus_senha       = CriarMD5(cliente_empresa_usuario.cus_senha);
                            db.Entry(cliente_empresa_usuario).State = EntityState.Modified;
                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_lerescrever_clienteempresausuario_mudarsenha))
                    {
                        if (ModelState.IsValid)
                        {
                            cliente_empresa_usuario.cus_senha       = CriarMD5(cliente_empresa_usuario.cus_senha);
                            db.Entry(cliente_empresa_usuario).State = EntityState.Modified;
                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_lerescrever_clienteempresausuario_delete))
                    {
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        db.cliente_empresa_usuario.Remove(cliente_empresa_usuario);
                        await db.SaveChangesAsync();

                        return(RedirectToAction("Index"));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_lerescrever_clienteempresausuario_delete))
                    {
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        db.cliente_empresa_usuario.Remove(cliente_empresa_usuario);
                        await db.SaveChangesAsync();

                        return(RedirectToAction("Index"));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public ActionResult Login(LoginViewModel login, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                usuario_gerente         gerente_login = new usuario_gerente();
                cliente_empresa_usuario cliente_login = new cliente_empresa_usuario();
                //perfil_usuario_empresa perfil_usuario_empresa = new perfil_usuario_empresa();

                // Chama a função a criação de MD5 para que ambas as senhas (a que já existe no banco e a que está sendo inserida)
                // sejam as mesmas
                var validar_senha      = CriarMD5(login.mng_senha);
                var checar_uss_usuario = db.usuario_gerente.Where(m => m.uss_usuario.Equals(login.mng_usuario) && m.uss_senha.Equals(validar_senha) && m.uss_ativo.Equals(true)).FirstOrDefault();


                if (checar_uss_usuario != null)
                {
                    FormsAuthentication.SetAuthCookie(login.mng_usuario, login.mng_lembrar_me);
                    Session["UserId"]      = checar_uss_usuario.uss_codigo;
                    Session["UserName"]    = checar_uss_usuario.uss_nome;
                    Session["Empresa"]     = "0";
                    Session["NomeEmpresa"] = "gerente";


                    if (Url.IsLocalUrl(returnUrl))
                    {
                        return(Redirect(returnUrl));
                    }
                    else
                    {
                        return(RedirectToAction("Index", "Home"));
                    }
                }
                else
                {
                    var checar_cli_usuario = db.cliente_empresa_usuario.Where(m => m.cus_usuario.Equals(login.mng_usuario) && m.cus_senha.Equals(validar_senha) && m.cus_ativo.Equals(true)).FirstOrDefault();
                    if (checar_cli_usuario != null)
                    {
                        FormsAuthentication.SetAuthCookie(login.mng_usuario, login.mng_lembrar_me);
                        // Variáveis para a sessão
                        Session["UserId"]      = checar_cli_usuario.cus_codigo;
                        Session["UserName"]    = checar_cli_usuario.cus_nome;
                        Session["Empresa"]     = checar_cli_usuario.cus_empresa;
                        Session["NomeEmpresa"] = checar_cli_usuario.cliente_empresa.cle_razaosocial_principal;

                        if (Url.IsLocalUrl(returnUrl))
                        {
                            return(Redirect(returnUrl));
                        }
                        else
                        {
                            return(RedirectToAction("Index", "Home"));
                        }
                    }
                }
            }
            else
            {
                ModelState.AddModelError("", "Usuário ou Senha Inválidos");
            }
            return(View(login));
        }
        public async Task <ActionResult> Details(int?id)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_ler_clienteempresausuario_details))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        if (cliente_empresa_usuario == null)
                        {
                            return(HttpNotFound());
                        }

                        // Valida se o id procurado faz parte da empresa e exiba. Caso contrário, mostra uma
                        // página dizendo que não faz parte da empresa.
                        var empresa        = (int)Session["Empresa"];
                        var acesso_empresa = cliente_empresa_usuario.cus_empresa.Equals(empresa);

                        if (!acesso_empresa)
                        {
                            return(View("~/Views/Shared/_OutraEmpresa.cshtml"));
                        }

                        // Término da validação da empresa

                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_ler_clienteempresausuario_details))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        if (cliente_empresa_usuario == null)
                        {
                            return(HttpNotFound());
                        }
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> Edit([Bind(Include = "cus_codigo,cus_usuario,cus_senha,cus_lembrar_me,cus_nome,cus_sobrenome,cus_endereco,cus_numero,cus_complemento,cus_bairro,cus_cidade,cus_estado,cus_cep,cus_telefone,cus_email,cus_ativo,cus_empresa,cus_ativo_anterior")] cliente_empresa_usuario cliente_empresa_usuario, string estados)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_lerescrever_clienteempresausuario_edit))
                    {
                        if (ModelState.IsValid)
                        {
                            cliente_empresa_usuario.cus_estado      = estados;
                            db.Entry(cliente_empresa_usuario).State = EntityState.Modified;

                            if (cliente_empresa_usuario.cus_ativo_anterior && !cliente_empresa_usuario.cus_ativo || !cliente_empresa_usuario.cus_ativo_anterior && cliente_empresa_usuario.cus_ativo)
                            {
                                var             empresa         = cliente_empresa_usuario.cus_empresa;
                                cliente_empresa cliente_empresa = await db.cliente_empresa.FindAsync(empresa);

                                var usuario_ativo = cliente_empresa.cle_quantidade_usuario_ativo;

                                if (cliente_empresa_usuario.cus_ativo)
                                {
                                    usuario_ativo++;
                                    cliente_empresa.cle_quantidade_usuario_ativo = usuario_ativo;
                                    db.Entry(cliente_empresa).State = EntityState.Modified;
                                }

                                if (!cliente_empresa_usuario.cus_ativo)
                                {
                                    usuario_ativo--;
                                    cliente_empresa.cle_quantidade_usuario_ativo = usuario_ativo;
                                    db.Entry(cliente_empresa).State = EntityState.Modified;
                                }
                            }

                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }
                        ViewBag.cus_empresa = new SelectList(db.cliente_empresa, "cle_codigo", "cle_razaosocial_principal", cliente_empresa_usuario.cus_empresa);
                        ViewBag.Estados     = new SelectList(new Estados().ListaEstados(), "data_sigla_estado", "data_nome_estado");
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_lerescrever_clienteempresausuario_edit))
                    {
                        if (ModelState.IsValid)
                        {
                            cliente_empresa_usuario.cus_estado      = estados;
                            db.Entry(cliente_empresa_usuario).State = EntityState.Modified;

                            if (cliente_empresa_usuario.cus_ativo_anterior && !cliente_empresa_usuario.cus_ativo || !cliente_empresa_usuario.cus_ativo_anterior && cliente_empresa_usuario.cus_ativo)
                            {
                                var             empresa         = cliente_empresa_usuario.cus_empresa;
                                cliente_empresa cliente_empresa = await db.cliente_empresa.FindAsync(empresa);

                                var usuario_ativo = cliente_empresa.cle_quantidade_usuario_ativo;

                                if (cliente_empresa_usuario.cus_ativo)
                                {
                                    usuario_ativo++;
                                    cliente_empresa.cle_quantidade_usuario_ativo = usuario_ativo;
                                    db.Entry(cliente_empresa).State = EntityState.Modified;
                                }

                                if (!cliente_empresa_usuario.cus_ativo)
                                {
                                    usuario_ativo--;
                                    cliente_empresa.cle_quantidade_usuario_ativo = usuario_ativo;
                                    db.Entry(cliente_empresa).State = EntityState.Modified;
                                }
                            }

                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }
                        ViewBag.cus_empresa = new SelectList(db.cliente_empresa, "cle_codigo", "cle_razaosocial_principal", cliente_empresa_usuario.cus_empresa);
                        ViewBag.Estados     = new SelectList(new Estados().ListaEstados(), "data_sigla_estado", "data_nome_estado");
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> Edit(int?id)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_lerescrever_clienteempresaunidade_edit))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        if (cliente_empresa_usuario == null)
                        {
                            return(HttpNotFound());
                        }

                        var empresa        = (int)Session["Empresa"];
                        var acesso_empresa = cliente_empresa_usuario.cus_empresa.Equals(empresa);

                        if (!acesso_empresa)
                        {
                            return(View("~/Views/Shared/_OutraEmpresa.cshtml"));
                        }

                        // envia para a view o valor original de cus_ativo (pra ver se estava ativo ou não) para depois
                        // retornar o valor original ao posto para que sejam feitas as comparações necessárias
                        cliente_empresa_usuario.cus_ativo_anterior = cliente_empresa_usuario.cus_ativo;

                        ViewBag.cus_empresa = new SelectList(db.cliente_empresa.ToList().Where(x => x.cle_codigo == (int)Session["Empresa"]), "cle_codigo", "cle_razaosocial_principal");
                        ViewBag.Estados     = new SelectList(new Estados().ListaEstados(), "data_sigla_estado", "data_nome_estado");
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_lerescrever_clienteempresausuario_edit))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        cliente_empresa_usuario cliente_empresa_usuario = await db.cliente_empresa_usuario.FindAsync(id);

                        if (cliente_empresa_usuario == null)
                        {
                            return(HttpNotFound());
                        }

                        // envia para a view o valor original de cus_ativo (pra ver se estava ativo ou não) para depois
                        // retornar o valor original ao posto para que sejam feitas as comparações necessárias
                        cliente_empresa_usuario.cus_ativo_anterior = cliente_empresa_usuario.cus_ativo;

                        ViewBag.cus_empresa = new SelectList(db.cliente_empresa, "cle_codigo", "cle_razaosocial_principal", cliente_empresa_usuario.cus_empresa);
                        ViewBag.Estados     = new SelectList(new Estados().ListaEstados(), "data_sigla_estado", "data_nome_estado");
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> Create([Bind(Include = "cus_codigo,cus_usuario,cus_senha,cus_lembrar_me,cus_nome,cus_sobrenome,cus_endereco,cus_numero,cus_complemento,cus_bairro,cus_cidade,cus_estado,cus_cep,cus_telefone,cus_email,cus_ativo,cus_empresa,cus_empresa_unidade")] cliente_empresa_usuario cliente_empresa_usuario, string estados)
        {
            if (Session["Empresa"] != null || Session["UserId"] != null)
            {
                if (Session["Empresa"].ToString() != "0")
                {
                    var acesso_perfil = new List <perfil_usuario_acesso>(db.perfil_usuario_acesso.ToList().Where(x => x.pua_usuariocliente == (int)Session["UserId"]));

                    if (acesso_perfil != null && acesso_perfil.Any(x => x.pua_lerescrever_clienteempresausuario_create))
                    {
                        var empresa = (int)Session["Empresa"];

                        if (ModelState.IsValid)
                        {
                            // Adiciona 1 ao número de usuários ativos
                            //var empresa = (int)Session["Empresa"];
                            cliente_empresa cliente_empresa = await db.cliente_empresa.FindAsync(empresa);

                            var usuario_ativo = cliente_empresa.cle_quantidade_usuario_ativo;
                            usuario_ativo++;
                            cliente_empresa.cle_quantidade_usuario_ativo = usuario_ativo;
                            db.Entry(cliente_empresa).State = EntityState.Modified;

                            // Permite que o Usuário só seja criado nessa empresa caso não seja criado ou editado pela gerente
                            cliente_empresa_usuario.cus_empresa = (int)Session["Empresa"];
                            cliente_empresa_usuario.cus_estado  = estados;
                            cliente_empresa_usuario.cus_senha   = CriarMD5(cliente_empresa_usuario.cus_senha);
                            cliente_empresa_usuario.cus_ativo   = true;
                            db.cliente_empresa_usuario.Add(cliente_empresa_usuario);

                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }


                        ViewBag.cus_empresa = new SelectList(db.cliente_empresa, "cle_codigo", "cle_razaosocial_principal", cliente_empresa_usuario.cus_empresa);
                        ViewBag.Estados     = new SelectList(new Estados().ListaEstados(), "data_sigla_estado", "data_nome_estado");
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
                else
                {
                    var acesso_perfil_gerente = new List <perfis_usuario>(db.perfis_usuario.ToList().Where(x => x.pus_usuariogerente == (int)Session["UserId"]));

                    if (acesso_perfil_gerente != null && acesso_perfil_gerente.Any(x => x.pus_lerescrever_clienteempresausuario_create))
                    {
                        if (ModelState.IsValid)
                        {
                            // Adiciona 1 ao número de usuários ativos
                            var             empresa         = cliente_empresa_usuario.cus_empresa;
                            cliente_empresa cliente_empresa = await db.cliente_empresa.FindAsync(empresa);

                            var usuario_ativo = cliente_empresa.cle_quantidade_usuario_ativo;
                            usuario_ativo++;
                            cliente_empresa.cle_quantidade_usuario_ativo = usuario_ativo;
                            db.Entry(cliente_empresa).State = EntityState.Modified;


                            cliente_empresa_usuario.cus_estado = estados;
                            cliente_empresa_usuario.cus_senha  = CriarMD5(cliente_empresa_usuario.cus_senha);
                            cliente_empresa_usuario.cus_ativo  = true;
                            db.cliente_empresa_usuario.Add(cliente_empresa_usuario);

                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }
                        ViewBag.cus_empresa = new SelectList(db.cliente_empresa, "cle_codigo", "cle_razaosocial_principal", cliente_empresa_usuario.cus_empresa);
                        ViewBag.Estados     = new SelectList(new Estados().ListaEstados(), "data_sigla_estado", "data_nome_estado");
                        return(View(cliente_empresa_usuario));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }