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)); } }
/// <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); } } }
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")); } }
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(); } }
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")); } }
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(); } }
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."); } }
// = 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(); } }
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")); }
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(); } }
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); } } }
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); }
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())); }
/// <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(); }