Пример #1
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);
                    }
                }
            }
        }
Пример #2
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);
                }
            }
        }
Пример #3
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);
        }