예제 #1
0
        /// <summary>
        /// Gera uma lista de cotãção com o preço de compra e venda da moeda
        /// </summary>
        /// <param name="moeda"></param>Moeda
        /// <param name="compra"></param>Lista com valores comrpa
        /// <param name="venda"></param>Lista com valores venda
        /// <returns>List<CotacaoMonetaria></returns>
        private List <CotacaoMonetaria> unionCotacaoCambial(Moeda moeda, List <CotacaoAux> compra, List <CotacaoAux> venda)
        {
            int count = compra.Count;
            List <CotacaoMonetaria> cotacoes = new List <CotacaoMonetaria>();

            if (count > venda.Count)
            {
                //use o menor
                count = venda.Count;
            }
            for (int i = 0; i < count; i++)
            {
                var c = compra[i];
                var v = venda[i];

                var cot = new CotacaoMonetaria();
                //compra e venda tem as mesma datas
                cot.DataCotacao = c.DataCotacao;
                cot.ValorCompra = c.ValorCotacao;
                cot.ValorVenda  = v.ValorCotacao;
                cot.IdMoeda     = moeda.IdMoeda;
                cot.Moeda       = moeda;
                cot.AddReference(c.SerieVo);
                cotacoes.Add(cot);
            }

            return(cotacoes);
        }
예제 #2
0
        //exibe a cotação da moeda pelo clique no tile
        private async void showCotacaoMonetariaFromMoeda(CotacaoMonetaria m)
        {
            using (var _wsBacen = new WSBacenCambio())
            {
                try
                {
                    var codigo    = m.Moeda.CodigoWSCompra;
                    var dataAtual = DateTime.Now;
                    var moeda     = new MoedaDaoManager().GetMoedaByCodigo((long)codigo);

                    var cotacoes = await Task.Run(() =>
                                                  _wsBacen.GetCotacaoMonetariaFromBacen(dataAtual.AddDays(-7), dataAtual, moeda));

                    gridControl2.DataSource = cotacoes;

                    var row = cotacoes.FirstOrDefault();
                    if (row != null)
                    {
                        lblFonte1.Text = row.ToString();
                    }

                    gridView1.ExpandAllGroups();
                }
                catch (BacenCambioException ex)
                {
                    ex.ShowExceptionMessage();
                }
            }
        }
예제 #3
0
        private string getTextHtml(CotacaoMonetaria cot)
        {
            string html = "<u>" + cot.Moeda + "</u><br>" +
                          "Compra: " + cot.ValorCompra.ToString("N4") +
                          "<br>Venda: " + cot.ValorVenda.ToString("N4");

            return(html);
        }
예제 #4
0
        /// <summary>
        /// Obtem a cotação das principais moedas referidas no sistema.
        /// </summary>
        /// <returns></returns>
        public CurrencyExchange GetCurrencyExchange()
        {
            CurrencyExchange cotacao = new CurrencyExchange();

            using (var ctx = new CambioContext())
            {
                DateTime data = DateTime.Now.ToDateZerada();

                if (data.DayOfWeek == DayOfWeek.Saturday)
                {
                    data = data.AddDays(-1);
                }
                else if (data.DayOfWeek == DayOfWeek.Sunday)
                {
                    data = data.AddDays(-2);
                }

                //localize as cotações do dia
                var cotExist = ctx.CotacaoMonetariaDao
                               .Where(c => c.DataCotacao.ToDateZerada() == data)
                               .ToList();

                if (cotExist.Count >= 9)
                {
                    //localizei primeiro a cotação no banco
                    //isso aqui eh mais rapido q obter da internet
                    cotacao.Cotacoes.AddRange(cotExist);
                }
                else
                {
                    var moedas = ctx.MoedaDao.FindAll();

                    foreach (var m in moedas)
                    {
                        try
                        {
                            //obtem do webservice mesmo
                            //persiste a cotação
                            CotacaoMonetaria cotNew = getCotacao((TypeCodigoBacen)m.CodigoWSCompra,
                                                                 (TypeCodigoBacen)m.CodigoWSVenda);

                            //sempre add
                            cotacao.AddCurrencyExchange(cotNew);

                            SaveCotacaoMonetaria(ctx, cotNew);
                        }
                        catch (Exception ex)
                        {
                            LoggerUtilIts.GenerateLogs(ex, "Falha no WSBacenCambio", "Falha na cotação cambial.");
                        }
                    }
                }
            }
            return(cotacao);
        }
