public async Task NotificarCarga() { try { DateTime fechaActual = DateTimeHelper.OntenerFechaActual(); if (fechaActual.Day >= 1) { Dictionary <Persona, IList <Indicador> > avisos = new Dictionary <Persona, IList <Indicador> >(); int anio = fechaActual.Year; int mes = fechaActual.Month; if (mes == 1) { anio -= 1; mes = 12; } else { mes -= 1; } IList <Indicador> indicadores = await IndicadorRepository.Buscar(new BuscarIndicadorViewModel { AnioTablero = anio }).ToListAsync(); IList <IndicadorAutomaticoViewModel> todosIndicadoresAutomaticos = this.IndicadorAutomaticoService.Todos(); foreach (Indicador indicador in indicadores) { if (!todosIndicadoresAutomaticos.Any(ia => ia.IndicadorViewModel.Grupo == indicador.Grupo) && (indicador.FechaFinValidez == null || indicador.FechaFinValidez.Value.Month >= mes) && (indicador.FechaInicioValidez == null || indicador.FechaInicioValidez.Value.Month <= mes)) { List <Medicion> mediciones = await MedicionRepository.Buscar(new MedicionViewModel { Grupo = indicador.Grupo, Anio = anio, Mes = EnumHelper <Enums.Enum.Mes> .Parse(mes.ToString()) }).ToListAsync(); if (mediciones == null || mediciones.Count == 0) { IList <Persona> personasAAvisar = new List <Persona>(); personasAAvisar = personasAAvisar.Union(indicador.Responsables.Select(i => i.Persona).ToList()).ToList(); personasAAvisar = personasAAvisar.Union(await PersonaRepository.Buscar(new PersonaViewModel { EsUsuario = true, AreaViewModel = new AreaViewModel { Id = indicador.Objetivo.AreaID } }).ToListAsync()).ToList(); personasAAvisar = personasAAvisar.Distinct(new PersonaComparer()).ToList(); foreach (Persona personaAAvisar in personasAAvisar) { if (avisos.ContainsKey(personaAAvisar)) { avisos[personaAAvisar].Add(indicador); } else { IList <Indicador> indicadorAviso = new List <Indicador>(); indicadorAviso.Add(indicador); avisos.Add(personaAAvisar, indicadorAviso); } } } } } IMailStrategy mailStrategy = ObtenerMailStrategy(); foreach (Persona persona in avisos.Keys) { DataTable tabla = new DataTable(); tabla.Columns.Add("Área", typeof(string)); tabla.Columns.Add("Indicador", typeof(string)); tabla.Columns.Add("Mes", typeof(string)); foreach (Indicador indicador in avisos[persona]) { tabla.Rows.Add(indicador.Objetivo.Area.Nombre, indicador.Nombre, EnumHelper <Enums.Enum.Mes> .Parse(mes.ToString()).ToString()); } try { string cuerpoMail = CrearTablaHtmlCargaMediciones(tabla, persona.NombreApellido).ToString(); await mailStrategy.EnviarCorreo(persona.Email, "[Y U T P L A T] Indicadores incompletos", cuerpoMail); } catch (Exception ex) { LogHelper.LogException(ex); } } } } catch (Exception ex) { LogHelper.LogException(ex); } }
public async Task NotificarMetas() { try { if (DateTimeHelper.OntenerFechaActual().Day >= 10) { List <Medicion> mediciones = await MedicionRepository.Buscar(new MedicionViewModel { SeDebeNotificar = true }).ToListAsync(); if (mediciones != null && mediciones.Count > 0) { IList <Persona> personasAAvisar = new List <Persona>(); DataTable tabla = new DataTable(); tabla.Columns.Add("Área", typeof(string)); tabla.Columns.Add("Indicador", typeof(string)); tabla.Columns.Add("Mes", typeof(string)); tabla.Columns.Add("Valor", typeof(string)); tabla.Columns.Add("Comentario", typeof(string)); foreach (Medicion medicion in mediciones) { personasAAvisar = personasAAvisar.Union(medicion.Indicador.Interesados.Select(i => i.Persona).ToList()).ToList(); personasAAvisar = personasAAvisar.Union(medicion.Indicador.Responsables.Select(i => i.Persona).ToList()).ToList(); personasAAvisar = personasAAvisar.Union(await PersonaRepository.Buscar(new PersonaViewModel { EsUsuario = true, AreaViewModel = new AreaViewModel { Id = medicion.Indicador.Objetivo.AreaID } }).ToListAsync()).ToList(); tabla.Rows.Add(medicion.Indicador.Objetivo.Area.Nombre, medicion.Indicador.Nombre, medicion.Mes.ToString(), medicion.Valor.ToString(), (medicion.Comentario == null ? "" : medicion.Comentario)); } personasAAvisar = personasAAvisar.Distinct(new PersonaComparer()).ToList(); IMailStrategy mailStrategy = ObtenerMailStrategy(); foreach (Persona persona in personasAAvisar) { try { string cuerpoMail = CrearTablaHtmlMedicionesInaceptables(tabla, persona.NombreApellido).ToString(); await mailStrategy.EnviarCorreo(persona.Email, "[Y U T P L A T] Indicadores no satisfactorios", cuerpoMail); } catch (Exception ex) { LogHelper.LogException(ex); } } foreach (Medicion medicion in mediciones) { medicion.SeDebeNotificar = false; await MedicionRepository.Guardar(medicion); } } } } catch (Exception ex) { LogHelper.LogException(ex); } }