/// <summary>
        /// Agrega y elimina integrantes a un grupo de servidores. El grupo de servidores depende un capitan.
        /// </summary>
        /// <param name="capitanUsuarioId">Id del miembro "capitan" del grupo de servidores</param>
        /// <param name="integrantesUsuariosNuevosId">Listado de id's de los miembros "integrantes" a agregar al grupo de servidores</param>
        /// <param name="integrantesUsuariosEliminadosId">Listado de id's de los miembros "integrantes" a eliminar del grupo de servidores</param>
        /// <returns>True = Es un nuevo grupo; False = Es un grupo existente y solo fue una actualizacion</returns>
        public bool GuardarIntegrantesPorCapitan(int capitanUsuarioId, RegistrosHelper.RegistrosDeDatos integrantesNuevosYEliminados)
        {
            bool rtn = false;

            if (capitanUsuarioId > 0 && (integrantesNuevosYEliminados.RegistrosNuevosId.Count > 0 || integrantesNuevosYEliminados.RegistrosEliminadosId.Count > 0))
            {
                ServidorCapitan    capitan = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().ServidorCapitan where o.Miembro.MiembroId == capitanUsuarioId select o).FirstOrDefault();
                ServidorIntegrante integrante;

                if (capitan == null)
                {
                    capitan           = new ServidorCapitan();
                    capitan.MiembroId = capitanUsuarioId;
                    rtn = true;
                }

                //Agregamos los nuevos integrantes (siempre y cuando no existan previamente...)
                foreach (int integranteUsuarioId in integrantesNuevosYEliminados.RegistrosNuevosId)
                {
                    if (!capitan.ServidorIntegrante.Any(o => o.MiembroId == integranteUsuarioId && o.Borrado == false))
                    {
                        integrante           = new ServidorIntegrante();
                        integrante.CapitanId = capitanUsuarioId;
                        integrante.MiembroId = integranteUsuarioId;
                        capitan.ServidorIntegrante.Add(integrante);
                    }
                }

                //Guardamos los cambios, antes de eliminar registros
                capitan.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

                //Eliminamos los integrantes
                foreach (int integranteUsuarioId in integrantesNuevosYEliminados.RegistrosEliminadosId)
                {
                    integrante = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().ServidorIntegrante where o.MiembroId == integranteUsuarioId && o.ServidorCapitan.MiembroId == capitanUsuarioId && o.Borrado == false select o).FirstOrDefault();
                    if (integrante != null)
                    {
                        integrante.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                    }
                }
            }

            return(rtn);;
        }
        public bool GuardarLiderzagoDeCelulas(int miembroId, RegistrosHelper.RegistrosDeDatos celulasNuevasYEliminadas)
        {
            bool rtn = false;

            if (miembroId > 0 && (celulasNuevasYEliminadas.RegistrosNuevosId.Count > 0 || celulasNuevasYEliminadas.RegistrosEliminadosId.Count > 0))
            {
                Miembro     miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().Miembro where o.MiembroId == miembroId select o).FirstOrDefault();
                CelulaLider celulaLider;

                if (miembro == null)
                {
                    throw new ExcepcionReglaNegocio(Literales.RegistroInexistente);
                }

                //Agregamos las nuevas celulas (siempre y cuando no existan previamente...)
                foreach (int celulaId in celulasNuevasYEliminadas.RegistrosNuevosId)
                {
                    if (!miembro.CelulaLider.Any(o => o.CelulaId == celulaId && o.Borrado == false))
                    {
                        celulaLider           = new CelulaLider();
                        celulaLider.MiembroId = miembroId;
                        celulaLider.CelulaId  = celulaId;
                        miembro.CelulaLider.Add(celulaLider);
                    }
                }

                //Guardamos los cambios, antes de eliminar registros
                miembro.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

                //Eliminamos las celulas
                foreach (int celulaId in celulasNuevasYEliminadas.RegistrosEliminadosId)
                {
                    celulaLider = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().CelulaLider where o.CelulaId == celulaId && o.MiembroId == miembroId && o.Borrado == false orderby o.CelulaLiderId descending select o).FirstOrDefault();
                    if (celulaLider != null)
                    {
                        celulaLider.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                    }
                }
            }

            return(rtn);
        }
        public bool GuardarRolesPorMiembro(int miembroId, RegistrosHelper.RegistrosDeDatos rolesNuevosYEliminados)
        {
            bool rtn = false;

            if (miembroId > 0 && (rolesNuevosYEliminados.RegistrosNuevosId.Count > 0 || rolesNuevosYEliminados.RegistrosEliminadosId.Count > 0))
            {
                Miembro    miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().Miembro where o.MiembroId == miembroId select o).FirstOrDefault();
                MiembroRol miembroRol;

                if (miembro == null)
                {
                    throw new ExcepcionReglaNegocio(Literales.RegistroInexistente);
                }

                //Agregamos los nuevos roles (siempre y cuando no existan previamente...)
                foreach (int rolId in rolesNuevosYEliminados.RegistrosNuevosId)
                {
                    miembroRol           = new MiembroRol();
                    miembroRol.MiembroId = miembroId;
                    miembroRol.RolId     = rolId;
                    miembro.MiembroRol.Add(miembroRol);
                }

                //Guardamos los cambios, antes de eliminar registros
                miembro.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

                //Eliminamos los roles
                foreach (int rolId in rolesNuevosYEliminados.RegistrosEliminadosId)
                {
                    miembroRol = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().MiembroRol where o.RolId == rolId && o.MiembroId == miembroId select o).SingleOrDefault();
                    if (miembroRol != null)
                    {
                        miembroRol.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                    }
                }
            }

            return(rtn);
        }
