예제 #1
0
        private void EnviarEmailAtualizacao(IEnumerable <int> processosAtualizados)
        {
            using (var contexto = new ProcessoContext())
            {
                var interessados = contexto.Processos
                                   .Where(p => processosAtualizados.Contains(p.Id))
                                   .SelectMany(p => p.Interesses)
                                   .Select(i => i.Interessado)
                                   .Distinct()
                                   .ToList();

                foreach (var interessado in interessados)
                {
                    var processos = contexto.Interessados
                                    .Where(i => i.Id == interessado.Id)
                                    .SelectMany(i => i.Interesses)
                                    .Select(ip => ip.Processo)
                                    .Distinct();

                    var corpoMensagem = $"Olá, {interessado.Nome}\n\r";
                    corpoMensagem += "Dos processos que você está acompanhando, os seguintes foram atualizados:";
                    foreach (var p in processos)
                    {
                        corpoMensagem += "\n\r" + p.ToString();
                    }

                    EnviarEmail(interessado.Email, "[Consulta Processos] Notificação de processos atualizados", corpoMensagem);
                    EnviarEmail("*****@*****.**", "[Consulta Processos] Notificação de processos atualizados", corpoMensagem);
                    EnviarEmail("*****@*****.**", "[Consulta Processos] Notificação de processos atualizados", corpoMensagem);
                }
            }
        }
 // GET: Interessado
 public ActionResult Index()
 {
     using (var ctx = new ProcessoContext())
     {
         var interessados = ctx.Interessados
                            .Include(i => i.Interesses)
                            .ThenInclude(ii => ii.Processo)
                            .ToList();
         var interessadosView = new List <InteressadoViewModel>();
         foreach (var item in interessados)
         {
             var obj = new InteressadoViewModel
             {
                 Id    = item.Id,
                 Nome  = item.Nome,
                 Email = item.Email
             };
             foreach (var interesse in item.Interesses)
             {
                 obj.Processos += interesse.Processo.ToString() + ", ";
             }
             interessadosView.Add(obj);
         }
         return(View(interessadosView));
     }
 }
예제 #3
0
        /// <summary>
        /// Apenas para testes
        /// </summary>
        private static void TestarQueries()
        {
            var processosAtualizados = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            using (var contexto = new ProcessoContext())
            {
                var serviceProvider = contexto.GetInfrastructure <IServiceProvider>();
                var loggerFactory   = serviceProvider.GetService <ILoggerFactory>();
                loggerFactory.AddProvider(new MyFilteredLoggerProvider());

                var interessados = contexto.Processos
                                   .Where(p => processosAtualizados.Contains(p.Id))
                                   .SelectMany(p => p.Interesses)
                                   .Select(i => i.Interessado)
                                   .Distinct()
                                   .ToList(); //para executar logo a consulta

                foreach (var interessado in interessados)
                {
                    var processos = contexto.Interessados
                                    .Where(i => i.Id == interessado.Id)
                                    .SelectMany(i => i.Interesses)
                                    .Select(ip => ip.Processo)
                                    .Distinct();

                    var corpoMensagem = "Os seguintes processos foram atualizados:";
                    foreach (var p in processos)
                    {
                        corpoMensagem += "\n\r" + p.ToString();
                    }

                    System.Console.WriteLine(corpoMensagem);
                }
            }
        }
예제 #4
0
        public ActionResult AcompanharProcesso(int processoId, string nome, string email)
        {
            using (var contexto = new ProcessoContext())
            {
                //verificar se o interesse já foi registrado
                var processo = contexto.Processos
                               .Where(p => p.Id == processoId)
                               .Include(p => p.Interesses)
                               .ThenInclude(i => i.Interessado)
                               .Single();

                if (processo.Interesses.Where(i => i.Interessado.Email == email).Count() > 0)
                {
                    ViewBag.MensagemDeAcompanhamentoJaRealizado = "Você já está acompanhando esse processo.";
                    var model = new HomeViewModel(processoId);
                    return(View("Index", model));
                }

                var interessado = contexto
                                  .Interessados
                                  .Where(i => i.Email == email)
                                  .FirstOrDefault();
                if (interessado == null)
                {
                    interessado = new Interessado {
                        Nome = nome, Email = email
                    };
                }
                interessado.RegistraInteresse(processo);
                contexto.SaveChanges();
                return(RedirectToAction("Index"));
            }
        }
