Ejemplo n.º 1
0
        public BL_Boleta GeraBoleta(BL_Cotista Cotista, BL_FIQ Fundo, decimal VALOR, DateTime DataSol, string OP, string CONTA, long CAUTELA = 0)
        {
            DateTime Solicitacao = DataSol;

            if (CAUTELA != 0 && Fundo.LOCKUP != 0)
            {
                BL_Saldo Cautela = new BL_Saldo().CautelasPorCODCOTeCODFUND(Cotista.CODCOT, Fundo.CODFUND).FirstOrDefault(x => x.CAUTELA == CAUTELA);
                Solicitacao = Solicitacao > Cautela.DTLANCT.AddDays(Fundo.LOCKUP) ? Solicitacao : Cautela.DTLANCT.AddDays(Fundo.LOCKUP);
            }
            DateTime Cotizacao = new BL_Boleta().CalculaCotizacao(Solicitacao, OP, Fundo.CODFUND);
            DateTime Impacto   = OP == "AP" ? DataSol : new BL_Boleta().CalculaLiquidacao(Cotizacao, OP, Fundo.CODFUND);

            BL_Boleta Boleta = new BL_Boleta
            {
                CODCOT    = Cotista.CODCOT,
                CODFUND   = Fundo.CODFUND,
                CPFCNPJ   = Cotista.CPFCNPJ,
                NOME      = Cotista.NOME,
                FUNDO     = Fundo.NOME,
                OPERACAO  = OP,
                STATUS    = "Pendente",
                VALOR     = VALOR,
                CONTA     = CONTA,
                COTIZACAO = Cotizacao,
                IMPACTO   = Impacto,
                CAUTELA   = CAUTELA
            };

            return(Boleta);
        }
Ejemplo n.º 2
0
        public DateTime CalculaLiquidacao(DateTime DataCot, string OP, long CODFUND)
        {
            BL_FIQ   Fundo = new BL_FIQ().DadosPorCODFUND(CODFUND);
            DateTime Ans   = new BL_Feriados().CalculaLiquidacao(DataCot, Fundo.LIQUIDARESG);

            return(Ans);
        }
