public IActionResult Filtrar(DateTime?datainicio, DateTime?datafim, string setor, string loja, int?page, bool?pdf) { Log log = new Log(); int id_notnull = HttpContext.Session.GetInt32("ID") ?? 0; FiltrarPesquisaRelatViewModel pesquisa = new FiltrarPesquisaRelatViewModel() { DataInicio = datainicio, DataFim = datafim, Setor = setor, Loja = loja }; ViewBag.Setores = setores; ViewBag.Lojas = lojas; int pageNumber = page ?? 1; string filtros = ""; var query = _db.Int_DP_Ocorrencias .Join(_db.Int_DP_Usuarios, o => o.Usuario.Id, u => u.Id, (o, u) => new { o, u }) .Join(_db.Int_DP_Setores, a => a.u.Setor.Id, b => b.Id, (a, b) => new { a, b }) .Join(_db.Int_DP_Lojas, r => r.a.u.Loja.Id, s => s.Id, (r, s) => new { r, s }) .OrderByDescending(c => c.r.a.o.Data) .ThenByDescending(a => a.r.a.o.Id) .AsQueryable(); if (pesquisa.DataInicio != null) { if (pesquisa.DataFim != null) { query = query.Where(a => a.r.a.o.Data >= pesquisa.DataInicio && a.r.a.o.Data <= pesquisa.DataFim); } else { query = query.Where(a => a.r.a.o.Data >= pesquisa.DataInicio); } } if (pesquisa.Setor != null && pesquisa.Setor != "0") { query = query.Where(a => a.r.a.u.Setor.Id == int.Parse(pesquisa.Setor)); } if (pesquisa.Loja != null && pesquisa.Loja != "0") { query = query.Where(a => a.r.a.u.Loja.Id == int.Parse(pesquisa.Loja)); } query = query.Where(y => y.r.a.o.Ativo == 1); DateTime datainicio_notnull = pesquisa.DataInicio ?? DateTime.MinValue; DateTime datafim_notnull = pesquisa.DataFim ?? DateTime.MaxValue; var relat = query.Select(s => new { s.r.a.o.Data, s.r.a.o.Descricao, s.r.a.o.Id, s.r.a.o.Anexo, s.r.a.u.Nome, Setor = s.r.a.u.Setor.Nome, Loja = s.r.a.u.Loja.Nome }).ToList(); foreach (var linha in relat) { OcorrenciaViewModel ocorVM = new OcorrenciaViewModel { Nome = linha.Nome, Setor = linha.Setor, Loja = linha.Loja, Descricao = linha.Descricao, Data = linha.Data, Id = linha.Id, Anexo = linha.Anexo }; relatorioVM.Add(ocorVM); } if (relatorioVM.Count > 0) { filtros = GerarFiltros(datainicio_notnull, datafim_notnull, setor, loja); relatorioVM[0].DadosPesquisa = filtros; //Armazena os dados que veio do filtro no primeiro index do modelo (.pdf) } Setor vPesquisa = _db.Int_DP_Setores.Find(int.Parse(pesquisa.Setor)); Loja vPesquisa2 = _db.Int_DP_Lojas.Find(int.Parse(pesquisa.Loja)); if (vPesquisa != null) { ViewBag.NomeSetor = vPesquisa.Nome; } else { ViewBag.NomeSetor = "*Todos*"; } if (vPesquisa2 != null) { ViewBag.NomeLoja = vPesquisa2.Nome; } else { ViewBag.NomeLoja = "*Todas*"; } if (pdf != true) { ViewBag.Pesquisa = pesquisa; try { IPagedList <OcorrenciaViewModel> resultadoPaginado = relatorioVM.ToPagedList(pageNumber, paginasPagedList); log.ConsultarRelatorio(id_notnull, filtros); _db.Int_DP_Logs.Add(log); _db.SaveChanges(); return(View("Index", resultadoPaginado)); } catch (Exception exp) { log.ConsultarRelatorio_Erro(id_notnull, filtros, exp); _db.Int_DP_Logs.Add(log); _db.SaveChanges(); TempData["ErroRelat"] = "Ocorreu um erro ao tentar consultar o relatório..."; return(View("Index")); } } else { try { string data = Globalization.DataRelatorioPdfBR(); ViewAsPdf relatorioPDF = new ViewAsPdf { WkhtmlPath = "~/OcorrenciasDP/wwwroot/Rotativa", ViewName = "VisualizarComoPDF", IsGrayScale = false, Model = relatorioVM, PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait, CustomSwitches = "--page-offset 0 --footer-left " + data + " --footer-right [page]/[toPage] --footer-font-size 8", PageSize = Rotativa.AspNetCore.Options.Size.A4 }; log.ExportarRelatorio(id_notnull, filtros); _db.Int_DP_Logs.Add(log); _db.SaveChanges(); return(relatorioPDF); } catch (Exception exp) { log.ExportarRelatorio_Erro(id_notnull, exp); _db.Int_DP_Logs.Add(log); _db.SaveChanges(); TempData["ErroRelat"] = "Ocorreu um erro ao tentar exportar o relátório, por favor, tente novamente..."; return(RedirectToAction("Index")); } } }