public int ObtenerNumeroDeInvitados(int celulaId, DateTime fecha) { int anioSeleccionado = fecha.Year; int mesSeleccionado = fecha.Month; int diaSeleccionado = fecha.Day; 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) { return(invitados.NumeroDeInvitados); } else { return(0); } }
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); }