Exemple #1
0
        private void CambiarReporte(TipoDeReporte e)
        {
            switch (e)
            {
            case TipoDeReporte.Fechas:
                stkFechas.Visibility        = Visibility;
                stkMensual.Visibility       = Visibility.Collapsed;
                dgReportes.Visibility       = Visibility.Visible;
                dgReporteCliente.Visibility = Visibility.Collapsed;

                //actual = 1;
                break;

            //case TipoDeReporte.Mensual:
            //    stkFechas.Visibility = Visibility.Collapsed;
            //    stkMensual.Visibility = Visibility.Visible;
            //    break;

            case TipoDeReporte.Clientes:
                dgReportes.Visibility       = Visibility.Collapsed;
                dgReporteCliente.Visibility = Visibility.Visible;

                var registros = da.GenerarReporte((int)TipoDeReporte.Clientes);
                dgReporteCliente.ItemsSource = registros;
                SetTotal(registros);
                //actual = 2;

                break;

            default:
                break;
            }
        }
        public EmailMessage GenerarCorreoSemanalDeFaltaDeAsistenciasPorRed(DateTime fechaInicial, Miembro miembro, TipoDeReporte tipoDeReporte, string tituloDelReporte)
        {
            if (miembro.Borrado == false)
            {
                Validaciones.ValidarEmail(miembro.Email);
                DateTime fechaFinal = fechaInicial.AddDays(7);

                bool esReporteDeRed;
                bool agregarCorreosDeLideres;

                //Determinamos el tipo de reporte a enviar
                switch (tipoDeReporte)
                {
                case TipoDeReporte.SimpleConCorreos:
                    esReporteDeRed          = false;
                    agregarCorreosDeLideres = true;
                    break;

                case TipoDeReporte.DetalladaConCorreos:
                    esReporteDeRed          = true;
                    agregarCorreosDeLideres = true;
                    break;

                case TipoDeReporte.SimpleSinCorreos:
                    esReporteDeRed          = false;
                    agregarCorreosDeLideres = false;
                    break;

                case TipoDeReporte.DetalladaSinCorreos:
                    esReporteDeRed          = true;
                    agregarCorreosDeLideres = false;
                    break;

                default:
                    throw new ExcepcionReglaNegocio("Tipo de reporte NO MANEJADO. Favor de contactar al administrador del sistema. Tipo de Reporte: " + tipoDeReporte);
                }

                //Buscamos todas las celulas en las que el miembro de la inscripcion es lider directo
                List <int> celulasALasQueEsLider = (from o in miembro.CelulaLider
                                                    where
                                                    o.Celula.Borrado == false &&
                                                    o.Borrado == false
                                                    orderby o.Celula.Descripcion
                                                    select o.CelulaId).ToList <int>();

                //Esta variable determina si alguna de las celulas a las que el usuario es lider carece de asistencia, de ser asi SI se envia el correo
                bool tieneCelulasSinAsistencia = false;

                //Mandamos el correo, solo si el miembro es lider de alguna celula; sino el correo iria vacio
                if (celulasALasQueEsLider.Count > 0)
                {
                    EmailMessage  email     = new EmailMessage();
                    StringBuilder contenido = new StringBuilder(750);

                    //Inicializamos el contenido del correo
                    contenido.Append(string.Format("<h3>{0}</h3>", tituloDelReporte));
                    contenido.Append("<p>A continuacion se mostraran las faltas de registro de asistencia, separadas por redes, de las cuales el usuario es lider directo. Las siguientes celulas aun no han registrado asistencias en la semana anterior inmediata:</p>");

                    //Por cada celular que sea lider directo se va a buscar la asistencia de sus "celulas" de primer orden o TODA la red, dependiendo del tipo de reporte
                    foreach (int celulaId in celulasALasQueEsLider)
                    {
                        //El listado de celulas sin asistencia es por RED; asi que se reinicia por cada celula a la que el miembro es lider directo
                        List <int> celulasSinAsistenciaRegistrada = new List <int>();

                        Modelos.Retornos.ReporteDeAsistenciasDeCelulaSumarizado reporteDeAsistencias = this.ObtenerReporteDeAsistenciasPorCelula(celulaId, fechaInicial, fechaFinal, esReporteDeRed);
                        foreach (Modelos.Retornos.ReporteDeAsistenciasDeCelulaSumarizado.AsistenciaDeCelula asistenciasPorCelula in reporteDeAsistencias.AsistenciasTotales.OrderBy(o => o.Descripcion))
                        {
                            if (asistenciasPorCelula.CelulaId > 0)
                            {
                                foreach (Modelos.Retornos.ReporteDeAsistenciasDeCelulaSumarizado.Asistencia asistencia in asistenciasPorCelula.Asistencias)
                                {
                                    if ((asistencia.Asistencias <= 0) && (asistencia.Cancelaciones <= 0))
                                    {
                                        celulasSinAsistenciaRegistrada.Add(asistenciasPorCelula.CelulaId);
                                    }
                                }
                            }
                        }

                        //Marcamos que SI existe cuando menos una celula a quien reportarle la falta de asistencia
                        if (celulasSinAsistenciaRegistrada.Count > 0)
                        {
                            tieneCelulasSinAsistencia = true;
                        }

                        contenido.Append("<br/><table border='1' width='500px'>");
                        contenido.AppendFormat("<tr><th>{0}</th><th>{1}</th></tr>", "Id", "Descripcion");

                        foreach (int c in celulasSinAsistenciaRegistrada)
                        {
                            Celula celula = (from o in contexto.Celula where o.CelulaId == c && o.Borrado == false select o).SingleOrDefault();
                            if (celula != null)
                            {
                                if (agregarCorreosDeLideres)
                                {
                                    foreach (CelulaLider celulaLider in celula.CelulaLider.Where(o => o.Celula.Borrado == false && o.Miembro.Borrado == false && o.Borrado == false))
                                    {
                                        // Solo agregamos al correo los usuarios con correos NO falsos... y que no sea el usuario principal a quien se mandara el reporte
                                        if ((!celulaLider.Miembro.Email.Trim().ToLower().EndsWith("correo-e.com")) && (celulaLider.MiembroId != miembro.MiembroId))
                                        {
                                            email.Recipients.Add(celulaLider.Miembro.Email, celulaLider.Miembro.NombreCompleto, RecipientType.CC);
                                        }
                                    }
                                }

                                contenido.AppendFormat("<tr><td>{0}</td><td>{1}</td></tr>", celula.CelulaId, celula.Descripcion);
                            }
                        }
                        contenido.Append("</table>");
                    }

                    if (tieneCelulasSinAsistencia)
                    {
                        //Preparamos los ultimos detalles del correo a enviar
                        email.BodyParts.Add(contenido.ToString(), BodyPartFormat.HTML);
                        email.Recipients.Add(miembro.Email, miembro.NombreCompleto, RecipientType.To);
                        email.Subject = tituloDelReporte;
                        return(email);
                    }
                    else
                    {
                        email.Reset();
                        return(null);
                    }
                }
            }

            return(null);
        }