示例#1
0
        /// <summary>
        /// Procura um TipoUtilizador que tenha o ID especificado
        /// </summary>
        /// <param name="id">Id a procurar</param>
        /// <returns>Retorna um TipoUtilizador com o ID pedido ou null se nao existir</returns>
        public static TipoUtilizador GetById(int id)
        {
            DBConnection   db;
            TipoUtilizador tipo = tiposUtilizador.Find(x => x.Id == id);
            DataTable      table;

            //1º tenta ver se ja tem esse tipo em memoria
            if (tipo != null)
            {
                return(tipo);
            }

            //Caso nao tenha esse tipo em memoria vai à base de dados
            db    = new DBConnection();
            table = db.Query("SELECT * FROM tipo_utilizador WHERE id = @0", id);

            //Se o id não existir também na base de dados retorna objeto default
            if (table.Rows.Count == 0)
            {
                return(null);
            }

            //Criar novo objeto de TipoUtilizador
            tipo = new TipoUtilizador(table.Rows[0].Field <int>("id"), table.Rows[0].Field <string>("denominacao"));
            tiposUtilizador.Add(tipo);
            return(tipo);
        }
        public ActionResult Edit(FormCollection dadosTipoUtilizador, int id)
        {
            //Obtém, de acordo com o ID, o tipo de utilizador respetivo para editar
            TipoUtilizador editTipoUtilizador = db.TipoUtilizadors.Single(t => t.idTipoUtilizador == id);

            //Verifica cada dado introduzido pelo utilizador por inconsistências (se os campos estão preenchidos, se os campos são válidos, etc.)
            if (string.IsNullOrEmpty(dadosTipoUtilizador["TipoUtilizador.nome"]) == true)
            {
                ModelState.AddModelError("TipoUtilizador.nome", "Tem de introduzir um nome para o novo tipo de utilizador!");
            }
            else
            {
                //Se o nome do tipo de utilizador introduzido não for igual ao que estava, mas se já existe um tipo de utilizador com o novo nome introduzido, retorna erro
                if (editTipoUtilizador.nome != dadosTipoUtilizador["TipoUtilizador.nome"] && db.TipoUtilizadors.SingleOrDefault(t => t.nome == dadosTipoUtilizador["TipoUtilizador.nome"]) != default(TipoUtilizador))
                {
                    ModelState.AddModelError("TipoUtilizador.nome", "Um tipo de utilizador com este nome já se encontra criado!");
                }
            }

            if (ModelState.IsValid == true)
            {
                //Associa os novos dados ao tipo de utilizador
                editTipoUtilizador.nome = dadosTipoUtilizador["TipoUtilizador.nome"];

                //Apaga todas as relações permissão-tipo associadas a este tipo de utilizador particular
                db.Permissao_TipoUtilizadors.DeleteAllOnSubmit(db.Permissao_TipoUtilizadors.Where(pt => pt.idTipoUtilizador == id));
                db.SubmitChanges();

                //Depois das relações apagadas, volta a criar novas relações permissão-tipo, com base nas novas checkboxes seleccionadas
                foreach (Permissao p in db.Permissaos)
                {
                    //Visto que o ASP.NET MVC faz umas coisas esquisitas com as checkboxes, este workaround certifica que a checkbox de cada permissão é corretamente validada
                    if (dadosTipoUtilizador[string.Concat("permissao", p.idPermissao)].Contains("true") == true)
                    {
                        Permissao_TipoUtilizador newPermissaoTipoUtilizador = new Permissao_TipoUtilizador();

                        newPermissaoTipoUtilizador.idTipoUtilizador = editTipoUtilizador.idTipoUtilizador;
                        newPermissaoTipoUtilizador.idPermissao      = p.idPermissao;

                        db.Permissao_TipoUtilizadors.InsertOnSubmit(newPermissaoTipoUtilizador);
                    }
                }

                db.SubmitChanges();

                return(RedirectToAction("Index"));
            }
            else
            {
                //Compõe o ViewModel para a página de edição do tipo de utiizador
                TiposUtilizadorViewModel editViewModel = new TiposUtilizadorViewModel();

                editViewModel.TipoUtilizador = db.TipoUtilizadors.Single(t => t.idTipoUtilizador == id);
                editViewModel.PermissoesTipoUtilizadorList = db.Permissao_TipoUtilizadors.Where(pt => pt.idTipoUtilizador == id).ToList();
                editViewModel.PermissoesList = db.Permissaos.ToList();

                return(View(editViewModel));
            }
        }
        public ActionResult Create(FormCollection dadosTipoUtilizador)
        {
            //Verifica cada dado introduzido pelo utilizador por inconsistências (se os campos estão preenchidos, se os campos são válidos, etc.)
            if (string.IsNullOrEmpty(dadosTipoUtilizador["TipoUtilizador.nome"]) == true)
            {
                ModelState.AddModelError("TipoUtilizador.nome", "Tem de introduzir um nome para o novo tipo de utilizador!");
            }
            else
            {
                //Se já existe um tipo de utilizador com o nome introduzido, retorna erro
                if (db.TipoUtilizadors.SingleOrDefault(t => t.nome == dadosTipoUtilizador["nome"]) != default(TipoUtilizador))
                {
                    ModelState.AddModelError("TipoUtilizador.nome", "Um tipo de utilizador com este nome já se encontra criado!");
                }
            }

            if (ModelState.IsValid == true)
            {
                TipoUtilizador newTipoUtilizador = new TipoUtilizador();

                newTipoUtilizador.nome = dadosTipoUtilizador["TipoUtilizador.nome"];

                db.TipoUtilizadors.InsertOnSubmit(newTipoUtilizador);

                db.SubmitChanges();

                foreach (Permissao p in db.Permissaos)
                {
                    //Visto que o ASP.NET MVC faz umas coisas esquisitas com as checkboxes, este workaround certifica que a checkbox de cada permissão é corretamente validada
                    if (dadosTipoUtilizador[string.Concat("permissao", p.idPermissao)].Contains("true") == true)
                    {
                        Permissao_TipoUtilizador newPermissaoTipoUtilizador = new Permissao_TipoUtilizador();

                        newPermissaoTipoUtilizador.idTipoUtilizador = newTipoUtilizador.idTipoUtilizador;
                        newPermissaoTipoUtilizador.idPermissao      = p.idPermissao;

                        db.Permissao_TipoUtilizadors.InsertOnSubmit(newPermissaoTipoUtilizador);
                    }
                }

                db.SubmitChanges();

                return(RedirectToAction("Index"));
            }
            else
            {
                TiposUtilizadorViewModel createViewModel = new TiposUtilizadorViewModel();

                createViewModel.PermissoesList = db.Permissaos.ToList();

                return(View(createViewModel));
            }
        }
        public ActionResult Delete(int?id)
        {
            TipoUtilizador tipoUtilizador = db.TipoUtilizador.Find(id);

            if (tipoUtilizador != null)
            {
                db.TipoUtilizador.Remove(tipoUtilizador);
                db.SaveChanges();
                TempData["Message"] = tipoUtilizador.Tipo + " removido com sucesso";
            }
            else
            {
                TempData["Message"] = "erro ao remover o tipo de utilizador";
            }

            return(RedirectToAction("Index"));
        }
        public ActionResult Create(TipoUtilizador tipoUtilizador)
        {
            try
            {
                if (!db.TipoUtilizador.Any(n => n.Tipo == tipoUtilizador.Tipo))
                {
                    db.TipoUtilizador.Add(tipoUtilizador);
                    db.SaveChanges();
                }

                ModelState.Clear();


                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
 public TiposUtilizadorViewModel()
 {
     tipoUtilizador = new TipoUtilizador();
     permissoesTipoUtilizadorList = new List <Permissao_TipoUtilizador>();
     permissoesList = new List <Permissao>();
 }
        /// <summary>
        /// Cria um novo utilizador
        /// </summary>
        /// <param name="email">Email do Utilizador</param>
        /// <param name="dataNascimento">Data de nascimento</param>
        /// <param name="nome">Nome</param>
        /// <param name="password">Password</param>
        /// <param name="telemovel">Numero de Telemovel</param>
        /// <param name="nif">Numero de identificação fiscarl</param>
        /// <param name="tipo">Tipo de utilizador</param>
        /// <returns>Instancia de utilizador acabade de criar</returns>
        public static Utilizador Novo(string email, DateTime dataNascimento, string nome, string password, string telemovel, string nif, TipoUtilizador tipo)
        {
            int          id  = 0;
            string       pwd = BCrypt.Net.BCrypt.HashPassword(password);
            int          rows;
            Utilizador   newUser;
            DBConnection conn = new DBConnection();
            DataTable    dt;

            //Inserir user na base de dados
            rows = conn.NonQuery("INSERT INTO utilizador (email, data_nascimento, nome, password, telemovel, nif, tipo_utilizador_id) VALUES (@0, @1, @2, @3, @4, @5, @6)",
                                 email, dataNascimento, nome, pwd, telemovel, nif, tipo.Id);

            dt = conn.Query("SELECT * FROM utilizador WHERE email = @0", email);

            id      = dt.Rows[dt.Rows.Count - 1].Field <int>("id");
            newUser = new Utilizador(id, nome, nif, email, dataNascimento, telemovel, tipo);

            utilizadores.Add(newUser);

            return(newUser);
        }