/// <summary> /// Esta funcion se encarga de generar un arbol de las celulas disponibles para dicho usuario, incluidas a las cuales es lider, lider del lider y la misma que el usuario mismo asiste /// </summary> /// <param name="usuarioId"></param> /// <param name="mostrarCheckboxes"></param> /// <returns></returns> public Ext.Net.TreeNode GenerarArbolDeCelulas(int usuarioId, ThreeStateBool mostrarCheckboxes, bool expandido) { ManejadorDeCelulas manejadorCelulas = new ManejadorDeCelulas(); List <Celula> celulasPermitidas = manejadorCelulas.ObtenerCelulasPermitidasPorMiembroComoCelulas(usuarioId); TreeData.TreeDataTableDataTable dt = new TreeData.TreeDataTableDataTable(); //Agregamos la celula a la que el miembro asiste, aun y cuando sera de solo lectura; solamente si no existia ya en la lista de celulas permitidas (es decir, asiste y es lider a la vez) Miembro miembro = (from o in SesionActual.Instance.getContexto <IglesiaEntities>().Miembro where o.MiembroId == usuarioId select o).SingleOrDefault(); if (!(celulasPermitidas.Any(o => o.CelulaId == miembro.CelulaId))) { dt.AddTreeDataTableRow(miembro.CelulaId.ToString(), string.Empty, miembro.Celula.Descripcion, atributoDeSoloLectura); } string celulaId; string miembroCelulaId; string atributoExtra; foreach (Celula c in celulasPermitidas) { celulaId = c.CelulaId.ToString(); if (c.CelulaLider.Count > 0) { CelulaLider celulaLider = c.CelulaLider.FirstOrDefault(o => o.Borrado == false && o.Miembro.Borrado == false); if (celulaLider != null) { miembroCelulaId = celulaLider.Miembro.CelulaId.ToString(); miembroCelulaId = (celulaId.Equals(miembroCelulaId)) ? string.Empty : miembroCelulaId; //Evitamos un loop infinito al momento en que el miembro sea lider de la celula a la que asiste atributoExtra = (string.IsNullOrEmpty(miembroCelulaId)) ? atributoDeSoloLectura : string.Empty; dt.AddTreeDataTableRow(celulaId, miembroCelulaId, c.Descripcion, atributoExtra); } } } //Obtenemos las celulas sin "lideres" List <Celula> celulasSinLider = manejadorCelulas.ObtenerCelulasSinLideresComoCelulas(); if (celulasSinLider.Count > 0) { int idNodoCelulasSinLideres = 9999999; dt.AddTreeDataTableRow(idNodoCelulasSinLideres.ToString(), miembro.CelulaId.ToString(), "Celulas sin Asignacion de Lider", atributoDeSoloLectura); foreach (Celula c in celulasSinLider) { dt.AddTreeDataTableRow(c.CelulaId.ToString(), idNodoCelulasSinLideres.ToString(), c.Descripcion, string.Empty); } } Ext.Net.TreeNode navegacion = new Ext.Net.TreeNode("Celulas"); navegacion.Expanded = expandido; if ((celulasPermitidas != null) && (celulasPermitidas.Count > 0)) { generarNodos(navegacion, TreeBuilder.GenerateTree(miembro.CelulaId.ToString(), dt), mostrarCheckboxes, expandido); //La celula inicial es la celula a la que el usuario asiste } return(navegacion); }
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); }