Exemplo n.º 1
0
        private ValidacaoRiscoResponse ValidarPipeLineOrdem(ValidacaoRiscoRequest pParametros, string CodigoCarteiraRecomendada)
        {
            ValidacaoRiscoResponse PipeLineResponse = new ValidacaoRiscoResponse();

            if (pParametros.EnviarOrdemRequest.OrdemInfo.Side == RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Compra)
            {
                PipeLineResponse = ComprarCarteiraRecomendada(pParametros, CodigoCarteiraRecomendada);
            }

            if (pParametros.EnviarOrdemRequest.OrdemInfo.Side == RoteadorOrdens.Lib.Dados.OrdemDirecaoEnum.Venda)
            {
                PipeLineResponse = VenderCarteiraRecomendada(pParametros, CodigoCarteiraRecomendada);
            }

            return(PipeLineResponse);
        }
Exemplo n.º 2
0
        public EnviarOrdemResponse EnviarOrdem(EnviarOrdemRequest pParametros, string CodigoCarteiraRecomendada)
        {
            EnviarOrdemResponse OrdemResposta = new EnviarOrdemResponse();

            OrdemFIXResponse <OrdemInfo> OrdemFixResponse = this.ParsearOrdemCliente(pParametros.ClienteOrdemInfo, CodigoCarteiraRecomendada);

            if (OrdemFixResponse.StatusResposta == OMS.Ordens.Lib.Enum.CriticaRiscoEnum.Sucesso)
            {
                EnviarOrdemRoteadorRequest OrdemRoteadorRequest = new EnviarOrdemRoteadorRequest();
                OrdemRoteadorRequest.OrdemInfo = OrdemFixResponse.Objeto;

                ValidacaoRiscoRequest RiscoRequisicao = new ValidacaoRiscoRequest();
                RiscoRequisicao.EnviarOrdemRequest = OrdemRoteadorRequest;

                ValidacaoRiscoResponse RiscoResposta = this.ValidarPipeLineOrdem(RiscoRequisicao, CodigoCarteiraRecomendada);

                if (RiscoResposta.CriticaInfo.Count >= 0)
                {
                    OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>();

                    foreach (var RiscoItem in RiscoResposta.CriticaInfo)
                    {
                        PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo();

                        OrdemResposta.CriticaInfo.Add(
                            new PipeLineCriticaInfo()
                        {
                            Critica         = RiscoItem.Critica,
                            CriticaTipo     = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)RiscoItem.CriticaTipo,
                            DataHoraCritica = RiscoItem.DataHoraCritica
                        });
                    }

                    OrdemResposta.DataResposta      = RiscoResposta.DataResposta;
                    OrdemResposta.DescricaoResposta = RiscoResposta.DescricaoResposta;
                    OrdemResposta.StackTrace        = RiscoResposta.StackTrace;
                    OrdemResposta.StatusResposta    = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)RiscoResposta.StatusResposta;
                }
                else
                {
                    OrdemResposta.CriticaInfo = new List <PipeLineCriticaInfo>();

                    foreach (var RiscoItem in OrdemFixResponse.CriticaInfo)
                    {
                        PipeLineCriticaInfo _PipeLineCriticaInfo = new PipeLineCriticaInfo();

                        OrdemResposta.CriticaInfo.Add(
                            new PipeLineCriticaInfo()
                        {
                            Critica         = RiscoItem.Critica,
                            CriticaTipo     = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)RiscoItem.CriticaTipo,
                            DataHoraCritica = RiscoItem.DataHoraCritica
                        });
                    }

                    OrdemResposta.DataResposta      = OrdemResposta.DataResposta;
                    OrdemResposta.DescricaoResposta = OrdemResposta.DescricaoResposta;
                    OrdemResposta.StackTrace        = OrdemResposta.StackTrace;
                    OrdemResposta.StatusResposta    = (OMS.Ordens.Lib.Enum.CriticaRiscoEnum)OrdemResposta.StatusResposta;
                }
            }

            return(OrdemResposta);
        }
