public bool CancelarAsistencia(int celulaId, DateTime fecha, string razonDeLaCancelacion, int usuarioIdQueRegistra) { determinarSiFechaEsPermitida(fecha, celulaId); CelulaCancelacionAsistencia cancelacion = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaCancelacionAsistencia where o.CelulaId == celulaId && o.Anio == fecha.Year && o.Mes == fecha.Month && o.Dia == fecha.Day select o).SingleOrDefault(); if (cancelacion == null) { cancelacion = new CelulaCancelacionAsistencia(); } // Agregamos o actualizamos el registro de la cancelacion cancelacion.CelulaId = celulaId; cancelacion.Anio = fecha.Year; cancelacion.Mes = fecha.Month; cancelacion.Dia = fecha.Day; cancelacion.MiembroQueRegistraId = usuarioIdQueRegistra; cancelacion.Descripcion = razonDeLaCancelacion; cancelacion.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>()); // Borramos cualquier otra asistencia registrada para ese mismo dia foreach (CelulaMiembroAsistencia asistencia in (from o in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaMiembroAsistencia where o.CelulaId == celulaId && o.Anio == fecha.Year && o.Mes == fecha.Month && o.Dia == fecha.Day select o).ToList()) { SesionActual.Instance.getContexto <IglesiaEntities>().DeleteObject(asistencia); } //Las eliminaciones se hacen en grupo SesionActual.Instance.getContexto <IglesiaEntities>().SaveChanges(); log.InfoFormat("Asistencia de la celula [{0}] del dia {1} cancelada correctamente por [{2}]", celulaId, fecha.ToFullDateString(), usuarioIdQueRegistra); return(true); }
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); }