/// <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); }
public CotacaoMonetaria(DateTime dataCotacao, decimal compra, decimal venda, IndicadoresBacen ind) : this(dataCotacao, compra, venda) { var moeda = new Moeda(); moeda.NomeMoeda = ind.NomeCompletoMoeda; moeda.CodigoWSCompra = ind.CodigoMoeda; this.Moeda = moeda; this.IdMoeda = ind.IdMoeda; }
/// <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); } }
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); }
/// <summary> /// Obtem a cotação cambial da moeda no site do banco do brasil ///A data de inicio deve ser 2 dias inferior a data atual /// </summary> /// <returns></returns> public List <CotacaoMonetaria> GetCotacaoMonetariaFromBacen(DateTime dtInicio, DateTime dtFim, Moeda moeda) { var cotacoes = new List <CotacaoMonetaria>(); try { var compra = createCotacaoCambial(dtInicio, dtFim, moeda.CodigoWSCompra); var venda = createCotacaoCambial(dtInicio, dtFim, moeda.CodigoWSVenda); //uni as cotações cotacoes.AddRange(unionCotacaoCambial(moeda, compra, venda)); } catch (Exception ex) { if (ex.GetType() == typeof(BacenCambioException)) { BacenException be = ex as BacenCambioException; be.ShowExceptionMessage(); } else { XMessageIts.Advertencia(ex.Message); } return(null); } return(cotacoes); }