public List <ObtenerReporteDeAsistenciasPorMiembro_Result> ObtenerReporteDeAsistenciasPorMiembro(int celulaId, int miembroId, DateTime fechaFinal, bool esSemanal)
        {
            //Obtenemos la primera asistencia y en base a ella iniciamos el reporte completo
            CelulaMiembroAsistencia primeraAsistencia = (from o in contexto.CelulaMiembroAsistencia
                                                         where
                                                         o.CelulaId == celulaId &&
                                                         o.MiembroId == miembroId
                                                         orderby o.Anio, o.Mes, o.Dia
                                                         select o
                                                         ).FirstOrDefault();

            DateTime fechaInicial;

            if (primeraAsistencia != null)
            {
                fechaInicial = new DateTime(primeraAsistencia.Anio, primeraAsistencia.Mes, primeraAsistencia.Dia).GetFirstDateOfWeek();
            }
            else
            {
                fechaInicial = DateTime.Now; //Si aun no tiene asistencias se toma le fecha de HOY, de todas maneras el reporte debera de salir en blanco
            }

            return(contexto.ObtenerReporteDeAsistenciasPorMiembro(celulaId, miembroId, fechaInicial.GetFirstDateOfWeek(), fechaFinal, esSemanal).ToList <ObtenerReporteDeAsistenciasPorMiembro_Result>());
        }
Esempio n. 2
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);
        }