Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }