//Altera Status para Boletado das Boletas e BoletasIntrag Similares (CODCOT, CODFUND, OP, VALOR) private void VerificaBoletados() { //Comparar Base de Boletas e Base da Intrag //Trocar status para "Boletado"/"Estornado" das boletas devidas //Status In -> Liberado, Validando, Liquidação List <BL_Boleta> Boletas = new List <BL_Boleta>(); Boletas = Boletas.Concat(new BL_Boleta().DadosDia(DateTime.Today)).ToList(); Boletas = Boletas.Concat(new BL_Boleta().DadosZeragemDia(DateTime.Today)).ToList(); List <BL_BoletaIntrag> BoletasIntrag = ObjBolIntr.DadosDia(DateTime.Today); //Remover BoletasIntrag que já possuam Boleta Similar for (int i = BoletasIntrag.Count - 1; i > -1; i--) { BL_Boleta BAux = Boletas.FirstOrDefault(B => B.CODCOT == BoletasIntrag[i].CODCOT && B.CODFUND == BoletasIntrag[i].CODFUND && ( (B.VALOR == BoletasIntrag[i].FINANCEIRO && (B.OPERACAO == BoletasIntrag[i].OPERACAO || B.OPERACAO == "R" && BoletasIntrag[i].TIPORESGATE == "PARCIAL" /*Aplicação e Resgate Financeiro*/)) || (B.VALOR == BoletasIntrag[i].QUANTIDADE && B.OPERACAO == "RC" && BoletasIntrag[i].TIPORESGATE == "PARCIAL" /*Resgate por cotas*/) || (B.OPERACAO == "RT" && BoletasIntrag[i].TIPORESGATE == "TOTAL" /*Resgate por Total*/) ) && (B.STATUS == "Boletado" || B.STATUS == "Concluído")); if (BAux != null) { Boletas.Remove(BAux); BoletasIntrag.Remove(BoletasIntrag[i]); } } //Troca para "Boletado" Operações Remanescentes que encontrem BoletaIntrag foreach (BL_Boleta B in Boletas.Where(x => x.STATUS == "Liquidação" || x.STATUS == "Liberado" || x.STATUS == "Validando").ToList()) { //Encontra BoletaIntrag similar BL_BoletaIntrag BAux = BoletasIntrag.FirstOrDefault(BI => B.CODCOT == BI.CODCOT && B.CODFUND == BI.CODFUND && ( (B.VALOR == BI.FINANCEIRO && (B.OPERACAO == BI.OPERACAO || B.OPERACAO == "R" && BI.TIPORESGATE == "PARCIAL" /*Aplicação e Resgate Financeiro*/)) || (B.VALOR == BI.QUANTIDADE && B.OPERACAO == "RC" && BI.TIPORESGATE == "PARCIAL" /*Resgate por cotas*/) || (B.OPERACAO == "RT" && BI.TIPORESGATE == "TOTAL" /*Resgate por Total*/) ) ); if (BAux == null) { continue; } BoletasIntrag.Remove(BAux); //Altera status para boletado e atualiza datas de cotização e impacto //Altera status da Boleta do RegistroResgate try{ ObjBoleta.Editar(B.IDBOLETA, BAux.COTIZA, BAux.IMPACTO, "Boletado"); ObjLogOp.Inserir("Controle - Verifica Boletados", B.IDBOLETA.ToString() + " - Validada!"); ObjRegRes.EditarIDBOLETA(B.IDBOLETA, "Concluído"); } catch (Exception e) { new BL_LogOperacional().Inserir("BL_Controle - VerificaBoletados", $"Erro ao validar Boleta {B.IDBOLETA}. " + e.Message); } } }
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()); } }
private void Inserir(BL_BoletaIntrag Bol) { try { ObjDA.Inserir(Bol.CODCOT, Bol.CODFUND, Bol.COTIZA, Bol.IMPACTO, Bol.HORA, Bol.OPERACAO, Bol.TIPORESGATE, Bol.TIPOLIQUIDA, Bol.FINANCEIRO, Bol.QUANTIDADE, Bol.TIPOCONTA, Bol.BANCO, Bol.CONTACORRENTE, Bol.STATUS, Bol.USUARIO, Bol.SOLICITACAO); } catch (ArgumentException e) { new BL_LogErro().Inserir("BL_BoletaIntrag - Inserir", "Erro: " + e.Message); } }
//Métodos Classe #region public void AtualizarDados(string Usuario, string Senha) { List <BL_BoletaIntrag> Boletas = new List <BL_BoletaIntrag>(); string[] linhas; try { linhas = new PosicaoGerencialServiceService().consultarMovimentosDiaXML(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].Substring(0, 14) == "<codigoBanco/>" || linhas[i].Substring(0, 13) == "<codigoBanco>")) { BL_BoletaIntrag Boleta = new BL_BoletaIntrag { CODCOT = Convert.ToInt64(Extract(linhas[i + 1], "codigoCotista").Insert(4, "0000")), CODFUND = Convert.ToInt64(Extract(linhas[i + 2], "codigoFundo")), HORA = Convert.ToDateTime(Extract(linhas[i + 6], "horaOperacao")), OPERACAO = Extract(linhas[i + 9], "operacao"), //AP / CT / ST / TF STATUS = Extract(linhas[i + 11], "status"), TIPOCONTA = Extract(linhas[i + 12], "tipoContaCredito"), //C/C TIPOLIQUIDA = Extract(linhas[i + 13], "tipoOperacao"), //DISPONIVEL / CETIP / TEF / TED STR USUARIO = Extract(linhas[i + 15], "usuario"), SOLICITACAO = DateTime.Today, }; if (Boleta.OPERACAO != "AP") { try { Boleta.BANCO = Convert.ToInt64(Extract(linhas[i], "codigoBanco")); } catch { Boleta.BANCO = 0; } try { Boleta.CONTACORRENTE = Extract(linhas[i + 3], "contaCorrente"); } catch { Boleta.CONTACORRENTE = " "; } finally { if (Boleta.CONTACORRENTE == null) { Boleta.CONTACORRENTE = " "; } } try { Boleta.IMPACTO = Convert.ToDateTime(Extract(linhas[i + 5], "dataPagamento")); Console.WriteLine($"Data de impacto: {Boleta.IMPACTO}"); } catch { Boleta.IMPACTO = DateTime.Today; } //Erro de conversão para boletas de offshore ou máscara try { Boleta.QUANTIDADE = Convert.ToDecimal(Extract(linhas[i + 10], "quantidadeCotas"), new CultureInfo("pt-BR")); } catch { Boleta.QUANTIDADE = 0; } try { Boleta.TIPORESGATE = Extract(linhas[i + 14], "tipoResgate"); } catch { Boleta.TIPORESGATE = ""; } } else { Boleta.TIPORESGATE = ""; Boleta.IMPACTO = DateTime.Today; Boleta.CONTACORRENTE = ""; } try { Boleta.COTIZA = Convert.ToDateTime(Extract(linhas[i + 4], "dataConversao")); } catch { Boleta.COTIZA = DateTime.Today; } try { Boleta.FINANCEIRO = Convert.ToDecimal(Extract(linhas[i + 16], "valorOperacao")); } catch { } Boleta.FINANCEIRO = Convert.ToDecimal(Extract(linhas[i + 16], "valorOperacao"), new CultureInfo("pt-BR")); Boletas.Add(Boleta); } } if (Boletas.Count == 0) { return; } Limpar(); foreach (BL_BoletaIntrag Boleta in Boletas) { Inserir(Boleta); } }