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 bool GuardarAsistencia(int celulaId, DateTime fecha, Modelos.Retornos.AsistenciaDeCelulaPorMiembroSumarizada asistencias, int numeroDeInvitados, int usuarioIdQueRegistra) { int anioSeleccionado = fecha.Year; int mesSeleccionado = fecha.Month; int diaSeleccionado = fecha.Day; determinarSiFechaEsPermitida(fecha, celulaId); // Determinanos si la fecha es correcta y permitida Dictionary <int, string> asistenciasNuevas = new Dictionary <int, string>(); List <int> asistenciasABorrar = new List <int>(); Dictionary <int, string> asistenciasAActualizar = new Dictionary <int, string>(); foreach (Modelos.Retornos.AsistenciaDeCelulaPorMiembro asistencia in asistencias.Asistencias) { //Registros existentes a eliminar if (!asistencia.Asistencia && (asistencia.Id > 0)) { asistenciasABorrar.Add(asistencia.Id); } //Registros nuevos a crear else if (asistencia.Asistencia && (asistencia.Id < 0)) { asistenciasNuevas.Add(asistencia.MiembroId, asistencia.Peticiones); } //Registros a actualizar else if (asistencia.Id > 0) { asistenciasAActualizar.Add(asistencia.Id, asistencia.Peticiones); } } //Eliminamos las asistencias preexistentes if (asistenciasABorrar.Count > 0) { foreach (CelulaMiembroAsistencia asistencia in (from a in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaMiembroAsistencia where asistenciasABorrar.Contains(a.CelulaMiembroAsistenciaId) select a)) { SesionActual.Instance.getContexto <IglesiaEntities>().DeleteObject(asistencia); } } //Creamos las nuevas asistencias if (asistenciasNuevas.Count > 0) { CelulaMiembroAsistencia asistencia; foreach (KeyValuePair <int, string> a in asistenciasNuevas) { asistencia = new CelulaMiembroAsistencia(); asistencia.CelulaId = celulaId; asistencia.MiembroId = a.Key; asistencia.Anio = anioSeleccionado; asistencia.Mes = mesSeleccionado; asistencia.Dia = diaSeleccionado; asistencia.Peticiones = a.Value; asistencia.MiembroQueRegistraId = usuarioIdQueRegistra; SesionActual.Instance.getContexto <IglesiaEntities>().CelulaMiembroAsistencia.AddObject(asistencia); } } //Las inserciones y las eliminaciones si se pueden hacer en grupo... las actualizaciones no... SesionActual.Instance.getContexto <IglesiaEntities>().SaveChanges(); //Actualizamos las asistencias if (asistenciasAActualizar.Count > 0) { CelulaMiembroAsistencia asistencia; foreach (KeyValuePair <int, string> a in asistenciasAActualizar) { asistencia = (from q in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaMiembroAsistencia where q.CelulaMiembroAsistenciaId == a.Key select q).FirstOrDefault(); asistencia.Peticiones = a.Value; //Cada actualizacion tiene que tener su propia llamada a la BD SesionActual.Instance.getContexto <IglesiaEntities>().SaveChanges(); } } #region Invitados // Borramos cualquier registro de invitados anterior CelulaInvitadosAsistencia invitados = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaInvitadosAsistencia where o.CelulaId == celulaId && o.Anio == anioSeleccionado && o.Mes == mesSeleccionado && o.Dia == diaSeleccionado select o).FirstOrDefault(); if (invitados != null) { invitados.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>()); } // Si hubo invitados guardamos el registro if (numeroDeInvitados > 0) { invitados = new CelulaInvitadosAsistencia(); invitados.CelulaId = celulaId; invitados.MiembroQueRegistraId = usuarioIdQueRegistra; invitados.Anio = anioSeleccionado; invitados.Mes = mesSeleccionado; invitados.Dia = diaSeleccionado; invitados.NumeroDeInvitados = numeroDeInvitados; invitados.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>()); } #endregion #region Cancelacion //Borramos la "cancelacion" de la celula si llegase a existir CelulaCancelacionAsistencia cancelacion = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaCancelacionAsistencia where o.CelulaId == celulaId && o.Anio == anioSeleccionado && o.Mes == mesSeleccionado && o.Dia == diaSeleccionado select o).FirstOrDefault(); if (cancelacion != null) { cancelacion.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>()); } #endregion log.InfoFormat("Asistencia de la celula [{0}] del dia {1} registrada correctamente por [{2}]", celulaId, fecha.ToFullDateString(), usuarioIdQueRegistra); return(true); }
public bool GuardarAsistencia(int celulaId, DateTime fecha, Modelos.Retornos.AsistenciaDeCelulaPorMiembroSumarizada asistencias, int usuarioIdQueRegistra) { return(GuardarAsistencia(celulaId, fecha, asistencias, 0, usuarioIdQueRegistra)); }