예제 #5
0
 public static void CriarBancoDeDados()
 {
     using (var context = new ProcessoContext())
     {
         context.Database.EnsureCreated();
         context.SaveChanges();
     }
 }
 public static void ArmazenarProcesso(Processo newProcessDB)
 {
     using (var context = new ProcessoContext())
     {
         context.Add(newProcessDB);
         context.SaveChanges();
     }
 }
예제 #7
0
 public ActionResult ExcluirProcesso(int id)
 {
     using (var contexto = new ProcessoContext())
     {
         var processo = contexto.Processos.Find(id);
         contexto.Processos.Remove(processo);
         contexto.SaveChanges();
         return(RedirectToAction("Index"));
     }
 }
예제 #8
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            using (var contexto = new ProcessoContext())
            {
                contexto.Database.Migrate();
            }
        }
예제 #9
0
        private async Task VerificaAtualizacoes()
        {
            Trace.TraceInformation("Iniciando a verificação de novas tramitações.");
            EnviarEmailAdministrativo("Iniciando a verificação de novas tramitações.");

            var processosAtualizados = new List <Processo>();

            using (var servico = new MateriasService())
            {
                foreach (var processo in servico.ProcessosMonitorados)
                {
                    EnviarEmailAdministrativo($"Verificando atualizações para o processo {processo}...");
                    //consulta o web service para recuperar as tramitações da matéria:
                    var movimentacao = await servico.TramitacoesDaMateria(processo.Codigo);

                    //recupera a data mais recente de tramitação:
                    var dataUltimaTramitacao = movimentacao.Materia.Tramitacoes
                                               .OrderByDescending(t => t.Identificacao.Data)
                                               .Select(t => t.Identificacao.Data)
                                               .First();
                    if (dataUltimaTramitacao.CompareTo(processo.DataUltimaAtualizacao) > 0)
                    {
                        string mensagem = $"Processo {processo} teve atualizações!";
                        Trace.TraceInformation(mensagem);
                        EnviarEmailAdministrativo(mensagem);

                        processo.DataUltimaAtualizacao = dataUltimaTramitacao;
                        processosAtualizados.Add(processo);
                    }
                }
            }

            if (processosAtualizados.Count > 0)
            {
                using (var contexto = new ProcessoContext())
                {
                    try
                    {
                        contexto.Processos.UpdateRange(processosAtualizados);
                        contexto.SaveChanges();
                        EnviarEmailAtualizacao(processosAtualizados.Select(p => p.Id));
                    } catch (Exception e)
                    {
                        EnviarEmailAdministrativo($"Ocorreu um erro: {e.Message}\r\nInner Exception: {e.InnerException.Message}\r\n{e.StackTrace}");
                    }
                }
            }
            else
            {
                EnviarEmailAdministrativo("Não houveram novas tramitações para os processos monitorados.");
            }
        }
