Пример #1
0
        /// <summary>
        /// Retorna a lista de conciliação bancária
        /// </summary>
        /// <returns></returns>
        public static Retorno Get(string token, int colecao = 0, int campo = 0, int orderBy = 0, int pageSize = 0, int pageNumber = 0, Dictionary <string, string> queryString = null, painel_taxservices_dbContext _dbContext = null)
        {
            painel_taxservices_dbContext _db;

            if (_dbContext == null)
            {
                _db = new painel_taxservices_dbContext();
            }
            else
            {
                _db = _dbContext;
            }
            DbContextTransaction transaction = _db.Database.BeginTransaction(IsolationLevel.ReadUncommitted);

            try
            {
                //DECLARAÇÕES
                List <dynamic> CollectionRelatorioVendas = new List <dynamic>();
                Retorno        retorno = new Retorno();


                // QUERIES DE FILTRO
                string outValue = null;
                Dictionary <string, string> queryStringAjustes            = new Dictionary <string, string>();
                Dictionary <string, string> queryStringRecebimentoParcela = new Dictionary <string, string>();
                Dictionary <string, string> queryStringTbLogCarga         = new Dictionary <string, string>();

                // DATA DA VENDA => OBRIGATÓRIO
                DateTime dataNow = Convert.ToDateTime(DateTime.Now.ToShortDateString());
                DateTime dataInicial, dataFinal;
                if (queryString.TryGetValue("" + (int)CAMPOS.DATA, out outValue))
                {
                    // Não permite que o período seja superior ou igual a data corrente
                    string data = queryString["" + (int)CAMPOS.DATA];
                    if (data.Contains("|"))
                    {
                        dataInicial = DateTime.ParseExact(data.Substring(0, data.IndexOf("|")) + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        //if (dataInicial >= dataNow)
                        //    throw new Exception("Data inicial do período de vendas deve ser inferior a data corrente (" + dataNow.ToShortDateString() + ")");
                        dataFinal = DateTime.ParseExact(data.Substring(data.IndexOf("|") + 1) + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        //if (dataFinal >= dataNow)
                        //    throw new Exception("Data final do período de vendas deve ser inferior a data corrente (" + dataNow.ToShortDateString() + ")");
                        if (dataInicial > dataFinal)
                        {
                            throw new Exception("Período de vendas informado é inválido!");
                        }
                    }
                    else if (data.Length == 6)
                    {
                        dataInicial = DateTime.ParseExact(data + "01" + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        dataFinal   = Convert.ToDateTime(DateTime.DaysInMonth(dataInicial.Year, dataInicial.Month) + "/" + dataInicial.Month + "/" + dataInicial.Year);
                    }
                    else
                    {
                        dataFinal = dataInicial = DateTime.ParseExact(data + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                    }
                    //else
                    //{
                    //    DateTime dataVenda = DateTime.ParseExact(data + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                    //    if (dataVenda >= dataNow)
                    //        throw new Exception("Data da venda informada deve ser inferior a data corrente (" + dataNow.ToShortDateString() + ")");
                    //}
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.DTVENDA, data);
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.DTAVENDA, data);
                    queryStringTbLogCarga.Add("" + (int)GatewayTbLogCarga.CAMPOS.DTCOMPETENCIA, data);
                }
                else
                {
                    throw new Exception("Data ou período de vendas deve ser informado!");
                }

                // GRUPO EMPRESA => OBRIGATÓRIO!
                Int32 IdGrupo = Permissoes.GetIdGrupo(token, _db);
                if (IdGrupo == 0 && queryString.TryGetValue("" + (int)CAMPOS.ID_GRUPO, out outValue))
                {
                    IdGrupo = Convert.ToInt32(queryString["" + (int)CAMPOS.ID_GRUPO]);
                }
                if (IdGrupo != 0)
                {
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                    queryStringTbLogCarga.Add("" + (int)GatewayTbLogCarga.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                }
                else
                {
                    throw new Exception("Um grupo deve ser selecionado como filtro de recebíveis futuros!");
                }
                // FILIAL
                string CnpjEmpresa = Permissoes.GetCNPJEmpresa(token, _db);
                if (CnpjEmpresa.Equals("") && queryString.TryGetValue("" + (int)CAMPOS.NU_CNPJ, out outValue))
                {
                    CnpjEmpresa = queryString["" + (int)CAMPOS.NU_CNPJ];
                }
                if (!CnpjEmpresa.Equals(""))
                {
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.NRCNPJ, CnpjEmpresa);
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.NU_CNPJ, CnpjEmpresa);
                    queryStringTbLogCarga.Add("" + (int)GatewayTbLogCarga.CAMPOS.NRCNPJ, CnpjEmpresa);
                }
                // ADQUIRENTE
                if (queryString.TryGetValue("" + (int)CAMPOS.CDADQUIRENTE, out outValue))
                {
                    string cdAdquirente = queryString["" + (int)CAMPOS.CDADQUIRENTE];
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.CDADQUIRENTE, cdAdquirente);
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.CDADQUIRENTE, cdAdquirente);
                    queryStringTbLogCarga.Add("" + (int)GatewayTbLogCarga.CAMPOS.CDADQUIRENTE, cdAdquirente);
                }


                // OBTÉM A QUERY
                //IQueryable<RecebimentoParcela> queryRecebimentoParcela = GatewayRecebimentoParcela.getQuery(_db, 0, (int)GatewayRecebimentoParcela.CAMPOS.DTAVENDA, 0, 0, 0, queryStringRecebimentoParcela);

                // CONEXÃO
                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["painel_taxservices_dbContext"].ConnectionString);

                try
                {
                    connection.Open();
                }
                catch
                {
                    throw new Exception("Não foi possível estabelecer conexão com a base de dados");
                }

                List <RelatorioVendas>   vendas      = new List <RelatorioVendas>();
                List <LogCargaValorSite> valoresSite = new List <LogCargaValorSite>();

                try
                {
                    #region OBTÉM AS QUERIES
                    SimpleDataBaseQuery dataBaseQueryRP = GatewayRecebimentoParcela.getQuery((int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTOEFETIVO, 0, queryStringRecebimentoParcela);
                    SimpleDataBaseQuery dataBaseQueryAJ = GatewayTbRecebimentoAjuste.getQuery((int)GatewayTbRecebimentoAjuste.CAMPOS.DTVENDA, 0, queryStringAjustes);
                    SimpleDataBaseQuery dataBaseQueryLC = GatewayTbLogCarga.getQuery((int)GatewayTbLogCarga.CAMPOS.DTCOMPETENCIA, 0, queryStringTbLogCarga);

                    // RECEBIMENTO PARCELA
                    if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN pos.Recebimento " + GatewayRecebimento.SIGLA_QUERY))
                    {
                        dataBaseQueryRP.join.Add("INNER JOIN pos.Recebimento " + GatewayRecebimento.SIGLA_QUERY, " ON " + GatewayRecebimento.SIGLA_QUERY + ".id = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimento");
                    }
                    if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY))
                    {
                        dataBaseQueryRP.join.Add("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY, " ON " + GatewayTbBandeira.SIGLA_QUERY + ".cdBandeira = " + GatewayRecebimento.SIGLA_QUERY + ".cdBandeira");
                    }
                    if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                    {
                        dataBaseQueryRP.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbBandeira.SIGLA_QUERY + ".cdAdquirente");
                    }
                    //if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY))
                    //    dataBaseQueryRP.join.Add("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY, " ON " + GatewayRecebimento.SIGLA_QUERY + ".cnpj = " + GatewayEmpresa.SIGLA_QUERY + ".nu_cnpj");

                    // AJUSTES
                    if (!dataBaseQueryAJ.join.ContainsKey("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY))
                    {
                        dataBaseQueryAJ.join.Add("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY, " ON " + GatewayTbBandeira.SIGLA_QUERY + ".cdBandeira = " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".cdBandeira");
                    }
                    if (!dataBaseQueryAJ.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                    {
                        dataBaseQueryAJ.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbBandeira.SIGLA_QUERY + ".cdAdquirente");
                    }

                    // TBLOGCARGA
                    if (!dataBaseQueryLC.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                    {
                        dataBaseQueryLC.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbLogCarga.SIGLA_QUERY + ".cdAdquirente");
                    }


                    // RECEBIMENTO PARCELA
                    dataBaseQueryRP.select = new string[] { GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento",
                                                            GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimentoEfetivo",
                                                            GatewayRecebimento.SIGLA_QUERY + ".dtaVenda AS dataVenda",
                                                            "adquirente = UPPER(" + GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente)",
                                                            GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira AS bandeira",
                                                            "valorBruto = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta",
                                                            "valorDescontado = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado",
                                                            "valorLiquido = ISNULL(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaLiquida, 0)" };

                    // AJUSTE
                    dataBaseQueryAJ.select = new string[] { //GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idRecebimentoAjuste",
                        //GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo",
                        GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste",
                        GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste",
                        GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtVenda AS dataVenda",
                        GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto",
                        GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira AS bandeira",
                        "adquirente = UPPER(" + GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente)"
                    };


                    // TBLOGCARGA
                    dataBaseQueryLC.select = new string[] { GatewayTbLogCarga.SIGLA_QUERY + ".dtCompetencia",
                                                            "adquirente = UPPER(" + GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente)",
                                                            "processouVendas = CASE WHEN SUM(CASE WHEN " + GatewayTbLogCarga.SIGLA_QUERY + ".flStatusVendasCredito = 0 OR " + GatewayTbLogCarga.SIGLA_QUERY + ".flStatusVendasDebito = 0 THEN 1 ELSE 0 END) > 0 THEN 0 ELSE 1 END",
                                                            "valorSite = SUM(" + GatewayTbLogCarga.SIGLA_QUERY + ".vlVendaCredito + " + GatewayTbLogCarga.SIGLA_QUERY + ".vlVendaDebito)" };

                    dataBaseQueryLC.groupby = new string[] { GatewayTbLogCarga.SIGLA_QUERY + ".dtCompetencia",
                                                             GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente" };


                    dataBaseQueryRP.readUncommited = true;
                    dataBaseQueryAJ.readUncommited = true;
                    dataBaseQueryLC.readUncommited = true;
                    #endregion

                    string             script    = dataBaseQueryRP.Script();
                    List <IDataRecord> resultado = DataBaseQueries.SqlQuery(script, connection);

                    if (resultado != null && resultado.Count > 0)
                    {
                        vendas = resultado.Select(r => new RelatorioVendas
                        {
                            dataVenda       = Convert.ToDateTime(((DateTime)r["dataVenda"]).ToShortDateString()), // remove horário
                            dataRecebimento = r["dtaRecebimentoEfetivo"].Equals(DBNull.Value) ? (DateTime)r["dtaRecebimento"] : (DateTime)r["dtaRecebimentoEfetivo"],
                            recebeu         = r["dtaRecebimentoEfetivo"].Equals(DBNull.Value) ? (DateTime)r["dtaRecebimento"] < dataNow : (DateTime)r["dtaRecebimentoEfetivo"] < dataNow,
                            valorBruto      = Convert.ToDecimal(r["valorBruto"]),
                            valorLiquido    = Convert.ToDecimal(r["valorLiquido"]),
                            valorDescontado = Convert.ToDecimal(r["valorDescontado"]),
                            bandeira        = Convert.ToString(r["bandeira"]),
                            adquirente      = Convert.ToString(r["adquirente"]),
                        }).OrderBy(r => r.dataVenda).ToList <RelatorioVendas>();
                    }

                    // Ajustes de vendas
                    script    = dataBaseQueryAJ.Script();
                    resultado = DataBaseQueries.SqlQuery(script, connection);
                    if (resultado != null && resultado.Count > 0)
                    {
                        foreach (IDataRecord r in resultado)
                        {
                            vendas.Add(new RelatorioVendas
                            {
                                dataVenda       = Convert.ToDateTime(((DateTime)r["dataVenda"]).ToShortDateString()), // remove horário
                                dataRecebimento = (DateTime)r["dtAjuste"],
                                recebeu         = (DateTime)r["dtAjuste"] < dataNow,
                                valorBruto      = Convert.ToDecimal(r["vlBruto"]) != new decimal(0.0) ? Convert.ToDecimal(r["vlBruto"]) : Convert.ToDecimal(r["vlAjuste"]) > new decimal(0.0) ? Convert.ToDecimal(r["vlAjuste"]) : new decimal(0.0),
                                valorLiquido    = Convert.ToDecimal(r["vlAjuste"]),
                                valorDescontado = Convert.ToDecimal(r["vlAjuste"]) > new decimal(0.0) ? new decimal(0.0) : Math.Abs(Convert.ToDecimal(r["vlAjuste"])),
                                bandeira        = Convert.ToString(r["bandeira"]),
                                adquirente      = Convert.ToString(r["adquirente"]),
                            });
                        }
                    }

                    // Obtém os valores lidos do site
                    script    = dataBaseQueryLC.Script();
                    resultado = DataBaseQueries.SqlQuery(script, connection);
                    if (resultado != null && resultado.Count > 0)
                    {
                        valoresSite = resultado.Select(t => new LogCargaValorSite
                        {
                            //nrCNPJ = Convert.ToString(t["nrCNPJ"]),
                            adquirente          = Convert.ToString(t["adquirente"]),
                            dtCompetencia       = Convert.ToDateTime(((DateTime)t["dtCompetencia"]).ToShortDateString()),
                            processouModalidade = Convert.ToBoolean(t["processouVendas"]),
                            valorSite           = Convert.ToDecimal(t["valorSite"])
                        })
                                      .ToList <LogCargaValorSite>();
                    }

                    //List<RelatorioVendas> vendas = queryRecebimentoParcela.Select(r => new RelatorioVendas
                    //{
                    //    dataVenda = r.Recebimento.dtaVenda,
                    //    dataRecebimento = r.dtaRecebimentoEfetivo != null ? r.dtaRecebimentoEfetivo.Value : r.dtaRecebimento,
                    //    recebeu = (r.dtaRecebimentoEfetivo != null && r.dtaRecebimentoEfetivo.Value < dataNow) || (r.dtaRecebimentoEfetivo == null && r.dtaRecebimento < dataNow),
                    //    valorBruto = r.valorParcelaBruta,
                    //    valorLiquido = r.valorParcelaLiquida != null ? r.valorParcelaLiquida.Value : new decimal(0.0),
                    //    valorDescontado = r.valorDescontado,
                    //    bandeira = r.Recebimento.cdBandeira != null ? r.Recebimento.tbBandeira.dsBandeira : r.Recebimento.BandeiraPos.desBandeira,
                    //    adquirente = r.Recebimento.cdBandeira != null ? r.Recebimento.tbBandeira.tbAdquirente.nmAdquirente : r.Recebimento.BandeiraPos.Operadora.nmOperadora
                    //}).OrderBy(r => r.dataVenda).ToList<RelatorioVendas>();
                }
                catch (Exception e)
                {
                    if (e is DbEntityValidationException)
                    {
                        string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                        throw new Exception(erro.Equals("") ? "Falha ao listar recebimento parcela" : erro);
                    }
                    throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
                }
                finally
                {
                    try
                    {
                        connection.Close();
                    }
                    catch { }
                }

                transaction.Commit();

                List <dynamic> vendasAgrupadas = vendas
                                                 .GroupBy(r => r.dataVenda)
                                                 .Select(r => new
                {
                    data      = r.Key,
                    valorSite = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                                .Where(t => r.GroupBy(f => f.adquirente).Select(f => f.Key).Contains(t.adquirente))
                                .Sum(t => t.valorSite),
                    processouVenda = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                                     .Where(t => r.GroupBy(f => f.adquirente).Select(f => f.Key).Contains(t.adquirente))
                                     .Count() > 0 &&
                                     valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                                     .Where(t => r.GroupBy(f => f.adquirente).Select(f => f.Key).Contains(t.adquirente))
                                     .Where(t => !t.processouModalidade)
                                     .Count() == 0,
                    valorBruto      = r.Sum(f => f.valorBruto),
                    valorDescontado = r.Sum(f => f.valorDescontado),
                    valorLiquido    = r.Sum(f => f.valorLiquido),
                    valorRecebido   = r.Where(f => f.recebeu == true).Sum(f => f.valorLiquido),
                    valorAReceber   = r.Where(f => f.recebeu == false).Sum(f => f.valorLiquido),
                    adquirentes     = r.GroupBy(f => f.adquirente)
                                      .OrderBy(f => f.Key)
                                      .Select(f => new
                    {
                        adquirente = f.Key,
                        valorSite  = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                                     .Where(t => t.adquirente.Equals(f.Key))
                                     .Sum(t => t.valorSite),
                        processouVenda = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                                         .Where(t => t.adquirente.Equals(f.Key))
                                         .Count() > 0 &&
                                         valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                                         .Where(t => t.adquirente.Equals(f.Key))
                                         .Where(t => !t.processouModalidade)
                                         .Count() == 0,
                        valorBruto      = f.Sum(x => x.valorBruto),
                        valorDescontado = f.Sum(x => x.valorDescontado),
                        valorLiquido    = f.Sum(x => x.valorLiquido),
                        valorRecebido   = f.Where(x => x.recebeu == true).Sum(x => x.valorLiquido),
                        valorAReceber   = f.Where(x => x.recebeu == false).Sum(x => x.valorLiquido),
                        bandeiras       = f.GroupBy(x => x.bandeira)
                                          .OrderBy(x => x.Key)
                                          .Select(x => new
                        {
                            bandeira        = x.Key,
                            valorSite       = new decimal(0.0),
                            valorBruto      = x.Sum(y => y.valorBruto),
                            valorDescontado = x.Sum(y => y.valorDescontado),
                            valorLiquido    = x.Sum(y => y.valorLiquido),
                            valorRecebido   = x.Where(y => y.recebeu == true).Sum(y => y.valorLiquido),
                            valorAReceber   = x.Where(y => y.recebeu == false).Sum(y => y.valorLiquido),
                        }).ToList <dynamic>(),
                    }).ToList <dynamic>(),
                }).ToList <dynamic>();

                for (DateTime dt = dataInicial; dt <= dataFinal; dt = dt.AddDays(1))
                {
                    var v = vendasAgrupadas.Where(t => t.data.Equals(dt)).FirstOrDefault();
                    var s = valoresSite.Where(t => t.dtCompetencia.Equals(dt)).FirstOrDefault();

                    if (v != null)
                    {
                        CollectionRelatorioVendas.Add(new
                        {
                            diaVenda        = dt.ToShortDateString(),
                            valorSite       = v.valorSite,
                            processouVenda  = v.processouVenda,
                            valorBruto      = v.valorBruto,
                            valorDescontado = v.valorDescontado,
                            valorLiquido    = v.valorLiquido,
                            valorRecebido   = v.valorRecebido,
                            valorAReceber   = v.valorAReceber,
                            adquirentes     = v.adquirentes
                        });
                    }
                    else if (s != null)
                    {
                        CollectionRelatorioVendas.Add(new
                        {
                            diaVenda  = dt.ToShortDateString(),
                            valorSite = valoresSite.Where(t => t.dtCompetencia.Equals(dt))
                                        .Sum(t => t.valorSite),
                            processouVenda = valoresSite.Where(t => t.dtCompetencia.Equals(dt))
                                             .Count() > 0 &&
                                             valoresSite.Where(t => t.dtCompetencia.Equals(dt))
                                             .Where(t => !t.processouModalidade)
                                             .Count() == 0,
                            valorBruto      = new decimal(0.0),
                            valorDescontado = new decimal(0.0),
                            valorLiquido    = new decimal(0.0),
                            valorRecebido   = new decimal(0.0),
                            valorAReceber   = new decimal(0.0),
                            adquirentes     = valoresSite.Where(f => f.dtCompetencia.Equals(dt))
                                              .GroupBy(f => f.adquirente)
                                              .Select(f => new
                            {
                                adquirente      = f.Key,
                                valorSite       = f.Sum(t => t.valorSite),
                                processouVenda  = f.Count() > 0 && f.Where(t => !t.processouModalidade).Count() == 0,
                                valorBruto      = new decimal(0.0),
                                valorDescontado = new decimal(0.0),
                                valorLiquido    = new decimal(0.0),
                                valorRecebido   = new decimal(0.0),
                                valorAReceber   = new decimal(0.0),
                                bandeiras       = new List <dynamic>()
                            })
                                              .ToList <dynamic>()
                        });
                    }
                }

                //CollectionRelatorioVendas = vendas//.GroupBy(r => new { r.dataVenda.Day, r.dataVenda.Month, r.dataVenda.Year })
                //                                .GroupBy(r => r.dataVenda)
                //                                .Select(r => new
                //                                {
                //                                    //diaVenda = (r.Key.Day < 10 ? "0" : "") + r.Key.Day + "/" + (r.Key.Month < 10 ? "0" : "") + r.Key.Month + "/" + r.Key.Year,
                //                                    diaVenda = r.Key.ToShortDateString(),
                //                                    valorSite = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                //                                                           .Where(t => r.GroupBy(f => f.adquirente).Select(f => f.Key).Contains(t.adquirente))
                //                                                           .Sum(t => t.valorSite),
                //                                    processouVenda = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                //                                                                .Where(t => r.GroupBy(f => f.adquirente).Select(f => f.Key).Contains(t.adquirente))
                //                                                                .Count() > 0 &&
                //                                                     valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                //                                                                .Where(t => r.GroupBy(f => f.adquirente).Select(f => f.Key).Contains(t.adquirente))
                //                                                                .Where(t => !t.processouModalidade)
                //                                                                .Count() == 0,
                //                                    valorBruto = r.Sum(f => f.valorBruto),
                //                                    valorDescontado = r.Sum(f => f.valorDescontado),
                //                                    valorLiquido = r.Sum(f => f.valorLiquido),
                //                                    valorRecebido = r.Where(f => f.recebeu == true).Sum(f => f.valorLiquido),
                //                                    valorAReceber = r.Where(f => f.recebeu == false).Sum(f => f.valorLiquido),
                //                                    adquirentes = r.GroupBy(f => f.adquirente)
                //                                    .OrderBy(f => f.Key)
                //                                    .Select(f => new
                //                                    {
                //                                        adquirente = f.Key,
                //                                        valorSite = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                //                                                               .Where(t => t.adquirente.Equals(f.Key))
                //                                                               .Sum(t => t.valorSite),
                //                                        processouVenda = valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                //                                                                    .Where(t => t.adquirente.Equals(f.Key))
                //                                                                    .Count() > 0 &&
                //                                                         valoresSite.Where(t => t.dtCompetencia.Equals(r.Key))
                //                                                                    .Where(t => t.adquirente.Equals(f.Key))
                //                                                                    .Where(t => !t.processouModalidade)
                //                                                                    .Count() == 0,
                //                                        valorBruto = f.Sum(x => x.valorBruto),
                //                                        valorDescontado = f.Sum(x => x.valorDescontado),
                //                                        valorLiquido = f.Sum(x => x.valorLiquido),
                //                                        valorRecebido = f.Where(x => x.recebeu == true).Sum(x => x.valorLiquido),
                //                                        valorAReceber = f.Where(x => x.recebeu == false).Sum(x => x.valorLiquido),
                //                                        bandeiras = f.GroupBy(x => x.bandeira)
                //                                        .OrderBy(x => x.Key)
                //                                        .Select(x => new
                //                                        {
                //                                            bandeira = x.Key,
                //                                            valorSite = new decimal(0.0),
                //                                            valorBruto = x.Sum(y => y.valorBruto),
                //                                            valorDescontado = x.Sum(y => y.valorDescontado),
                //                                            valorLiquido = x.Sum(y => y.valorLiquido),
                //                                            valorRecebido = x.Where(y => y.recebeu == true).Sum(y => y.valorLiquido),
                //                                            valorAReceber = x.Where(y => y.recebeu == false).Sum(y => y.valorLiquido),
                //                                        }).ToList<dynamic>(),
                //                                    }).ToList<dynamic>(),
                //                                }).ToList<dynamic>();

                // TOTAL DE REGISTROS
                retorno.TotalDeRegistros = CollectionRelatorioVendas.Count;

                // TOTAL
                retorno.Totais = new Dictionary <string, object>();
                retorno.Totais.Add("valorSite", CollectionRelatorioVendas.Select(r => r.valorSite).Cast <decimal>().Sum());
                retorno.Totais.Add("valorBruto", CollectionRelatorioVendas.Select(r => r.valorBruto).Cast <decimal>().Sum());
                retorno.Totais.Add("valorDescontado", CollectionRelatorioVendas.Select(r => r.valorDescontado).Cast <decimal>().Sum());
                retorno.Totais.Add("valorLiquido", CollectionRelatorioVendas.Select(r => r.valorLiquido).Cast <decimal>().Sum());
                retorno.Totais.Add("valorRecebido", CollectionRelatorioVendas.Select(r => r.valorRecebido).Cast <decimal>().Sum());
                retorno.Totais.Add("valorAReceber", CollectionRelatorioVendas.Select(r => r.valorAReceber).Cast <decimal>().Sum());

                // PAGINAÇÃO
                int skipRows = (pageNumber - 1) * pageSize;
                if (retorno.TotalDeRegistros > pageSize && pageNumber > 0 && pageSize > 0)
                {
                    CollectionRelatorioVendas = CollectionRelatorioVendas.Skip(skipRows).Take(pageSize).ToList <dynamic>();
                }
                else
                {
                    pageNumber = 1;
                }

                retorno.PaginaAtual    = pageNumber;
                retorno.ItensPorPagina = pageSize;

                retorno.Registros = CollectionRelatorioVendas;

                return(retorno);
            }
            catch (Exception e)
            {
                transaction.Rollback();
                if (e is DbEntityValidationException)
                {
                    string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                    throw new Exception(erro.Equals("") ? "Falha ao listar adquirente" : erro);
                }
                throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
            }
            finally
            {
                if (_dbContext == null)
                {
                    // Fecha conexão
                    _db.Database.Connection.Close();
                    _db.Dispose();
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Retorna Grupo_empresa/Grupo_empresa
        /// </summary>
        /// <returns></returns>
        public static Retorno Get(string token, int colecao = 0, int campo = 0, int orderBy = 0, int pageSize = 0, int pageNumber = 0, Dictionary <string, string> queryString = null, painel_taxservices_dbContext _dbContext = null)
        {
            painel_taxservices_dbContext _db;

            if (_dbContext == null)
            {
                _db = new painel_taxservices_dbContext();
            }
            else
            {
                _db = _dbContext;
            }
            DbContextTransaction transaction = _db.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);

            try
            {
                // Se for uma consulta por um nome de grupo específico na coleção 0, não força filtro por empresa
                string  outValue   = null;
                Boolean FiltroNome = false;

                // Esse filtro só acontecerá para perfis que tem a funcionalidade FILTRO EMPRESA

                /*if (colecao == 0 && queryString.TryGetValue("" + (int)CAMPOS.DS_NOME, out outValue))
                 *  FiltroNome = !queryString["" + (int)CAMPOS.DS_NOME].Contains("%");*/

                // Só filtra o grupo do usuário logado se não for um filtro de nome
                Int32 IdGrupo = 0;
                if (!FiltroNome)
                {
                    IdGrupo = Permissoes.GetIdGrupo(token, _db);
                    if (IdGrupo != 0)
                    {
                        if (queryString.TryGetValue("" + (int)CAMPOS.ID_GRUPO, out outValue))
                        {
                            queryString["" + (int)CAMPOS.ID_GRUPO] = IdGrupo.ToString();
                        }
                        else
                        {
                            queryString.Add("" + (int)CAMPOS.ID_GRUPO, IdGrupo.ToString());
                        }
                    }
                }

                //DECLARAÇÕES
                List <dynamic> CollectionGrupo_empresa = new List <dynamic>();
                Retorno        retorno = new Retorno();

                // GET QUERY
                var query = getQuery(_db, colecao, campo, orderBy, pageSize, pageNumber, queryString);

                string whereVendedor = String.Empty;
                if (!FiltroNome)
                {
                    // Restringe consulta pelo perfil do usuário logado
                    //String RoleName = Permissoes.GetRoleName(token).ToUpper();
                    if (IdGrupo == 0 && Permissoes.isAtosRoleVendedor(token, _db))//RoleName.Equals("COMERCIAL"))
                    {
                        // Perfil Comercial tem uma carteira de clientes específica
                        List <Int32> listaIdsGruposEmpresas = Permissoes.GetIdsGruposEmpresasVendedor(token, _db);
                        query         = query.Where(e => listaIdsGruposEmpresas.Contains(e.id_grupo)).AsQueryable <grupo_empresa>();
                        whereVendedor = SIGLA_QUERY + ".id_grupo IN (" + string.Join(", ", listaIdsGruposEmpresas) + ")";
                    }
                }

                // TOTAL DE REGISTROS
                retorno.TotalDeRegistros = query.Count();


                // PAGINAÇÃO
                if (colecao != 3)
                {
                    int skipRows = (pageNumber - 1) * pageSize;
                    if (retorno.TotalDeRegistros > pageSize && pageNumber > 0 && pageSize > 0)
                    {
                        query = query.Skip(skipRows).Take(pageSize);
                    }
                    else
                    {
                        pageNumber = 1;
                    }
                }

                retorno.PaginaAtual    = pageNumber;
                retorno.ItensPorPagina = pageSize;

                // COLEÇÃO DE RETORNO
                if (colecao == 1)
                {
                    CollectionGrupo_empresa = query.Select(e => new
                    {
                        id_grupo        = e.id_grupo,
                        ds_nome         = e.ds_nome,
                        dt_cadastro     = e.dt_cadastro,
                        token           = e.token,
                        fl_ativo        = e.fl_ativo,
                        fl_cardservices = e.fl_cardservices,
                        fl_taxservices  = e.fl_taxservices,
                        fl_proinfo      = e.fl_proinfo,
                        vendedor        = e.id_vendedor != null ? new { e.Vendedor.id_users, e.Vendedor.ds_login, e.Vendedor.pessoa.nm_pessoa } : null,
                        cdPrioridade    = e.cdPrioridade,
                        dsAPI           = e.dsAPI,
                    }).ToList <dynamic>();
                }
                else if (colecao == 0)
                {
                    CollectionGrupo_empresa = query.Select(e => new
                    {
                        id_grupo        = e.id_grupo,
                        ds_nome         = e.ds_nome,
                        dt_cadastro     = e.dt_cadastro,
                        token           = e.token,
                        fl_ativo        = e.fl_ativo,
                        fl_cardservices = e.fl_cardservices,
                        fl_taxservices  = e.fl_taxservices,
                        fl_proinfo      = e.fl_proinfo,
                        id_vendedor     = e.id_vendedor,
                        cdPrioridade    = e.cdPrioridade,
                        dsAPI           = e.dsAPI,
                    }).ToList <dynamic>();
                }
                else if (colecao == 2)
                {
                    CollectionGrupo_empresa = query.Select(e => new
                    {
                        id_grupo           = e.id_grupo,
                        ds_nome            = e.ds_nome,
                        dt_cadastro        = e.dt_cadastro,
                        token              = e.token,
                        fl_ativo           = e.fl_ativo,
                        fl_cardservices    = e.fl_cardservices,
                        fl_taxservices     = e.fl_taxservices,
                        fl_proinfo         = e.fl_proinfo,
                        vendedor           = e.id_vendedor != null ? new { e.Vendedor.id_users, e.Vendedor.ds_login, e.Vendedor.pessoa.nm_pessoa } : null,
                        login_ultimoAcesso = _db.LogAcesso1.Where(l => l.webpages_Users.id_grupo == e.id_grupo).OrderByDescending(l => l.dtAcesso).Take(1).Select(l => l.webpages_Users.ds_login).FirstOrDefault(),
                        dt_ultimoAcesso    = _db.LogAcesso1.Where(l => l.webpages_Users.id_grupo == e.id_grupo).OrderByDescending(l => l.dtAcesso).Take(1).Select(l => l.dtAcesso).FirstOrDefault(),
                        podeExcluir        = _db.LogAcesso1.Where(l => l.webpages_Users.id_grupo == e.id_grupo).Count() == 0,
                        cdPrioridade       = e.cdPrioridade,
                        dsAPI              = e.dsAPI,
                    }).ToList <dynamic>();


                    // a diferença entre a colecao 2 e a 3 é que a 2 sempre ordena decrescente por dt ultimo acesso
                    // A coleção 2 é usada no mobile, já a 3 é usada no portal web
                    CollectionGrupo_empresa = CollectionGrupo_empresa.OrderByDescending(d => d.dt_ultimoAcesso).ToList();
                }
                else if (colecao == 3)
                {
                    //CollectionGrupo_empresa = query.Select(e => new
                    //{
                    //    id_grupo = e.id_grupo,
                    //    ds_nome = e.ds_nome,
                    //    dt_cadastro = e.dt_cadastro,
                    //    token = e.token,
                    //    fl_ativo = e.fl_ativo,
                    //    fl_cardservices = e.fl_cardservices,
                    //    fl_taxservices = e.fl_taxservices,
                    //    fl_proinfo = e.fl_proinfo,
                    //    vendedor = e.id_vendedor != null ? new { e.Vendedor.id_users, e.Vendedor.ds_login, e.Vendedor.pessoa.nm_pessoa } : null,
                    //    ultimoAcesso = _db.LogAcesso1.Where(l => l.webpages_Users.id_grupo == e.id_grupo).OrderByDescending(l => l.dtAcesso).Take(1)
                    //                                 .Select(l => new
                    //                                 {
                    //                                     login_ultimoAcesso = l.webpages_Users.ds_login,
                    //                                     dt_ultimoAcesso = l.dtAcesso,
                    //                                 }).FirstOrDefault(),
                    //    cdPrioridade = e.cdPrioridade,
                    //    dsAPI = e.dsAPI,
                    //}

                    //).ToList<dynamic>();

                    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["painel_taxservices_dbContext"].ConnectionString);

                    try
                    {
                        connection.Open();
                    }
                    catch
                    {
                        throw new Exception("Não foi possível estabelecer conexão com a base de dados");
                    }

                    try
                    {
                        SimpleDataBaseQuery databaseQuery = getQuery(campo, orderBy, queryString);

                        string scriptWhere   = databaseQuery.ScriptForWhereClause();
                        string scriptOrderBy = databaseQuery.ScriptForOrderBy();
                        string script        = "SELECT T.*" +
                                               " FROM (" +
                                               " SELECT DISTINCT " + SIGLA_QUERY + ".id_grupo" +
                                               ", " + SIGLA_QUERY + ".ds_nome" +
                                               ", " + SIGLA_QUERY + ".dt_cadastro" +
                                               ", " + SIGLA_QUERY + ".token" +
                                               ", " + SIGLA_QUERY + ".fl_cardservices" +
                                               ", " + SIGLA_QUERY + ".fl_taxservices" +
                                               ", " + SIGLA_QUERY + ".fl_proinfo" +
                                               ", " + SIGLA_QUERY + ".fl_ativo" +
                                               ", " + SIGLA_QUERY + ".cdPrioridade" +
                                               ", " + SIGLA_QUERY + ".dsAPI" +
                                               ", V.id_users" +
                                               ", V.ds_login" +
                                               ", P.nm_pessoa" +
                                               ", login_ultimoAcesso = U.ds_login" +
                                               ", dt_ultimoAcesso = L.dtAcesso" +
                                               " FROM log.logAcesso L (NOLOCK)" +
                                               " JOIN dbo.webpages_Users U (NOLOCK) ON U.id_users = L.idUsers" +
                                               " RIGHT JOIN cliente.grupo_empresa " + SIGLA_QUERY + " (NOLOCK) ON " + SIGLA_QUERY + ".id_grupo = U.id_grupo" +
                                               " LEFT JOIN dbo.webpages_Users V (NOLOCK) ON V.id_users = " + SIGLA_QUERY + ".id_vendedor" +
                                               " LEFT JOIN dbo.pessoa P (NOLOCK) ON V.id_pessoa = P.id_pesssoa" +
                                               " WHERE	L.dtAcesso IS NULL"
                                               + (scriptWhere.Trim().Equals("") ? "" : " AND " + scriptWhere)
                                               + (whereVendedor.Trim().Equals("") ? "" : " AND " + whereVendedor) +
                                               " UNION ALL " +
                                               " SELECT DISTINCT " + SIGLA_QUERY + ".id_grupo" +
                                               ", " + SIGLA_QUERY + ".ds_nome" +
                                               ", " + SIGLA_QUERY + ".dt_cadastro" +
                                               ", " + SIGLA_QUERY + ".token" +
                                               ", " + SIGLA_QUERY + ".fl_cardservices" +
                                               ", " + SIGLA_QUERY + ".fl_taxservices" +
                                               ", " + SIGLA_QUERY + ".fl_proinfo" +
                                               ", " + SIGLA_QUERY + ".fl_ativo" +
                                               ", " + SIGLA_QUERY + ".cdPrioridade" +
                                               ", " + SIGLA_QUERY + ".dsAPI" +
                                               ", V.id_users" +
                                               ", V.ds_login" +
                                               ", P.nm_pessoa" +
                                               ", login_ultimoAcesso = U.ds_login" +
                                               ", dt_ultimoAcesso = L.dtAcesso" +
                                               " FROM log.logAcesso L (NOLOCK)" +
                                               " JOIN dbo.webpages_Users U (NOLOCK) ON U.id_users = L.idUsers" +
                                               " RIGHT JOIN cliente.grupo_empresa " + SIGLA_QUERY + " (NOLOCK) ON " + SIGLA_QUERY + ".id_grupo = U.id_grupo" +
                                               " LEFT JOIN dbo.webpages_Users V (NOLOCK) ON V.id_users = " + SIGLA_QUERY + ".id_vendedor" +
                                               " LEFT JOIN dbo.pessoa P (NOLOCK) ON V.id_pessoa = P.id_pesssoa" +
                                               " WHERE	U.id_grupo = "+ SIGLA_QUERY + ".id_grupo AND L.dtAcesso in (SELECT MAX(L.dtAcesso) FROM log.logAcesso L (NOLOCK) JOIN dbo.webpages_Users U (NOLOCK) ON U.id_users = L.idUsers WHERE U.id_grupo = " + SIGLA_QUERY + ".id_grupo)"
                                               + (scriptWhere.Trim().Equals("") ? "" : " AND " + scriptWhere)
                                               + (whereVendedor.Trim().Equals("") ? "" : " AND " + whereVendedor) +
                                               ") T" +
                                               " ORDER BY T.ds_nome";

                        List <IDataRecord> resultado = DataBaseQueries.SqlQuery(script, connection);

                        if (resultado != null && resultado.Count > 0)
                        {
                            CollectionGrupo_empresa = resultado.Select(t => new
                            {
                                id_grupo        = Convert.ToInt32(t["id_grupo"]),
                                ds_nome         = Convert.ToString(t["ds_nome"]),
                                dt_cadastro     = (DateTime)t["dt_cadastro"],
                                token           = Convert.ToString(t["token"]),
                                fl_ativo        = Convert.ToBoolean(t["fl_ativo"]),
                                fl_cardservices = Convert.ToBoolean(t["fl_cardservices"]),
                                fl_taxservices  = Convert.ToBoolean(t["fl_taxservices"]),
                                fl_proinfo      = Convert.ToBoolean(t["fl_proinfo"]),
                                vendedor        = t["id_users"].Equals(DBNull.Value) ? (object)null : new
                                {
                                    id_users  = Convert.ToInt32(t["id_users"]),
                                    ds_login  = Convert.ToString(t["ds_login"]),
                                    nm_pessoa = Convert.ToString(t["nm_pessoa"])
                                },
                                ultimoAcesso = t["dt_ultimoAcesso"].Equals(DBNull.Value) ? (object)null :
                                               new
                                {
                                    login_ultimoAcesso = Convert.ToString(t["login_ultimoAcesso"]),
                                    dt_ultimoAcesso    = (DateTime)t["dt_ultimoAcesso"]
                                },
                                cdPrioridade = Convert.ToByte(t["cdPrioridade"]),
                                dsAPI        = t["dsAPI"].Equals(DBNull.Value) ? (string)null : Convert.ToString(t["dsAPI"]),
                            }).ToList <dynamic>();

                            int skipRows = (pageNumber - 1) * pageSize;
                            if (retorno.TotalDeRegistros > pageSize && pageNumber > 0 && pageSize > 0)
                            {
                                CollectionGrupo_empresa = CollectionGrupo_empresa.Skip(skipRows).Take(pageSize).ToList();
                            }
                            else
                            {
                                pageNumber = 1;
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        if (e is DbEntityValidationException)
                        {
                            string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                            throw new Exception(erro.Equals("") ? "Falha ao listar recebimento parcela" : erro);
                        }
                        throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
                    }
                    finally
                    {
                        try
                        {
                            connection.Close();
                        }
                        catch { }
                    }
                }

                transaction.Commit();

                retorno.Registros = CollectionGrupo_empresa;

                return(retorno);
            }
            catch (Exception e)
            {
                transaction.Rollback();
                if (e is DbEntityValidationException)
                {
                    string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                    throw new Exception(erro.Equals("") ? "Falha ao listar grupo empresa" : erro);
                }
                throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
            }
            finally
            {
                if (_dbContext == null)
                {
                    // Fecha conexão
                    _db.Database.Connection.Close();
                    _db.Dispose();
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Retorna o relatório de conciliação de títulos
        /// </summary>
        /// <returns></returns>
        public static Retorno Get(string token, int colecao = 0, int campo = 0, int orderBy = 0, int pageSize = 0, int pageNumber = 0, Dictionary <string, string> queryString = null, painel_taxservices_dbContext _dbContext = null)
        {
            painel_taxservices_dbContext _db;

            if (_dbContext == null)
            {
                _db = new painel_taxservices_dbContext();
            }
            else
            {
                _db = _dbContext;
            }
            try
            {
                //DECLARAÇÕES
                List <dynamic> CollectionRelatorioConciliacaoTitulos = new List <dynamic>();
                Retorno        retorno = new Retorno();


                // QUERIES DE FILTRO
                string outValue = null;
                Dictionary <string, string> queryStringRecebimentoParcela = new Dictionary <string, string>();
                //Dictionary<string, string> queryStringTbRecebimentoTitulo = new Dictionary<string, string>();
                // DATA
                string data = String.Empty;
                if (queryString.TryGetValue("" + (int)CAMPOS.DATA, out outValue))
                {
                    data = queryString["" + (int)CAMPOS.DATA];
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTOEFETIVO, data);
                    //queryStringTbRecebimentoTitulo.Add("" + (int)GatewayTbRecebimentoTitulo.CAMPOS.DTTITULO, data);
                }
                // GRUPO EMPRESA => OBRIGATÓRIO!
                Int32 IdGrupo = Permissoes.GetIdGrupo(token, _db);
                if (IdGrupo == 0 && queryString.TryGetValue("" + (int)CAMPOS.ID_GRUPO, out outValue))
                {
                    IdGrupo = Convert.ToInt32(queryString["" + (int)CAMPOS.ID_GRUPO]);
                }
                if (IdGrupo != 0)
                {
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                    //queryStringTbRecebimentoTitulo.Add("" + (int)GatewayTbRecebimentoTitulo.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                }
                else
                {
                    throw new Exception("Um grupo deve ser selecionado como filtro de relatório de conciliação de títulos!");
                }
                // FILIAL
                string CnpjEmpresa = Permissoes.GetCNPJEmpresa(token, _db);
                if (CnpjEmpresa.Equals("") && queryString.TryGetValue("" + (int)CAMPOS.NU_CNPJ, out outValue))
                {
                    CnpjEmpresa = queryString["" + (int)CAMPOS.NU_CNPJ];
                }
                if (!CnpjEmpresa.Equals(""))
                {
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.NU_CNPJ, CnpjEmpresa);
                    //queryStringTbRecebimentoTitulo.Add("" + (int)GatewayTbRecebimentoTitulo.CAMPOS.NRCNPJ, CnpjEmpresa);
                }
                else
                {
                    throw new Exception("Uma filial deve ser selecionada como filtro de relatório de conciliação de títulos!");
                }
                // ADQUIRENTE
                string cdAdquirente = String.Empty;
                if (queryString.TryGetValue("" + (int)CAMPOS.CDADQUIRENTE, out outValue))
                {
                    cdAdquirente = queryString["" + (int)CAMPOS.CDADQUIRENTE];
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.CDADQUIRENTE, cdAdquirente);
                    // queryStringTbRecebimentoTitulo.Add("" + (int)GatewayTbRecebimentoTitulo.CAMPOS.CDADQUIRENTE, cdAdquirente);
                }

                // SOMENTE AS PARCELAS QUE TEM TÍTULOS CONCILIADOS
                //queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.IDRECEBIMENTOTITULO, "0");

                // CONEXÃO
                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["painel_taxservices_dbContext"].ConnectionString);

                try
                {
                    connection.Open();
                }
                catch
                {
                    throw new Exception("Não foi possível estabelecer conexão com a base de dados");
                }

                try
                {
                    #region OBTÉM A QUERY
                    //IQueryable<RecebimentoParcela> queryRecebimentoParcela = GatewayRecebimentoParcela.getQuery(_db, 0, (int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTO, 0, 0, 0, queryStringRecebimentoParcela);
                    SimpleDataBaseQuery dataBaseQuery = GatewayRecebimentoParcela.getQuery((int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTOEFETIVO, 0, queryStringRecebimentoParcela);

                    // RECEBIMENTO PARCELA
                    if (!dataBaseQuery.join.ContainsKey("INNER JOIN pos.Recebimento " + GatewayRecebimento.SIGLA_QUERY))
                    {
                        dataBaseQuery.join.Add("INNER JOIN pos.Recebimento " + GatewayRecebimento.SIGLA_QUERY, " ON " + GatewayRecebimento.SIGLA_QUERY + ".id = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimento");
                    }
                    if (!dataBaseQuery.join.ContainsKey("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY))
                    {
                        dataBaseQuery.join.Add("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY, " ON " + GatewayTbBandeira.SIGLA_QUERY + ".cdBandeira = " + GatewayRecebimento.SIGLA_QUERY + ".cdBandeira");
                    }
                    if (!dataBaseQuery.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                    {
                        dataBaseQuery.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbBandeira.SIGLA_QUERY + ".cdAdquirente");
                    }
                    if (!dataBaseQuery.join.ContainsKey("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY))
                    {
                        dataBaseQuery.join.Add("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY, " ON " + GatewayRecebimento.SIGLA_QUERY + ".cnpj = " + GatewayEmpresa.SIGLA_QUERY + ".nu_cnpj");
                    }
                    // JOINS para Título
                    if (!dataBaseQuery.join.ContainsKey("LEFT JOIN card.tbRecebimentoTitulo " + GatewayTbRecebimentoTitulo.SIGLA_QUERY))
                    {
                        dataBaseQuery.join.Add("LEFT JOIN card.tbRecebimentoTitulo " + GatewayTbRecebimentoTitulo.SIGLA_QUERY, " ON " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".idRecebimentoTitulo = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimentoTitulo");
                    }
                    if (!dataBaseQuery.join.ContainsKey("LEFT JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY + "2"))
                    {
                        dataBaseQuery.join.Add("LEFT JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY + "2", " ON " + GatewayEmpresa.SIGLA_QUERY + "2.nu_cnpj = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".nrCNPJ");
                    }
                    //if (!dataBaseQuery.join.ContainsKey("LEFT JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY + "2"))
                    //    dataBaseQuery.join.Add("LEFT JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY + "2", " ON " + GatewayTbAdquirente.SIGLA_QUERY + "2.cdAdquirente = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".cdAdquirente");

                    // SELECT
                    dataBaseQuery.select = new string[] { // RECEBIMENTO PARCELA
                        "R_Id = " + GatewayRecebimento.SIGLA_QUERY + ".id",
                        "R_NumParcela = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".numParcela",
                        "R_Nsu = " + GatewayRecebimento.SIGLA_QUERY + ".nsu",
                        "R_ValorLiquido = ISNULL(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaLiquida, 0.0)",
                        "R_DataVenda = " + GatewayRecebimento.SIGLA_QUERY + ".dtaVenda",
                        "R_DataPrevista = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento",
                        "R_DataEfetiva = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimentoEfetivo",
                        "R_Filial = UPPER(" + GatewayEmpresa.SIGLA_QUERY + ".ds_fantasia + CASE WHEN " + GatewayEmpresa.SIGLA_QUERY + ".filial IS NOT NULL THEN ' ' + " + GatewayEmpresa.SIGLA_QUERY + ".filial ELSE '' END)",
                        "R_Valor = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta",
                        "R_ValorVenda = " + GatewayRecebimento.SIGLA_QUERY + ".valorVendaBruta",
                        "R_Adquirente = " + GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente",
                        // TÍTULO
                        "T_Id = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".idRecebimentoTitulo",
                        "T_NumParcela = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".nrParcela",
                        "T_Nsu = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".nrNSU",
                        "T_DataVenda = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".dtVenda",
                        "T_Data = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".dtTitulo",
                        "T_Filial = UPPER(" + GatewayEmpresa.SIGLA_QUERY + "2.ds_fantasia + CASE WHEN " + GatewayEmpresa.SIGLA_QUERY + "2.filial IS NOT NULL THEN ' ' + " + GatewayEmpresa.SIGLA_QUERY + "2.filial ELSE '' END)",
                        "T_Valor = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".vlParcela",
                        "T_ValorVenda = " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".vlVenda",
                        //"T_Adquirente = " + GatewayTbAdquirente.SIGLA_QUERY + "2.nmAdquirente",
                        "T_Adquirente = (SELECT TOP 1 UPPER(nmAdquirente) FROM card.tbAdquirente (NOLOCK) WHERE cdAdquirente = CASE WHEN " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".cdAdquirente IS NOT NULL THEN " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".cdAdquirente ELSE " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".cdAdquirenteNew) END)",
                    };
                    dataBaseQuery.orderby = new string[] { "CASE WHEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimentoTitulo IS NOT NULL THEN 0 ELSE 1 END", // prioriza os que tem títulos
                                                           "CASE WHEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimentoEfetivo IS NOT NULL THEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimentoEfetivo ELSE " + GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento END",
                                                           GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente",
                                                           GatewayRecebimento.SIGLA_QUERY + ".dtaVenda",
                                                           GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta" };

                    // Tipo
                    if (queryString.TryGetValue("" + (int)CAMPOS.TIPO, out outValue))
                    {
                        Int32 tipo = Convert.ToInt32(queryString["" + (int)CAMPOS.TIPO]);
                        if (tipo == TIPO_FILIAL_DIFERENTE)
                        {   // Somente as parcelas que foram conciliados com um título de filial diferente
                            //queryRecebimentoParcela = queryRecebimentoParcela
                            //                        .Where(t => t.idRecebimentoTitulo != null && !t.Recebimento.cnpj.Equals(t.tbRecebimentoTitulo.nrCNPJ));
                            dataBaseQuery.AddWhereClause(GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimentoTitulo IS NOT NULL AND " + GatewayRecebimento.SIGLA_QUERY + ".cnpj != " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".nrCNPJ");
                        }
                        else if (tipo == TIPO_NAO_CONCILIADO)
                        {   // Somente as parcelas que não foram conciliadas
                            //queryRecebimentoParcela = queryRecebimentoParcela
                            //                        .Where(t => t.idRecebimentoTitulo == null);
                            dataBaseQuery.AddWhereClause(GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimentoTitulo IS NULL");
                        }
                        else
                        {
                            throw new Exception("Filtro de tipo informado é inválido!");
                        }
                    }
                    else if (queryString.TryGetValue("" + (int)CAMPOS.NU_CNPJ_TITULO, out outValue))
                    {
                        string cnpjTitulo = queryString["" + (int)CAMPOS.NU_CNPJ_TITULO];
                        //queryRecebimentoParcela = queryRecebimentoParcela
                        //    // Somente as parcelas que foram conciliados com um título de filial igual ao cnpj enviado
                        //                            .Where(t => t.idRecebimentoTitulo != null && t.tbRecebimentoTitulo.nrCNPJ.Equals(cnpjTitulo));
                        dataBaseQuery.AddWhereClause(GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimentoTitulo IS NOT NULL AND " + GatewayTbRecebimentoTitulo.SIGLA_QUERY + ".nrCNPJ = '" + cnpjTitulo + "'");
                    }

                    /*else
                     * {
                     *  queryRecebimentoParcela = queryRecebimentoParcela
                     *                              // Somente as parcelas que não foram conciliadas ou aquelas que foram conciliados com um título de filial diferente
                     *                              .Where(t => t.idRecebimentoTitulo == null || (t.idRecebimentoTitulo != null && !t.Recebimento.cnpj.Equals(t.tbRecebimentoTitulo.nrCNPJ)));
                     * }*/

                    dataBaseQuery.readUncommited = true;
                    #endregion

                    List <IDataRecord> resultado = DataBaseQueries.SqlQuery(dataBaseQuery.Script(), connection);

                    if (resultado != null && resultado.Count > 0)
                    {
                        CollectionRelatorioConciliacaoTitulos = resultado.Select(t => new
                        {
                            Titulo = t["T_Id"].Equals(DBNull.Value) ? null : new
                            {
                                Id         = Convert.ToInt32(t["T_Id"]),
                                NumParcela = Convert.ToInt32(t["T_NumParcela"]),
                                Nsu        = Convert.ToString(t["T_Nsu"].Equals(DBNull.Value) ? "" : t["T_Nsu"]),
                                DataVenda  = t["T_DataVenda"].Equals(DBNull.Value) ? (DateTime?)null : (DateTime)t["T_DataVenda"],
                                Valor      = Convert.ToDecimal(t["T_Valor"]),
                                Data       = (DateTime)t["T_Data"],
                                Filial     = Convert.ToString(t["T_Filial"]),
                                ValorVenda = Convert.ToDecimal(t["T_ValorVenda"].Equals(DBNull.Value) ? 0.0 : t["T_ValorVenda"]),
                            },
                            RecebimentoParcela = new
                            {
                                Id         = Convert.ToInt32(t["R_Id"]),
                                NumParcela = Convert.ToInt32(t["R_NumParcela"]),
                                Nsu        = Convert.ToString(t["R_Nsu"]),
                                //CodResumoVendas = recebimento.CodResumoVendas,
                                DataVenda    = (DateTime)t["R_DataVenda"],
                                Valor        = Convert.ToDecimal(t["R_Valor"]),
                                ValorLiquido = Convert.ToDecimal(t["R_ValorLiquido"]),
                                //Bandeira = recebimento.Bandeira,
                                Data        = (DateTime)t["R_DataPrevista"],
                                DataEfetiva = t["R_DataEfetiva"].Equals(DBNull.Value) ? (DateTime?)null : (DateTime)t["R_DataEfetiva"],
                                Filial      = Convert.ToString(t["R_Filial"]),
                                ValorVenda  = Convert.ToDecimal(t["R_ValorVenda"]),
                            },
                            Adquirente = Convert.ToString(t["R_Adquirente"]),
                        }).ToList <dynamic>();
                    }
                }
                catch (Exception e)
                {
                    if (e is DbEntityValidationException)
                    {
                        string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                        throw new Exception(erro.Equals("") ? "Falha ao listar recebimento parcela" : erro);
                    }
                    throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
                }
                finally
                {
                    try
                    {
                        connection.Close();
                    }
                    catch { }
                }

                //List<dynamic> rRecebimentoParcela = queryRecebimentoParcela
                //                                            .Select(t => new
                //                                            {
                //                                                idRecebimento = t.idRecebimento,
                //                                                dtaRecebimento = t.dtaRecebimentoEfetivo != null ? t.dtaRecebimentoEfetivo.Value : t.dtaRecebimento,
                //                                                filial = t.Recebimento.empresa.ds_fantasia.ToUpper() + (t.Recebimento.empresa.filial != null ? " " + t.Recebimento.empresa.filial.ToUpper() : ""),
                //                                                adquirente = t.Recebimento.tbBandeira.tbAdquirente.nmAdquirente.ToUpper(),
                //                                                //bandeira = t.Recebimento.tbBandeira.dsBandeira,
                //                                                valorBruto = t.valorParcelaBruta,
                //                                                valorLiquido = t.valorParcelaLiquida != null ? t.valorParcelaLiquida.Value : new decimal(0.0),
                //                                                valorVenda = t.Recebimento.valorVendaBruta,
                //                                                idRecebimentoTitulo = t.idRecebimentoTitulo,
                //                                                dtaVenda = t.Recebimento.dtaVenda,
                //                                                nsu = t.Recebimento.nsu,
                //                                                numParcela = t.numParcela,
                //                                                //codResumoVenda = t.Recebimento.codResumoVenda,
                //                                            }).OrderBy(t => t.filial)
                //                                              // prioriza os conciliados
                //                                              .ThenByDescending(t => t.idRecebimentoTitulo.HasValue)
                //                                              .ThenBy(t => t.dtaRecebimento)
                //                                              .ThenBy(t => t.adquirente)
                //                                              .ThenBy(t => t.dtaVenda.Year)
                //                                              .ThenBy(t => t.dtaVenda.Month)
                //                                              .ThenBy(t => t.dtaVenda.Day)
                //                                              .ThenBy(t => t.valorBruto)
                //                                              .ToList<dynamic>();

                // TOTAL DE REGISTROS
                //retorno.TotalDeRegistros = rRecebimentoParcela.Count;

                //// PAGINAÇÃO
                //int skipRows = (pageNumber - 1) * pageSize;
                //if (rRecebimentoParcela.Count > pageSize && pageNumber > 0 && pageSize > 0)
                //    rRecebimentoParcela = rRecebimentoParcela.Skip(skipRows).Take(pageSize).ToList<dynamic>();
                //else
                //    pageNumber = 1;
                retorno.TotalDeRegistros = CollectionRelatorioConciliacaoTitulos.Count;

                // TOTAL
                retorno.Totais = new Dictionary <string, object>();
                retorno.Totais.Add("valorTotalBruto", CollectionRelatorioConciliacaoTitulos.Select(r => r.RecebimentoParcela.Valor).Cast <decimal>().Sum());
                retorno.Totais.Add("valorTotalERP", CollectionRelatorioConciliacaoTitulos.Where(r => r.Titulo != null).Select(r => r.Titulo.Valor).Cast <decimal>().Sum());
                List <dynamic> filiais = CollectionRelatorioConciliacaoTitulos.Where(t => t.Titulo != null)
                                         .GroupBy(t => t.Titulo.Filial)
                                         .OrderBy(t => t.Key)
                                         .Select(t => new
                {
                    filial   = t.Key,
                    valor    = t.Select(x => x.RecebimentoParcela.Valor).Cast <decimal>().Sum(),
                    valorERP = t.Select(x => x.Titulo.Valor).Cast <decimal>().Sum()
                }).ToList <dynamic>();

                if (filiais.Count > 0)
                {
                    foreach (var filial in filiais)
                    {
                        retorno.Totais.Add("(valorTotalBruto) " + filial.filial, filial.valor);
                        retorno.Totais.Add("(valorTotalERP) " + filial.filial, filial.valorERP);
                    }
                }

                // PAGINAÇÃO
                int skipRows = (pageNumber - 1) * pageSize;
                if (CollectionRelatorioConciliacaoTitulos.Count > pageSize && pageNumber > 0 && pageSize > 0)
                {
                    CollectionRelatorioConciliacaoTitulos = CollectionRelatorioConciliacaoTitulos.Skip(skipRows).Take(pageSize).ToList <dynamic>();
                }
                else
                {
                    pageNumber = 1;
                }


                //foreach (var recebParcela in rRecebimentoParcela)
                //{
                //    ConciliacaoTitulos recebimento = new ConciliacaoTitulos
                //    {
                //        Tipo = GatewayConciliacaoTitulos.TIPO_RECEBIMENTO, // recebimento
                //        Id = recebParcela.idRecebimento,
                //        NumParcela = recebParcela.numParcela,
                //        Nsu = recebParcela.nsu,
                //        ValorLiquido = /*decimal.Round(*/recebParcela.valorLiquido/*, 2)*/,
                //        //CodResumoVendas = recebParcela.codResumoVenda,
                //        //Bandeira = recebParcela.bandeira,
                //        DataVenda = recebParcela.dtaVenda,
                //        Data = recebParcela.dtaRecebimento,
                //        Filial = recebParcela.filial,
                //        Valor = /*decimal.Round(*/recebParcela.valorBruto/*, 2)*/,
                //        ValorVenda = /*decimal.Round(*/recebParcela.valorVenda/*, 2)*/,
                //        Adquirente = recebParcela.adquirente,
                //    };

                //    if (recebParcela.idRecebimentoTitulo != null)
                //    {
                //        // PARCELA CONCILIADA
                //        Int32 idRecebimentoTitulo = recebParcela.idRecebimentoTitulo;

                //        ConciliacaoTitulos titulo = _db.tbRecebimentoTitulos
                //                                                .Where(e => e.idRecebimentoTitulo == idRecebimentoTitulo)
                //                                                .Select(e => new ConciliacaoTitulos
                //                                                {
                //                                                    Tipo = GatewayConciliacaoTitulos.TIPO_TITULO, // título
                //                                                    Id = e.idRecebimentoTitulo,
                //                                                    NumParcela = e.nrParcela,
                //                                                    Nsu = e.nrNSU,
                //                                                    //Bandeira = e.dsBandeira.ToUpper(),
                //                                                    DataVenda = e.dtVenda,
                //                                                    Data = e.dtTitulo,
                //                                                    Filial = e.empresa.ds_fantasia.ToUpper() + (e.empresa.filial != null ? " " + e.empresa.filial.ToUpper() : ""),
                //                                                    Valor = e.vlParcela,
                //                                                    ValorVenda = e.vlVenda,
                //                                                    Adquirente = e.tbAdquirente.nmAdquirente.ToUpper(),
                //                                                }).FirstOrDefault<ConciliacaoTitulos>();

                //        if (titulo == null)
                //            continue; // falha!

                //        // Adiciona
                //        CollectionRelatorioConciliacaoTitulos.Add(new
                //        {
                //            Titulo = new
                //            {
                //                Id = titulo.Id,
                //                NumParcela = titulo.NumParcela,
                //                Nsu = titulo.Nsu,
                //                DataVenda = titulo.DataVenda,
                //                Valor = titulo.Valor,
                //                //Bandeira = titulo.Bandeira,
                //                Data = titulo.Data,
                //                Filial = titulo.Filial,
                //                ValorVenda = titulo.ValorVenda,
                //            },
                //            RecebimentoParcela = new
                //            {
                //                Id = recebimento.Id,
                //                NumParcela = recebimento.NumParcela,
                //                Nsu = recebimento.Nsu,
                //                //CodResumoVendas = recebimento.CodResumoVendas,
                //                DataVenda = recebimento.DataVenda,
                //                Valor = recebimento.Valor,
                //                ValorLiquido = recebimento.ValorLiquido,
                //                //Bandeira = recebimento.Bandeira,
                //                Data = recebimento.Data,
                //                Filial = recebimento.Filial,
                //                ValorVenda = recebimento.ValorVenda,
                //            },
                //            Adquirente = recebimento.Adquirente,
                //        });
                //    }
                //    else
                //    {
                //        // PARCELA NÃO CONCILIADA
                //        CollectionRelatorioConciliacaoTitulos.Add(new
                //        {
                //            Titulo = (string)null,
                //            RecebimentoParcela = new
                //            {
                //                Id = recebimento.Id,
                //                NumParcela = recebimento.NumParcela,
                //                Nsu = recebimento.Nsu,
                //                //CodResumoVendas = recebimento.CodResumoVendas,
                //                DataVenda = recebimento.DataVenda,
                //                Valor = recebimento.Valor,
                //                ValorLiquido = recebimento.ValorLiquido,
                //                //Bandeira = recebimento.Bandeira,
                //                Data = recebimento.Data,
                //                Filial = recebimento.Filial,
                //                ValorVenda = recebimento.ValorVenda,
                //            },
                //            Adquirente = recebimento.Adquirente,
                //        });
                //    }
                //}

                retorno.PaginaAtual    = pageNumber;
                retorno.ItensPorPagina = pageSize;

                retorno.Registros = CollectionRelatorioConciliacaoTitulos;

                return(retorno);
            }
            catch (Exception e)
            {
                if (e is DbEntityValidationException)
                {
                    string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                    throw new Exception(erro.Equals("") ? "Falha ao listar adquirente" : erro);
                }
                throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
            }
            finally
            {
                if (_dbContext == null)
                {
                    // Fecha conexão
                    _db.Database.Connection.Close();
                    _db.Dispose();
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Retorna a lista de conciliação bancária
        /// </summary>
        /// <returns></returns>
        public static Retorno Get(string token, int colecao = 0, int campo = 0, int orderBy = 0, int pageSize = 0, int pageNumber = 0, Dictionary <string, string> queryString = null, painel_taxservices_dbContext _dbContext = null)
        {
            // Abre conexão
            painel_taxservices_dbContext _db;

            if (_dbContext == null)
            {
                _db = new painel_taxservices_dbContext();
            }
            else
            {
                _db = _dbContext;
            }
            try
            {
                //DECLARAÇÕES
                List <dynamic> CollectionRecebiveisFuturos = new List <dynamic>();
                Retorno        retorno = new Retorno();


                // QUERIES DE FILTRO
                string outValue = null;
                Dictionary <string, string> queryStringAjustes                      = new Dictionary <string, string>();
                Dictionary <string, string> queryStringRecebimentoParcela           = new Dictionary <string, string>();
                Dictionary <string, string> queryStringTbAntecipacaoBancariaDetalhe = new Dictionary <string, string>();
                // DATA
                DateTime dataMin = Convert.ToDateTime(DateTime.Now.AddDays(1).ToShortDateString());
                //queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTOEFETIVO, ""); // dtaRecebimentoEfetivo is null
                if (queryString.TryGetValue("" + (int)CAMPOS.DATA, out outValue))
                {
                    // Não permite que o período seja inferior a data corrente + 1
                    string data = queryString["" + (int)CAMPOS.DATA];
                    if (data.Contains(">"))
                    {
                        DateTime dataInicial = DateTime.ParseExact(data.Replace(">", "") + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        if (dataInicial < dataMin)
                        {
                            throw new Exception("Período deve ser igual ou superior ao dia seguinte da data corrente (" + dataMin.ToShortDateString() + ")");
                        }
                        //data = ">" + Convert.ToDateTime(dataNow.ToShortDateString());
                    }
                    else if (data.Contains("|"))
                    {
                        DateTime dataInicial = DateTime.ParseExact(data.Substring(0, data.IndexOf("|")) + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        if (dataInicial < dataMin)
                        {
                            //data = Convert.ToDateTime(dataNow.ToShortDateString()) + data.Substring(data.IndexOf("|"));
                            throw new Exception("Data inicial do período deve ser igual ou superior ao dia seguinte da data corrente (" + dataMin.ToShortDateString() + ")");
                        }
                        DateTime dataFinal = DateTime.ParseExact(data.Substring(data.IndexOf("|") + 1) + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        if (dataFinal < dataMin)
                        {
                            //data = data.Substring(0, data.IndexOf("|") + 1) + Convert.ToDateTime(dataNow.ToShortDateString());
                            throw new Exception("Data final do período deve ser igual ou superior ao dia seguinte da data corrente (" + dataMin.ToShortDateString() + ")");
                        }
                        if (dataInicial > dataFinal)
                        {
                            throw new Exception("Período informado é inválido!");
                        }
                    }
                    else
                    {
                        DateTime dataInicial = DateTime.ParseExact(data + " 00:00:00.000", "yyyyMMdd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                        if (dataInicial < dataMin)
                        {
                            //data = ">" + Convert.ToDateTime(dataNow.ToShortDateString());
                            throw new Exception("Data informada deve ser igual ou superior ao dia seguinte da data corrente (" + dataMin.ToShortDateString() + ")");
                        }
                    }
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.DTAJUSTE, data /*+ "@"*/);
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTO, data + "@");
                    //queryStringRecebimentoParcela["" + (int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTOEFETIVO] = data;
                    queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.DTVENCIMENTO, data);
                }
                else
                {
                    // Período todo => começa a partir da data corrente + 1
                    string data = ">" + dataMin.ToShortDateString();
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.DTAJUSTE, data /*+ "@"*/);
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTO, data + "@");
                    queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.DTVENCIMENTO, data);
                }
                // GRUPO EMPRESA => OBRIGATÓRIO!
                Int32 IdGrupo = Permissoes.GetIdGrupo(token, _db);
                if (IdGrupo == 0 && queryString.TryGetValue("" + (int)CAMPOS.ID_GRUPO, out outValue))
                {
                    IdGrupo = Convert.ToInt32(queryString["" + (int)CAMPOS.ID_GRUPO]);
                }
                if (IdGrupo != 0)
                {
                    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                    queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.ID_GRUPO, IdGrupo.ToString());
                }
                else
                {
                    throw new Exception("Um grupo deve ser selecionado como filtro de recebíveis futuros!");
                }
                // FILIAL
                //string CnpjEmpresa = Permissoes.GetCNPJEmpresa(token, _db);
                //if (CnpjEmpresa.Equals("") && queryString.TryGetValue("" + (int)CAMPOS.NU_CNPJ, out outValue))
                //    CnpjEmpresa = queryString["" + (int)CAMPOS.NU_CNPJ];
                //if (!CnpjEmpresa.Equals(""))
                //{
                //    queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.NRCNPJ, CnpjEmpresa);
                //    queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.NU_CNPJ, CnpjEmpresa);
                //    //queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.NR, IdGrupo.ToString());
                //}

                // SOMENTE PARCELAS E AJUSTES DE BANDEIRAS TIPO CRÉDITO
                queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.DSTIPO, "CRÉDITO");
                queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.DSTIPO, "CRÉDITO");

                // Sem ajustes de antecipação
                queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.SEM_AJUSTES_ANTECIPACAO, true.ToString());

                // CONTA
                if (queryString.TryGetValue("" + (int)CAMPOS.CDCONTACORRENTE, out outValue))
                {
                    Int32 cdContaCorrente = Convert.ToInt32(queryString["" + (int)CAMPOS.CDCONTACORRENTE]);
                    if (cdContaCorrente > 0)
                    {
                        queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.CDCONTACORRENTE, cdContaCorrente.ToString());
                        queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.CDCONTACORRENTE, cdContaCorrente.ToString());
                        queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.CDCONTACORRENTE, cdContaCorrente.ToString());
                    }
                }

                // ADQUIRENTE
                if (queryString.TryGetValue("" + (int)CAMPOS.CDADQUIRENTE, out outValue))
                {
                    Int32 cdAdquirente = Convert.ToInt32(queryString["" + (int)CAMPOS.CDADQUIRENTE]);
                    if (cdAdquirente > 0)
                    {
                        queryStringAjustes.Add("" + (int)GatewayTbRecebimentoAjuste.CAMPOS.CDADQUIRENTE, cdAdquirente.ToString());
                        queryStringRecebimentoParcela.Add("" + (int)GatewayRecebimentoParcela.CAMPOS.CDADQUIRENTE, cdAdquirente.ToString());
                        queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.CDADQUIRENTE, cdAdquirente.ToString());
                    }
                }

                // Sem parcelas e/ou ajustes antecipados por causa do vencimento da antecipação bancária
                //queryStringTbAntecipacaoBancariaDetalhe.Add("" + (int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.SEM_PARCELAS_AJUSTES_ASSOCIADO, true.ToString());


                // CONEXÃO
                SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["painel_taxservices_dbContext"].ConnectionString);

                try
                {
                    connection.Open();
                }
                catch
                {
                    throw new Exception("Não foi possível estabelecer conexão com a base de dados");
                }

                try
                {
                    SimpleDataBaseQuery dataBaseQueryRP = GatewayRecebimentoParcela.getQuery((int)GatewayRecebimentoParcela.CAMPOS.DTARECEBIMENTOEFETIVO, 0, queryStringRecebimentoParcela);
                    SimpleDataBaseQuery dataBaseQueryAJ = GatewayTbRecebimentoAjuste.getQuery((int)GatewayTbRecebimentoAjuste.CAMPOS.DTAJUSTE, 0, queryStringAjustes);
                    SimpleDataBaseQuery dataBaseQueryAB = GatewayTbAntecipacaoBancariaDetalhe.getQuery((int)GatewayTbAntecipacaoBancariaDetalhe.CAMPOS.DTVENCIMENTO, 0, queryStringTbAntecipacaoBancariaDetalhe);

                    #region Adiciona JOINS, caso não tenham

                    // RECEBIMENTO PARCELA
                    if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN pos.Recebimento " + GatewayRecebimento.SIGLA_QUERY))
                    {
                        dataBaseQueryRP.join.Add("INNER JOIN pos.Recebimento " + GatewayRecebimento.SIGLA_QUERY, " ON " + GatewayRecebimento.SIGLA_QUERY + ".id = " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idRecebimento");
                    }
                    if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY))
                    {
                        dataBaseQueryRP.join.Add("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY, " ON " + GatewayTbBandeira.SIGLA_QUERY + ".cdBandeira = " + GatewayRecebimento.SIGLA_QUERY + ".cdBandeira");
                    }
                    if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                    {
                        dataBaseQueryRP.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbBandeira.SIGLA_QUERY + ".cdAdquirente");
                    }
                    //if (!dataBaseQueryRP.join.ContainsKey("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY))
                    //    dataBaseQueryRP.join.Add("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY, " ON " + GatewayRecebimento.SIGLA_QUERY + ".cnpj = " + GatewayEmpresa.SIGLA_QUERY + ".nu_cnpj");

                    // AJUSTES
                    if (!dataBaseQueryAJ.join.ContainsKey("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY))
                    {
                        dataBaseQueryAJ.join.Add("INNER JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY, " ON " + GatewayTbBandeira.SIGLA_QUERY + ".cdBandeira = " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".cdBandeira");
                    }
                    if (!dataBaseQueryAJ.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                    {
                        dataBaseQueryAJ.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbBandeira.SIGLA_QUERY + ".cdAdquirente");
                    }
                    //if (!dataBaseQueryAJ.join.ContainsKey("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY))
                    //    dataBaseQueryAJ.join.Add("INNER JOIN cliente.empresa " + GatewayEmpresa.SIGLA_QUERY, " ON " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".nrCNPJ = " + GatewayEmpresa.SIGLA_QUERY + ".nu_cnpj");

                    // ANTECIPACAO BANCÁRIA
                    if (!dataBaseQueryAB.join.ContainsKey("INNER JOIN card.tbAntecipacaoBancaria " + GatewayTbAntecipacaoBancaria.SIGLA_QUERY))
                    {
                        dataBaseQueryAB.join.Add("INNER JOIN card.tbAntecipacaoBancaria " + GatewayTbAntecipacaoBancaria.SIGLA_QUERY, " ON " + GatewayTbAntecipacaoBancaria.SIGLA_QUERY + ".idAntecipacaoBancaria = " + GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".idAntecipacaoBancaria");
                    }
                    //if (!dataBaseQueryAB.join.ContainsKey("LEFT JOIN pos.RecebimentoParcela " + GatewayRecebimentoParcela.SIGLA_QUERY))
                    //    dataBaseQueryAB.join.Add("LEFT JOIN pos.RecebimentoParcela " + GatewayRecebimentoParcela.SIGLA_QUERY, " ON " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe = " + GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe");
                    //if (!dataBaseQueryAB.join.ContainsKey("LEFT JOIN card.tbRecebimentoAjuste " + GatewayTbRecebimentoAjuste.SIGLA_QUERY))
                    //    dataBaseQueryAB.join.Add("LEFT JOIN card.tbRecebimentoAjuste " + GatewayTbRecebimentoAjuste.SIGLA_QUERY, " ON " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe = " + GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe");

                    dataBaseQueryRP.readUncommited = true;
                    dataBaseQueryAJ.readUncommited = true;
                    dataBaseQueryAB.readUncommited = true;
                    #endregion

                    List <IDataRecord>       resultado;
                    List <RecebiveisFuturos> recebiveisFuturos = new List <RecebiveisFuturos>();
                    if (colecao == 1)
                    {
                        #region DIA
                        //if (!dataBaseQueryAB.join.ContainsKey("LEFT JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY))
                        //    dataBaseQueryAB.join.Add("LEFT JOIN card.tbBandeira " + GatewayTbBandeira.SIGLA_QUERY, " ON " + GatewayTbBandeira.SIGLA_QUERY + ".cdBandeira = " + GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".cdBandeira");

                        #region OBTÉM OS SELECTS
                        // Obtém o select de cada um

                        // RECEBIMENTO PARCELA
                        dataBaseQueryRP.select = new string[] { GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento AS dtRecebimento",
                                                                //GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira",
                                                                "vlParcela = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta)",
                                                                "vlDescontado = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado)",
                                                                //"vlParcelaLiquida = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaLiquida)",
                                                                "vlParcelaLiquida = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta - " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado)",
                                                                "vlAntecipacaoBancaria = 0"
                                                                //"vlAntecipacaoBancaria = SUM(CASE WHEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta - " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado ELSE 0 END)"
                        };
                        dataBaseQueryRP.orderby = null;
                        dataBaseQueryRP.groupby = new[] { GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento",
                                                          //GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira"
                        };

                        // AJUSTE
                        dataBaseQueryAJ.select = new string[] { GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste AS dtRecebimento",
                                                                //"dtRecebimento = CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN CONVERT(smalldatetime, SUBSTRING(" + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo, CHARINDEX('VENCIMENTO', " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo) + 11, 10), 103) ELSE " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste END",
                                                                //GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira",
                                                                //"vlParcela = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste > 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END)",
                                                                "vlParcela = SUM(CASE WHEN CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto != 0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto ELSE CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste > 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END END)",
                                                                //"vlDescontado = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste < 0.0 THEN -1 * " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END)",
                                                                "valorDescontado = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto != 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto - " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste < 0.0 THEN -1 * " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END END)",
                                                                "vlParcelaLiquida = SUM(" + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste)",
                                                                "vlAntecipacaoBancaria = 0"
                                                                //"vlAntecipacaoBancaria = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0 END)"
                        };
                        dataBaseQueryAJ.orderby = null;
                        dataBaseQueryAJ.groupby = new[] { GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste",
                                                          //"CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN CONVERT(smalldatetime, SUBSTRING(" + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo, CHARINDEX('VENCIMENTO', " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo) + 11, 10), 103) ELSE " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste END",
                                                          // GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira"
                        };

                        // ANTECIPAÇÃO BANCÁRIA
                        dataBaseQueryAB.select = new string[] { GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".dtVencimento AS dtRecebimento",
                                                                //"dsBandeira = ISNULL(" + GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira, 'INDEFINIDA')",
                                                                "vlParcela = 0",
                                                                "vlDescontado = 0",
                                                                "vlParcelaLiquida = 0",
                                                                //"vlAntecipacaoBancaria = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste IS NOT NULL THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE CASE WHEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".vlParcelaBruta IS NOT NULL THEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta - " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado ELSE 0 END END)",
                                                                "vlAntecipacaoBancaria = SUM(" + GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".vlAntecipacao)", };
                        dataBaseQueryAB.orderby = null;
                        dataBaseQueryAB.groupby = new[] { GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".dtVencimento",
                                                          //"ISNULL(" + GatewayTbBandeira.SIGLA_QUERY + ".dsBandeira, 'INDEFINIDA')"
                        };

                        string scriptRP = dataBaseQueryRP.Script();
                        string scriptAJ = dataBaseQueryAJ.Script();
                        string scriptAB = dataBaseQueryAB.Script();

                        string script = "SELECT T.dtRecebimento" +
                                        //", T.dsBandeira" +
                                        ", vlParcela = SUM(T.vlParcela)" +
                                        ", vlDescontado = SUM(T.vlDescontado)" +
                                        ", vlParcelaLiquida = SUM(T.vlParcelaLiquida)" +
                                        ", vlAntecipacaoBancaria = SUM(T.vlAntecipacaoBancaria)" +
                                        " FROM (" + scriptRP + " UNION " + scriptAJ + " UNION " + scriptAB + ") T" +
                                        " GROUP BY T.dtRecebimento" + //, T.dsBandeira" +
                                        " ORDER BY T.dtRecebimento";  //, T.dsBandeira";
                        #endregion

                        resultado = DataBaseQueries.SqlQuery(script, connection);

                        recebiveisFuturos = new List <RecebiveisFuturos>();
                        if (resultado != null && resultado.Count > 0)
                        {
                            recebiveisFuturos = resultado.Select(t => new RecebiveisFuturos
                            {
                                //bandeira = Convert.ToString(t["dsBandeira"]),
                                data                     = (DateTime)t["dtRecebimento"],
                                valorBruto               = Convert.ToDecimal(t["vlParcela"]),
                                valorDescontado          = Convert.ToDecimal(t["vlDescontado"]),
                                valorAntecipacaoBancaria = Convert.ToDecimal(t["vlAntecipacaoBancaria"]),
                                valorLiquido             = Convert.ToDecimal(t["vlParcelaLiquida"]) - Convert.ToDecimal(t["vlAntecipacaoBancaria"]),
                            }).ToList <RecebiveisFuturos>();

                            CollectionRecebiveisFuturos = recebiveisFuturos.GroupBy(r => r.data)
                                                          .Select(r => new
                            {
                                competencia              = r.Key,
                                valorBruto               = r.Sum(f => f.valorBruto),
                                valorDescontado          = r.Sum(f => f.valorDescontado),
                                valorAntecipacaoBancaria = r.Sum(f => f.valorAntecipacaoBancaria),
                                valorLiquido             = r.Sum(f => f.valorLiquido),

                                /*bandeiras = r.GroupBy(f => f.bandeira)
                                 *              .OrderBy(f => f.Key)
                                 *              .Select(f => new
                                 *              {
                                 *                  bandeira = f.Key,
                                 *                  valorBruto = f.Sum(x => x.valorBruto),
                                 *                  valorDescontado = f.Sum(x => x.valorDescontado),
                                 *                  valorAntecipacaoBancaria = f.Sum(x => x.valorAntecipacaoBancaria),
                                 *                  valorLiquido = f.Sum(x => x.valorLiquido),
                                 *              }).ToList<dynamic>(),*/
                            }).ToList <dynamic>();
                        }

                        #endregion
                    }
                    else
                    {
                        #region COMPETENCIA / ADQUIRENTE / DIA
                        if (!dataBaseQueryAB.join.ContainsKey("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY))
                        {
                            dataBaseQueryAB.join.Add("INNER JOIN card.tbAdquirente " + GatewayTbAdquirente.SIGLA_QUERY, " ON " + GatewayTbAdquirente.SIGLA_QUERY + ".cdAdquirente = " + GatewayTbAntecipacaoBancaria.SIGLA_QUERY + ".cdAdquirente");
                        }


                        #region OBTÉM OS SELECTS
                        // Obtém o select de cada um

                        // RECEBIMENTO PARCELA
                        dataBaseQueryRP.select = new string[] { GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento AS dtRecebimento",
                                                                GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente",
                                                                "vlParcela = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta)",
                                                                "vlDescontado = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado)",
                                                                //"vlParcelaLiquida = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaLiquida)",
                                                                "vlParcelaLiquida = SUM(" + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta - " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado)",
                                                                "vlAntecipacaoBancaria = 0"
                                                                //"vlAntecipacaoBancaria = SUM(CASE WHEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorParcelaBruta - " + GatewayRecebimentoParcela.SIGLA_QUERY + ".valorDescontado ELSE 0 END)"
                        };
                        dataBaseQueryRP.orderby = null;
                        dataBaseQueryRP.groupby = new[] { GatewayRecebimentoParcela.SIGLA_QUERY + ".dtaRecebimento",
                                                          GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente" };

                        // AJUSTE
                        dataBaseQueryAJ.select = new string[] { GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste AS dtRecebimento",
                                                                //"dtRecebimento = CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN CONVERT(smalldatetime, SUBSTRING(" + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo, CHARINDEX('VENCIMENTO', " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo) + 11, 10), 103) ELSE " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste END",
                                                                GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente",
                                                                //"vlParcela = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste > 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END)",
                                                                "vlParcela = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto != 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto ELSE CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste > 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END END)",
                                                                //"vlDescontado = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste < 0.0 THEN -1 * " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END)",
                                                                "valorDescontado = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto != 0.0 THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlBruto - " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste < 0.0 THEN -1 * " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0.0 END END)",
                                                                "vlParcelaLiquida = SUM(" + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste)",
                                                                "vlAntecipacaoBancaria = 0"
                                                                //"vlAntecipacaoBancaria = SUM(CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".vlAjuste ELSE 0 END)"
                        };
                        dataBaseQueryAJ.orderby = null;
                        dataBaseQueryAJ.groupby = new[] { GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste",
                                                          //"CASE WHEN " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".idAntecipacaoBancariaDetalhe IS NOT NULL THEN CONVERT(smalldatetime, SUBSTRING(" + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo, CHARINDEX('VENCIMENTO', " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dsMotivo) + 11, 10), 103) ELSE " + GatewayTbRecebimentoAjuste.SIGLA_QUERY + ".dtAjuste END",
                                                          GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente" };

                        // ANTECIPAÇÃO BANCÁRIA
                        dataBaseQueryAB.select = new string[] { GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".dtVencimento AS dtRecebimento",
                                                                GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente",
                                                                "vlParcela = 0",
                                                                "vlDescontado = 0",
                                                                "vlParcelaLiquida = 0",
                                                                "vlAntecipacaoBancaria = SUM(" + GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".vlAntecipacao)", };
                        dataBaseQueryAB.orderby = null;
                        dataBaseQueryAB.groupby = new[] { GatewayTbAntecipacaoBancariaDetalhe.SIGLA_QUERY + ".dtVencimento",
                                                          GatewayTbAdquirente.SIGLA_QUERY + ".nmAdquirente" };


                        string scriptRP = dataBaseQueryRP.Script();
                        string scriptAJ = dataBaseQueryAJ.Script();
                        string scriptAB = dataBaseQueryAB.Script();

                        string script = "SELECT T.dtRecebimento" +
                                        //", T.cdAdquirente" +
                                        ", T.nmAdquirente" +
                                        //", T.cdBandeira" +
                                        //", T.dsBandeira" +
                                        ", vlParcela = SUM(T.vlParcela)" +
                                        ", vlDescontado = SUM(T.vlDescontado)" +
                                        ", vlParcelaLiquida = SUM(T.vlParcelaLiquida)" +
                                        ", vlAntecipacaoBancaria = SUM(T.vlAntecipacaoBancaria)" +
                                        " FROM (" + scriptRP + " UNION " + scriptAJ + " UNION " + scriptAB + ") T" +
                                        " GROUP BY T.dtRecebimento, T.nmAdquirente" + //, T.dsBandeira" +
                                        " ORDER BY T.dtRecebimento, T.nmAdquirente";  //, T.dsBandeira";
                        #endregion

                        resultado = DataBaseQueries.SqlQuery(script, connection);

                        recebiveisFuturos = new List <RecebiveisFuturos>();
                        if (resultado != null && resultado.Count > 0)
                        {
                            recebiveisFuturos = resultado.Select(t => new RecebiveisFuturos
                            {
                                adquirente = Convert.ToString(t["nmAdquirente"]),
                                //bandeira = Convert.ToString(t["dsBandeira"]),
                                data                     = (DateTime)t["dtRecebimento"],
                                valorBruto               = Convert.ToDecimal(t["vlParcela"]),
                                valorDescontado          = Convert.ToDecimal(t["vlDescontado"]),
                                valorAntecipacaoBancaria = Convert.ToDecimal(t["vlAntecipacaoBancaria"]),
                                //valorLiquido = Convert.ToDecimal(t["vlParcelaLiquida"]) - Convert.ToDecimal(t["vlAntecipacaoBancaria"]),
                                valorLiquido = Convert.ToDecimal(t["vlParcela"]) - Convert.ToDecimal(t["vlDescontado"]) - Convert.ToDecimal(t["vlAntecipacaoBancaria"]),
                            }).ToList <RecebiveisFuturos>();

                            CollectionRecebiveisFuturos = recebiveisFuturos.GroupBy(r => new { r.data.Month, r.data.Year })
                                                          .Select(r => new
                            {
                                competencia              = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(r.Key.Month) + "/" + r.Key.Year,
                                valorBruto               = r.Sum(f => f.valorBruto),
                                valorDescontado          = r.Sum(f => f.valorDescontado),
                                valorAntecipacaoBancaria = r.Sum(f => f.valorAntecipacaoBancaria),
                                valorLiquido             = r.Sum(f => f.valorLiquido),
                                adquirentes              = r.GroupBy(f => f.adquirente)
                                                           .OrderBy(f => f.Key)
                                                           .Select(f => new
                                {
                                    adquirente               = f.Key,
                                    valorBruto               = /*decimal.Round(*/ f.Sum(x => x.valorBruto) /*, 2)*/,
                                    valorDescontado          = /*decimal.Round(*/ f.Sum(x => x.valorDescontado) /*, 2)*/,
                                    valorAntecipacaoBancaria = f.Sum(x => x.valorAntecipacaoBancaria),
                                    valorLiquido             = /*decimal.Round(*/ f.Sum(x => x.valorLiquido) /*, 2)*/,
                                    dias = f.GroupBy(x => x.data)
                                           .OrderBy(x => x.Key)
                                           .Select(x => new
                                    {
                                        data                     = x.Key,
                                        valorBruto               = /*decimal.Round(*/ x.Sum(y => y.valorBruto) /*, 2)*/,
                                        valorDescontado          = /*decimal.Round(*/ x.Sum(y => y.valorDescontado) /*, 2)*/,
                                        valorAntecipacaoBancaria = /*decimal.Round(*/ x.Sum(y => y.valorAntecipacaoBancaria) /*, 2)*/,
                                        valorLiquido             = x.Sum(y => y.valorLiquido),
                                    }).ToList <dynamic>(),
                                }).ToList <dynamic>(),
                            }).ToList <dynamic>();
                        }
                        #endregion
                    }
                }
                catch (Exception e)
                {
                    if (e is DbEntityValidationException)
                    {
                        string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                        throw new Exception(erro.Equals("") ? "Falha ao listar recebimento parcela" : erro);
                    }
                    throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
                }
                finally
                {
                    try
                    {
                        connection.Close();
                    }
                    catch { }
                }


                //List<RecebiveisFuturos> ajustes = queryAjustes.Select(a => new RecebiveisFuturos
                //{
                //    data = a.dtAjuste,
                //    valorBruto = a.vlAjuste > new decimal(0.0) ? a.vlAjuste : new decimal(0.0),
                //    valorLiquido = a.vlAjuste,
                //    valorDescontado = a.vlAjuste < new decimal(0.0) ? new decimal(-1.0) * a.vlAjuste : new decimal(0.0),
                //    bandeira = a.tbBandeira.dsBandeira,
                //    adquirente = a.tbBandeira.tbAdquirente.nmAdquirente
                //}).OrderBy(r => r.data).ToList<RecebiveisFuturos>();

                //List<RecebiveisFuturos> recebiveisFuturos = queryRecebimentoParcela.Select(r => new RecebiveisFuturos
                //{
                //    data = r.dtaRecebimento,
                //    valorBruto = r.valorParcelaBruta,
                //    valorLiquido = r.valorParcelaLiquida != null ? r.valorParcelaLiquida.Value : new decimal(0.0),
                //    valorDescontado = r.valorDescontado,
                //    bandeira = r.Recebimento.cdBandeira != null ? r.Recebimento.tbBandeira.dsBandeira : r.Recebimento.BandeiraPos.desBandeira,
                //    adquirente = r.Recebimento.cdBandeira != null ? r.Recebimento.tbBandeira.tbAdquirente.nmAdquirente : r.Recebimento.BandeiraPos.Operadora.nmOperadora
                //}).OrderBy(r => r.data).ToList<RecebiveisFuturos>();

                //if (ajustes.Count > 0) recebiveisFuturos = recebiveisFuturos.Concat(ajustes).OrderBy(r => r.data).ToList<RecebiveisFuturos>();

                // TOTAL DE REGISTROS
                retorno.TotalDeRegistros = CollectionRecebiveisFuturos.Count;

                // TOTAL
                retorno.Totais = new Dictionary <string, object>();
                retorno.Totais.Add("valorBruto", CollectionRecebiveisFuturos.Select(r => r.valorBruto).Cast <decimal>().Sum());
                retorno.Totais.Add("valorDescontado", CollectionRecebiveisFuturos.Select(r => r.valorDescontado).Cast <decimal>().Sum());
                retorno.Totais.Add("valorAntecipacaoBancaria", CollectionRecebiveisFuturos.Select(r => r.valorAntecipacaoBancaria).Cast <decimal>().Sum());
                retorno.Totais.Add("valorLiquido", CollectionRecebiveisFuturos.Select(r => r.valorLiquido).Cast <decimal>().Sum());

                // PAGINAÇÃO
                int skipRows = (pageNumber - 1) * pageSize;
                if (retorno.TotalDeRegistros > pageSize && pageNumber > 0 && pageSize > 0)
                {
                    CollectionRecebiveisFuturos = CollectionRecebiveisFuturos.Skip(skipRows).Take(pageSize).ToList <dynamic>();
                }
                else
                {
                    pageNumber = 1;
                }

                retorno.PaginaAtual    = pageNumber;
                retorno.ItensPorPagina = pageSize;

                retorno.Registros = CollectionRecebiveisFuturos;

                return(retorno);
            }
            catch (Exception e)
            {
                if (e is DbEntityValidationException)
                {
                    string erro = MensagemErro.getMensagemErro((DbEntityValidationException)e);
                    throw new Exception(erro.Equals("") ? "Falha ao listar adquirente" : erro);
                }
                throw new Exception(e.InnerException == null ? e.Message : e.InnerException.InnerException == null ? e.InnerException.Message : e.InnerException.InnerException.Message);
            }
            finally
            {
                if (_dbContext == null)
                {
                    // Fecha conexão
                    _db.Database.Connection.Close();
                    _db.Dispose();
                }
            }
        }