/// <summary>
        /// Devolve todos os contratos
        /// </summary>
        /// <returns></returns>
        public static List <Contrato> GetAll()
        {
            List <Contrato> todosContratos = new List <Contrato>();
            DBConnection    con            = new DBConnection();
            DataTable       table;

            int        id, utilizador_id, morada_id;
            string     codigo;
            DateTime   dataInicio;
            Utilizador uti;
            Morada     morada;

            table = con.Query("SELECT * FROM contrato");

            foreach (DataRow row in table.Rows)
            {
                id         = row.Field <int>("id");
                codigo     = row.Field <string>("codigo");
                dataInicio = row.Field <DateTime>("data_inicio");

                utilizador_id = row.Field <int>("utilizador_id");
                morada_id     = row.Field <int>("utilizador_id");

                uti    = Utilizadores.GetById(utilizador_id);
                morada = Moradas.GetById(morada_id);

                todosContratos.Add(new Contrato(id, dataInicio, codigo, morada, uti));
            }

            contratos.RemoveAll(x => x.Id != 0);
            contratos.AddRange(todosContratos.ToList());

            return(todosContratos);
        }
        /// <summary>
        /// Retorna contratos dada uma condição
        /// </summary>
        /// <param name="atributo">Atributo a comparar</param>
        /// <param name="operador">Tipo de comparação</param>
        /// <param name="valor">Valor a comparar</param>
        /// <returns></returns>
        public static List <Contrato> Where(string atributo, string operador, object valor)
        {
            List <Contrato> contratos = new List <Contrato>();
            DBConnection    db        = new DBConnection();
            DataTable       table;

            int        id, utilizador_id, morada_id;
            string     codigo;
            DateTime   dataInicio;
            Utilizador utilizador;
            Morada     morada;

            table = db.Query("SELECT * FROM contrato WHERE " + atributo + " " + operador + " @0", valor);

            //Percorrer todas as linhas retornadas da base de dados
            foreach (DataRow row in table.Rows)
            {
                id            = row.Field <int>("id");
                codigo        = row.Field <string>("codigo");
                utilizador_id = row.Field <int>("utilizador_id");
                morada_id     = row.Field <int>("morada_id");
                dataInicio    = row.Field <DateTime>("data_inicio");

                morada     = Moradas.GetById(morada_id);
                utilizador = Utilizadores.GetById(utilizador_id);

                contratos.Add(new Contrato(id, dataInicio, codigo, morada, utilizador));
            }

            return(contratos);
        }
        /// <summary>
        /// Pedir para se regista na aplicação
        /// </summary>
        /// <returns></returns>
        public static bool PedidoAcesso(string nif, string email)
        {
            Log.Info("A pedir acesso para o nif " + nif);
            MyRestClient        rest;
            List <Utilizador>   users   = Utilizadores.Where("nif", "=", nif);
            List <PedidoAcesso> pedidos = PedidosAcesso.Where("nif", "=", nif);
            JObject             jsonObject;
            PedidoAcesso        pedido;

            //Se ja existir um utilizador com o nif registado retornar falso
            if (users.Count > 0)
            {
                Log.Info("Nif existe na base de dados local, não permitir novo pedido de acesso!");
                return(false);
            }

            Log.Info("Nif não existe na base de dados local");

            //Se ja existe um pedido para aquele nif
            if (pedidos.Count > 0)
            {
                Log.Info("Ja existe um pedido com o nif, não permitir novo pedido de acesso!");
                return(false);
            }

            rest       = new MyRestClient("http://utentes.cloudapp.net/Utentes.svc/rest/utente/getbynifnoauth/" + nif);
            jsonObject = rest.GetJsonObject();

            if (jsonObject == null)
            {
                Log.Erro("Nao foi possivel estabelecer conexão com o servidor do municipio.");
                return(false);
            }

            if ((bool)jsonObject.GetValue("Sucesso"))
            {
                //fazer codigo para pedir acesso
                Log.Info("Nif existe na base de dados do municipio");
                pedido = PedidosAcesso.Novo(nif, email);
                Log.Info("Foi feito um pedido de acesso para o nif " + nif + " com o id " + pedido.Id + " com o codigo " + pedido.Codigo + ".");
            }
            else
            {
                Log.Info("Nif NÃO existe na base de dados do municipio");
                return(false);
            }

            return(true);
        }
