public void ProbarCorreoAsync(string remitente, string servidorSmtp, string contenido, string asunto, string destinatario) { EmailMessage email = new EmailMessage(destinatario, remitente, asunto, contenido, BodyPartFormat.Plain); Action generarLog = delegate() { log.InfoFormat("El callback dormira 5sec"); System.Threading.Thread.Sleep(5000); log.InfoFormat("El callback desperto"); IglesiaEntities contexto = new IglesiaEntities(); // 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 == -1 select o).SingleOrDefault(); if (notificacionLog == null) { notificacionLog = new NotificacionDeAsistenciaLog(); } notificacionLog.NotificacionDeAsistenciaId = -1; notificacionLog.Semana = -1; notificacionLog.Guardar(contexto); }; // Enviamos el correo this.EnviarCorreoAsync(email, generarLog); }
public Modelos.Retornos.AsistenciaDeCelulaPorMiembroSumarizada ObtenerAsistencia(int celulaId, DateTime fecha) { int anioSeleccionado = fecha.Year; int mesSeleccionado = fecha.Month; int diaSeleccionado = fecha.Day; IglesiaEntities contexto = new IglesiaEntities(); List <Modelos.Retornos.AsistenciaDeCelulaPorMiembro> asistencias = ( from m in contexto.Miembro join a in contexto.CelulaMiembroAsistencia on new { MiembroId = m.MiembroId, Anio = anioSeleccionado, Mes = mesSeleccionado, Dia = diaSeleccionado } equals new { MiembroId = a.MiembroId, Anio = a.Anio, Mes = a.Mes, Dia = a.Dia } into ps from a in ps.DefaultIfEmpty() where m.CelulaId == celulaId && m.Borrado == false orderby m.Primer_Nombre ascending, m.Apellido_Paterno ascending select new Modelos.Retornos.AsistenciaDeCelulaPorMiembro { Id = (a.CelulaMiembroAsistenciaId != null ? a.CelulaMiembroAsistenciaId : -1), MiembroId = m.MiembroId, PrimerNombre = m.Primer_Nombre, SegundoNombre = m.Segundo_Nombre, ApellidoPaterno = m.Apellido_Paterno, ApellidoMaterno = m.Apellido_Materno, Asistencia = (a.CelulaMiembroAsistenciaId != null ? true : false), Estatus = (from o in contexto.ConsolidacionBoleta where o.Email == m.Email select o.Email).Any() && !(from o in contexto.CelulaMiembroAsistencia where o.CelulaId == celulaId && o.MiembroId == m.MiembroId select o.MiembroId).Any() ? "Consolidacion" : (from o in contexto.CelulaMiembroAsistencia where o.CelulaId == celulaId && o.MiembroId == m.MiembroId select o.MiembroId).Count() < 4 ? "Nuevo" : null, Peticiones = a.Peticiones }).ToList <Modelos.Retornos.AsistenciaDeCelulaPorMiembro>(); Modelos.Retornos.AsistenciaDeCelulaPorMiembroSumarizada rtn = new Modelos.Retornos.AsistenciaDeCelulaPorMiembroSumarizada(); rtn.Asistencias = asistencias; rtn.CantidadDeRegistros = asistencias.Count(); rtn.CantidadDeAsistencias = asistencias.Count(o => o.Asistencia == true); return(rtn); }
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"); }
public void Execute(IJobExecutionContext context) { log.Debug("Iniciando NotificacionDeNuevasBoletasDeConsolidacion"); IglesiaEntities contexto = new IglesiaEntities(); #region Reporte de Nuevas Boletas asignadas a Miembro List <ConsolidacionBoleta> boletasParaMiembros = (from o in contexto.ConsolidacionBoleta where o.Modificacion >= DateTime.Today && o.AsignadaAMiembroId != null && o.Borrado == false select o).ToList <ConsolidacionBoleta>(); log.Debug(String.Format("{0} boletas ya asignadas a algun miembro modificadas hoy", boletasParaMiembros.Count)); Dictionary <Miembro, List <ConsolidacionBoleta> > boletasPorMiembro = new Dictionary <Miembro, List <ConsolidacionBoleta> >(); foreach (ConsolidacionBoleta boleta in boletasParaMiembros) { if (!boletasPorMiembro.ContainsKey(boleta.Miembro)) { boletasPorMiembro.Add(boleta.Miembro, new List <ConsolidacionBoleta>()); } boletasPorMiembro[boleta.Miembro].Add(boleta); } foreach (KeyValuePair <Miembro, List <ConsolidacionBoleta> > entry in boletasPorMiembro) { log.DebugFormat("Iniciando reporte de Nuevas Boletas de Consolidacion para (miembro): {0} - {1} boletas", entry.Key.NombreCompleto, entry.Value.Count); EmailMessage email = new EmailMessage(); // Contenido del correo StringBuilder contenido = new StringBuilder(750); contenido.AppendFormat("<h3>Reporte de Nuevas Boletas de Consolidacion para: {0}</h3>", entry.Key.NombreCompleto); contenido.AppendFormat("<p>A continuacion se mostraran las nuevas boletas de consolidacion:</p>"); contenido.AppendLine("<table border='1' width='800px'><thead><tr><td>Id</td><td>Nombre</td><td>Edad</td><td>Genero</td><td>Direccion</td><td>Telefonos</td><td>Email</td></tr></thead><tbody>"); foreach (ConsolidacionBoleta boleta in entry.Value) { contenido.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td></tr>", boleta.Id, boleta.PrimerNombre + " " + boleta.ApellidoPaterno, boleta.Edad, boleta.Genero.Descripcion, boleta.Direccion + ", " + boleta.UbicacionMunicipio.Descripcion + ", " + boleta.UbicacionMunicipio.UbicacionEstado.Descripcion, boleta.TelefonoCasa + "|" + boleta.TelefonoMovil + "|" + boleta.TelefonoTrabajo, boleta.Email); } contenido.AppendFormat("</tbody></table>"); email.BodyParts.Add(contenido.ToString(), BodyPartFormat.HTML); email.Recipients.Add(entry.Key.Email, entry.Key.NombreCompleto, RecipientType.To); email.Subject = "Nuevas Boletas de Consolidacion"; ManejadorDeCorreos manejadorDeCorreos = new ManejadorDeCorreos(); manejadorDeCorreos.EnviarCorreoAsync(email); } #endregion #region Reporte de Nuevas Boletas asignadas a Celula int estatus = ConsolidacionBoleta.Estatus.ASIGNADO_A_CELULA.Key; List <ConsolidacionBoleta> boletasParaCelulas = (from o in contexto.ConsolidacionBoleta where o.Modificacion >= DateTime.Today && o.AsignadaACelulaId != null && o.BoletaEstatusId == estatus && o.Borrado == false select o).ToList <ConsolidacionBoleta>(); log.Debug(String.Format("{0} boletas ya asignadas a alguna celula modificadas hoy", boletasParaCelulas.Count)); Dictionary <Celula, List <ConsolidacionBoleta> > boletasPorCelula = new Dictionary <Celula, List <ConsolidacionBoleta> >(); foreach (ConsolidacionBoleta boleta in boletasParaCelulas) { if (!boletasPorCelula.ContainsKey(boleta.Celula)) { boletasPorCelula.Add(boleta.Celula, new List <ConsolidacionBoleta>()); } boletasPorCelula[boleta.Celula].Add(boleta); } foreach (KeyValuePair <Celula, List <ConsolidacionBoleta> > entry in boletasPorCelula) { log.DebugFormat("Iniciando reporte de Nuevos Miembros asignados desde Consolidacion para (celula): {0} [{1}] - {2} boletas", entry.Key.Descripcion, entry.Key.CelulaId, entry.Value.Count); EmailMessage email = new EmailMessage(); // Contenido del correo StringBuilder contenido = new StringBuilder(750); contenido.AppendFormat("<h3>Reporte de Nuevos Miembros asignados desde Consolidacion para: {0}</h3>", entry.Key.Descripcion); contenido.AppendFormat("<p>A continuacion se mostraran los nuevos miembros asignados desde consolidacion:</p>"); contenido.AppendLine("<table border='1' width='800px'><thead><tr><td>Id</td><td>Nombre</td><td>Edad</td><td>Genero</td><td>Direccion</td><td>Telefonos</td><td>Email</td></tr></thead><tbody>"); foreach (ConsolidacionBoleta boleta in entry.Value) { contenido.AppendFormat("<tr><td>{0}</td><td>{1}</td><td>{2}</td><td>{3}</td><td>{4}</td><td>{5}</td><td>{6}</td></tr>", boleta.Id, boleta.PrimerNombre + " " + boleta.ApellidoPaterno, boleta.Edad, boleta.Genero.Descripcion, boleta.Direccion + ", " + boleta.UbicacionMunicipio.Descripcion + ", " + boleta.UbicacionMunicipio.UbicacionEstado.Descripcion, boleta.TelefonoCasa + "|" + boleta.TelefonoMovil + "|" + boleta.TelefonoTrabajo, boleta.Email); } contenido.AppendFormat("</tbody></table>"); email.BodyParts.Add(contenido.ToString(), BodyPartFormat.HTML); // Agregamos a todos los lideres de celula al correo foreach (CelulaLider celulaLider in entry.Key.CelulaLider.Where(x => x.Borrado == false)) { email.Recipients.Add(celulaLider.Miembro.Email, celulaLider.Miembro.NombreCompleto, RecipientType.To); } email.Subject = "Nuevas Miembros asignados desde Consolidacion"; ManejadorDeCorreos manejadorDeCorreos = new ManejadorDeCorreos(); manejadorDeCorreos.EnviarCorreoAsync(email); } #endregion log.Debug("Finalizando NotificacionDeNuevasBoletasDeConsolidacion"); }
public void BorrarCelulaPermanentemente(int celulaId) { List <int> celulas = this.ObtenerRedInferior(celulaId); celulas.Add(celulaId); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 10, 0))) { foreach (int celula in celulas) { // Se va a hacer cambios a los miembros, sin borrarlos en si using (var contexto = new IglesiaEntities()) { // Obtenemos todos los miembros de la celula // List<int> miembros = (from o in contexto.Miembro where o.CelulaId == celula select o.MiembroId).Take<int>(1).ToList<int>(); List <int> miembros = (from o in contexto.Miembro where o.CelulaId == celula select o.MiembroId).ToList <int>(); foreach (int miembro in miembros) { // Borramos las "Fotos" de cada miembro foreach (MiembroFoto aBorrar in (from o in contexto.MiembroFoto where o.MiembroId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos los "Pasos" de cada miembro foreach (MiembroPaso aBorrar in (from o in contexto.MiembroPaso where o.MiembroId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos los "Roles" de cada miembro foreach (MiembroRol aBorrar in (from o in contexto.MiembroRol where o.MiembroId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Asistencias a las celulas" de cada miembro foreach (CelulaMiembroAsistencia aBorrar in (from o in contexto.CelulaMiembroAsistencia where o.MiembroId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Asistencias Registradas" de cada miembro foreach (CelulaMiembroAsistencia aBorrar in (from o in contexto.CelulaMiembroAsistencia where o.MiembroQueRegistraId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Asistencias de Invitados Registradas" de cada miembro foreach (CelulaInvitadosAsistencia aBorrar in (from o in contexto.CelulaInvitadosAsistencia where o.MiembroQueRegistraId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Cancelaciones Registradas" de cada miembro foreach (CelulaCancelacionAsistencia aBorrar in (from o in contexto.CelulaCancelacionAsistencia where o.MiembroQueRegistraId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos los "Liderazgos" de cada miembro foreach (CelulaLider aBorrar in (from o in contexto.CelulaLider where o.MiembroId == miembro select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Notificaciones de Asistencia" de cada miembro foreach (NotificacionDeAsistenciaInscripcion aBorrar in (from o in contexto.NotificacionDeAsistenciaInscripcion where o.MiembroId == miembro select o)) { NotificacionDeAsistenciaLog log = (from o in contexto.NotificacionDeAsistenciaLog where o.NotificacionDeAsistenciaId == aBorrar.Id select o).SingleOrDefault(); if (log != null) { contexto.DeleteObject(log); } contexto.DeleteObject(aBorrar); } // Modificamos las "Boletas de Consolidacion" asignadas a cada miembro foreach (ConsolidacionBoleta aModificar in (from o in contexto.ConsolidacionBoleta where o.AsignadaAMiembroId == miembro select o)) { aModificar.AsignadaAMiembroId = null; } // Modificamos las "Boletas de Consolidacion" en que cada miembro "invito" foreach (ConsolidacionBoleta aModificar in (from o in contexto.ConsolidacionBoleta where o.InvitadoPorMiembroId == miembro select o)) { aModificar.InvitadoPorMiembroId = null; } // Modificamos las "Conyugues" en cada miembro foreach (Miembro aModificar in (from o in contexto.Miembro where o.ConyugeId == miembro select o)) { aModificar.ConyugeId = null; } } // Guardamos los cambios en la BD (Por miembros...) contexto.SaveChanges(SaveOptions.DetectChangesBeforeSave, true); } // Se va a hacer cambios a los miembros, incluido borrarlos using (var contexto = new IglesiaEntities()) { // Obtenemos todos los miembros de la celula List <int> miembros = (from o in contexto.Miembro where o.CelulaId == celula select o.MiembroId).ToList <int>(); foreach (int miembro in miembros) { // Borramos los miembros en si Miembro miembroABorrar = (from o in contexto.Miembro where o.MiembroId == miembro select o).SingleOrDefault(); contexto.DeleteObject(miembroABorrar); } // Guardamos los cambios en la BD (Por miembros...) contexto.SaveChanges(SaveOptions.DetectChangesBeforeSave, true); } // Se va a hacer cambios a las celulas, incluido borrarlas using (var contexto = new IglesiaEntities()) { // Borramos las "Asistencias" de la celula en si foreach (CelulaMiembroAsistencia aBorrar in (from o in contexto.CelulaMiembroAsistencia where o.CelulaId == celula select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Asistencias de Invitados" de la celula en si foreach (CelulaInvitadosAsistencia aBorrar in (from o in contexto.CelulaInvitadosAsistencia where o.CelulaId == celula select o)) { contexto.DeleteObject(aBorrar); } // Borramos las "Cancelaciones de Asistencia" de la celula en si foreach (CelulaCancelacionAsistencia aBorrar in (from o in contexto.CelulaCancelacionAsistencia where o.CelulaId == celula select o)) { contexto.DeleteObject(aBorrar); } // Borramos los "Liderazgos" de la celula en si foreach (CelulaLider aBorrar in (from o in contexto.CelulaLider where o.CelulaId == celula select o)) { contexto.DeleteObject(aBorrar); } // Modificamos las "Boletas de Consolidacion" asignadas a la celula en si foreach (ConsolidacionBoleta aBorrar in (from o in contexto.ConsolidacionBoleta where o.AsignadaACelulaId == celula select o)) { aBorrar.AsignadaACelulaId = null; } // Modificamos las "Celula Predeterminada para las Boletas de Consolidacion" asignadas a la celula en si foreach (ConsolidacionBoletaCategoria aModificar in (from o in contexto.ConsolidacionBoletaCategoria where o.CelulaPredeterminadaId == celula select o)) { aModificar.CelulaPredeterminadaId = 1; } // Boramos la celula en si Celula celulaABorrar = (from o in contexto.Celula where o.CelulaId == celula select o).SingleOrDefault(); contexto.DeleteObject(celulaABorrar); // Guardamos los cambios en la BD (Por celula...) contexto.SaveChanges(SaveOptions.DetectChangesBeforeSave, true); } } scope.Complete(); } Cache.Instance.Limpiar(); }
private void mostrarAnunciosYAlertas() { ManejadorDeCelulas manejadorCelulas = new ManejadorDeCelulas(); int miembroId = SesionActual.Instance.UsuarioId; List <int> idsCelulasPermitidas = manejadorCelulas.ObtenerCelulasPermitidasPorMiembroComoIds(SesionActual.Instance.UsuarioId); DateTime fechaInicioDeSemana = DateTime.Now.GetFirstDateOfWeek(); DateTime fechaFinDeSemana = DateTime.Now.GetLastDateOfWeek(); IglesiaEntities contexto = SesionActual.Instance.getContexto <IglesiaEntities>(); // Obtenemos las boletas de consolidacion sin reportes en esta semana int numDeBoletasSinReporteSemanal = (from o in contexto.ConsolidacionBoleta where o.Borrado == false && o.BoletaEstatusId > 100 && o.AsignadaACelulaId != null && idsCelulasPermitidas.Contains(o.AsignadaACelulaId.Value) && !contexto.ConsolidacionBoletaReporte.Any(t => t.Borrado == false && t.ConsolidacionBoletaId == o.Id && t.Creacion >= fechaInicioDeSemana && t.Creacion <= fechaFinDeSemana) select o).Count(); if (numDeBoletasSinReporteSemanal > 0) { generarAlerta(string.Format("Tienes {0} boleta(s) de consolidación sin reportar esta semana!", numDeBoletasSinReporteSemanal)); } // Obtenemos las celulas directas que no tienen asistencia registrada esta semana int numDeCelulasSinAsistenciaSemanal = (from o in contexto.Celula where o.Borrado == false && contexto.CelulaLider.Any(t => t.Borrado == false && t.CelulaId == o.CelulaId && t.MiembroId == miembroId ) && !contexto.CelulaMiembroAsistencia.Any(t => t.CelulaId == o.CelulaId && t.Dia >= fechaInicioDeSemana.Day && t.Mes >= fechaInicioDeSemana.Month && t.Anio >= fechaInicioDeSemana.Year && t.Dia <= fechaFinDeSemana.Day && t.Mes <= fechaFinDeSemana.Month && t.Anio <= fechaFinDeSemana.Year ) && !contexto.CelulaCancelacionAsistencia.Any(t => t.CelulaId == o.CelulaId && t.Dia >= fechaInicioDeSemana.Day && t.Mes >= fechaInicioDeSemana.Month && t.Anio >= fechaInicioDeSemana.Year && t.Dia <= fechaFinDeSemana.Day && t.Mes <= fechaFinDeSemana.Month && t.Anio <= fechaFinDeSemana.Year ) select o).Count(); if (numDeCelulasSinAsistenciaSemanal > 0) { generarAlerta("Esta semana no has registrado asistencia en todas tus células!"); } }