Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
            }
        }