protected override Record.RecordDescriptor GetRecordDescriptor(QueryInfo a, GDA.Sql.NativeQuery b, GDADataRecord c) { if (a.Projection.Count > 0) { var d = new List <Record.Field> (); int e; if (IgnoreLastFieldWithPaging && b.TakeCount > 0 && b.SkipCount > 0) { e = c.FieldCount - 1; } else { e = c.FieldCount; } var f = a.Projection.Select(g => g.Alias).ToArray(); if (e >= f.Length) { for (int h = 0; h < e; h++) { var i = (h < f.Length ? f [h] : c.GetName(h)) ?? c.GetName(h); var j = GetFieldType(h, c); d.Add(new Record.Field(i, j)); } return(new Record.RecordDescriptor("descriptor", d)); } } return(base.GetRecordDescriptor(a, b, c)); }
/// <summary> /// Recupera as saídas dos produtos. /// </summary> /// <param name="dataEmissaoInicial">Data inicial da emissão.</param> /// <param name="dataEmissaoFinal">Data final da emissão.</param> /// <param name="pageSize">Tamanho da página de dados.</param> /// <returns></returns> public IEnumerable <RelModel.Dipj> ObtemSaidaProdutos (DateTime dataEmissaoInicial, DateTime dataEmissaoFinal, int pageSize) { var codInternoCfop = "'5101','5102','5103','5104','5105','5106','5109','5110','5111','5112','5113','5114','5115','5116','5117'," + "'5118','5119','5120','5122','5123','5124','5125','5151','5152','5155','5156','5401','5402','5403','5405','5408','5409'," + "'5414','5415','5501','5502','5503','5667','5901','5902','5903','5904','5905','5906','5907','5908','5909','5910','5911'," + "'5912','5913','5914','5915','5916','5917','5918','5919','5920','5921','5922','5923','5924','5925','5934','5949','6101'," + "'6102','6103','6104','6105','6106','6107','6108','6109','6110','6111','6112','6113','6114','6115','6116','6117','6118'," + "'6119','6120','6122','6123','6124','6125','6151','6152','6155','6156','6401','6402','6403','6404','6408','6409','6502'," + "'6503','6505','6667','6901','6902','6903','6904','6905','6906','6907','6908','6909','6910','6911','6912','6913','6914'," + "'6915','6916','6917','6918','6919','6920','6921','6922','6923','6924','6925','6934','6949','7101','7102','7105','7106'," + "'7127','7501','7667','7949'"; var comando = @"Select Ncm AS Id, Mercadoria AS Nome, ValorContabil, ValorIpi, ValorContabilIpi From (Select prod.Ncm Ncm, prod.Descricao As Mercadoria, Sum(pnf.Total + pnf.ValorIpi + pnf.valorIcmsSt) As ValorContabil, Sum(pnf.ValorIpi) As ValorIpi, Sum(pnf.Total) + Sum(pnf.valorIcmsSt) As ValorContabilIpi From produtos_nf pnf Left Join nota_fiscal nf ON (pnf.IdNf = nf.IdNf) Left Join natureza_operacao nat ON (pnf.idnaturezaoperacao = nat.idnaturezaoperacao) Left Join cfop c ON (nat.idCfop = c.idCfop) Left Join produto p ON (pnf.IdProd = p.IdProd) Left Join produto_baixa_estoque_fiscal pbef ON (p.idProd = pbef.idProd) Left Join produto prod ON (Coalesce(pbef.idProdBaixa, p.IdProd) = prod.IdProd) Where nf.TipoDocumento In (?tipoDoc) And nf.Situacao In (?situacao) And (nf.DataEmissao >= ?dataInicial And nf.DataEmissao <= ?dataFinal) And c.codInterno In (" + codInternoCfop + @") Group By prod.IdProd) As temp Order By ValorContabil Desc"; var consulta = new GDA.Sql.NativeQuery(comando) .Add("?tipoDoc", Model.NotaFiscal.TipoDoc.Saída) .Add("?situacao", Model.NotaFiscal.SituacaoEnum.Autorizada) .Add("?dataInicial", dataEmissaoInicial.Date) .Add("?dataFinal", dataEmissaoFinal.Date.AddHours(23).AddMinutes(59).AddSeconds(59)); return(FormaResultado(consulta, pageSize, f => { if (string.IsNullOrEmpty(f.Id)) { f.Id = "NÃO POSSUI"; } return f; })); }
/// <summary> /// Recupera as entradas dos produtos. /// </summary> /// <param name="dataEmissaoInicial">Data inicial da emissão.</param> /// <param name="dataEmissaoFinal">Data final da emissão.</param> /// <param name="pageSize"></param> /// <returns></returns> public IEnumerable <RelModel.Dipj> ObtemEntradaProdutos(DateTime dataEmissaoInicial, DateTime dataEmissaoFinal, int pageSize) { var codInternoCfop = "'1101','1102','1111','1113','1116','1117','1118','1120','1121','1122','1124','1125','1126','1151'," + "'1152','1154','1401','1403','1408','1409','1410','1411','1414','1415','1501','1503','1504','1901','1902','1903','1904'," + "'1905','1906','1907','1908','1909','1910','1911','1912','1913','1914','1915','1916','1917','1918','1919','1920','1921'," + "'1922','1923','1924','1925','1926','1934','1949','2101','2102','2111','2113','2116','2117','2118','2120','2121','2122'," + "'2124','2125','2126','2151','2152','2154','2401','2403','2408','2409','2410','2411','2414','2415','2501','2503','2504'," + "'2901','2902','2903','2904','2905','2906','2907','2908','2909','2910','2911','2912','2913','2914','2915','2916','2917'," + "'2918','2919','2920','2921','2922','2923','2924','2925','2934','2949','3101','3102','3126','3127','3503','3949'"; var comando = @"Select Ncm AS Id, Mercadoria AS Nome, ValorContabil, ValorIpi, ValorContabilIpi From (Select prod.Ncm As Ncm, prod.Descricao As Mercadoria, Sum(pnf.Total) + Sum(pnf.ValorIpi) As ValorContabil, Sum(pnf.ValorIpi) As ValorIpi, Sum(pnf.Total) As ValorContabilIpi From produtos_nf pnf Left Join nota_fiscal nf ON (pnf.IdNf = nf.IdNf) Left Join natureza_operacao nat ON (pnf.idnaturezaoperacao = nat.idnaturezaoperacao) Left Join cfop c ON (nat.idCfop = c.idCfop) Left Join produto p ON (pnf.IdProd = p.IdProd) Left Join produto_baixa_estoque_fiscal pbef ON (p.idProd = pbef.idProd) Left Join produto prod ON (Coalesce(pbef.idProdBaixa, p.IdProd) = prod.IdProd) Where nf.TipoDocumento In (?tipoDoc1 , ?tipoDoc2) And nf.Situacao In (?situacao1, ?situacao2) And (Coalesce(nf.dataSaidaEnt, nf.dataEmissao) >= ?dataInicial And Coalesce(nf.dataSaidaEnt, nf.dataEmissao) <= ?dataFinal) And c.codInterno In (" + codInternoCfop + @") Group By prod.IdProd) As temp Order By ValorContabil Desc"; var consulta = new GDA.Sql.NativeQuery(comando) .Add("?tipoDoc1", Model.NotaFiscal.TipoDoc.Entrada) .Add("?tipoDoc2", Model.NotaFiscal.TipoDoc.EntradaTerceiros) .Add("?situacao1", Model.NotaFiscal.SituacaoEnum.Autorizada) .Add("?situacao2", Model.NotaFiscal.SituacaoEnum.FinalizadaTerceiros) .Add("?dataInicial", dataEmissaoInicial.Date) .Add("?dataFinal", dataEmissaoFinal.Date.AddHours(23).AddMinutes(59).AddSeconds(59)); return(FormaResultado(consulta, pageSize, f => { if (string.IsNullOrEmpty(f.Id)) { f.Id = "NÃO POSSUI"; } return f; })); }
/// <summary> /// Obtêm dados do filtro /// </summary> /// <param name="comandoSql"></param> /// <returns></returns> public List <Tuple <string, string> > ObterFiltros(string comandoSql) { if (!ValidarComandoSql(comandoSql)) { return(new List <Tuple <string, string> >()); } var query = new GDA.Sql.NativeQuery(comandoSql); return(query .ToDataRecords() .Select(record => { return new Tuple <string, string>(record.GetString(0), record.GetString(1)); }).ToList()); }
private QueryResult ExecuteQuery(GDASession session, string commandText, QueryInfo queryInfo) { var query = new GDA.Sql.NativeQuery(commandText) { Query.QueryParameter.GetParameters(queryInfo, false).Select(f => CreateParameter(f.Name, f.Value)).GroupBy(f => f.ParameterName).Where(f => ContainsParameter(commandText, f.Key)).Select(f => f.FirstOrDefault()) }; query.CommandTimeout = queryInfo.CommandTimeout; if (queryInfo.TakeParameters != null) { if (queryInfo.TakeParameters.Skip > 0) { query.Skip(queryInfo.TakeParameters.Skip); } if (queryInfo.TakeParameters.Take > 0) { query.Take(queryInfo.TakeParameters.Take); } } IEnumerator <GDADataRecord> dataRecordEnumerator = query.ToDataRecords(session).GetEnumerator(); IEnumerable <Record> records = null; Record.RecordDescriptor descriptor = null; if (dataRecordEnumerator.MoveNext()) { var dataRecord = dataRecordEnumerator.Current; descriptor = GetRecordDescriptor(queryInfo, query, dataRecord); var firstRecord = GetRecord(descriptor, dataRecord); records = GetRecords(descriptor, firstRecord, dataRecordEnumerator); } else { records = new Record[0]; } var result = new QueryResult(descriptor, records, queryInfo, f => Execute(session, f)); result.Validate().ThrowInvalid(); return(result); }
/// <summary> /// Formata o resultado dos forncedores e dos clientes. /// </summary> /// <param name="consulta"></param> /// <param name="pageSize"></param> /// <param name="manipuladorAjuste">Método usado para reliza os ajuste nos registros do resultado.</param> /// <returns></returns> private static IList <RelModel.Dipj> FormaResultado (GDA.Sql.NativeQuery consulta, int pageSize, Func <RelModel.Dipj, RelModel.Dipj> manipuladorAjuste) { if (pageSize <= 0) { return(consulta .ToCursor <RelModel.Dipj>() .Select(manipuladorAjuste) .ToList()); } else { var resultado = consulta.ToResultList <RelModel.Dipj>(pageSize); resultado.LoadResultPage += (sender, e) => { foreach (var i in e.Page) { manipuladorAjuste(i); } }; return(resultado); } }
/// <summary> /// Recupera o descritor dos registro. /// </summary> /// ?<param name="queryInfo">Informações da consulta.</param> /// <param name="query">Consulta nativa do GDA.</param> /// <param name="dataRecord">Registro com os dados.</param> /// <returns></returns> protected virtual Record.RecordDescriptor GetRecordDescriptor(QueryInfo queryInfo, GDA.Sql.NativeQuery query, GDADataRecord dataRecord) { var fields = new List <Record.Field>(); int fieldCount; if (IgnoreLastFieldWithPaging && query.TakeCount > 0 && query.SkipCount > 0) { fieldCount = dataRecord.FieldCount - 1; } else { fieldCount = dataRecord.FieldCount; } for (int i = 0; i < fieldCount; i++) { var fieldName = dataRecord.GetName(i); var fieldType = GetFieldType(i, dataRecord); fields.Add(new Record.Field(fieldName, fieldType)); } return(new Record.RecordDescriptor("descriptor", fields)); }
/// <summary> /// Monta uma pesquisa do relatório dinâmico /// </summary> /// <returns></returns> public List <Dictionary <string, string> > PesquisarListaDinamica(int idRelatorioDinamico, List <Tuple <RelatorioDinamicoFiltro, string> > lstFiltro, int startRow, int pageSize, out int count) { // Recupera o relatório var relatorio = ObterRelatorioDinamico(idRelatorioDinamico); // Não permite executar certos comandos no banco if (!ValidarComandoSql(relatorio.ComandoSql)) { count = 0; return(null); } // Monta filtros var parametros = new List <GDAParameter>(); var filtro = MontarFiltroDinamico(lstFiltro, parametros); // Monta a ordenação var ordenacao = lstFiltro.Where(f => f.Item1.TipoControle == Data.Model.TipoControle.Ordenacaoo).FirstOrDefault(); if (ordenacao != null && !string.IsNullOrEmpty(ordenacao.Item2)) { filtro += string.Format(" ORDER BY {0}", ordenacao.Item2); } // Monta o SQL var comandoSql = relatorio.ComandoSql .Replace("[where]", filtro) .Replace("{@IdFunc}", Data.Helper.UserInfo.GetUserInfo.CodUser.ToString()) .Replace("{@IdRelDinamico}", idRelatorioDinamico.ToString()); //Determina se a consulta deve ser preparada antes de executada var prepare = false; if (comandoSql.StartsWith("[@prepare]")) { comandoSql = comandoSql.Substring(10); prepare = true; } // Cria a query com o comando sql com parâmetros se houver var query = new GDA.Sql.NativeQuery(comandoSql); if (parametros.Count > 0) { query.Parameters.AddRange(parametros); } using (var session = new GDASession()) { if (prepare) { var sql = query.ToDataRecords(session) .Select(f => f.GetString(0)).FirstOrDefault(); query = new GDA.Sql.NativeQuery(sql); } //Busca a quantidade de registros. var queryCount = new GDA.Sql.NativeQuery(string.Format("SELECT COUNT(*) FROM ({0}) AS tmpCount", query.CommandText.TrimEnd(';'))); queryCount.Parameters.AddRange(query.Parameters); count = queryCount.ToDataRecords(session).Select(f => f.GetInt32(0)).FirstOrDefault(); return(query.Skip(startRow * pageSize).Take(pageSize) .ToDataRecords(session) .Select(record => { var dic = new Dictionary <string, string>(); for (int i = 0; i < record.FieldCount; i++) { dic.Add(record.GetName(i), record.GetString(i)); } return dic; }).ToList()); } }
/// <summary> /// Recupera o descritor dos campos do registro. /// </summary> /// <param name="queryInfo"></param> /// <param name="query"></param> /// <param name="dataRecord"></param> /// <returns></returns> protected override Record.RecordDescriptor GetRecordDescriptor(QueryInfo queryInfo, GDA.Sql.NativeQuery query, GDADataRecord dataRecord) { if (queryInfo.Projection.Count > 0) { var fields = new List <Record.Field>(); int fieldCount; if (IgnoreLastFieldWithPaging && query.TakeCount > 0 && query.SkipCount > 0) { fieldCount = dataRecord.FieldCount - 1; } else { fieldCount = dataRecord.FieldCount; } var projection = queryInfo.Projection.Select(f => f.Alias).ToArray(); if (fieldCount >= projection.Length) { for (int i = 0; i < fieldCount; i++) { var fieldName = (i < projection.Length ? projection[i] : dataRecord.GetName(i)) ?? dataRecord.GetName(i); var fieldType = GetFieldType(i, dataRecord); fields.Add(new Record.Field(fieldName, fieldType)); } return(new Record.RecordDescriptor("descriptor", fields)); } } return(base.GetRecordDescriptor(queryInfo, query, dataRecord)); }