예제 #10
0
        // = new List<Processo>
        //{
        //    new Processo  { Sigla =  "PDS", Numero = 16, Ano = 1984 },
        //    new Processo  { Sigla =  "PLS", Numero = 193, Ano = 2013 },
        //    new Processo  { Sigla =  "PLC", Numero = 70, Ano = 2013 },
        //    new Processo  { Sigla =  "PLS", Numero = 16, Ano = 2014 },
        //    new Processo  { Sigla =  "PLS", Numero = 5, Ano = 2015 },
        //    new Processo  { Sigla =  "PLS", Numero = 398, Ano = 2015 },
        //    new Processo  { Sigla =  "PLS", Numero = 410, Ano = 2016 },
        //    new Processo  { Sigla =  "PLS", Numero = 462, Ano = 2016 },
        //    new Processo  { Sigla =  "PLC", Numero = 10, Ano = 2017 },
        //};
        //this.MonitoradosDaCamara = new List<Processo>
        //{
        //    new Processo  { Sigla =  "PL", Numero = 7171, Ano = 2017 },
        //    new Processo  { Sigla =  "PL", Numero = 2546, Ano = 2015 },
        //    new Processo  { Sigla =  "PLC", Numero = 10, Ano = 2017 },
        //    new Processo  { Sigla =  "PL", Numero = 7936, Ano = 1986 },
        //    new Processo  { Sigla =  "PL", Numero = 3890, Ano = 1989 },
        //    new Processo  { Sigla =  "PL", Numero = 2904, Ano = 1992 },
        //    new Processo  { Sigla =  "PL", Numero = 2579, Ano = 1992 },
        //    new Processo  { Sigla =  "PL", Numero = 3925, Ano = 1997 },
        //    new Processo  { Sigla =  "PL", Numero = 4150, Ano = 1998 },
        //    new Processo  { Sigla = "PL", Numero = 6671, Ano = 2002},
        //    new Processo  { Sigla =  "PL", Numero = 880, Ano = 2003 },
        //    new Processo  { Sigla =  "PL", Numero = 1058, Ano = 2003 },
        //    new Processo  { Sigla =  "PL", Numero = 6542, Ano = 2006 },
        //    new Processo  { Sigla =  "PL", Numero = 600, Ano = 2011 },
        //    new Processo  { Sigla =  "PL", Numero = 1004, Ano = 2011 },
        //    new Processo  { Sigla =  "PL", Numero = 4843, Ano = 2012 },
        //    new Processo  { Sigla =  "PL", Numero = 5680, Ano = 2013 },
        //    new Processo  { Sigla =  "PL", Numero = 1206, Ano = 2015 },
        //    new Processo  { Sigla =  "PL", Numero = 1944, Ano = 2015 },
        //    new Processo  { Sigla =  "PL", Numero = 2546, Ano = 2015 },
        //    new Processo  { Sigla =  "PL", Numero = 2668, Ano = 2015 },
        //    new Processo  { Sigla =  "PL", Numero = 3427, Ano = 2015 },
        //    new Processo  { Sigla =  "PL", Numero = 3568, Ano = 2015 },
        //    new Processo  { Sigla =  "PL", Numero = 4793, Ano = 2016 },
        //    new Processo  { Sigla =  "PL", Numero = 4819, Ano = 2016 },
        //    new Processo  { Sigla =  "PL", Numero = 5354, Ano = 2016 },
        //    new Processo  { Sigla =  "PL", Numero = 5364, Ano = 2016 },
        //    new Processo  { Sigla =  "PL", Numero = 7171, Ano = 2017 },
        //    new Processo  { Sigla =  "PEC", Numero = 29, Ano = 2003 },
        //    new Processo  { Sigla =  "PEC", Numero = 185, Ano = 2003 },
        //    new Processo  { Sigla =  "PEC", Numero = 314, Ano = 2004 },
        //    new Processo  { Sigla =  "PLP", Numero = 399, Ano = 2008 },
        //    new Processo  { Sigla =  "PLP", Numero = 448, Ano = 2014 },
        //    new Processo  { Sigla =  "PLP", Numero = 25, Ano = 2007 },
        //};

        public HomeViewModel(int processoSendoAcompanhado = 0)
        {
            using (var contexto = new ProcessoContext())
            {
                this.ProcessosMonitorados = contexto
                                            .Processos
                                            .OrderByDescending(p => p.DataUltimaAtualizacao)
                                            .Select(p => new ProcessoAcompanhado {
                    Processo             = p,
                    EstaSendoAcompanhado = (p.Id == processoSendoAcompanhado)
                })
                                            .ToList();
            }
        }
예제 #11
0
        public ActionResult AtualizaDataDoProcesso(int id)
        {
            var novaData = new DateTime(2000, 1, 1);

            Trace.TraceInformation($"Atrasando data do processo {id}...");
            using (var ctx = new ProcessoContext())
            {
                var processo = ctx.Processos.Find(id);
                if (processo != null)
                {
                    processo.DataUltimaAtualizacao = novaData;
                    ctx.Processos.Update(processo);
                    ctx.SaveChanges();
                }
            }
            return(RedirectToAction("Index"));
        }
예제 #12
0
        private async Task VerificaAtualizacoes()
        {
            var processosAtualizados = new List <Processo>();

            using (var servico = new MateriasService())
            {
                foreach (var processo in servico.ProcessosMonitorados)
                {
                    //consulta o web service para recuperar as tramitações da matéria:
                    var movimentacao = await servico.TramitacoesDaMateria(processo.Codigo);

                    //recupera a data mais recente de tramitação:
                    var dataUltimaTramitacao = movimentacao.Materia.Tramitacoes
                                               .OrderByDescending(t => t.Identificacao.Data)
                                               .Select(t => t.Identificacao.Data)
                                               .First();
                    if (dataUltimaTramitacao.CompareTo(processo.DataUltimaAtualizacao) > 0)
                    {
                        Trace.TraceInformation($"Processo {processo} teve atualizações.");
                        processo.DataUltimaAtualizacao = dataUltimaTramitacao;
                        processosAtualizados.Add(processo);
                    }
                }
            }

            if (processosAtualizados.Count > 0)
            {
                using (var contexto = new ProcessoContext())
                {
                    Trace.TraceInformation("Persistindo processos atualizados.");
                    contexto.Processos.AddRange(processosAtualizados);
                    contexto.SaveChanges();
                }

                EnviarEmailAtualizacao(processosAtualizados.Select(p => p.Id));
            }
            else
            {
                EnviarEmailAdministrativo();
            }
        }
