예제 #1
0
        /// <summary>
        /// Lista a sequnece de cidade
        /// </summary>
        /// <returns>Um inteiro, número da sequence</returns>
        private int Sequence()
        {
            try
            {
                //Abre conexão
                conn.Open();
                //Sql da consulta
                sql = "select ";
                //Executa consulta
                conn.ExecuteReader(sql);

                ECidade cidade = ConvertList(conn)[0];

                int sequence = cidade.IsnCidade;

                //Retorna Item
                return(sequence);
            }
            catch (Exception e)
            {
                //Exceção
                throw e;
            }
            finally
            {
                //Fecha conexão
                conn.Close();
            }
        }
예제 #2
0
        /// <summary>
        /// Altera um novo cidade
        /// </summary>
        /// <param name="usuario">Recebe a entidade cidade como parametro</param>
        /// <returns>Altera corretamente retorna true</returns>
        public bool Alterar(ECidade cidade)
        {
            try
            {
                //Abre conexão
                conn.Open();

                //Lista de parametros
                Object[] param = new Object[4];
                param[0] = Sequence();
                param[1] = cidade.estado.IsnEstado;
                param[2] = cidade.DscCidade;
                param[3] = cidade.FlgAtivo;

                //Sql do Update
                string sql = "Update into tb_cidade set dsc_cidade = '{2}', flg_ativo = '{3}', isn_estado = {1} where isn_cidade = {0})";
                //Comando executado
                conn.ExecuteNonQuery(sql, param);
                //retorno
                return(true);
            }
            catch (Exception e)
            {
                //Execeção retorna false
                //*******************Temos que melhorar o tratamento de exceções************
                return(false);
            }
            finally
            {
                //Conexão fechada
                conn.Close();
            }
        }
예제 #3
0
        /// <summary>
        /// Insere uma novo cidade
        /// </summary>
        /// <param name="usuario">Recebe a entidade cidade como parametro</param>
        /// <returns>Inserido corretamente retorna true</returns>
        public bool Inserir(ECidade cidade)
        {
            try
            {
                //Abre conexão
                conn.Open();

                //Lista de parametros
                Object[] param = new Object[4];
                param[0] = Sequence();
                param[1] = cidade.estado.IsnEstado;
                param[2] = cidade.DscCidade;
                param[3] = cidade.FlgAtivo;

                //Sql do Insert
                string sql = "Insert into tb_cidade (isn_cidade,isn_estado, dsc_cidade, flg_ativo) values ({0} , {1} , '{2}', '{3}')";
                //Comando executado
                conn.ExecuteNonQuery(sql, param);
                //retorno
                return(true);
            }
            catch (Exception e)
            {
                //Execeção retorna false
                //*******************Temos que melhorar o tratamento de exceções************
                return(false);
            }
            finally
            {
                //Conexão fechada
                conn.Close();
            }
        }
예제 #4
0
        public string Buscar(string encomenda, List <Trecho> trechosCadastrados)
        {
            string[] informacoesEncomenda = encomenda.Split(Constantes.CaracterDelimitador);

            ECidade cidadeOrigem  = (ECidade)Enum.Parse(typeof(ECidade), informacoesEncomenda[0], true);
            ECidade cidadeDestino = (ECidade)Enum.Parse(typeof(ECidade), informacoesEncomenda[1], true);

            Trecho trechoDireto = trechosCadastrados.FirstOrDefault(t => t.CidadeOrigem == cidadeOrigem && t.CidadeDestino == cidadeDestino);

            if (trechoDireto != null)
            {
                return($"{trechoDireto.CidadeOrigem.ToString()} {trechoDireto.CidadeDestino.ToString()} {trechoDireto.QuantidadeDias}");
            }

            List <Trecho> trechosParaDestino = trechosCadastrados.Where(t => t.CidadeOrigem == cidadeOrigem).ToList();

            int           maximoRotas      = 8;
            List <Trecho> rotasEncontradas = BuscarProximaRota(cidadeOrigem, cidadeDestino, trechosParaDestino, trechosCadastrados, maximoRotas);

            if (rotasEncontradas != null)
            {
                Trecho ultimoRotaEncontrada = rotasEncontradas.Last();

                Trecho proximaRota = trechosParaDestino.FirstOrDefault(t => t.CidadeDestino == ultimoRotaEncontrada.CidadeOrigem);
                rotasEncontradas.Add(proximaRota);

                rotasEncontradas.Reverse();

                int totalDias = rotasEncontradas.Sum(t => t.QuantidadeDias);

                return($"{String.Join(" ", rotasEncontradas.Select(x => String.Join(" ", x.CidadeOrigem.ToString())))} {cidadeDestino.ToString()} {totalDias}");
            }

            return($"{cidadeOrigem.ToString()} {cidadeDestino.ToString()} N/D");
        }
예제 #5
0
        /// <summary>
        /// Faz a conversão das listas
        /// </summary>
        /// <param name="conexao">Recebe a conexão</param>
        /// <returns>Lista convertida</returns>
        private List <ECidade> ConvertList(ConexaoPostGre conexao)
        {
            List <ECidade> lst = new List <ECidade>();
            ECidade        contrato;

            while (conexao.Reader.Read())
            {
                contrato           = new ECidade();
                contrato.IsnCidade = conexao.Reader.GetInt32(0);
                contrato.estado    = new FEstado().Buscar(conexao.Reader.GetInt32(1));
                contrato.DscCidade = conexao.Reader.GetString(2);
                contrato.FlgAtivo  = conexao.Reader.GetBoolean(3);
                lst.Add(contrato);
            }

            return(lst);
        }
예제 #6
0
        private List <Trecho> BuscarProximaRota(ECidade cidadeOrigem, ECidade cidadeDestino, List <Trecho> trechosParaDestino, List <Trecho> trechosCadastrados, int maximoRotas)
        {
            List <Trecho> rotasEncontradas = new List <Trecho>();

            // Valida se já esgotou todas as possibilidades de rotas.
            if (maximoRotas == 0)
            {
                return(null);
            }

            if (!trechosParaDestino.Any(t => t.CidadeDestino == cidadeDestino))
            {
                List <Trecho> proximasRotas = trechosCadastrados
                                              .Where(t => t.CidadeDestino != cidadeOrigem && trechosParaDestino.Select(d => d.CidadeDestino).Contains(t.CidadeOrigem))
                                              .ToList();

                rotasEncontradas = BuscarProximaRota(cidadeOrigem, cidadeDestino, proximasRotas, trechosCadastrados, maximoRotas - 1);
                if (rotasEncontradas != null)
                {
                    Trecho ultimoRotaEncontrada = rotasEncontradas.Last();

                    // Validação para não inserir duplicadamente a rota para a cidade de destino.
                    if (!proximasRotas.Any(t => t.CidadeOrigem == ultimoRotaEncontrada.CidadeOrigem && t.CidadeDestino == ultimoRotaEncontrada.CidadeDestino))
                    {
                        Trecho proximaRota = proximasRotas.FirstOrDefault(t => t.CidadeDestino == ultimoRotaEncontrada.CidadeOrigem);
                        rotasEncontradas.Add(proximaRota);
                    }

                    return(rotasEncontradas);
                }

                return(null);
            }

            Trecho trechoDestino = trechosParaDestino.First(t => t.CidadeDestino == cidadeDestino);

            rotasEncontradas.Add(trechoDestino);

            return(rotasEncontradas);
        }