Exemplo n.º 3
0
        private ValidacaoRiscoResponse VenderCarteiraRecomendada(ValidacaoRiscoRequest pParametros, string CodigoCarteiraRecomendada)
        {
            ValidacaoRiscoResponse     PipeLineResponse      = new ValidacaoRiscoResponse();
            List <PipeLineCriticaInfo> CriticaInfoCollection = new List <PipeLineCriticaInfo>();
            PipeLineCriticaInfo        CriticaInfo           = null;


            logger.Info("Inicia Rotina de validação de compra de ações, cliente: " + pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString());

            logger.Info("Caracteristicas da ordem");
            logger.Info("Cliente             :" + pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString());
            logger.Info("Operação            : Compra");
            logger.Info("Instrumento         :" + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol);
            logger.Info("Quantidade          :" + pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty.ToString());
            logger.Info("Preco               : ORDEM A MERCADO ");
            logger.Info("DtVencimento        :" + pParametros.EnviarOrdemRequest.OrdemInfo.ExpireDate.ToString());
            logger.Info("ClasseCliente       : Institucional");


            CadastroPapeisRequest _CadastroPapeisRequest = new CadastroPapeisRequest();

            _CadastroPapeisRequest.Instrumento = pParametros.EnviarOrdemRequest.OrdemInfo.Symbol;

            CadastroPapeisResponse <CadastroPapelInfo> CadastroPapeis = new PersistenciaCarteiraRecomendada().ObterInformacoesPapeis(_CadastroPapeisRequest);


            int FatorCotacao = int.Parse(CadastroPapeis.Objeto.FatorCotacao);

            // TRATAMENTO [ FRACIONARIO / INTEGRAL ]
            int LoteNegociacao       = int.Parse(CadastroPapeis.Objeto.LoteNegociacao);
            int ModuloLoteNegociacao = pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty % LoteNegociacao;

            if (pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty >= LoteNegociacao)
            {
                // ENVIAR INTEGRAL
                pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty -= ModuloLoteNegociacao;
                logger.Info("Inicia operação de compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado Integral");

                // Inseri a Ordem solicitada no banco de dados
                if (InserirOrdemCliente(pParametros.EnviarOrdemRequest))
                {
                    //TODO: COMPRA O PAPEL COM O SERVICO DE ORDENS
                    logger.Info("Compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado integral efetuada com sucesso.");

                    logger.Info("Envia a ordem para o roteador de ordens");

                    pParametros.EnviarOrdemRequest.OrdemInfo.Account = RetornaCodigoCliente(227, pParametros.EnviarOrdemRequest.OrdemInfo.Account);

                    ExecutarOrdemResponse RespostaRoteador = this.EnviarOrdemRoteador(pParametros.EnviarOrdemRequest.OrdemInfo);

                    pParametros.EnviarOrdemRequest.OrdemInfo.Account = int.Parse(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Remove(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Length - 1, 1));

                    // VERIFICA SE A ORDEM FOI ENVIADA COM SUCESSO PARA O ROTEADOR
                    if (RespostaRoteador.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso)
                    {
                        logger.Info("Ordem institucional enviada com sucesso para o Roteador de Ordens");

                        PipeLineResponse.DataResposta      = DateTime.Now;
                        PipeLineResponse.DescricaoResposta = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia;
                        PipeLineResponse.StatusResposta    = OMS.Risco.Lib.Enum.CriticaRiscoEnum.Sucesso;
                    }
                    else
                    {
                        logger.Info("Ocorreu um erro ao enviar a ordem para o roteador de Ordens");

                        CriticaInfo                 = new PipeLineCriticaInfo();
                        CriticaInfo.Critica         = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia;
                        CriticaInfo.CriticaTipo     = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroRoteadorOrdem;
                        CriticaInfo.DataHoraCritica = DateTime.Now;

                        // Adiciona as criticas no pipeline de risco.
                        CriticaInfoCollection.Add(CriticaInfo);
                    }
                }

                if (ModuloLoteNegociacao > 0)
                {
                    // ENVIAR FRACIONARIO
                    logger.Info("Calcula restante a ser enviado para o mercado fracionário");

                    // ENVIAR FRACIONARIO
                    pParametros.EnviarOrdemRequest.OrdemInfo.OrderQty = ModuloLoteNegociacao;
                    pParametros.EnviarOrdemRequest.OrdemInfo.Symbol  += "F";
                    pParametros.EnviarOrdemRequest.OrdemInfo.ClOrdID  = this.CtrlNumber(CodigoCarteiraRecomendada);

                    logger.Info("Inicia compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionário");

                    // Inseri a Ordem solicitada no banco de dados
                    if (InserirOrdemCliente(pParametros.EnviarOrdemRequest))
                    {
                        //TODO: COMPRA O PAPEL COM O SERVICO DE ORDENS
                        logger.Info("Compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionario efetuada com sucesso.");

                        logger.Info("Envia a ordem para o roteador de ordens");

                        pParametros.EnviarOrdemRequest.OrdemInfo.Account = RetornaCodigoCliente(227, pParametros.EnviarOrdemRequest.OrdemInfo.Account);

                        ExecutarOrdemResponse RespostaRoteador = this.EnviarOrdemRoteador(pParametros.EnviarOrdemRequest.OrdemInfo);

                        pParametros.EnviarOrdemRequest.OrdemInfo.Account = int.Parse(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Remove(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Length - 1, 1));

                        // VERIFICA SE A ORDEM FOI ENVIADA COM SUCESSO PARA O ROTEADOR
                        if (RespostaRoteador.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso)
                        {
                            logger.Info("Ordem enviada com sucesso para o Roteador de Ordens");

                            PipeLineResponse.DataResposta      = DateTime.Now;
                            PipeLineResponse.DescricaoResposta = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia;
                            PipeLineResponse.StatusResposta    = OMS.Risco.Lib.Enum.CriticaRiscoEnum.Sucesso;
                        }
                        else
                        {
                            logger.Info("Ocorreu um erro ao enviar a ordem para o roteador de Ordens");

                            CriticaInfo                 = new PipeLineCriticaInfo();
                            CriticaInfo.Critica         = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia;
                            CriticaInfo.CriticaTipo     = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroRoteadorOrdem;
                            CriticaInfo.DataHoraCritica = DateTime.Now;

                            // Adiciona as criticas no pipeline de risco.
                            CriticaInfoCollection.Add(CriticaInfo);
                        }
                    }
                }
            }
            else
            {
                //FRACIONARIO
                pParametros.EnviarOrdemRequest.OrdemInfo.Symbol += "F";

                logger.Info("Inicia compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionário");

                // Inseri a Ordem solicitada no banco de dados
                if (InserirOrdemCliente(pParametros.EnviarOrdemRequest))
                {
                    //TODO: COMPRA O PAPEL COM O SERVICO DE ORDENS
                    logger.Info("Compra de: " + pParametros.EnviarOrdemRequest.OrdemInfo.Symbol + " no mercado fracionário efetuada com sucesso.");

                    //ENVIA ORDEM PARA O ROTEADOR
                    pParametros.EnviarOrdemRequest.OrdemInfo.Account = RetornaCodigoCliente(227, pParametros.EnviarOrdemRequest.OrdemInfo.Account);

                    logger.Info("Envia a ordem para o roteador de ordens");


                    var RespostaRoteador = this.EnviarOrdemRoteador(pParametros.EnviarOrdemRequest.OrdemInfo);

                    pParametros.EnviarOrdemRequest.OrdemInfo.Account = int.Parse(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Remove(pParametros.EnviarOrdemRequest.OrdemInfo.Account.ToString().Length - 1, 1));

                    //// VERIFICA SE A ORDEM FOI ENVIADA COM SUCESSO PARA O ROTEADOR
                    if (RespostaRoteador.DadosRetorno.StatusResposta == StatusRoteamentoEnum.Sucesso)
                    {
                        logger.Info("Ordem enviada com sucesso para o Roteador de Ordens");

                        PipeLineResponse.DataResposta      = DateTime.Now;
                        PipeLineResponse.DescricaoResposta = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia;
                        PipeLineResponse.StatusResposta    = OMS.Risco.Lib.Enum.CriticaRiscoEnum.Sucesso;
                    }
                    else
                    {
                        logger.Info("Ocorreu um erro ao enviar a ordem para o roteador de Ordens");

                        CriticaInfo                 = new PipeLineCriticaInfo();
                        CriticaInfo.Critica         = RespostaRoteador.DadosRetorno.Ocorrencias[0].Ocorrencia;
                        CriticaInfo.CriticaTipo     = OMS.Ordens.Lib.Enum.CriticaRiscoEnum.ErroRoteadorOrdem;
                        CriticaInfo.DataHoraCritica = DateTime.Now;

                        // Adiciona as criticas no pipeline de risco.
                        CriticaInfoCollection.Add(CriticaInfo);
                    }
                }
            }

            return(PipeLineResponse);
        }