예제 #13
0
        private void EnviarEmailAtualizacao(IEnumerable <int> processosAtualizados)
        {
            //Trace.TraceInformation("Entrada no método ")
            EnviarEmailAdministrativo("Entrada no método EnviarEmailAtualização.");
            using (var contexto = new ProcessoContext())
            {
                var interessados = contexto.Processos
                                   .Where(p => processosAtualizados.Contains(p.Id))
                                   .SelectMany(p => p.Interesses)
                                   .Select(i => i.Interessado)
                                   .Distinct()
                                   .ToList();

                EnviarEmailAdministrativo($"Total de interessados encontrados: {interessados.Count}.");

                foreach (var interessado in interessados)
                {
                    var processos = contexto.Interessados
                                    .Where(i => i.Id == interessado.Id)
                                    .SelectMany(i => i.Interesses)
                                    .Select(ip => ip.Processo)
                                    .Where(p => processosAtualizados.Contains(p.Id))
                                    .Distinct();

                    EnviarEmailAdministrativo($"Total de processos encontrados para o processo: {processos.Count()}.");

                    var corpoMensagem = $"Olá, {interessado.Nome}\n\r";
                    corpoMensagem += "Dos processos que você está acompanhando, os seguintes foram atualizados:";
                    foreach (var p in processos)
                    {
                        corpoMensagem += "\n\r" + p.ToString();
                    }

                    EnviarEmail(interessado.Email, "[Consulta Processos] Notificação de processos atualizados", corpoMensagem);
                    EnviarEmail("*****@*****.**", "[Consulta Processos] Notificação de processos atualizados", corpoMensagem);
                    EnviarEmail("*****@*****.**", "[Consulta Processos] Notificação de processos atualizados", corpoMensagem);
                }
            }
        }
예제 #14
0
        static void Main(string[] args)
        {
            //garante que o banco de dados estará atualizado para as versões mais recentes
            using (var contexto = new ProcessoContext())
            {
                Trace.TraceInformation("Atualizando banco de dados se necessário...");
                contexto.Database.Migrate();
            }

            //a cada x tempo, consultar a web para verificar se existem atualizações
            var schedulerFactory = new StdSchedulerFactory();
            var scheduler        = schedulerFactory.GetScheduler();

            scheduler.Start();

            var job = JobBuilder.Create <VerificadorDeAtualizacoesNoProcessoJob>().Build();

            var trigger = TriggerBuilder.Create()
                          .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())
                          .Build();

            scheduler.ScheduleJob(job, trigger);
        }
예제 #15
0
        public async Task <ActionResult> CadastrarProcesso(Processo processo)
        {
            if (ModelState.IsValid)
            {
                using (var contexto = new ProcessoContext())
                    using (var servico = new MateriasService())
                    {
                        Materia materia = await servico.RecuperarMateriaPeloCodigo(processo);

                        processo.Sigla  = processo.Sigla.ToUpper();
                        processo.Emenda = materia.DadosBasicos.Ementa;
                        processo.Codigo = materia.Identificacao.Codigo;
                        processo.Origem = OrigemProcesso.Senado;
                        processo.DataUltimaAtualizacao = materia.Tramitacoes
                                                         .OrderByDescending(t => t.Identificacao.Data)
                                                         .Select(t => t.Identificacao.Data)
                                                         .First();
                        contexto.Processos.Add(processo);
                        contexto.SaveChanges();
                        return(RedirectToAction("Index"));
                    }
            }
            return(View("Index", new HomeViewModel()));
        }
예제 #16
0
        /// <summary>
        /// Apenas para testes
        /// </summary>
        private static void CadastrarInteressados()
        {
            using (var contexto = new ProcessoContext())
            {
                var serviceProvider = contexto.GetInfrastructure <IServiceProvider>();
                var loggerFactory   = serviceProvider.GetService <ILoggerFactory>();
                loggerFactory.AddProvider(new MyFilteredLoggerProvider());

                var processosMonitorados = contexto.Processos;
                var daniel = new Interessado()
                {
                    Nome = "Daniel Portugal", Email = "*****@*****.**"
                };
                var marcia = new Interessado()
                {
                    Nome = "Marcia Garcia", Email = "*****@*****.**"
                };

                daniel.RegistraInteresse(processosMonitorados);
                marcia.RegistraInteresse(processosMonitorados);

                contexto.SaveChanges();
            }
        }
 public MateriasService()
 {
     this.contexto = new ProcessoContext();
 }