Esempio n. 1
0
        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"));
                }
            }
        }