示例#4
0
        void ICatalogo.Guardar(int id, RegistrosHelper.ListaDeRegistrosDeDatos listaDeRegistrosDeDatos)
        {
            // Condiciones de errores NO FATALES
            bool algunaAsistenciaNovalida = false;
            bool algunMiembroYaExistente  = false;
            bool algunaCancionYaExistente = false;

            RegistrosHelper.RegistrosDeDatos miembros  = listaDeRegistrosDeDatos.Obtener(registroMiembros.ClientID);
            RegistrosHelper.RegistrosDeDatos canciones = listaDeRegistrosDeDatos.Obtener(registroCanciones.ClientID);
            RegistrosHelper.RegistrosDeDatos ensayos   = listaDeRegistrosDeDatos.Obtener(registroEnsayos.ClientID);

            AlabanzaEvento evento;
            string         cancionesYMiembrosRequeridos = "No es posible continuar sin agregar canciones/miembros.";

            if (id > 0)
            {
                evento = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEvento where o.Id == id select o).FirstOrDefault();
                if ((evento.AlabanzaEventoMiembro.Count <= 0 && miembros.RegistrosNuevosId.Count <= 0) || (evento.AlabanzaEventoCancion.Count <= 0 && canciones.RegistrosNuevosId.Count <= 0))
                {
                    throw new ExcepcionReglaNegocio(cancionesYMiembrosRequeridos);
                }
            }
            else
            {
                evento = new AlabanzaEvento();
                if ((miembros.RegistrosNuevosId.Count <= 0) || (canciones.RegistrosNuevosId.Count <= 0))
                {
                    throw new ExcepcionReglaNegocio(cancionesYMiembrosRequeridos);
                }
            }

            evento.Descripcion     = registroDescripcion.Text;
            evento.Fecha           = registroFecha.SelectedDate;
            evento.HoraDiaInicioId = registroHoraDelDiaInicio.ObtenerId();
            evento.HoraDiaFinId    = registroHoraDelDiaFin.ObtenerId();
            evento.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

            // Se determina si la fecha es la correcta como para establecer la asistencia
            bool esValidoMarcarAsistencia = (DateTime.Now >= evento.Fecha);

            #region Procesamos los MIEMBROS

            foreach (KeyValuePair <int, Dictionary <string, string> > registro in miembros.RegistrosNuevos)
            {
                AlabanzaEventoMiembro miembro;
                if (registro.Key > 0)
                {
                    miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEventoMiembro where o.Id == registro.Key select o).SingleOrDefault();
                }
                else
                {
                    miembro = new AlabanzaEventoMiembro();
                }

                miembro.AlabanzaEventoId          = evento.Id;
                miembro.AlabanzaMiembroId         = registro.Value["AlabanzaMiembroId"].ToInt();
                miembro.AlabanzaTipoInstrumentoId = registro.Value["InstrumentoId"].ToInt();
                miembro.Retraso    = registro.Value["Retraso"].ToBool();
                miembro.Asistencia = registro.Value["Asistencia"].ToBool();

                if ((miembro.Retraso || miembro.Asistencia) && !esValidoMarcarAsistencia)
                {
                    algunaAsistenciaNovalida = true;
                }

                if ((!evento.AlabanzaEventoMiembro.Any(o => o.AlabanzaMiembroId == miembro.AlabanzaMiembroId && o.AlabanzaTipoInstrumentoId == miembro.AlabanzaTipoInstrumentoId && o.Borrado == false)) || (registro.Key > 0))
                {
                    miembro.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());
                }
                else
                {
                    algunMiembroYaExistente = true;
                }
            }

            foreach (int idEliminado in miembros.RegistrosEliminadosId)
            {
                AlabanzaEventoMiembro miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEventoMiembro where o.Id == idEliminado select o).SingleOrDefault();
                miembro.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
            }

            #endregion

            #region Procesamos las CANCIONES

            foreach (KeyValuePair <int, Dictionary <string, string> > registro in canciones.RegistrosNuevos)
            {
                AlabanzaEventoCancion cancion;
                if (registro.Key > 0)
                {
                    cancion = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEventoCancion where o.Id == registro.Key select o).SingleOrDefault();
                }
                else
                {
                    cancion = new AlabanzaEventoCancion();
                }

                cancion.AlabanzaEventoId  = evento.Id;
                cancion.AlabanzaCancionId = registro.Value["AlabanzaCancionId"].ToInt();

                if ((!evento.AlabanzaEventoCancion.Any(o => o.AlabanzaCancionId == cancion.AlabanzaCancionId && o.Borrado == false)) || (registro.Key > 0))
                {
                    cancion.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());
                }
                else
                {
                    algunaCancionYaExistente = true;
                }
            }

            foreach (int idEliminado in canciones.RegistrosEliminadosId)
            {
                AlabanzaEventoCancion cancion = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEventoCancion where o.Id == idEliminado select o).SingleOrDefault();
                cancion.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
            }

            #endregion

            #region Procesamos los ENSAYOS

            foreach (int idEliminado in ensayos.RegistrosEliminadosId)
            {
                AlabanzaEnsayo ensayo = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEnsayo where o.Id == idEliminado select o).SingleOrDefault();
                ensayo.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
            }

            #endregion

            #region validamos y alertamos todos los ERRORES NO FATALES

            System.Text.StringBuilder condicionDeError = new System.Text.StringBuilder();
            if (algunaAsistenciaNovalida)
            {
                condicionDeError.AppendLine("No se pueden registrar asistencias/retrasos si el evento aun no se ha llevado a cabo.");
            }

            if (algunMiembroYaExistente)
            {
                condicionDeError.AppendLine("No puede existir multiples veces el mismo miembro asignado el mismo instrumento.");
            }

            if (algunaCancionYaExistente)
            {
                condicionDeError.AppendLine("No puede existir multiples veces la mismsa cancion.");
            }

            if (!string.IsNullOrEmpty(condicionDeError.ToString()))
            {
                X.MessageBox.Alert(Generales.nickNameDeLaApp, "Los cambios han sido guardados, con la siguiente condicion: " + condicionDeError.ToString()).Show();
            }

            #endregion
        }
