/// <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); }
void ICatalogo.Buscar() { ManejadorDeCelulas manejadorCelulas = new ManejadorDeCelulas(); List <int> idsDiasDeLaSemana = filtroDiaDeLaSemana.ObtenerIds(); List <int> idsHorasDelDia = filtroHoraDelDia.ObtenerIds(); List <int> idCategorias = filtroCategoria.ObtenerIds(); int idMunicipio = filtroMunicipio.ObtenerId(); List <int> idsCelulasPermitidas = manejadorCelulas.ObtenerCelulasPermitidasPorMiembroComoIds(SesionActual.Instance.UsuarioId); List <int> idsCelulasSinLider = manejadorCelulas.ObtenerCelulasSinLideresComoCelulas().Select(o => o.CelulaId).ToList <int>(); StoreResultados.Cargar(( from o in SesionActual.Instance.getContexto <IglesiaEntities>().Celula where ((o.CelulaId == (filtroId.Number > 0 ? filtroId.Number : o.CelulaId)) && ((o.Descripcion.Contains(filtroDescripcion.Text)) || (o.Descripcion == null)) && (idsDiasDeLaSemana.Contains(o.DiaSemanaId) || (idsDiasDeLaSemana.Count == 0)) && (idsHorasDelDia.Contains(o.HoraDiaId) || (idsHorasDelDia.Count == 0)) && (idCategorias.Contains(o.CategoriaId) || (idCategorias.Count == 0)) && (o.UbicacionMunicipioId == (idMunicipio > 0 ? idMunicipio : o.UbicacionMunicipioId)) && ((o.Colonia.Contains(filtroColonia.Text)) || (o.Colonia == null)) && ((o.Direccion.Contains(filtroDireccion.Text)) || (o.Direccion == null)) && (o.Borrado == false) && //Registros NO borrados (idsCelulasPermitidas.Contains(o.CelulaId) || idsCelulasSinLider.Contains(o.CelulaId))) //Dentro de las celulas permitidas para el usuario actual... o aquellas celulas sin lider asignado (para poderlas BORRAR) orderby o.Descripcion select new { Id = o.CelulaId, Descripcion = o.Descripcion, DiaSemanaDesc = o.DiaSemana.Descripcion, HoraDiaDesc = o.HoraDia.Descripcion, Municipio = o.UbicacionMunicipio.Descripcion, Colonia = o.Colonia, Direccion = o.Direccion, Categoria = o.CelulaCategoria.Descripcion, Coordenadas = o.Coordenadas, RowColor = idsCelulasSinLider.Contains(o.CelulaId) ? "red" : string.Empty })); }
protected void cmdBuscarConcepto_Click(object sender, DirectEventArgs e) { ManejadorDeCelulas manejadorCelulas = new ManejadorDeCelulas(); int usuarioId = SesionActual.Instance.UsuarioId; List <int> idsCelulasPermitidas = manejadorCelulas.ObtenerCelulasPermitidasPorMiembroComoIds(usuarioId); List <int> idsCelulasSinLider = manejadorCelulas.ObtenerCelulasSinLideresComoCelulas().Select(o => o.CelulaId).ToList <int>(); //Obtemenos todos los conceptos a buscar (separados por espacios) string[] conceptosABuscar = registroConceptoABuscar.Text.Trim().Split(' '); //Guarda los resultados obtenidos de las busquedas IQueryable <object> resultados = null; switch (tipoDeBusqueda) { case ManejadorDeBusquedas.TipoDeObjeto.Celula: { var busqueda = Celula.BuscarV1(conceptosABuscar, idsCelulasPermitidas.Union(idsCelulasSinLider).ToList <int>()); //Dentro de las celulas permitidas para el usuario actual... o aquellas celulas sin lider asignado (para poderlas ASGINAR) resultados = (( from o in SesionActual.Instance.getContexto <IglesiaEntities>().Celula.Where(busqueda) orderby o.Descripcion select new { Id = o.CelulaId, Descripcion = o.Descripcion, RowColor = idsCelulasSinLider.Contains(o.CelulaId) ? "red" : string.Empty })).AsExpandable(); break; } case ManejadorDeBusquedas.TipoDeObjeto.Miembro: { var busqueda = Miembro.BuscarV1(conceptosABuscar, idsCelulasPermitidas.ToList <int>()); //Dentro de las celulas permitidas para el usuario actual... o el mismo usuario actual resultados = (( from o in SesionActual.Instance.getContexto <IglesiaEntities>().Miembro.Where(busqueda) orderby o.Primer_Nombre, o.Segundo_Nombre, o.Apellido_Paterno, o.Apellido_Materno select new { Id = o.MiembroId, Descripcion = o.Primer_Nombre + " " + o.Segundo_Nombre + " " + o.Apellido_Paterno + " " + o.Apellido_Materno + " (" + o.Email + ")" })).AsExpandable(); break; } } if (resultados != null) { int numeroDeResultadosMax = 75; //Es el numero maximo de resultados a regresar al cliente... int numeroDeResultados = resultados.Count(); if (numeroDeResultados > numeroDeResultadosMax) { X.Msg.Alert(Generales.nickNameDeLaApp, string.Format(Resources.Literales.LimiteDeResultadosExcedido, numeroDeResultados, numeroDeResultadosMax)).Show(); numeroDeResultados = numeroDeResultadosMax; } StoreObjetosEncontrados.Cargar(resultados.Take(numeroDeResultadosMax)); registroNumeroDeResultados.Text = string.Format("{0} Resultados", numeroDeResultados); } //Ponemos el foco el el grid... GridDeListadoDeObjetos.Focus(); }