private void cargarAsistencias(Miembro miembro)
        {
            ManejadorDeReportesDeAsistencias manejadorDeReportesDeAsistencia = new ManejadorDeReportesDeAsistencias();
            ManejadorDeAsistenciasDeCelula   manejadorDeAsistenciasDeCelula  = new ManejadorDeAsistenciasDeCelula();

            registroUltimaAsistencia.Text = manejadorDeAsistenciasDeCelula.ObtenerUltimaAsistenciaPorMiembro(miembro.MiembroId).ToFullDateString();
            X.Call("crearGraficasDeAsistencias", manejadorDeReportesDeAsistencia.ObtenerReporteDeAsistenciasPorMiembro(miembro.CelulaId, miembro.MiembroId, DateTime.Now, true).ToJson(), miembro.Email);
        }
        public string ObtenerInformacionGeneralPorRed()
        {
            int celulaSeleccionada;

            if (int.TryParse(cboCelula.SelectedItem.Value, out celulaSeleccionada) && dtpFechaInicial.SelectedDate.Year > 1900 && dtpFechaFinal.SelectedDate.Year > 1900)
            {
                ManejadorDeReportesDeAsistencias manejador = new ManejadorDeReportesDeAsistencias();
                return(manejador.ObtenerInformacionGeneralPorRed(celulaSeleccionada).ToJson());
            }
            else
            {
                X.Msg.Alert(Generales.nickNameDeLaApp, Resources.Literales.CelulaYFechaNecesarias).Show();
                return(string.Empty);
            }
        }
        public static string ObtenerReporteDeAsistencias(int celulaId, string sFechaInicial, string sFechaFinal)
        {
            DateTime fechaInicial;
            DateTime fechaFinal;

            if (DateTime.TryParse(sFechaInicial, out fechaInicial) == false || DateTime.TryParse(sFechaFinal, out fechaFinal) == false)
            {
                fechaInicial = DateTime.MinValue;
                fechaFinal   = DateTime.MinValue;
            }

            if ((celulaId > 0) && (fechaInicial.Year > 1900 && fechaFinal.Year > 1900))
            {
                ManejadorDeReportesDeAsistencias manejador = new ManejadorDeReportesDeAsistencias();
                return(manejador.ObtenerReporteDeAsistenciasPorCelula(celulaId, fechaInicial, fechaFinal, false).ToJson());
            }
            else
            {
                X.Msg.Alert(Generales.nickNameDeLaApp, Resources.Literales.CelulaYFechaNecesarias).Show();
                return(string.Empty);
            }
        }
        public void GenerarReporte()
        {
            try
            {
                Miembro miembro = ManejadorDeMiembros.ObtenerMiembroActual();

                ManejadorDeReportesDeAsistencias manejador = new ManejadorDeReportesDeAsistencias();
                DateTime     fechaInicial = DateTime.Now.GetFirstDateOfWeek().AddDays(-7);
                EmailMessage mensaje      = manejador.GenerarCorreoSemanalDeFaltaDeAsistenciasPorRed(fechaInicial, miembro, (ManejadorDeReportesDeAsistencias.TipoDeReporte)cboTipoDeReporteGenerado.ObtenerId(), string.Empty);

                if (mensaje != null)
                {
                    string        destinatario    = string.Empty;
                    List <string> destinatariosCC = new List <string>();
                    foreach (Recipient recipient in mensaje.Recipients)
                    {
                        if (recipient.Type == RecipientType.To)
                        {
                            destinatario = recipient.Email;
                        }
                        else
                        {
                            destinatariosCC.Add(recipient.Email);
                        }
                    }

                    pnlHtml.Html = "Para: " + destinatario + "<br/>CC: " + string.Join(",", destinatariosCC) + "<br/><hr/>" + ((BodyPart)mensaje.BodyParts.GetLastItem()).Body;
                }
                else
                {
                    pnlHtml.Html = "Todas las células han registrado sus asistencias correspondientes.";
                }
            }
            catch (ExcepcionAplicacion ex)
            {
                X.Msg.Alert(Generales.nickNameDeLaApp, ex.Message).Show();
            }
        }
        public void Execute(IJobExecutionContext context)
        {
            log.Debug("Iniciando NotificacionDeFaltaDeRegistroDeAsistencia");

            IglesiaEntities contexto = new IglesiaEntities();
            ManejadorDeReportesDeAsistencias manejadorDeAsistencias = new ManejadorDeReportesDeAsistencias();
            ManejadorDeCorreos manejadorDeCorreos = new ManejadorDeCorreos();
            DateTime           fecha        = DateTime.Now;
            DateTime           fechaInicial = fecha.GetFirstDateOfWeek().AddDays(-7);
            int    semanaActual             = fecha.GetWeekNumber();
            string tituloDelReporte         = string.Format("Asistencias de Celula NO REGISTRADAS de la semana {0} ({2} a {3})", semanaActual, fecha.Year, fechaInicial.ToString("dd/MMM/yy"), fechaInicial.AddDays(7).ToString("dd/MMM/yy"));

            //Obtenemos todos los miembros inscritos a este reporte
            List <int> inscripcionesANotificar = (from inscripciones in contexto.NotificacionDeAsistenciaInscripcion
                                                  join logs in contexto.NotificacionDeAsistenciaLog on
                                                  inscripciones.Id equals logs.NotificacionDeAsistenciaId into ps
                                                  from logs in ps.DefaultIfEmpty()
                                                  where
                                                  inscripciones.Borrado == false &&
                                                  inscripciones.Miembro.Borrado == false &&
                                                  (logs.Semana != semanaActual || logs == null) &&
                                                  (((inscripciones.DiaSemanaId == (int)fecha.DayOfWeek) && ((inscripciones.HoraDiaId / 2) - .5 <= fecha.Hour)) || // Si es el mismo dia de la inscripcion valida la hora actual contra la de la inscripcion
                                                   ((int)fecha.DayOfWeek > inscripciones.DiaSemanaId))                                                            // Si ya se paso del dia de la inscipcion se manda la notificacion sin importar la hora
                                                  select inscripciones.Id).ToList <int>();

            NotificacionDeAsistenciaInscripcion notificacionInscripcion;

            if (inscripcionesANotificar.Count > 0)
            {
                log.Debug(String.Format("{0} miembros inscritos a notificaciones", inscripcionesANotificar.Count));
                foreach (int inscripcionId in inscripcionesANotificar)
                {
                    // Obtenemos el miembro suscrito y su email
                    notificacionInscripcion = (from o in contexto.NotificacionDeAsistenciaInscripcion where o.Id == inscripcionId select o).SingleOrDefault();

                    // Se mandara un correo unico por miembro; incluyendo toda la info de todas las celulas a las que es lider directo
                    EmailMessage email = manejadorDeAsistencias.GenerarCorreoSemanalDeFaltaDeAsistenciasPorRed(fechaInicial, notificacionInscripcion.Miembro, (ManejadorDeReportesDeAsistencias.TipoDeReporte)notificacionInscripcion.TipoId, tituloDelReporte);

                    // Mandaremos el correo, unicamente si se genero. Si no tenia faltas de asistencias NO se manda correo.
                    if (email != null)
                    {
                        Action generarLog = delegate()
                        {
                            // Actualizamos o creamos el log; para guardar cuando fue la ultima vez que se proceso dicha inscripcion y no volverla a procesar hasta dentro de una semana
                            NotificacionDeAsistenciaLog notificacionLog = (from o in contexto.NotificacionDeAsistenciaLog where o.NotificacionDeAsistenciaId == inscripcionId select o).SingleOrDefault();

                            if (notificacionLog == null)
                            {
                                notificacionLog = new NotificacionDeAsistenciaLog();
                            }

                            notificacionLog.NotificacionDeAsistenciaId = inscripcionId;
                            notificacionLog.Semana = semanaActual;
                            notificacionLog.Guardar(contexto);

                            log.InfoFormat("Log de notificacion generado correctamente para: {0}", notificacionLog.NotificacionDeAsistenciaInscripcion.Miembro.Email);
                        };

                        log.Debug(String.Format("Al usuario {0} se le notificara de las celulas con falta de registro de asistencia", notificacionInscripcion.Miembro.NombreCompleto));

                        // Enviamos el correo
                        manejadorDeCorreos.EnviarCorreoAsync(email, generarLog);
                    }
                }
            }

            log.Debug("Finalizando NotificacionDeFaltaDeRegistroDeAsistencia");
        }