//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); }
            }
        }
Esempio n. 2
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()); }
        }
 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);
            }
        }