floresDisponibles() public method

public floresDisponibles ( ) : List
return List
コード例 #1
0
        public void simDiscrepar(Grupo g, Usuario u, Nodo tema)
        {
            //creo hermano o hijo
            List <Nodo> nodes = g.arbol.toList2(tema, new List <Nodo>());
            //si tengo flor en este tema entonces nada
            bool hayFlor = false;

            foreach (Nodo n2 in nodes)
            {
                if (u.getFlor(n2.id) != null)
                {
                    hayFlor = true;
                }
            }
            if (!hayFlor)
            {
                //seleccion nodo al azar dentro del subarbol de n
                Nodo selected = g.arbol.rndElement(nodes);
                if (!selected.consensoAlcanzado)
                {
                    int generacion = int.Parse(selected.nombre);
                    if (u.floresDisponibles().Count > 0)
                    {
                        if (simRND.NextDouble() <= 0.3)
                        {
                            //hijo
                            if (selected.nivel < 5)
                            {
                                simAgregarNodo(g, u, selected, generacion + 1);
                            }
                            else if (selected != tema)
                            {
                                //hermano
                                List <Nodo> path = g.arbol.getPath(selected.id);
                                if (path.Count > 2)
                                {
                                    Nodo padre = path[1];
                                    simAgregarNodo(g, u, padre, generacion + 1);
                                }
                                else if (selected.nivel < 5)
                                {
                                    //hijo
                                    simAgregarNodo(g, u, selected, generacion + 1);
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        public void asignarflor(Usuario u, Nodo n)
        {
            //si tiene una flor en nivel anterior la subo, si no uso una de las disponibles
            //si hay flor en pathn entonces la subo
            bool subida = false;

            if (n.consensoAlcanzado)
            {
                throw new appException("Este debate ya ha alcanzado el consenso");
            }

            foreach (Nodo padre in getPath(n.id))
            {
                Flor usada = u.getFlor(padre.id);
                if (usada != null && padre != n)
                {
                    //hay flor en un nodo anterior la subo
                    padre.flores -= 1;
                    usada.id      = n.id;
                    usada.born    = DateTime.Now;
                    n.flores     += 1;
                    subida        = true;

                    break;
                }
            }
            if (!subida)
            {
                //uso una flor disponible
                List <Flor> disponibles = u.floresDisponibles();
                if (disponibles.Count > 0)
                {
                    disponibles[0].id   = n.id;
                    disponibles[0].born = DateTime.Now;
                    n.flores           += 1;
                }
                else
                {
                    throw new appException("No tienes flores disponibles");
                }
            }
            //compruebo consenso alcanzado
            //comprobarConsenso(); se comprueba al crear el arbolpersonal

            //actualizo negados
            actualizarNegados();
        }
コード例 #3
0
        public void simConsentir(Grupo g, Usuario u, Nodo tema)
        {
            //muevo una flor a un nodo con generacion mayor
            List <Nodo> nodes = g.arbol.toList2(tema, new List <Nodo>());
            //si tengo flor en este tema la quito
            int  generacion = 1;
            Nodo nViejo     = null;

            foreach (Nodo n2 in nodes)
            {
                if (u.getFlor(n2.id) != null)
                {
                    generacion = int.Parse(n2.nombre);
                    nViejo     = n2;
                    break;
                }
            }

            //busco nodo para apoyar
            Nodo nNuevo = null;
            int  nivel  = 1;

            foreach (Nodo n2 in nodes)
            {
                //if (int.Parse(n2.nombre) > generacion && n2.nivel > 1 && !n2.consensoAlcanzado)
                if (n2.nivel > nivel && !n2.consensoAlcanzado)
                {
                    //generacion = int.Parse(n2.nombre);
                    nivel  = n2.nivel;
                    nNuevo = n2;
                }
            }
            if (nNuevo != null)
            {
                if (nViejo != null)
                {
                    g.arbol.quitarFlor(nViejo, u);  //quito la flor solo si hay nuevo candidato
                }
                if (u.floresDisponibles().Count != 0)
                {
                    g.arbol.asignarflor(u, nNuevo);
                }
            }
        }
コード例 #4
0
ファイル: Modelo.cs プロジェクト: ogvilla/nabu
        public string HTMLFlores(Nodo n, bool showVariante, Usuario u)
        {
            string ret;

            ret  = "<div class='votos' style='clear:right;float:right;vertical-align:center;'><nobr>&nbsp;";
            ret += n.born.ToString("dd/MM/yy");
            ret += "&nbsp;<img src='res/icono.png' style='vertical-align:middle'>";
            ret += "&nbsp;" + n.getFloresTotales();
            ret += "&nbsp;</nobr></div>";
            if (n.nivel > 0 && showVariante)
            {
                if (u.floresDisponibles().Count == 0)
                {
                    ret += "<input type='button' class='btnDis' style='float:right;' value='Crear variante' title='No tienes flores disponibles' disabled>";
                }
                else
                {
                    ret += "<input type='button' class='btn' style='float:right;' value='Crear variante' title='Crea otra propuesta basada en esta' onclick='doVariante(" + n.id + ");'>";
                }
            }
            return(ret);
        }
コード例 #5
0
ファイル: Modelo.cs プロジェクト: ogvilla/nabu
        protected virtual string HTMLEncabezado(Propuesta prop, Grupo g, string email, int width)
        {
            string  ret         = "";
            Usuario u           = g.getUsuarioHabilitado(email);
            bool    tieneFlores = false;

            if (u != null)
            {
                tieneFlores = u.floresDisponibles().Count > 0;
            }

            titulo   = getText("s.titulo", prop);
            etiqueta = getText("s.etiqueta", prop);

            //titulo
            ret += "<div class='titulo1'><nobr>" + nombre + "</nobr></div><br><br>";

            ret += "<div class='titulo3'><nobr>" + Tools.tr("Titulo", g.idioma) + ":" + HTMLText("s.titulo", prop, 60 * 8, tieneFlores, g.idioma) + "</nobr></div>";

            //etiqueta
            ret += "<div class='titulo3'><nobr>" + Tools.tr("Etiqueta", g.idioma) + ":" + HTMLText("s.etiqueta", prop, 20 * 5, tieneFlores, g.idioma);
            if (prop == null)
            {
                ret += "<span style='color:gray;font-size:12px;'>" + Tools.tr("(Etiqueta en el arbol)", g.idioma) + "</span>";
            }
            ret += "</nobr></div>";

            //fecha
            if (modo == eModo.consenso)
            {
                ret += "<div class='titulo2'><nobr>" + Tools.tr("Fecha", g.idioma) + ":" + DateTime.Now.ToString("dd/MM/yy") + " " + DateTime.Now.ToShortTimeString() + "</nobr></div>";
            }

            ret += "<br>";
            ret += "<br>";
            return(ret);
        }
コード例 #6
0
ファイル: Modelo.cs プロジェクト: sabtvg/nabu
 public string HTMLFlores(Nodo n, bool showVariante, Usuario u)
 {
     string ret;
     ret = "<table style='width:100%;'><tr>";
     ret += "<td class='votos'  style='vertical-align:center;'>";
     ret += "<img src='res/icono.png'>";
     ret += "&nbsp;" + n.getFloresTotales();
     ret += "</td><td style='text-align:right;'>";
     if (n.nivel > 0 && showVariante) {
         if (u.floresDisponibles().Count == 0)
             ret += "<input type='button' class='btnDis' value='Crear variante' title='No tienes flores disponibles' disabled>";
         else
             ret += "<input type='button' class='btn' value='Crear variante' title='Crea otra propuesta basada en esta' onclick='doVariante(" + n.id + ");'>";
     }
     ret += "</tr></table>";
     return ret;
 }
コード例 #7
0
ファイル: Arbol.cs プロジェクト: sabtvg/nabu
        public void asignarflor(Usuario u, Nodo n)
        {
            //si tiene una flor en nivel anterior la subo, si no uso una de las disponibles
            //si hay flor en pathn entonces la subo
            bool subida = false;

            if (n.consensoAlcanzado)
                throw new appException("Este debate ya ha alcanzado el consenso");

            foreach (Nodo padre in getPath(n.id))
            {
                Flor usada = u.getFlor(padre.id);
                if (usada != null)
                {
                    //hay flor en un nodo anterior la subo
                    padre.flores -= 1;
                    usada.id = n.id;
                    usada.born = DateTime.Now;
                    n.flores += 1;
                    subida = true;

                    break;
                }
            }
            if (!subida)
            {
                //uso una flor disponible
                List<Flor> disponibles = u.floresDisponibles();
                if (disponibles.Count > 0)
                {
                    disponibles[0].id = n.id;
                    disponibles[0].born = DateTime.Now;
                    n.flores += 1;
                }
                else
                    throw new appException("No tienes flores disponibles");
            }
            //compruebo consenso alcanzado
            comprobarConsenso(n);

            //actualizo negados
            actualizarNegados();
        }
コード例 #8
0
ファイル: Modelo.cs プロジェクト: ogvilla/nabu
        public string toHTML(List <Propuesta> props, Grupo g, string email, int width, eModo modo)
        {
            string ret = "";

            this.modo  = modo;
            this.grupo = g;

            //reinicio el modelo
            errores.Clear();
            consensoAlcanzado = false;

            bool    tieneFlores = false;
            Usuario u           = g.getUsuarioHabilitado(email);

            if (u != null)
            {
                tieneFlores = u.floresDisponibles().Count > 0;
            }

            //ordeno las propuestas por nivel
            props.Sort();

            if (modo == eModo.consenso)
            {
                //header HTML
                ret += "<html>";
                ret += "<head>";
                ret += "<title></title>";
                ret += "<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />";
                ret += "<link rel='stylesheet' type='text/css' href='styles.css'>";
                ret += "</head>";
                ret += "<body>";
            }

            //todo el documento
            bool editar = false;

            for (int q = 1; q <= niveles; q++)
            {
                Propuesta prop = getProp(q, props);
                editar = (prop == null && tieneFlores && modo != eModo.prevista && modo != eModo.consenso) ||
                         (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar));

                if (prop != null && prop.consensoAlcanzado)
                {
                    consensoAlcanzado = true;
                }

                //veo si falta la propuesta anterior (se ha saltado una)
                if (prop != null && q > 1 && getProp(q - 1, props) == null)
                {
                    //se ha saltado una propuesta
                    addError(q, "Las propuestas deben completarse por niveles correlativos, te has saltado el nivel anterior."); //esto evita que pueda proponer
                }

                //mensaje de nivel
                if (q > 1 && modo != eModo.consenso)
                {
                    ret += "<div style='float:clear;float:left;color:gray;font-size:10px;width:-webkit-fill-available;border-top:1px solid gray;margin:3px;text-align:right;'>";
                    ret += Tools.tr("Nivel en el arbol", g.idioma) + ": " + q;
                    ret += "</div>";
                }


                //if (editar && !consensoAlcanzado)
                //    ret += "class='seccion'";
                //else
                //    ret += "class='seccion'";
                //contenido de la propuesta
                ret += "<div class='seccion'>";
                ret += toHTMLContenido(q, prop, g, email, 500);
                ret += "</div>";

                //comentarios
                if (modo != eModo.prevista && modo != eModo.consenso && prop != null && !prop.esPrevista() && !consensoAlcanzado)
                {
                    //se puede comentar
                    ret += "<div id='comentarios" + prop.nodoID + "' style='vertical-align:top;' class='comentarios'>";
                    ret += toHTMLComentarios(q, prop, g, email, 326, !consensoAlcanzado);
                    ret += "</div>";
                }
            }

            //botones de poantalla o firma de consenso
            ret += "<br>";
            ret += "<br>";

            if (modo == eModo.consenso)
            {
                //firma
                ret          += firmaConsenso;
                ret          += "</body>";
                firmaConsenso = ""; //por las dudas
            }
            else if (modo == eModo.editar)
            {
                //modo muestra
                if (consensoAlcanzado)
                {
                    ret += "<div class='mensaje' style='clear:left;float:left;width:100%'><b>" + Tools.tr("Consenso alcanzado", g.idioma) + "</b></div><br>";
                }

                ret += "<input type='button' style='clear:left;float:left;' class='btn' value='" + Tools.tr("Cerrar", g.idioma) + "' onclick='doCerrarDocumento();' />";

                if (tieneFlores && !consensoAlcanzado && editar)
                {
                    ret += "<input type='button' style='float:left;' class='btn' value='" + Tools.tr("Prevista de propuesta", g.idioma) + "' title='" + Tools.tr("Enseña vista previa antes de proponer", g.idioma) + "' onclick='doPrevista();' />";
                }
            }
            else if (modo == eModo.prevista)
            {
                ret += "<input type='button' style='clear:left;float:left;' class='btn' value='" + Tools.tr("Cancelar", g.idioma) + "' onclick='doCerrarDocumento();' />";
                ret += "<input type='button' style='float:left;' class='btn' value='" + Tools.tr("Revisar propuesta", g.idioma) + "' title='" + Tools.tr("Permite corregir errores", g.idioma) + "' onclick='doRevisar();' />";
                if (!hayError() && props.Count > 0 && props[props.Count - 1].esPrevista())
                {
                    //permito crear
                    //tiene que haber almenos una propuesa nueva para poder crear algo
                    ret += "<input type='button' style='float:left;' class='btn' value='" + Tools.tr("Crear propuesta", g.idioma) + "' title='" + Tools.tr("Crea la propuesta", g.idioma) + "' onclick='doProponer();' />";
                }
            }
            else if (modo == eModo.revisar)
            {
                //permito prevista
                ret += "<input type='button' style='clear:left;float:left;' class='btn' value='" + Tools.tr("Cancelar", g.idioma) + "' onclick='doCerrarDocumento();' />";
                if (tieneFlores && !consensoAlcanzado)
                {
                    ret += "<input type='button' style='float:left;' class='btn' value='" + Tools.tr("Prevista de propuesta", g.idioma) + "' title='" + Tools.tr("Enseña vista previa antes de proponer", g.idioma) + "' onclick='doPrevista();' />";
                }
            }

            //ret += "<a id='btnDownload' href='' target='_blank'><font size='1'>Descargar esta versi&oacute;n</font></a>";
            return(ret);
        }