/// <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
            }));
        }
Ejemplo n.º 3
0
        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();
        }