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