Brato.UserInterface.Controllers.RelatorioController.FiltrarRelatórioEstatistico C# (CSharp) Method

FiltrarRelatórioEstatistico() public method

public FiltrarRelatórioEstatistico ( RelatorioModel model ) : System.Web.Mvc.ActionResult
model Brato.UserInterface.Models.RelatorioModel
return System.Web.Mvc.ActionResult
        public ActionResult FiltrarRelatórioEstatistico(RelatorioModel model)
        {
            Expression<Func<BratEntity, bool>> filtroBrat = (b => b.Temp == "D");

            #region Acidente
            if (!string.IsNullOrEmpty(model.Bairro))
                filtroBrat = filtroBrat.And(b => b.IdEndereco.IdLogradouro.IdBairro.Descricao == model.Bairro);
            if (!(model.Circunstancia == null || model.Circunstancia == 0))
                filtroBrat = filtroBrat.And(b => b.Circunstancia == (int)model.Circunstancia);
            if (!(model.CondicaoTempo == null || model.CondicaoTempo == 0))
                filtroBrat = filtroBrat.And(b => b.CondTempo == (int)model.CondicaoTempo);
            if (!string.IsNullOrEmpty(model.Logradouro))
                filtroBrat = filtroBrat.And(b => b.IdEndereco.IdLogradouro.Descricao == model.Logradouro);
            if (!string.IsNullOrEmpty(model.Município))
                filtroBrat = filtroBrat.And(b => b.IdEndereco.IdLogradouro.IdBairro.IdMunicipio.Descricao == model.Município);
            if (!(model.Sinalizacao == null || model.Sinalizacao == 0))
                filtroBrat = filtroBrat.And(b => b.TipoSinalizacao == (int)model.Sinalizacao);
            if (!string.IsNullOrEmpty(model.UF))
                filtroBrat = filtroBrat.And(b => b.IdEndereco.IdLogradouro.IdBairro.IdMunicipio.Uf.Uf == model.UF);
            if (!(model.TipoAcidente == null || model.TipoAcidente == 0))
                filtroBrat = filtroBrat.And(b => b.TipoAcidente == (int)model.TipoAcidente);
            #endregion

            var lstfiltroBrat = RulesManager.CreateByEntity<BratEntity, int>().FindAll(filtroBrat).ToList();
            IList<BratEntity> lstBrats = new List<BratEntity>();
            foreach (var brat in lstfiltroBrat)
            {
                bool adicionar = false;
                Expression<Func<MotoristaEntity, bool>> filtroMotorista = (m => m.Brat.IdBrat == brat.IdBrat);
                Expression<Func<VeiculoEntity, bool>> filtroVeiculo = (v => v.Brat.IdBrat == brat.IdBrat);
                Expression<Func<VitimaEntity, bool>> filtroVitima = (v => v.Brat.IdBrat == brat.IdBrat);

                #region Motorista
                if (!(model.SexoMotorista == null || model.SexoMotorista == 0))
                    filtroMotorista = filtroMotorista.And(m => m.Pessoa.Sexo == ((int)model.SexoMotorista).ToString());
                if (model.IdadeMotorista != 0)
                    filtroMotorista = filtroMotorista.And(m => m.Brat.DataAcidente.Year - m.DataNasc.Year == model.IdadeMotorista);
                if (!(model.CategoriaCnh == null || model.CategoriaCnh == 0))
                    filtroMotorista = filtroMotorista.And(m => m.CategoriaCnh == (int)model.CategoriaCnh);
                if (!(model.EstadoCivilMotorista == null || model.EstadoCivilMotorista == 0))
                    filtroMotorista = filtroMotorista.And(m => m.EstadoCivil == (int)model.EstadoCivilMotorista);
                #endregion

                #region Vitima
                if (model.ComVitimas)
                {
                    if (!(model.FerimentosVitima == null || model.FerimentosVitima == 0))
                        filtroVitima = filtroVitima.And(v => v.TipoFerimento == (int)model.FerimentosVitima);
                    if (model.IdadeVitima != 0)
                        filtroVitima = filtroVitima.And(v => v.Brat.DataAcidente.Year - v.DataNasc.Year == model.IdadeVitima);
                    if (!(model.SexoVitima == null || model.SexoVitima == 0))
                        filtroVitima = filtroVitima.And(m => m.Pessoa.Sexo == ((int)model.SexoVitima).ToString());
                }
                #endregion

                #region Veiculo

                //if (!string.IsNullOrEmpty(model.Fabricante))
                //filtroVeiculo = filtroVeiculo.And(v => v.Fabricante == model.Fabricante
                //if (model.Modelo
                //model.TipoVeiculo

                #endregion

                var lstFiltroMotorista = RulesManager.CreateByEntity<MotoristaEntity, int>().FindAll(filtroMotorista).ToList();
                if (lstFiltroMotorista.Any())
                    adicionar = true;

                var lstFiltroVitima = RulesManager.CreateByEntity<VitimaEntity, int>().FindAll(filtroVitima).ToList();
                if (lstFiltroVitima.Any())
                    adicionar = true;

                var lstFiltroVeiculo = RulesManager.CreateByEntity<VeiculoEntity, int>().FindAll(filtroVeiculo).ToList();
                if (lstFiltroVeiculo.Any())
                    adicionar = true;

                if (adicionar)
                    lstBrats.Add(brat);
            }

            /////
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory.Trim('\\'), "RelatoriosAnaliticos");
            RetornoRelatorioModel mdl = new RetornoRelatorioModel();
            if (lstBrats.Any())
            {
                RelAnaliticoReport rpt = new RelAnaliticoReport(lstBrats);
                string folder = Guid.NewGuid().ToString().Substring(20).Replace("-", "");

                var caminhoCompleto = Path.Combine(path, folder);
                Directory.CreateDirectory(caminhoCompleto);

                rpt.ExportToPdf(caminhoCompleto + "\\relatorioAnaliticoBrato.pdf");
                rpt.ExportToXls(caminhoCompleto + "\\relatorioAnaliticoBrato.xls");
                rpt.ExportToRtf(caminhoCompleto + "\\relatorioAnaliticoBrato.rtf");

                mdl.LinkPdf = "/RelatoriosAnaliticos/" + folder + "/relatorioAnaliticoBrato.pdf";
                mdl.LinkXls = "/RelatoriosAnaliticos/" + folder + "/relatorioAnaliticoBrato.xls";
                mdl.LinkRtf = "/RelatoriosAnaliticos/" + folder + "/relatorioAnaliticoBrato.rtf";

                mdl.Mensagem = "O relatório foi processado. Voce pode visualizá-lo através dos links abaixo.";
                mdl.Results = true;
            }
            else
            {
                mdl.Mensagem = "Nenhum registro encontrado com os filtros informados.";
                mdl.Results = false;
            }
            return View("RetornoRelatorio", mdl);
            /////
            return View();
        }