예제 #4
0
        public static Avaria GetById(int id)
        {
            DBConnection db;
            Avaria       avaria = avarias.FindLast(x => x.Id == id);
            DataTable    table;

            int    contrato_id, tipo_id, utilizador_id, estado_id;
            string descricao, imagem;

            Utilizador   uti;
            Contrato     contrato;
            TipoAvaria   tipo;
            EstadoAvaria estado;

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

            //Caso nao tenha esse tipo em memoria vai à base de dados
            db    = new DBConnection();
            table = db.Query("SELECT * FROM avaria 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 variaveis necessarias par ao objeto de utilizador
            descricao     = table.Rows[0].Field <string>("descricao");
            utilizador_id = table.Rows[0].Field <int>("utilizador_id");
            contrato_id   = table.Rows[0].Field <int>("contrato_id");
            imagem        = table.Rows[0].Field <string>("imagem");
            tipo_id       = table.Rows[0].Field <int>("tipo_avaria_id");
            estado_id     = table.Rows[0].Field <int>("estado_id");

            uti      = Utilizadores.GetById(utilizador_id);
            contrato = Contratos.GetById(contrato_id);
            tipo     = TiposAvaria.GetById(tipo_id);
            estado   = EstadosAvaria.GetById(estado_id);

            //Criar novo objeto de Utilizador
            avaria = new Avaria(id, tipo, descricao, imagem, estado);
            avarias.Add(avaria);

            return(avaria);
        }
        /// <summary>
        /// Devolve contrato pelo ID
        /// </summary>
        /// <param name="id">ID do contrato a pedir</param>
        /// <returns>Objecto contrato</returns>
        public static Contrato GetById(int id)
        {
            DBConnection db;
            Contrato     contrato = contratos.FindLast(x => x.Id == id);
            DataTable    table;

            int        utilizador_id, morada_id;
            string     codigo;
            DateTime   dataInicio;
            Utilizador uti;
            Morada     morada;

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

            //Caso nao tenha esse tipo em memoria vai à base de dados
            db    = new DBConnection();
            table = db.Query("SELECT * FROM contrato 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 variaveis necessarias par ao objeto de utilizador
            codigo        = table.Rows[0].Field <string>("codigo");
            utilizador_id = table.Rows[0].Field <int>("utilizador_id");
            morada_id     = table.Rows[0].Field <int>("morada_id");
            dataInicio    = table.Rows[0].Field <DateTime>("data_inicio");

            uti    = Utilizadores.GetById(utilizador_id);
            morada = Moradas.GetById(morada_id);

            //Criar novo objeto de Utilizador
            contrato = new Contrato(id, dataInicio, codigo, morada, uti);
            contratos.Add(contrato);

            return(contrato);
        }
        /// <summary>
        /// Faz o login do utilizador
        /// </summary>
        /// <param name="nif">NIF do utilizador</param>
        /// <param name="password">Password</param>
        /// <returns>Verdadeiro se o login for bem sucedido e falso se falhar</returns>
        public static bool Login(string nif, string password)
        {
            Utilizador   user;
            DataTable    table;
            DBConnection db;
            Regex        reg = new Regex(@"\d{9}");
            string       dbHashedPassword;
            bool         success;

            if (!reg.Match(nif).Success)
            {
                return(false);
            }

            db    = new DBConnection();
            table = db.Query("SELECT id, password FROM utilizador WHERE nif = @0", nif);

            if (table.Rows.Count != 1)
            {
                return(false);
            }

            dbHashedPassword = table.Rows[0].Field <string>("password");

            success = BCrypt.Net.BCrypt.Verify(password, dbHashedPassword);
            if (success)
            {
                user = Utilizadores.GetById(table.Rows[0].Field <int>("id"));
                utilizadores.Add(user);
                autenticado = user;
                return(true);
            }

            //O login falhou
            return(false);
        }