Ejemplo n.º 3
0
        public void AtualizarDados(string Usuario, string Senha)
        {
            string Extract(string s, string tag)
            {
                var startTag   = "<" + tag + ">";
                int startIndex = s.IndexOf(startTag) + startTag.Length;
                int endIndex   = s.IndexOf("</" + tag + ">", startIndex);

                if (endIndex - startIndex < 0)
                {
                    return("");
                }
                else
                {
                    return(s.Substring(startIndex, endIndex - startIndex));
                }
            }

            Dictionary <string, decimal> CotasBase = CotasCompleto().ToDictionary(Key => Key.CODFUND.ToString() + Key.DATA.ToString("ddMMyyyy"), Value => Value.COTA);
            List <long> Fundos = new BL_FIQ().Dados().Select(x => x.CODFUND).ToList();

            Fundos.AddRange(new BL_Master().Dados().Select(X => X.CODFUND));

            string[] linhas;

            try { linhas = new DownloadArquivoServiceService().cotacaoXML(Usuario, Senha, "991259").Split(Convert.ToChar("\n")); }
            catch { linhas = new string[0]; }

            for (int i = 0; i < linhas.Length; i++)
            {
                if (linhas[i].Length > 13 && (linhas[i].Contains("</CDFDO>")))
                {
                    BL_Cota CotaNew = new BL_Cota
                    {
                        CODFUND = Convert.ToInt64(Extract(linhas[i], "CDFDO")),
                        DATA    = DateTime.ParseExact(Extract(linhas[i + 1], "DTAPROCE"), "yyyyMMdd", CultureInfo.InvariantCulture),
                        COTA    = Convert.ToDecimal(Extract(linhas[i + 2], "VLCOTAP")) / 10000000,
                    };

                    if (!Fundos.Contains(CotaNew.CODFUND))
                    {
                        continue;
                    }

                    if (CotasBase.Keys.Contains(CotaNew.KEY))
                    {
                        if (CotasBase[CotaNew.KEY] != CotaNew.COTA)
                        {
                            Editar(CotaNew.CODFUND, CotaNew.DATA, CotaNew.COTA);
                        }
                    }
                    else
                    {
                        Inserir(CotaNew.CODFUND, CotaNew.DATA, CotaNew.COTA);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        public List <BL_Boleta> BoletaPorCautela(BL_Cotista Cotista, BL_FIQ Fundo, decimal VALOR, DateTime DataSol, string OP, string CONTA)
        {
            List <BL_Boleta> Ans      = new List <BL_Boleta>();
            List <BL_Saldo>  Cautelas = new BL_Saldo().CautelasPorCODCOTeCODFUND(Cotista.CODCOT, Fundo.CODFUND);

            DateTime        MaisRecente       = Cautelas.Select(x => x.DTLANCT).Max();
            DateTime        Cotizacao         = CalculaCotizacao(DataSol, OP, Fundo.CODFUND);
            List <BL_Saldo> CautelasLiberadas = Cautelas.Where(x => Cotizacao.Subtract(x.DTLANCT).Days >= 630 + 90).ToList();

            CautelasLiberadas = CautelasLiberadas.OrderByDescending(x => x.VLCOTAP).ToList();
            while (VALOR != 0 && CautelasLiberadas.Count > 0) //resgata das cautelas liberadas em ordem de menor rentabilidade
            {
                BL_Saldo  Cautela = CautelasLiberadas[0];
                BL_Boleta Boleta;
                decimal   Valor; string Operacao;
                if (VALOR >= Cautela.QNTCOTAS)
                {
                    Valor = Cautela.QNTCOTAS; Operacao = "RT";
                }
                else
                {
                    Valor = VALOR; Operacao = "RC";
                }
                Boleta = GeraBoleta(Cotista, Fundo, Valor, DataSol, Operacao, CONTA, Cautela.CAUTELA);
                Ans.Add(Boleta);
                VALOR -= Valor;
                CautelasLiberadas.Remove(Cautela);
            }
            if (VALOR > 0) //resgata das cautelas travadas em ordem de data de aplicação
            {
                List <BL_Saldo> CautelasTravadas = Cautelas.Where(x => Cotizacao.Subtract(x.DTLANCT).Days < Fundo.LOCKUP + Fundo.CONVRESG).ToList();
                CautelasTravadas = CautelasTravadas.OrderBy(x => x.DTLANCT).ToList();
                while (VALOR != 0 && CautelasTravadas.Count > 0)
                {
                    BL_Saldo  Cautela = CautelasTravadas[0];
                    BL_Boleta Boleta;
                    decimal   Valor; string Operacao;
                    if (VALOR >= Cautela.QNTCOTAS)
                    {
                        Valor = Cautela.QNTCOTAS; Operacao = "RT";
                    }
                    else
                    {
                        Valor = VALOR; Operacao = "RC";
                    }
                    Boleta = GeraBoleta(Cotista, Fundo, Valor, Cautela.DTLANCT.AddDays(Fundo.LOCKUP), Operacao, CONTA, Cautela.CAUTELA);
                    Ans.Add(Boleta);
                    VALOR -= Valor;
                    CautelasTravadas.Remove(Cautela);
                }
            }

            return(Ans);
        }
Ejemplo n.º 5
0
        public DataTable BatimentoSolicitacao(DateTime Dia)
        {
            DataTable DT = new DataTable();

            DT.Columns.Add("FIQ");
            DT.Columns.Add("INTRAG");
            DT.Columns.Add("CONTROLE");
            DT.Columns.Add("CHECK");

            List <BL_FIQ> FIQs = new BL_FIQ().Dados();
            Dictionary <long, decimal> INTRAG   = new BL_BoletaIntrag().DadosDia(Dia).Where(x => x.OPERACAO == "AP" && x.STATUS != "E").GroupBy(x => x.CODFUND).ToDictionary(k => k.Key, v => v.Sum(y => y.FINANCEIRO));
            Dictionary <long, decimal> CONTROLE = new BL_Boleta().DadosDia(Dia).Where(x => x.OPERACAO == "AP" && x.STATUS != "Cancelado").GroupBy(x => x.CODFUND).ToDictionary(k => k.Key, v => v.Sum(y => y.VALOR));

            foreach (BL_FIQ FIQ in FIQs)
            {
                if (INTRAG.ContainsKey(FIQ.CODFUND) || CONTROLE.ContainsKey(FIQ.CODFUND))
                {
                    DataRow DR = DT.NewRow();
                    DR["FIQ"] = FIQ.NOME;
                    if (INTRAG.ContainsKey(FIQ.CODFUND))
                    {
                        DR["INTRAG"] = Convert.ToDecimal(INTRAG[FIQ.CODFUND]);
                    }
                    if (CONTROLE.ContainsKey(FIQ.CODFUND))
                    {
                        DR["CONTROLE"] = Convert.ToDecimal(CONTROLE[FIQ.CODFUND]);
                    }

                    DT.Rows.Add(DR);
                }
            }

            foreach (DataRow DR in DT.Rows)
            {
                if (DR["INTRAG"].ToString() == "")
                {
                    DR["CHECK"] = -Convert.ToDecimal(DR["CONTROLE"]);
                }
                else if (DR["CONTROLE"].ToString() == "")
                {
                    DR["CHECK"] = Convert.ToDecimal(DR["INTRAG"]);
                }
                else
                {
                    DR["CHECK"] = Convert.ToDecimal(DR["INTRAG"]) - Convert.ToDecimal(DR["CONTROLE"]);
                }
            }

            DT.DefaultView.Sort = "CHECK desc";

            try { return(DT); }
            catch (ArgumentException e) { new BL_LogErro().Inserir("BL_FIQ - BatimentoSolicitacao", "Erro: " + e.Message); return(new DataTable()); }
        }
Ejemplo n.º 6
0
        public DateTime CalculaCotizacao(DateTime DataSol, string OP, long CODFUND)
        {
            BL_FIQ Fundo = new BL_FIQ().DadosPorCODFUND(CODFUND);
            int    Prazo = OP == "AP" ? Fundo.CONVAPL : Fundo.CONVRESG;
            string Tipo;

            if (OP == "AP" && Fundo.REGRARESGATE == "T")
            {
                Tipo = "M";
            }
            else
            {
                Tipo = Fundo.REGRARESGATE;
            }

            DateTime Ans = new BL_Feriados().CalculaCotizacao(DataSol, Prazo, Tipo);

            return(Ans);
        }
Ejemplo n.º 7
0
        public void ImportaCSV(string DADOS)
        {
            Dictionary <string, decimal> CotasBase = CotasCompleto().ToDictionary(Key => Key.CODFUND.ToString() + Key.DATA.ToString("ddMMyyyy"), Value => Value.COTA);
            List <long> Fundos = new BL_FIQ().Dados().Select(x => x.CODFUND).ToList();

            Fundos.AddRange(new BL_Master().Dados().Select(X => X.CODFUND));

            string[] linhas;

            try { linhas = DADOS.Split(Convert.ToChar("\n")); }
            catch { linhas = new string[0]; }

            for (int i = 0; i < linhas.Length; i++)
            {
                BL_Cota CotaNew = new BL_Cota
                {
                    CODFUND = Convert.ToInt64(linhas[i].Split(';')[0]),
                    DATA    = Convert.ToDateTime(linhas[i].Split(';')[1]),
                    COTA    = Convert.ToDecimal(linhas[i].Split(';')[2])
                };

                if (!Fundos.Contains(CotaNew.CODFUND))
                {
                    continue;
                }

                if (CotasBase.Keys.Contains(CotaNew.KEY))
                {
                    if (CotasBase[CotaNew.KEY] != CotaNew.COTA)
                    {
                        Editar(CotaNew.CODFUND, CotaNew.DATA, CotaNew.COTA);
                    }
                }
                else
                {
                    Inserir(CotaNew.CODFUND, CotaNew.DATA, CotaNew.COTA);
                }
            }
        }
Ejemplo n.º 8
0
        //Métodos de Dados
        #region
        public void AtualizarDados(string Usuario, string Senha)
        {
            string Extract(string s, string tag)
            {
                var startTag   = "<" + tag + ">";
                int startIndex = s.IndexOf(startTag) + startTag.Length;
                int endIndex   = s.IndexOf("</" + tag + ">", startIndex);

                if (endIndex - startIndex < 0)
                {
                    return("");
                }
                else
                {
                    return(s.Substring(startIndex, endIndex - startIndex));
                }
            }

            List <long> Fundos = new BL_FIQ().Dados().Select(x => x.CODFUND).ToList();

            Fundos.AddRange(new BL_Master().Dados().Select(X => X.CODFUND));

            string[] linhas;
            linhas = new DownloadArquivoServiceService().saldosCotaFechamentoD0XMLNoZIP(Usuario, Senha, "991259").Split(Convert.ToChar("\n"));

            //Deletar();
            List <BL_Saldo> Saldos = new BL_Saldo().DadosCompletos();

            for (int i = 0; i < linhas.Length; i++)
            {
                if (linhas[i].Contains("</CDFDO>"))
                {
                    BL_Saldo Saldo;
                    long     CAUTELA_Aux      = Convert.ToInt64(Extract(linhas[i + 9], "CDAPL"));
                    string   CODAUX           = Extract(linhas[i + 2], "AGENCIA") + Extract(linhas[i + 3], "CDCTA") + Extract(linhas[i + 4], "DAC10");
                    long     CODCOT_Aux       = Convert.ToInt64(CODAUX);
                    long     CODFUND_Aux      = Convert.ToInt64(Extract(linhas[i], "CDFDO"));
                    decimal  QNTCOTAS_Aux     = Convert.ToDecimal(Extract(linhas[i + 14], "QTCOTPAT")) / 100000;
                    string   TIPOREGISTRO_Aux = Extract(linhas[i + 8], "IDTIPREG") == "20" ? "Simples" : "Total";
                    //DateTime DATACOTA_Aux = DateTime.ParseExact(Extract(linhas[i + 16], "DTACOTA"), "yyyyMMdd", CultureInfo.InvariantCulture);
                    //decimal COTA_Aux = Convert.ToDecimal(Extract(linhas[i + 17], "VLRCOT")) / 10000000;

                    if (CAUTELA_Aux != 0)
                    {
                        Saldo = Saldos.FirstOrDefault(x => x.CAUTELA == CAUTELA_Aux);
                    }
                    else
                    {
                        Saldo = Saldos.FirstOrDefault(x => x.CODCOT == CODCOT_Aux && x.CODFUND == CODFUND_Aux && x.TIPOREGISTRO == "Total");
                    }
                    if (Saldo == null) //Inserir nova linha
                    {
                        DateTime DTLANCT_Aux;
                        if (TIPOREGISTRO_Aux == "Simples")
                        {
                            DTLANCT_Aux = DateTime.ParseExact(Extract(linhas[i + 6], "DTLANCT"), "yyyyMMdd", CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            DTLANCT_Aux = new DateTime(1753, 1, 1);
                        }
                        decimal VLCOTAP_Aux = Convert.ToDecimal(Extract(linhas[i + 11], "VLCOTAP")) / 10000000;
                        Inserir(CODCOT_Aux, CODFUND_Aux, DTLANCT_Aux, VLCOTAP_Aux, TIPOREGISTRO_Aux, CAUTELA_Aux, QNTCOTAS_Aux);
                        continue;
                    }
                    if (TIPOREGISTRO_Aux == "Simples" && (CODCOT_Aux != Saldo.CODCOT || CODFUND_Aux != Saldo.CODFUND || QNTCOTAS_Aux != Saldo.QNTCOTAS))
                    {
                        EditarSimples(CODCOT_Aux, CODFUND_Aux, TIPOREGISTRO_Aux, CAUTELA_Aux, QNTCOTAS_Aux);
                    }
                    if (TIPOREGISTRO_Aux == "Total" && (QNTCOTAS_Aux != Saldo.QNTCOTAS))
                    {
                        EditarTotal(CODCOT_Aux, CODFUND_Aux, QNTCOTAS_Aux);
                    }
                    Saldos.Remove(Saldo);
                }
            }

            foreach (BL_Saldo Resto in Saldos)
            {
                if (Resto.TIPOREGISTRO == "Simples")
                {
                    DeletarSimples(Resto.CAUTELA);
                }
                else if (Resto.TIPOREGISTRO == "Total")
                {
                    DeletarTotal(Resto.CODCOT, Resto.CODFUND);
                }
            }
            linhas = null;
        }
Ejemplo n.º 9
0
        //Funções Auxiliares
        #region

        //ARQEOP_XML passivo
        public string XML(string Usuario, string Senha)
        {
            BL_FIQ Fundo = new BL_FIQ().DadosPorCODFUND(CODFUND);

            //Inversores de Dados
            string Operacao()
            {
                if (OPERACAO == "AP")
                {
                    return("030");
                }
                else
                {
                    if (CAUTELA == 0)
                    {
                        if (OPERACAO == "R")
                        {
                            return("105");
                        }
                        else if (OPERACAO == "RC" || (Fundo != null && Fundo.CODMASTER == 61984 && OPERACAO == "RT" && Fundo.PERMRESGANT == "N"))
                        {
                            return("121");
                        }
                        else
                        {
                            return("115");
                        }                      //resgate de raptor nunca vai ser total
                    }
                    else //resgate por cautela
                    {
                        if (OPERACAO == "R")
                        {
                            return("106");
                        }
                        else if (OPERACAO == "RC" || (Fundo != null && Fundo.CODMASTER == 61984 && OPERACAO == "RT" && Fundo.PERMRESGANT == "N"))
                        {
                            return("123");
                        }                 //resgate de raptor com lockup é sempre 123
                        else
                        {
                            return("116");
                        }
                    }
                }
            }

            string DataCotiza()
            {
                string Ans;

                if (OPERACAO != "AP" && Fundo != null && Fundo.CODMASTER == 61984)
                {
                    Ans = COTIZACAO.ToString("ddMMyyyy");
                }
                else
                {
                    Ans = new String(Convert.ToChar(" "), 8);
                }
                return(Ans);
            }

            string DataLancamento()
            {
                string Ans;

                if (OPERACAO != "AP" && Fundo != null && Fundo.CODMASTER == 61984)
                {
                    Ans = DateTime.Today.ToString("ddMMyyyy");
                }
                else
                {
                    Ans = new String(Convert.ToChar(" "), 8);
                }
                return(Ans);
            }

            string TipoLiquida()
            {
                if (CONTA.Contains("CETIP"))
                {
                    return("C");
                }
                else if (OPERACAO == "AP")
                {
                    return("R");
                }
                else if (Convert.ToInt64(CONTA.Split('-')[0]) == 341)
                {
                    return("F");
                }
                else
                {
                    return("S");
                }
            }

            string Valor()
            {
                if (OPERACAO == "AP" || OPERACAO == "R")
                {
                    return(new string('0', 15 - Convert.ToInt64(VALOR * 100).ToString().Length) + Convert.ToInt64(VALOR * 100).ToString());
                }
                else if (Operacao() == "121" || Operacao() == "123")
                {
                    return(new string('0', 15 - Convert.ToInt64(VALOR * 100000).ToString().Length) + Convert.ToInt64(VALOR * 100000).ToString());
                }
                else
                {
                    return(new String(' ', 15));
                }
            }

            string ContaCredito()
            {
                if (OPERACAO == "AP")
                {
                    return(new String(' ', 24));
                }
                else if (CONTA.Contains("CETIP"))
                {
                    return(new String(' ', 24));
                }
                else //resgate via ted
                {
                    //banco itaú
                    if (Convert.ToInt64(CONTA.Split('-')[0]) == 341)
                    {
                        return
                            //código do banco (BBBB)
                            (new String('0', 4 - Convert.ToInt64(CONTA.Split('-')[0]).ToString().Length) + Convert.ToInt64(CONTA.Split('-')[0]).ToString() +
                             //código da agência (AAAAA)
                             new String('0', 5 - Convert.ToInt64(CONTA.Split('-')[1]).ToString().Length) + Convert.ToInt64(CONTA.Split('-')[1]).ToString() + " " +
                             //código da conta (CCCCCCCCCCC)
                             new String('0', 11 - Convert.ToInt64(CONTA.Split('-')[2]).ToString().Length) + Convert.ToInt64(CONTA.Split('-')[2]).ToString() + "  " +
                             //dígito da conta I
                             Convert.ToInt64(CONTA.Split('-')[3]).ToString());
                    }
                    else
                    {//outros bancos
                        return
                            (new String('0', 4 - Convert.ToInt64(CONTA.Split('-')[0]).ToString().Length) + Convert.ToInt64(CONTA.Split('-')[0]).ToString() +
                             new String('0', 5 - Convert.ToInt64(CONTA.Split('-')[1]).ToString().Length) + Convert.ToInt64(CONTA.Split('-')[1]).ToString() + " " +
                             new String('0', 12 - Convert.ToInt64(CONTA.Split('-')[2]).ToString().Length) + Convert.ToInt64(CONTA.Split('-')[2]).ToString() +
                             Convert.ToInt64(CONTA.Split('-')[3]).ToString() + " ");
                    }
                }
            }

            string Cautela()
            {
                if (CAUTELA == 0)
                {
                    return(new String(' ', 10));
                }
                else
                {
                    return(new String('0', 10 - CAUTELA.ToString().Length) + CAUTELA.ToString());
                }
            }

            //Estrutura do XML
            Dictionary <string, string> Parametros = new Dictionary <string, string>
            {
                { "campo0", Usuario },
                { "campo1", Senha },
                { "campo2", "991259" },
                { "campo3", CODFUND.ToString() },
                { "campo4", "991259" },
                { "campo5", CODCOT.ToString().Substring(0, 4) },
                { "campo6", CODCOT.ToString().Substring(4, 9) },
                { "campo7", CODCOT.ToString().Substring(13, 1) },
                { "campo8", "201" },
                { "campo9", Operacao() },
                { "campo10", Valor() },
                { "campo11", ContaCredito() },
                { "campo12", new String('0', 6) }, //identificador do arquivo (xml)
                { "campo13", TipoLiquida() },
                { "campo14", Cautela() },
                { "campo15", "C" }, //tipo de conta de crédito (conta corrente)
                { "campo16", DataCotiza() },
                { "campo17", DataLancamento() },
                { "campo18", new String(' ', 8) } //código ispb (em branco)
            };

            //Adicina um campo caso seja via CETIP
            if (CONTA.Contains("CETIP"))
            {
                Parametros.Add("campo19", new String('0', 8 - CONTA.Replace("CETIP: ", "").ToString().Length) + CONTA.Replace("CETIP: ", "").ToString());
            }

            XElement Conteudo = new XElement("parameter");
            XElement XML      = new XElement("itaumsg");

            //Monta o XML com base nos campos informados
            foreach (string Parametro in Parametros.Keys)
            {
                Conteudo.Add(new XElement("param", new XAttribute("id", Parametro), new XAttribute("value", Parametros[Parametro])));
            }
            XML.Add(Conteudo);
            return(XML.ToString());
        }
Ejemplo n.º 10
0
        public string Boletar(BL_Boleta Boleta, string Usuario, string Senha)
        {   //Recebe resposta Intrag
            string Resposta = "";
            //string teste = new BL_Boleta().XML(Boleta, Usuario, Senha);
            string teste = Boleta.XML(Usuario, Senha);

            Console.WriteLine(teste);
            try
            {
                Resposta = new DA_XML().Envio(Boleta.XML(Usuario, Senha).Replace("\r\n", ""), "https://www.itaucustodia.com.br/PassivoWebServices/xmlmva.jsp");
                Console.WriteLine(Resposta);
            }
            catch (ArgumentException e) { new BL_LogErro().Inserir("BL_Boleta - Boletar", "Erro: " + e.Message); }


            //Valor Superior ao permitido
            if (Resposta.Contains("\"**Valor+ac"))
            {
                return("Liberado");
            }

            //Cadastro Pendente (vencido ou incompleto)
            if (Resposta.Contains("\"COTISTA+SE"))
            {
                return("Cadastro Pendente");
            }

            //Pendente de TCR
            if (Resposta.Contains("\"COTISTA+CO") || Resposta.Contains("\"APLICACAO+NAO"))
            {
                return("TCR Pendente");
            }

            //Codext Não existe
            if (Resposta.Contains("\"CODIGO+DO+"))
            {
                return("Código externo não existe");
            }

            //Fundo não encontrado
            if (Resposta.Contains("\"FUNDO+NAO+"))
            {
                return("Fundo não encontrado");
            }

            //Login Inválido
            if (Resposta.Contains("\"LOGIN+INVA"))
            {
                return("Login Inválido");
            }

            #region Boletagem

            //Saldo Inferior
            if (Resposta.Contains("\"**OPERACAO+P") || Resposta.Contains("\"existe++saldo+disponivel"))
            {
                ObjLogOp.Inserir("BL_BOLETA - Boletar", string.Format("Boleta ID - {0} Não existe saldo disponível", Boleta.IDBOLETA));
                return("Saldo Insuficiente");
            }

            //Lançamento de Cetip
            if (Boleta.CONTA.Contains("CETIP"))
            {
                if (Resposta.Contains("MOVIMENTO+PENDENTE+DE+LIQUIDA"))
                {
                    Editar(Boleta.IDBOLETA, Boleta.COTIZACAO, Boleta.IMPACTO, "Liquidação");
                    ObjLogOp.Inserir("BL_BOLETA - Boletar", string.Format("Boleta ID - {0} Lançada na Cetip", Boleta.IDBOLETA));
                    return("Em liquidação");
                }
                else if (Resposta.Contains("\"COTISTA+NAO"))
                {
                    ObjLogOp.Inserir("BL_Boleta - Boletar", $"Boleta ID {Boleta.IDBOLETA}: Cotista não possui conta cetip cadastrada!");
                    return("Cetip Pendente");
                }
                else if (Resposta.Contains("\"OPERACAO+EN"))
                {
                    return("Fora do horário permitido");
                }
            }

            //Boletagem Efetuada
            if (Resposta.Contains("\"**OPERACAO+E") || (Resposta.Contains("\"PROCESSO+EFETUADO")))
            {
                if (Boleta.OPERACAO == "AP" && Boleta.CONTA == "VIA TED" && Boleta.VALOR == 10000000000)
                {
                    return("Liberado");
                }
                else
                {
                    BL_FIQ Fundo = new BL_FIQ().DadosPorCODFUND(Boleta.CODFUND);
                    if (Fundo != null && Fundo.CODMASTER == 61984 && Boleta.OPERACAO != "AP")
                    {
                        Editar(Boleta.IDBOLETA, Boleta.COTIZACAO, Boleta.IMPACTO, "Boletado");
                    }
                    else
                    {
                        Editar(Boleta.IDBOLETA, Boleta.COTIZACAO, Boleta.IMPACTO, "Validando");
                    }

                    //Atualiza RegistroResgate Caso seja Resgate
                    if (Boleta.OPERACAO != "AP")
                    {
                        new BL_RegistroResgate().EditarIDBOLETA(Boleta.IDBOLETA, "Concluído");
                    }
                    return("Validando");
                }
            }

            #endregion

            //Reposta não identificada
            ObjLogOp.Inserir("BL_Boleta - Boletar", string.Format("Reposta não identificada da boleta ({0}): {1}", Boleta.IDBOLETA, Resposta));
            return("Erro Desconhecido: " + Resposta);
        }
Ejemplo n.º 11
0
        //Métodos da Classe
        #region
        public bool ValidaBoleta(BL_Cotista Cotista, BL_FIQ Fundo, string OPERACAO, decimal VALOR, DateTime SOLICITACAO, long CAUTELA, ref string Status)
        {
            Status = "Liberado";
            BL_Saldo Saldo = new BL_Saldo().DadosPorCODCOTeCODFUND(Cotista.CODCOT, Fundo.CODFUND);

            if (OPERACAO == "AP") //Aplicação
            {                     //Aplicação inicial mínima
                if (Saldo.QNTCOTAS == 0 && VALOR < Fundo.VALORAPLAMIN)
                {
                    Status = $"O valor solicitado é inferior à aplicação inicial mínima permitida de {Fundo.VALORAPLAMIN}!";
                } //Aplicação adicional mínima
                else if (VALOR < Fundo.VALORAPLMINADI)
                {
                    Status = $"O valor solicitado é inferior à aplicação adicional mínima permitida de {Fundo.VALORAPLMINADI}!";
                } //Janela do Raptor
                DateTime Cotizacao    = CalculaCotizacao(SOLICITACAO, OPERACAO, Fundo.CODFUND);
                DateTime JanelaRaptor = new BL_Feriados().AddWorkDays(Cotizacao, -1);
                if (SOLICITACAO != JanelaRaptor)
                {
                    Status = $"Operação não permitida hoje! A próxima janela de aplicação do Raptor será dia {JanelaRaptor}.";
                }
            }
            else //Resgates
            {
                BL_Cota UltimaCota = new BL_Cota().UltimaCota(Fundo.CODFUND);
                if (OPERACAO == "R")
                {
                    if (Fundo.LOCKUP != 0)
                    {
                        Status = "Não é possível resgatar por financeiro em fundos com lockup!";
                    }
                    else if (VALOR < Fundo.VALORMINRES)
                    {
                        Status = $"O valor solicitado é inferior ao resgate mínimo permitido de {Fundo.VALORMINRES}!";
                    }
                    else if (Saldo.QNTCOTAS * UltimaCota.COTA - VALOR < Fundo.Valorsaldominimo)
                    {
                        Status = $"O saldo restante será inferior ao mínimo permitido de {Fundo.Valorsaldominimo}!";
                    }
                }
                else
                {
                    if (VALOR * UltimaCota.COTA < Fundo.VALORMINRES)
                    {
                        Status = $"O valor solicitado é inferior ao resgate mínimo permitido de {Fundo.VALORMINRES}!";
                    }
                    else if (OPERACAO == "RC" && (Saldo.QNTCOTAS - VALOR) * UltimaCota.COTA < Fundo.Valorsaldominimo)
                    {
                        Status = $"O saldo restante será inferior ao mínimo permitido de {Fundo.Valorsaldominimo}!";
                    }
                }
                if (CAUTELA != 0) //Resgate por cautela
                {
                    if (OPERACAO == "R")
                    {
                        Status = "Não é possível realizar resgates financeiros por cautela!";
                    }
                    else if (VALOR > Saldo.QNTCOTAS)
                    {
                        Status = "O valor solicitado é maior que a quantidade de cotas disponível na cautela!";
                    }
                }
            }

            if (Status == "Liberado")
            {
                return(true);
            }
            return(false);
        }