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); } } } }
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); } } }
//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); }