예제 #5
0
        /// <summary>
        /// Salva ou atualiza cotação
        /// </summary>
        /// <param name="ctx"></param> Contexto
        /// <param name="cot"></param>Cotação a ser salva
        private void SaveCotacaoMonetaria(CambioContext ctx, CotacaoMonetaria cotacao)
        {
            //use o codigo de compra mesmo
            long codigo = cotacao.Moeda.CodigoWSCompra;

            try
            {
                //recupera a moeda pelo codigo de compra/venda
                Moeda moeda = cotacao.Moeda;

                if (moeda == null || moeda.IdMoeda == 0)
                {
                    moeda = ctx.MoedaDao.First(m =>
                                               m.CodigoWSCompra == codigo ||
                                               m.CodigoWSVenda == codigo);
                }

                try
                {
                    //recupera a cotação
                    var current = ctx.CotacaoMonetariaDao
                                  .First(c => c.DataCotacao.Date == cotacao.DataCotacao &&
                                         c.IdMoeda == moeda.IdMoeda);

                    //e atualiza ela
                    current.ValorCompra = cotacao.ValorCompra;
                    current.ValorVenda  = cotacao.ValorVenda;
                    current.DataCotacao = cotacao.DataCotacao;
                    //atualiza no banco
                    ctx.CotacaoMonetariaDao.Update(current);
                }
                catch (Exception ex)
                {
                    //nao tem cotação add
                    Console.WriteLine("Criando um nova cotação: =>" + ex.Message);

                    //FK
                    cotacao.IdMoeda = moeda.IdMoeda;
                    //salva no banco
                    ctx.CotacaoMonetariaDao.Save(cotacao);
                }
            }
            catch (Exception ex)
            {
                string msg   = "Moeda não foi localizada";
                string title = "Problema na rotina de atualização cambial";
                XMessageIts.Advertencia(msg, title);

                LoggerUtilIts.GenerateLogs(ex, msg + "\n" + title);
            }
        }
예제 #6
0
        public List <CotacaoMonetaria> GetCotacoesIndicadoresBacen()
        {
            var cotacoes = new List <CotacaoMonetaria>();

            using (var ctx = new CambioContext())
            {
                try
                {
                    //recupera as moedas
                    var indicadores = CambioContext.Instance.IndicadoresBacenDao
                                      .FindAll().ToList();
                    //.Where(m => m.NomeCompletoMoeda.ToLower().Contains("peso")).ToList();

                    foreach (var ind in indicadores)
                    {
                        try
                        {
                            var cot     = getLastCotacaoAux(ind.CodigoMoeda);
                            var cotacao = new CotacaoMonetaria(cot.DataCotacao, cot.ValorCotacao, cot.ValorCotacao, ind);
                            cotacoes.Add(cotacao);
                        }
                        catch (BacenCambioException ex)
                        {
                            XMessageIts.Erro("Falha ao informações dos indicadores\n\n" +
                                             "Erro:" + ex.Message, ex.Title);
                            return(null);
                        }
                    }
                }
                catch (Exception ex)
                {
                    string msg   = "Nenhum indicador localizado";
                    string title = "Falha na listagem de indicadores.";
                    XMessageIts.Advertencia(msg, title);
                    LoggerUtilIts.GenerateLogs(ex, msg + "\n" + title);
                }
            }
            return(cotacoes);
        }
예제 #7
0
        private CotacaoMonetaria getCotacao(TypeCodigoBacen codigoCompra, TypeCodigoBacen codigoVenda)
        {
            long codCompra = (long)codigoCompra;
            long codVenda  = (long)codigoVenda;

            var cotCompraAux = getLastCotacaoAux(codCompra);
            var cotVendaAux  = getLastCotacaoAux(codVenda);

            //a data do cotCompraAux e cotVendaAux sao iguais
            var cot = new CotacaoMonetaria(cotVendaAux.DataCotacao, cotCompraAux.ValorCotacao,
                                           cotVendaAux.ValorCotacao, cotCompraAux.SerieVo);

            cot.AddReference(cotCompraAux.SerieVo);

            using (var ctx = new CambioContext())
            {
                try
                {
                    //recupera a moeda pelo codigo de compra/venda
                    Moeda moeda = ctx.MoedaDao.First(m =>
                                                     m.CodigoWSCompra == codCompra || m.CodigoWSVenda == codVenda);

                    cot.Moeda = moeda;
                    SaveCotacaoMonetaria(ctx, cot);
                }
                catch (Exception ex)
                {
                    string msg   = "Moeda não foi localizada";
                    string title = "Não foi possível obter a atualização cambial";
                    XMessageIts.Advertencia(msg, title);

                    LoggerUtilIts.GenerateLogs(ex, msg + "\n" + title);

                    throw ex;
                }
            }
            return(cot);
        }
예제 #8
0
        /// <summary>
        /// Salva ou atualiza cotação
        /// </summary>
        /// <param name="ctx"></param> Contexto
        /// <param name="cot"></param>Cotação a ser salva
        public void SaveCotacaoMonetaria(CotacaoMonetaria cot)
        {
            using (var ctx = new CambioContext())
            {
                try
                {
                    var cotacao = new CotacaoMonetaria(cot.DataCotacao, cot.ValorCompra, cot.ValorVenda);
                    //FK
                    cotacao.IdMoeda = cot.Moeda.IdMoeda;

                    //salva no banco
                    ctx.CotacaoMonetariaDao.Save(cotacao);
                }
                catch (Exception ex)
                {
                    string msg   = "Moeda não foi localizada";
                    string title = "Problema na rotina de atualização cambial";
                    XMessageIts.Advertencia(msg, title);

                    LoggerUtilIts.GenerateLogs(ex, msg + "\n" + title);
                }
            }
        }