示例#5
0
        public void GuardarEnsayo(List <Dictionary <string, string> > registros)
        {
            try
            {
                // Condiciones de errores NO FATALES
                bool algunaAsistenciaNovalida = false;

                RegistrosHelper.RegistrosDeDatos miembros = RegistrosHelper.ObtenerRegistrosDiferenciados(registros);
                int eventoId = Convert.ToInt32(registroId.Number);
                int ensayoId = Convert.ToInt32((registroEnsayoId.Number > double.MinValue) ? registroEnsayoId.Number : -1);

                AlabanzaEnsayo ensayo = (ensayoId > 0 ? (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEnsayo where o.Id == ensayoId select o).SingleOrDefault() : new AlabanzaEnsayo());
                ensayo.AlabanzaEventoId = eventoId;
                ensayo.Fecha            = registroEnsayoFecha.SelectedDate;
                ensayo.HoraDiaInicioId  = registroEnsayoHoraInicio.ObtenerId();
                ensayo.HoraDiaFinId     = registroEnsayoHoraFin.ObtenerId();
                ensayo.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

                // Se determina si la fecha es la correcta como para establecer la asistencia
                bool esValidoMarcarAsistencia = (DateTime.Now >= ensayo.Fecha);

                foreach (KeyValuePair <int, Dictionary <string, string> > registro in miembros.RegistrosNuevos)
                {
                    int alabanzaEnsayoMiembroId = registro.Value["Id"].ToInt();

                    AlabanzaEnsayoMiembro miembro = (alabanzaEnsayoMiembroId > 0 ? (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEnsayoMiembro where o.Id == alabanzaEnsayoMiembroId select o).SingleOrDefault() : new AlabanzaEnsayoMiembro());
                    miembro.AlabanzaEnsayoId  = ensayo.Id;
                    miembro.AlabanzaMiembroId = registro.Value["AlabanzaMiembroId"].ToInt();
                    miembro.Retraso           = registro.Value["Retraso"].ToBool();
                    miembro.Asistencia        = registro.Value["Asistencia"].ToBool();

                    if ((miembro.Retraso || miembro.Asistencia) && !esValidoMarcarAsistencia)
                    {
                        algunaAsistenciaNovalida = true;
                    }

                    miembro.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());
                }

                foreach (int idEliminado in miembros.RegistrosEliminadosId)
                {
                    if (idEliminado > 0)
                    {
                        AlabanzaEnsayoMiembro miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().AlabanzaEnsayoMiembro where o.Id == idEliminado select o).FirstOrDefault();
                        miembro.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                    }
                }

                // Ocultamos las columnas de asistencia/retraso
                registroEnsayoMiembros.ColumnModel.SetHidden(3, true);
                registroEnsayoMiembros.ColumnModel.SetHidden(4, true);

                LimpiarVentanaDeEnsayos();
                CargarEnsayos();
                wndAgregarEnsayo.Hide();

                #region validamos y alertamos todos los ERRORES NO FATALES

                System.Text.StringBuilder condicionDeError = new System.Text.StringBuilder();
                if (algunaAsistenciaNovalida)
                {
                    condicionDeError.AppendLine("No se pueden registrar asistencias/retrasos si el ensayo aun no se ha llevado a cabo.");
                }

                if (!string.IsNullOrEmpty(condicionDeError.ToString()))
                {
                    X.MessageBox.Alert(Generales.nickNameDeLaApp, "Los cambios han sido guardados, con la siguiente condicion: " + condicionDeError.ToString()).Show();
                }

                #endregion
            }
            catch (ExcepcionReglaNegocio ex)
            {
                X.Msg.Alert(Generales.nickNameDeLaApp, ex.Message).Show();
            }
        }
        public bool GuardarPasosPorMiembro(int miembroId, RegistrosHelper.RegistrosDeDatos pasosNuevosYEliminados)
        {
            bool rtn = false;

            if (miembroId > 0 && (pasosNuevosYEliminados.RegistrosNuevosId.Count > 0 || pasosNuevosYEliminados.RegistrosEliminadosId.Count > 0))
            {
                Miembro     miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().Miembro where o.MiembroId == miembroId select o).FirstOrDefault();
                MiembroPaso miembroPaso;

                if (miembro == null)
                {
                    throw new ExcepcionReglaNegocio(Literales.RegistroInexistente);
                }

                //Si tenemos registros nuevos...
                if (pasosNuevosYEliminados.RegistrosNuevosId.Count > 0)
                {
                    //Agregamos los nuevos pasos celulas (siempre y cuando no existan previamente...)
                    foreach (KeyValuePair <int, Dictionary <string, string> > pasoObj in pasosNuevosYEliminados.RegistrosNuevos)
                    {
                        if (!miembro.MiembroPaso.Any(o => o.PasoId == pasoObj.Key && o.Borrado == false))
                        {
                            int cicloId;
                            if (!int.TryParse(pasoObj.Value["CicloId"], out cicloId))
                            {
                                Paso paso = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().Paso where o.PasoId == pasoObj.Key select o).FirstOrDefault();

                                if (paso != null)
                                {
                                    throw new ExcepcionReglaNegocio(string.Format("El paso [{0}] no cuenta con un ciclo valido; favor de corregirlo y volver a intentar.", paso.Descripcion));
                                }
                                else
                                {
                                    throw new ExcepcionReglaNegocio(string.Format("El paso cuyo id es [{0}] es inexistente; favor de corregirlo y volver a intentar.", pasoObj.Key));
                                }
                            }

                            miembroPaso           = new MiembroPaso();
                            miembroPaso.MiembroId = miembroId;
                            miembroPaso.PasoId    = pasoObj.Key;
                            miembroPaso.CicloId   = cicloId;
                            miembro.MiembroPaso.Add(miembroPaso);
                        }
                    }

                    //Guardamos los cambios, antes de eliminar registros
                    miembro.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());
                }

                //Eliminamos los pasos eliminados
                foreach (int pasoId in pasosNuevosYEliminados.RegistrosEliminadosId)
                {
                    miembroPaso = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().MiembroPaso where o.PasoId == pasoId && o.MiembroId == miembroId && o.Borrado == false select o).FirstOrDefault();
                    if (miembroPaso != null)
                    {
                        miembroPaso.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                    }
                }
            }

            return(rtn);
        }
        public bool GuardarMaestrosYAlumnosEnGrupo(int grupoId, RegistrosHelper.RegistrosDeDatos maestrosNuevosYEliminados, RegistrosHelper.RegistrosDeDatos alumnosNuevosYEliminados)
        {
            bool rtn = false;

            if (grupoId > 0 && (maestrosNuevosYEliminados.RegistrosNuevosId.Count > 0 || alumnosNuevosYEliminados.RegistrosNuevosId.Count > 0 || maestrosNuevosYEliminados.RegistrosEliminadosId.Count > 0 || alumnosNuevosYEliminados.RegistrosEliminadosId.Count > 0))
            {
                using (System.Transactions.TransactionScope transactionScope = new System.Transactions.TransactionScope())
                {
                    FoliGrupo   foliGrupo = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().FoliGrupo where o.Id == grupoId select o).FirstOrDefault();
                    FoliMaestro maestro;
                    FoliMiembro alumno;

                    if (foliGrupo == null)
                    {
                        throw new ExcepcionReglaNegocio(Literales.RegistroInexistente);
                    }

                    //Agregamos las nuevas maestros (siempre y cuando no existan previamente...)
                    foreach (int miembroId in maestrosNuevosYEliminados.RegistrosNuevosId)
                    {
                        maestro             = new FoliMaestro();
                        maestro.FoliGrupoId = grupoId;
                        maestro.MiembroId   = miembroId;
                        foliGrupo.FoliMaestro.Add(maestro);
                    }

                    //Agregamos los nuevos alumnos (siempre y cuando no existan previamente...)
                    foreach (int miembroId in alumnosNuevosYEliminados.RegistrosNuevosId)
                    {
                        alumno                      = new FoliMiembro();
                        alumno.FoliGrupoId          = grupoId;
                        alumno.MiembroId            = miembroId;
                        alumno.FoliMiembroEstatusId = 1;
                        foliGrupo.FoliMiembro.Add(alumno);
                    }

                    //Guardamos los cambios, antes de eliminar registros
                    foliGrupo.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

                    //Eliminamos los maestros
                    foreach (int miembroId in maestrosNuevosYEliminados.RegistrosEliminadosId)
                    {
                        maestro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().FoliMaestro where o.FoliGrupoId == grupoId && o.MiembroId == miembroId && o.Borrado == false select o).FirstOrDefault();
                        if (maestro != null)
                        {
                            maestro.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                        }
                    }

                    //Eliminamos los alumnos
                    foreach (int miembroId in alumnosNuevosYEliminados.RegistrosEliminadosId)
                    {
                        alumno = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().FoliMiembro where o.FoliGrupoId == grupoId && o.MiembroId == miembroId && o.Borrado == false select o).FirstOrDefault();
                        if (alumno != null)
                        {
                            alumno.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                        }
                    }

                    //Marcamos como finalizadas todas las operaciones, para que la transaccion se lleve a cabo en la BD
                    transactionScope.Complete();
                }
            }

            return(rtn);
        }
        public bool GuardarRol(int rolId, string descripcion, RegistrosHelper.RegistrosDeDatos pantallasNuevasYEliminadas, RegistrosHelper.RegistrosDeDatos permisosEspecialesNuevosYEliminados, RegistrosHelper.RegistrosDeDatos rolesAsignablesNuevosYEliminados)
        {
            bool rtn = false;

            if (descripcion.Trim().Length > 0 && (pantallasNuevasYEliminadas.RegistrosNuevosId.Count > 0 || pantallasNuevasYEliminadas.RegistrosEliminadosId.Count > 0 || permisosEspecialesNuevosYEliminados.RegistrosNuevosId.Count > 0 || permisosEspecialesNuevosYEliminados.RegistrosEliminadosId.Count > 0 || rolesAsignablesNuevosYEliminados.RegistrosNuevosId.Count > 0 || rolesAsignablesNuevosYEliminados.RegistrosEliminadosId.Count > 0))
            {
                using (System.Transactions.TransactionScope transactionScope = new System.Transactions.TransactionScope())
                {
                    Rol rol = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().Rol where o.RolId == rolId select o).FirstOrDefault();
                    RolPantallaPermitida rpp;
                    RolPermisoEspecial   rpe;
                    RolAsignable         ra;

                    if (rol == null)
                    {
                        rol = new Rol();
                        rtn = true;
                    }

                    rol.Descripcion = descripcion;

                    //Agregamos las nuevas pantallas permitidas (siempre y cuando no existan previamente...)
                    foreach (int pantallaPermitidaId in pantallasNuevasYEliminadas.RegistrosNuevosId)
                    {
                        rpp       = new RolPantallaPermitida();
                        rpp.RolId = rolId;
                        rpp.PantallaPermitidaId = pantallaPermitidaId;
                        rol.RolPantallaPermitida.Add(rpp);
                    }

                    //Agregamos los nuevos permisos especiales (siempre y cuando no existan previamente...)
                    foreach (int permisoEspecialId in permisosEspecialesNuevosYEliminados.RegistrosNuevosId)
                    {
                        rpe                   = new RolPermisoEspecial();
                        rpe.RolId             = rolId;
                        rpe.PermisoEspecialId = permisoEspecialId;
                        rol.RolPermisoEspecial.Add(rpe);
                    }

                    //Agregamos los nuevos roles asignables (siempre y cuando no existan previamente...)
                    foreach (int rolPermitidoId in rolesAsignablesNuevosYEliminados.RegistrosNuevosId)
                    {
                        ra            = new RolAsignable();
                        ra.RolPadreId = rolId;
                        ra.RolHijoId  = rolPermitidoId;
                        rol.RolAsignableHijos.Add(ra);
                    }

                    //Guardamos los cambios, antes de eliminar registros
                    rol.Guardar(SesionActual.Instance.getContexto <IglesiaEntities>());

                    //Eliminamos las pantallas permitidas
                    foreach (int pantallaPermitidaId in pantallasNuevasYEliminadas.RegistrosEliminadosId)
                    {
                        rpp = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().RolPantallaPermitida where o.PantallaPermitidaId == pantallaPermitidaId && o.RolId == rolId select o).SingleOrDefault();
                        if (rpp != null)
                        {
                            rpp.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                        }
                    }

                    //Eliminamos las permisos especiales
                    foreach (int permisoEspecialId in permisosEspecialesNuevosYEliminados.RegistrosEliminadosId)
                    {
                        rpe = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().RolPermisoEspecial where o.PermisoEspecialId == permisoEspecialId && o.RolId == rolId select o).SingleOrDefault();
                        if (rpe != null)
                        {
                            rpe.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                        }
                    }

                    //Eliminamos los roles asignables
                    foreach (int rolAsignableId in rolesAsignablesNuevosYEliminados.RegistrosEliminadosId)
                    {
                        ra = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().RolAsignable where o.RolHijoId == rolAsignableId && o.RolPadreId == rolId select o).SingleOrDefault();
                        if (ra != null)
                        {
                            ra.Borrar(SesionActual.Instance.getContexto <IglesiaEntities>());
                        }
                    }

                    //Marcamos como finalizadas todas las operaciones, para que la transaccion se lleve a cabo en la BD
                    transactionScope.Complete();
                }
            }

            return(rtn);
        }