/*****************************************
        *                                       *
        *                DELETE                 *
        *                                       *
        *****************************************/


        // GET: PerfilUsuarioAcesso/Delete/5 - Mostrar a página de exclusão dos acessos do usuário selecionado. A numeração no
        // comentário serve para mostrar qual o índice (o ID do ítem) no banco.
        public async Task <ActionResult> Delete(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_perfilusuarioacesso_delete == true))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        perfil_usuario_acesso perfil_usuario_acesso = await db.perfil_usuario_acesso.FindAsync(id);

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

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

                        if (!acesso_empresa)
                        {
                            return(View("~/Views/Shared/_OutraEmpresa.cshtml"));
                        }
                        ViewBag.pua_usuariocliente = new SelectList(db.cliente_empresa_usuario, "cus_codigo", "cus_usuario");
                        return(View(perfil_usuario_acesso));
                    }
                    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_perfilusuarioacesso_delete))
                    {
                        if (id == null)
                        {
                            return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
                        }
                        perfil_usuario_acesso perfil_usuario_acesso = await db.perfil_usuario_acesso.FindAsync(id);

                        if (perfil_usuario_acesso == null)
                        {
                            return(HttpNotFound());
                        }
                        ViewBag.pua_usuariocliente = new SelectList(db.cliente_empresa_usuario, "cus_codigo", "cus_usuario");
                        return(View(perfil_usuario_acesso));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> Edit([Bind(Include = "pua_codigo,pua_lerescrever_clienteempresaunidade_create,pua_lerescrever_clienteempresaunidade_delete,pua_ler_clienteempresaunidade_details,pua_lerescrever_clienteempresaunidade_edit,pua_ler_clienteempresaunidade_index,pua_lerescrever_clienteempresausuario_create,pua_lerescrever_clienteempresausuario_delete,pua_ler_clienteempresausuario_details,pua_lerescrever_clienteempresausuario_edit,pua_ler_clienteempresausuario_index,pua_lerescrever_clienteempresausuario_mudarsenha,pua_lerescrever_perfilusuarioempresa_create,pua_lerescrever_perfilusuarioempresa_delete,pua_ler_perfilusuarioempresa_details,pua_lerescrever_perfilusuarioempresa_edit,pua_ler_perfilusuarioempresa_index,pua_lerescrever_perfilusuarioacesso_create,pua_lerescrever_perfilusuarioacesso_delete,pua_ler_perfilusuarioacesso_details,pua_lerescrever_perfilusuarioacesso_edit,pua_ler_perfilusuarioacesso_index,pua_usuariocliente")] perfil_usuario_acesso perfil_usuario_acesso) // pua_lerescrever_clienteempresa_create,pua_lerescrever_clienteempresa_delete,pua_ler_clienteempresa_details,pua_lerescrever_clienteempresa_edit,pua_ler_clienteempresa_index
        {
            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"]));

                    // Traz o valor de pua_lerescrever_usuarioacesso_edit sem trazer o objeto inteiro
                    var user_id       = (int)Session["UserId"];
                    var acesso_perfil = db.perfil_usuario_acesso.AsNoTracking().SingleOrDefault(x => x.pua_usuariocliente == user_id).pua_lerescrever_perfilusuarioacesso_edit;

                    if (acesso_perfil)
                    {
                        if (ModelState.IsValid)
                        {
                            db.Entry(perfil_usuario_acesso).State = EntityState.Modified;
                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }

                        ViewBag.pua_usuariocliente = new SelectList(db.cliente_empresa_usuario, "cus_codigo", "cus_usuario", perfil_usuario_acesso.pua_usuariocliente);
                        return(View(perfil_usuario_acesso));
                    }
                    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_perfilusuarioacesso_edit))
                    {
                        if (ModelState.IsValid)
                        {
                            db.Entry(perfil_usuario_acesso).State = EntityState.Modified;
                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }

                        ViewBag.pua_usuariocliente = new SelectList(db.cliente_empresa_usuario, "cus_codigo", "cus_usuario", perfil_usuario_acesso.pua_usuariocliente);
                        return(View(perfil_usuario_acesso));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }
        public async Task <ActionResult> Create([Bind(Include = "pua_codigo,pua_lerescrever_clienteempresaunidade_create,pua_lerescrever_clienteempresaunidade_delete,pua_ler_clienteempresaunidade_details,pua_lerescrever_clienteempresaunidade_edit,pua_ler_clienteempresaunidade_index,pua_lerescrever_clienteempresausuario_create,pua_lerescrever_clienteempresausuario_delete,pua_ler_clienteempresausuario_details,pua_lerescrever_clienteempresausuario_edit,pua_ler_clienteempresausuario_index,pua_lerescrever_clienteempresausuario_mudarsenha,pua_lerescrever_perfilusuarioempresa_create,pua_lerescrever_perfilusuarioempresa_delete,pua_ler_perfilusuarioempresa_details,pua_lerescrever_perfilusuarioempresa_edit,pua_ler_perfilusuarioempresa_index,pua_lerescrever_perfilusuarioacesso_create,pua_lerescrever_perfilusuarioacesso_delete,pua_ler_perfilusuarioacesso_details,pua_lerescrever_perfilusuarioacesso_edit,pua_ler_perfilusuarioacesso_index,pua_usuariocliente")] perfil_usuario_acesso perfil_usuario_acesso) // pua_lerescrever_clienteempresa_create,pua_lerescrever_clienteempresa_delete,pua_ler_clienteempresa_details,pua_lerescrever_clienteempresa_edit,pua_ler_clienteempresa_index
        {
            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_perfilusuarioacesso_create == true))
                    {
                        if (ModelState.IsValid)
                        {
                            db.perfil_usuario_acesso.Add(perfil_usuario_acesso);
                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }

                        ViewBag.pua_usuariocliente = new SelectList(db.cliente_empresa_usuario, "cus_codigo", "cus_usuario", perfil_usuario_acesso.pua_usuariocliente);
                        return(View(perfil_usuario_acesso));
                    }

                    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_perfilusuarioacesso_create))
                    {
                        if (ModelState.IsValid)
                        {
                            db.perfil_usuario_acesso.Add(perfil_usuario_acesso);
                            await db.SaveChangesAsync();

                            return(RedirectToAction("Index"));
                        }

                        ViewBag.pua_usuariocliente = new SelectList(db.cliente_empresa_usuario, "cus_codigo", "cus_usuario", perfil_usuario_acesso.pua_usuariocliente);
                        return(View(perfil_usuario_acesso));
                    }
                    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_perfilusuarioacesso_delete == true))
                    {
                        perfil_usuario_acesso perfil_usuario_acesso = await db.perfil_usuario_acesso.FindAsync(id);

                        db.perfil_usuario_acesso.Remove(perfil_usuario_acesso);
                        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_perfilusuarioacesso_delete))
                    {
                        perfil_usuario_acesso perfil_usuario_acesso = await db.perfil_usuario_acesso.FindAsync(id);

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

                        return(RedirectToAction("Index"));
                    }
                    return(View("~/Views/Shared/_SemAutorizacao.cshtml"));
                }
            }
            else
            {
                return(RedirectToAction("Login", "Manager"));
            }
        }