public EnviarOrdemBasketResponse EnviarOrdemBasket(EnviarOrdemBasketRequest _request) { EnviarOrdemBasketResponse _response = new EnviarOrdemBasketResponse(); IServicoOrdens _gServico = Ativador.Get <IServicoOrdens>(); try { ListarItensBasketResponse _resposta = new PersistenciaOrdens().SelecionarItemsBasket(_request.CodigoBasket); foreach (BasketItemInfo info in _resposta.ListaItemsBasket) { EnviarOrdemRequest OrdemRequest = new EnviarOrdemRequest(); ClienteOrdemInfo _ClienteOrdemInfo = new ClienteOrdemInfo(); _ClienteOrdemInfo.CodigoCliente = info.CodigoCliente; _ClienteOrdemInfo.DataHoraSolicitacao = DateTime.Now; _ClienteOrdemInfo.DataValidade = info.DataValidade; if (info.LadoOferta == "C") { _ClienteOrdemInfo.DirecaoOrdem = OrdemDirecaoEnum.Compra; } else { _ClienteOrdemInfo.DirecaoOrdem = OrdemDirecaoEnum.Venda; } _ClienteOrdemInfo.Instrumento = info.Papel; _ClienteOrdemInfo.PortaControleOrdem = _request.PortaControle.ToString(); _ClienteOrdemInfo.Preco = double.Parse(info.Preco.ToString()); _ClienteOrdemInfo.Quantidade = info.Quantidade; _ClienteOrdemInfo.QuantidadeAparente = info.QuantidadeAparente; _ClienteOrdemInfo.QuantidadeMinima = info.QuantidadeMinima; _ClienteOrdemInfo.TipoDeOrdem = OrdemTipoEnum.Limitada; _ClienteOrdemInfo.ValidadeOrdem = Gradual.OMS.RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaParaODia; OrdemRequest.ClienteOrdemInfo = _ClienteOrdemInfo; EnviarOrdemResponse _resp = _gServico.EnviarOrdem(OrdemRequest); } new PersistenciaOrdens().AtualizarStatusBasket("D", _request.CodigoBasket); _response.Sucesso = true; return(_response); } catch (Exception ex) { throw (ex); } }
private OrdemFIXResponse <OrdemInfo> ParsearOrdemCliente(ClienteOrdemInfo pParametro) { OrdemFIXResponse <OrdemInfo> Response = new OrdemFIXResponse <OrdemInfo>(); OrdemInfo OrdemInfo = new OrdemInfo(); try { DateTime DataAux = DateTime.Now; #region [Vencimento da ordens] // VALIDA O VENCIMENTO DA ORDEM if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaParaODia) { // ORDEM VALIDA PARA O DIA OrdemInfo.ExpireDate = new DateTime(DataAux.Year, DataAux.Month, DataAux.Day, 23, 59, 59); } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaAteSerCancelada) { //ORDEM VAC ( VALIDA ATE O CANCELAMENTO) OrdemInfo.ExpireDate = null; } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidoAteDeterminadaData) { logger.Info("Data Enviada: " + pParametro.DataValidade.Value.ToString()); OrdemInfo.ExpireDate = pParametro.DataValidade.Value; } #endregion OrdemInfo.StopStartID = pParametro.CodigoStopStart; OrdemInfo.MinQty = pParametro.QuantidadeMinima; if (string.IsNullOrEmpty(pParametro.NumeroControleOrdem)) { OrdemInfo.ClOrdID = CtrlNumber; } else { OrdemInfo.ClOrdID = CtrlNumber; OrdemInfo.OrigClOrdID = pParametro.NumeroControleOrdem; } OrdemInfo.MaxFloor = pParametro.QuantidadeAparente; OrdemInfo.Account = pParametro.CodigoCliente; OrdemInfo.ChannelID = int.Parse(pParametro.PortaControleOrdem); OrdemInfo.ExecBroker = "227"; OrdemInfo.ExpireDate = pParametro.DataValidade; OrdemInfo.OrderQty = pParametro.Quantidade; OrdemInfo.OrdStatus = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS; OrdemInfo.Price = pParametro.Preco; OrdemInfo.Side = pParametro.DirecaoOrdem; OrdemInfo.Symbol = pParametro.Instrumento; OrdemInfo.RegisterTime = DateTime.Now; OrdemInfo.OrdType = pParametro.TipoDeOrdem; OrdemInfo.Exchange = "BOVESPA"; OrdemInfo.TimeInForce = pParametro.ValidadeOrdem; if (OrdemInfo.Symbol.Substring(OrdemInfo.Symbol.Length - 1, 1) == "F") { OrdemInfo.Symbol = OrdemInfo.Symbol.Remove(OrdemInfo.Symbol.Length - 1); } // Defini o Exchange pelo cadastro de papeis CadastroPapeisResponse <CadastroPapelInfo> CadastroPapeis = new ServicoCadastroPapeis().ObterInformacoesIntrumento( new CadastroPapeisRequest() { Instrumento = OrdemInfo.Symbol }); if (CadastroPapeis.Objeto == null) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); info.Critica = "Instrumento não encontrado"; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.ErroNegocio; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "O Sistema de risco encontrou <" + Response.CriticaInfo.Count.ToString() + "> item(s) a serem verificados"; return(Response); } if (CadastroPapeis.Objeto.TipoMercado == OMS.CadastroPapeis.Lib.Enum.TipoMercadoEnum.FUTURO) { OrdemInfo.Exchange = "BMF"; OrdemInfo.SecurityID = new PersistenciaCadastroAtivos().ObterSecurityList(OrdemInfo.Symbol); } else { OrdemInfo.Exchange = "BOVESPA"; } Response.Objeto = OrdemInfo; Response.StatusResposta = CriticaRiscoEnum.Sucesso; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ordem parseado com sucesso"; } catch (Exception ex) { Lib.Info.PipeLineCriticaInfo info = new Lib.Info.PipeLineCriticaInfo(); logger.Error("ERRO : " + ex.Message, ex); info.Critica = ex.Message; info.CriticaTipo = CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <Lib.Info.PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = CriticaRiscoEnum.Exception; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ocorreu um erro ao parsear a mensagem"; } return(Response); }
private OrdemFIXResponse <OrdemInfo> ParsearOrdemCliente(ClienteOrdemInfo pParametro, string CodigoCarteiraRecomendada) { OrdemFIXResponse <OrdemInfo> Response = new OrdemFIXResponse <OrdemInfo>(); OrdemInfo OrdemInfo = new OrdemInfo(); try { DateTime DataAux = DateTime.Now; #region [Vencimento da ordens] // VALIDA O VENCIMENTO DA ORDEM if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaParaODia) { // ORDEM VALIDA PARA O DIA OrdemInfo.ExpireDate = new DateTime(DataAux.Year, DataAux.Month, DataAux.Day, 23, 59, 59); } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaAteSerCancelada) { //ORDEM VAC ( VALIDA ATE O CANCELAMENTO) OrdemInfo.ExpireDate = null; } else if (pParametro.ValidadeOrdem == RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidoAteDeterminadaData) { OrdemInfo.ExpireDate = pParametro.DataValidade.Value; } #endregion OrdemInfo.StopStartID = pParametro.CodigoStopStart; OrdemInfo.MinQty = pParametro.QuantidadeMinima; if (string.IsNullOrEmpty(pParametro.NumeroControleOrdem)) { OrdemInfo.ClOrdID = CtrlNumber(CodigoCarteiraRecomendada); } else { OrdemInfo.ClOrdID = CtrlNumber(CodigoCarteiraRecomendada); OrdemInfo.OrigClOrdID = pParametro.NumeroControleOrdem; } OrdemInfo.MaxFloor = pParametro.QuantidadeAparente; OrdemInfo.Account = pParametro.CodigoCliente; OrdemInfo.ChannelID = int.Parse(pParametro.PortaControleOrdem); OrdemInfo.ExecBroker = "227"; OrdemInfo.ExpireDate = pParametro.DataValidade; OrdemInfo.OrderQty = pParametro.Quantidade; OrdemInfo.OrdStatus = OrdemStatusEnum.ENVIADAPARAOROTEADORDEORDENS; OrdemInfo.Price = pParametro.Preco; OrdemInfo.Side = pParametro.DirecaoOrdem; OrdemInfo.Symbol = pParametro.Instrumento; OrdemInfo.RegisterTime = DateTime.Now; OrdemInfo.OrdType = pParametro.TipoDeOrdem; OrdemInfo.Exchange = "BOVESPA"; OrdemInfo.TimeInForce = pParametro.ValidadeOrdem; if (OrdemInfo.Symbol.Substring(OrdemInfo.Symbol.Length - 1, 1) == "F") { OrdemInfo.Symbol = OrdemInfo.Symbol.Remove(OrdemInfo.Symbol.Length - 1); } OrdemInfo.Exchange = "BOVESPA"; Response.Objeto = OrdemInfo; Response.StatusResposta = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.Sucesso; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ordem parseado com sucesso"; } catch (Exception ex) { PipeLineCriticaInfo info = new PipeLineCriticaInfo(); info.Critica = ex.Message; info.CriticaTipo = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroNegocio; info.DataHoraCritica = DateTime.Now; Response.CriticaInfo = new List <PipeLineCriticaInfo>(); Response.CriticaInfo.Add(info); Response.StatusResposta = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.Exception; Response.DataResposta = DateTime.Now; Response.DescricaoResposta = "Ocorreu um erro ao parsear a mensagem"; } return(Response); }
/// <summary> /// Valida se todas as informãções da solicitação de envio de ordem foram preenchidas corretamente. /// </summary> /// <param name="pParametro">Objeto Ordem</param> /// <returns></returns> private ValidarFormatoOrdemResponse ValidarFormatoOrdemCliente(ClienteOrdemInfo pParametro) { try { ValidarFormatoOrdemResponse ValidarOrdemResponse = new ValidarFormatoOrdemResponse(); List <PipeLineCriticaInfo> ListaCriticaInfo = new List <PipeLineCriticaInfo>(); // CÓDIGO DO CLIENTE if (pParametro.CodigoCliente == 0) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <CodigoCliente> é obrigatório ", DataHoraCritica = DateTime.Now } ); } // DIRECAO DA ORDEM if (pParametro.DirecaoOrdem.Equals(null)) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <DirecaoOrdem> é obrigatório", DataHoraCritica = DateTime.Now } ); } // INSTRUMENTO if (string.IsNullOrEmpty(pParametro.Instrumento)) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <Instrumento> é obrigatório ", DataHoraCritica = DateTime.Now } ); } // PRECO if (pParametro.Preco == 0) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <Preco> é obrigatório ", DataHoraCritica = DateTime.Now } ); } // QUANTIDADE if (pParametro.Quantidade == 0) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <Quantidade> é obrigatório ", DataHoraCritica = DateTime.Now } ); } // DATAVALIDADE if ((pParametro.ValidadeOrdem != RoteadorOrdens.Lib.Dados.OrdemValidadeEnum.ValidaAteSerCancelada) || (pParametro.TipoDeOrdem != OrdemTipoEnum.OnClose)) { if ((pParametro.DataValidade == null) || (pParametro.DataValidade == DateTime.MinValue)) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <DataValidade> é obrigatório ", DataHoraCritica = DateTime.Now } ); } } if ((pParametro.PortaControleOrdem == null)) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "É preciso informar o numero da porta que a ordem será roteada", DataHoraCritica = DateTime.Now } ); } // TIPO ORDEM if (pParametro.TipoDeOrdem.Equals(null)) { ListaCriticaInfo.Add( new PipeLineCriticaInfo() { CriticaTipo = Lib.Enum.CriticaRiscoEnum.ErroFormatoMensagem, Critica = "O atributo <TipoDeOrdem> é obrigatório ", DataHoraCritica = DateTime.Now } ); } // VERIFICA SE EXISTE CRITICAS if (ListaCriticaInfo.Count > 0) { ValidarOrdemResponse.CriticaRiscoEnum = CriticaRiscoEnum.ErroFormatoMensagem; ValidarOrdemResponse.StatusResposta = CriticaRiscoEnum.ErroFormatoMensagem; ValidarOrdemResponse.CriticaInfo = ListaCriticaInfo; ValidarOrdemResponse.DataResposta = DateTime.Now; ValidarOrdemResponse.DescricaoResposta = string.Format("{0}{1}{2}", "Existem <", ListaCriticaInfo.Count.ToString(), "> items a serem verificados."); } else { ValidarOrdemResponse.StatusResposta = CriticaRiscoEnum.Sucesso; } logger.Info("Mensagem validada com sucesso."); return(ValidarOrdemResponse); } catch (Exception ex) { logger.Error("Erro :" + ex.Message, ex); return(null); } }