esPrevista() публичный Метод

public esPrevista ( ) : bool
Результат bool
Пример #1
0
        public string HTMLArea(string id, Propuesta prop, int width, int height, bool tieneFlores, string idioma)
        {
            Variable v   = getVariable(id);
            string   ret = "";

            if (prop == null && tieneFlores)
            {
                if (modo != eModo.prevista && !consensoAlcanzado)
                {
                    ret += "<textarea id='" + id + "' ";
                    ret += "class='editarrtf' ";
                    ret += "maxlength='" + v.len + "' ";
                    ret += "style='width:" + width + "px;height:" + height + "px;'>";
                    ret += "</textarea>";
                    ret += "<div style='text-align:right;width:100%;font-size:10px;'>(" + Tools.tr("max", idioma) + ": " + v.len + ")</div>";
                    ret += "<br>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revisar
                string HTMLText = Tools.HTMLDecode(Tools.HTMLDecode(toHTMLText((string)getValue(id, prop))));
                ret += "<textarea id='" + id + "' ";
                ret += "class='editarrtf' ";
                ret += "maxlength='" + v.len + "' ";
                ret += "style='width:" + width + "px;height:" + height + "px;'>";
                ret += HTMLText;
                //ret += getValue(id, prop);
                ret += "</textarea>";
                ret += "<div style='text-align:right;width:100%;font-size:10px;'>(" + Tools.tr("max", idioma) + ": " + v.len + ")</div>";
                ret += "<br>";
            }
            else if (prop != null)
            {
                //ver
                string HTMLText = Tools.HTMLDecode(Tools.HTMLDecode(toHTMLText((string)getValue(id, prop))));
                ret += "<div ";
                ret += "class='" + v.className + "' ";
                ret += "style='width:" + width + "px;'>";
                if (prop.consensoAlcanzado)
                {
                    ret += HTMLText + "</div>";
                }
                //ret += toHTMLText((string)getValue(id, prop)) + "</div>";
                else
                {
                    ret += HTMLText + "</div>";
                }
                //ret += Tools.HTMLDecode(Tools.HTMLDecode(toHTMLText((string)getValueResaltado(id, prop)))) + "</div>";
                ret += "<br>";
            }
            else
            {
                ret += "<div style='color:gray;font-size:12px;'>" + Tools.tr("No tiene flores para crear una propuesta", idioma) + "</div>";
            }


            return(ret);
        }
Пример #2
0
        public string toHTMLComentarios(int nivel, Propuesta prop, Grupo g, string email, int width, bool agregar)
        {
            string ret = "";

            if (prop != null)
            {
                //titulo si hay contenido
                if (prop.comentarios.Count > 0 || (agregar && !prop.esPrevista()))
                {
                    ret += "<div class='titulo4' style='padding-left:3px'>" + Tools.tr("Comentarios", g.idioma) + ":</div>";
                }

                foreach (Comentario c in prop.comentarios)
                {
                    if (c.objecion)
                    {
                        ret += "<div class='comentario' style='background-color:#FFD2E3'>";
                    }
                    else
                    {
                        ret += "<div class='comentario' style='background-color:#D6F5DB'>";
                    }
                    ret += toHTMLText(c.texto);

                    //fecha
                    ret += "<div style='text-align:right;color:gray;font-size:10px;'>";
                    ret += c.fecha.ToString("dd/MM/yy");
                    ret += "</div>";

                    ret += "</div>";
                    //objecion
                }

                //agregar
                if (agregar && !prop.esPrevista())
                {
                    ret += "<textarea id='comentario" + prop.nodoID + "' maxlength='300' class='editarComentario' style='height: 50px;width:-webkit-fill-available'>";
                    ret += "</textarea><br>";
                    ret += "<input type='button' class='btn2' value='" + Tools.tr("Enviar", g.idioma) + "' onclick='doComentar(" + prop.nodoID + ");'>";
                    ret += "&nbsp;<font size='1'>(max: 300)</font>";
                    ret += "&nbsp;<input type='checkbox' id='objecion" + prop.nodoID + "'><span style='font-size:10px'>" + Tools.tr("Objecion", g.idioma) + "</span>";
                }
            }

            return(ret);
        }
Пример #3
0
        public string HTMLArea(string id, Propuesta prop, int width, int height, string idioma)
        {
            //es reconocimiento de voz no funcion desde el servidor por motivos de seguridad. Solo funciona con HTTPS
            Variable v   = getVariable(id);
            string   ret = "";

            if (prop == null)
            {
                if (modo != eModo.prevista)
                {
                    //ret += "<table style='width:" + width + "'>";
                    //ret += "<tr><td>";
                    ret += "<textarea id='" + id + "' ";
                    ret += "class='editarrtf' ";
                    ret += "maxlength='" + v.len + "' ";
                    ret += "style='width:" + width + "px;height:" + height + "px;'>";
                    ret += "</textarea>";
                    //ret += "</td><td style='width:25px;vertical-align:top;'>";
                    //ret += "<img src='res/mic.png' style='cursor:pointer;' onclick='startRecognition(\"" + id + "\");'>";
                    //ret += "</td></tr></table>";
                    ret += "<div style='text-align:right;width:100%;font-size:10px;'>(" + Tools.tr("max", idioma) + ": " + v.len + ")</div>";
                    ret += "<br>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revisar
                //ret += "<table style='width:" + width + "'>";
                //ret += "<tr><td>";
                ret += "<textarea id='" + id + "' ";
                ret += "class='editarrtf' ";
                ret += "maxlength='" + v.len + "' ";
                ret += "style='width:" + width + "px;height:" + height + "px;'>";
                ret += getValue(id, prop);
                ret += "</textarea>";
                //ret += "</td><td style='width:25px;vertical-align:top;'>";
                //ret += "<img src='res/mic.png' style='cursor:pointer;' onclick='startRecognition(\"" + id + "\");'>";
                //ret += "</td></tr></table>";
                ret += "<div style='text-align:right;width:100%;font-size:10px;'>(" + Tools.tr("max", idioma) + ": " + v.len + ")</div>";
                ret += "<br>";
            }
            else if (prop != null)
            {
                //ver
                string HTMLText = Tools.HTMLDecode(Tools.HTMLDecode(toHTMLText((string)getValue(id, prop))));
                ret += "<div ";
                ret += "class='" + v.className + "' ";
                ret += "style='width:100%;'>";
                ret += HTMLText + "</div>";
                ret += "<br>";
            }

            return(ret);
        }
Пример #4
0
        public string HTMLRadio(string id, int index, Propuesta prop, bool tieneFlores, string value, string idioma)
        {
            Variable v   = getVariable(id);
            string   ret = "";

            if (prop == null && tieneFlores && !consensoAlcanzado)
            {
                if (modo != eModo.prevista)
                {
                    //editar en blanco
                    ret += "<input id='" + id + index + "' name='" + id + "' type='radio' ";
                    ret += "class='" + v.editClassName + "' ";
                    ret += "value='" + value + "' ";
                    ret += "onclick=\"documentSubmit('" + id + "_click','" + value + "')\" style='cursor:pointer;width:2em;height:2em;'>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revision
                ret += "<input id='" + id + index + "' name='" + id + "' type='radio' ";
                ret += "class='" + v.editClassName + "' ";
                ret += "value='" + value + "' ";
                if (getText(id, prop) == value)
                {
                    ret += "checked ";
                }
                ret += "onclick=\"documentSubmit('" + id + "_click','" + value + "')\" style='cursor:pointer;width:2em;height:2em;'>";
            }
            else if (prop != null)
            {
                //ver
                ret += "<input type='radio' ";
                ret += "class='" + v.editClassName + "' ";
                if (value == getText(id, prop))
                {
                    ret += "checked ";
                }
                ret += "value='" + value + "' disabled='true' style='width:2em;height:2em;'>";
            }
            else
            {
                //sin flores
                ret += "<div style='color:gray;font-size:12px;'>" + Tools.tr("No tiene flores para crear una propuesta", idioma) + "</div>";
            }

            return(ret);
        }
Пример #5
0
        private string input(string id, Propuesta prop, int width, bool tieneFlores, string tipo, string value, string idioma)
        {
            Variable v   = getVariable(id);
            string   ret = "";

            if (prop == null && tieneFlores && !consensoAlcanzado)
            {
                if (modo != eModo.prevista)
                {
                    //editar en blanco
                    ret += "<input id='" + id + "' type='" + tipo + "' ";
                    ret += "class='" + v.editClassName + "' ";
                    ret += "maxlength='" + v.len + "' ";
                    ret += "style='width:" + width + "px;'>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revision
                ret += "<input id='" + id + "' type='" + tipo + "' ";
                ret += "class='" + v.editClassName + "' ";
                ret += "maxlength='" + v.len + "' ";
                ret += "style='width:" + width + "px;' ";
                if (tipo == "number")
                {
                    value = value.Replace(",", ".");
                }
                ret += "value='" + value + "'>";
            }
            else if (prop != null)
            {
                //ver
                ret += "<input type='text' readonly ";
                ret += "class='" + v.className + "' ";
                ret += "style='width:" + width + "px;' ";
                ret += "value='" + value + "'>";
            }
            else
            {
                //sin flores
                ret += "<div style='color:gray;font-size:12px;'>" + Tools.tr("No tiene flores para crear una propuesta", idioma) + "</div>";
            }

            return(ret);
        }
Пример #6
0
        public string HTMLDate(string id, Propuesta prop, bool tieneFlores, string idioma)
        {
            DateTime d     = getDate(id, prop);
            string   value = "";

            if (d == Tools.minValue)
            {
                //valor nulo
                value = "";
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revision
                value = d.Year.ToString("0000") + "-" + d.Month.ToString("00") + "-" + d.Day.ToString("00");
            }
            else
            {
                //ver
                value = d.Day.ToString("00") + "/" + d.Month.ToString("00") + "/" + d.Year.ToString("0000");
            }

            return(input(id, prop, 150, tieneFlores, "date", value, idioma));
        }
Пример #7
0
        public string HTMLLista(string id, string valores, Propuesta prop, int width, string idioma, bool autopostback)
        {
            Variable v   = getVariable(id);
            string   ret = "";

            if (prop == null)
            {
                if (modo != eModo.prevista)
                {
                    //editar en blanco
                    ret += "<select id='" + id + "'  ";
                    ret += "class='" + v.editClassName + "' ";
                    ret += "style='width:" + width + "px;'";
                    ret += autopostback ? " onchange=\"evaluacionSubmit('" + id + "_changed','','" + GetType().FullName + "')\" " : "";
                    ret += ">";
                    foreach (string l in valores.Split('|'))
                    {
                        string[] item = l.Split('#');
                        if (item.Length == 1)
                        {
                            ret += "<option id='" + item[0] + "'>" + item[0] + "</option>";
                        }
                        else
                        {
                            ret += "<option id='" + item[0] + "'>" + item[1] + "</option>";
                        }
                    }
                    ret += "</select>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revision
                string value = getValue(id, prop).ToString();
                ret += "<select id='" + id + "' ";
                ret += "class='" + v.editClassName + "' ";
                ret += "style='width:" + width + "px;'";
                ret += autopostback ? " onchange=\"evaluacionSubmit('" + id + "_changed','','" + GetType().FullName + "')\" " : "";
                ret += ">";
                foreach (string l in valores.Split('|'))
                {
                    string[] item = l.Split('#');
                    if (item.Length == 1)
                    {
                        ret += "<option " + (value == item[0] ? "selected" : "") + " id='" + item[0] + "'>" + item[0] + "</option>";
                    }
                    else
                    {
                        ret += "<option " + (value == item[0] ? "selected" : "") + " id='" + item[0] + "'>" + item[1] + "</option>";
                    }
                }
                ret += "</select>";
            }
            else if (prop != null)
            {
                //ver
                string value = getValue(id, prop).ToString();
                foreach (string l in valores.Split('|'))
                {
                    string[] item = l.Split('#');
                    if (value == item[0])
                    {
                        if (item.Length == 1)
                        {
                            ret += "<input type='text' readonly ";
                            ret += "class='" + v.className + "' ";
                            ret += "style='width:" + width + "px;' ";
                            ret += "value='" + item[0] + "'>";
                        }
                        else
                        {
                            ret += "<input type='text' readonly ";
                            ret += "class='" + v.className + "' ";
                            ret += "style='width:" + width + "px;' ";
                            ret += "value='" + item[1] + "'>";
                        }
                    }
                }
            }
            else
            {
                //sin flores
                ret += "<div style='color:gray;font-size:12px;float:left;'>" + Tools.tr("No tiene flores para crear una propuesta", idioma) + "</div>";
            }

            return(ret);
        }
Пример #8
0
        public string area(string id, Propuesta prop, int width, int height, bool tieneFlores)
        {
            Variable v = getVariable(id);
            string ret = "";
            if (prop == null && tieneFlores)
            {
                if (modo != eModo.prevista && !consensoAlcanzado)
                {
                    ret += "<textarea id='" + id + "' ";
                    ret += "class='editar' ";
                    ret += "maxlength='" + v.len + "' ";
                    ret += "style='width:" + width + "px;height:" + height + "px;'>";
                    ret += "</textarea>";
                    ret += "<div style='text-align:right;width:" + (width + 14) + "px;font-size:10px;'>(" + tr("max") + ": " + v.len + ")</div>";
                    ret += "<br>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revisar
                ret += "<textarea id='" + id + "' ";
                ret += "class='editar' ";
                ret += "maxlength='" + v.len + "' ";
                ret += "style='width:" + width + "px;height:" + height + "px;'>";
                ret += getValue(id, prop);
                ret += "</textarea>";
                ret += "<div style='text-align:right;width:" + (width + 14) + "px;font-size:10px;'>(" + tr("max") + ": " + v.len + ")</div>";
                ret += "<br>";
            }
            else if (prop != null)
            {
                //ver
                ret += "<div ";
                ret += "class='" + v.className + "' ";
                ret += "style='width:" + width + "px;'>";
                ret += toHTML((string)getValueResaltado(id, prop)) + "</div>";
                ret += "<br>";
            }
            else
            {
                ret += "<span style='color:gray;font-size:12px;padding:5px;'>" + tr("[No tiene flores para crear una propuesta]") + "</span>";
                ret += "<br>";
            }

            return ret;
        }
Пример #9
0
        public string txt(string id, Propuesta prop, int width, bool tieneFlores)
        {
            Variable v = getVariable(id);
            string ret = "";
            if (prop == null && tieneFlores && !consensoAlcanzado)
            {
                if (modo != eModo.prevista)
                {
                    //editar en blanco
                    ret += "<input id='" + id + "' type='text' ";
                    ret += "class='editar' ";
                    ret += "maxlength='" + v.len + "' ";
                    ret += "style='width:" + width + "px;'>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revision
                ret += "<input id='" + id + "' type='text' ";
                ret += "class='editar' ";
                ret += "maxlength='" + v.len + "' ";
                ret += "style='width:" + width + "px;' ";
                ret += "value='" + getValue(id, prop) + "'>";
            }
            else if (prop != null)
            {
                //ver
                ret += "<span type='text' readonly ";
                ret += "class='" + v.className + "' ";
                ret += "style='width:" + width + "px;'>";
                ret += getValue(id, prop) + "</span>";
            }
            else
                //sin flores
                ret += "<span style='color:gray;font-size:12px;'>" + tr("[No tiene flores para crear una propuesta]") + "</span>";

            return ret;
        }
Пример #10
0
        public string toHTMLComentarios(int nivel, Propuesta prop, Grupo g, string email, int width, bool agregar)
        {
            string ret = "";
            if (prop != null)
            {
                foreach (Comentario c in prop.comentarios)
                {
                    ret += "<div class='comentario' style='overflow: auto;width:" + (width - 15) + "px'>";
                    ret += toHTML(c.texto);
                    ret += "</div>";
                    //fecha
                    ret += "<div style='text-align:right;color:gray;font-size:10px;width:" + (width - 10) + "px'>";
                    ret += c.fecha.ToShortDateString();
                    ret += "</div>";
                }

                //agregar
                if (agregar && !prop.esPrevista())
                {
                    ret += "<textarea id='comentario" + prop.nodoID + "' maxlength='200' class='editar' style='width: " + (width - 15) + "px; height: 70px;'>";
                    ret += "</textarea><br>";
                    ret += "<input type='button' class='btn2' value='" + tr("Enviar") + "' onclick='doComentar(" + prop.nodoID + ");'>";
                    ret += "&nbsp;<font size='1'>(max: 200)</font>";
                }
            }

            return ret;
        }
Пример #11
0
        public string HTMLListaSeleccion(string id, Propuesta prop, int width, int height, bool tieneFlores, string lista, string pertenece, string NoPertenece, string idioma)
        {
            Variable v     = getVariable(id);
            string   value = getText(id, prop);
            //if (value == "") value = "*"; //no vacio para que lo envie en el submit
            string ret = "";

            if (prop == null && tieneFlores)
            {
                if (modo != eModo.prevista && !consensoAlcanzado)
                {
                    //edicion
                    //seleccionados
                    ret += "<table style='width:" + width + "px;height:" + height + "px;'>";
                    ret += "<tr><td><b>" + pertenece + "</b></td><td><b>" + NoPertenece + "</b></td></tr>";
                    ret += "<tr><td class='" + v.editClassName + "' style='overflow:scroll;width:" + (width / 2 - 15) + "px;vertical-align:top;'>";
                    if (value != "" && value != "*")
                    {
                        foreach (string item in value.Split('|'))
                        {
                            ret += "<span style='vertical-align:middle; padding:3px;'>";
                            ret += "<img src='res/quitar.png' ";
                            ret += "onclick=\"documentSubmit('" + id + "_quitar','" + item + "')\" style='cursor:pointer;vertical-align:bottom;'>&nbsp;";
                            ret += item.Split(':')[1];
                            ret += "</span>";
                            ret += "<br>";
                        }
                    }
                    ret += "</td>";

                    //disponibles
                    ret += "<td class='" + v.editClassName + "' style='float:left;width:" + (width / 2 - 15) + "px;height:" + height + "px;overflow:scroll;vertical-align:top;'>";
                    if (lista != "")
                    {
                        foreach (string item in lista.Split('|'))
                        {
                            if (value.IndexOf(item.Split(':')[0]) == -1)
                            {
                                ret += "<span style='vertical-align:middle; padding:3px;'>";
                                ret += "<img src='res/agregar.png' ";
                                ret += "onclick=\"setNotEmpyList('" + id + "');documentSubmit('" + id + "_agregar','" + item + "')\" style='cursor:pointer;vertical-align:bottom;'>&nbsp;";
                                ret += item.Split(':')[1];
                                ret += "</span>";
                                ret += "<br>";
                            }
                        }
                    }
                    ret += "</td></tr>";
                    ret += "</table>";
                    //pongo input invisible para guardar el valor como cualquier otro
                    ret += "<br><input type='hidden' id='" + id + "' value='" + value + "' size=90>"; //no vacio para que lo envie en el submit
                    ret += "<br>";
                }
            }
            else if (prop != null && prop.esPrevista() && (modo == eModo.revisar || modo == eModo.editar))
            {
                //revisar
                //seleccionados
                ret += "<table style='width:" + width + "px;height:" + height + "px;'>";
                ret += "<tr><td><b>" + pertenece + "</b></td><td><b>" + NoPertenece + "</b></td></tr>";
                ret += "<tr><td class='" + v.editClassName + "' ";
                ret += "style='overflow:scroll;width:" + (width / 2 - 15) + "px;vertical-align:top;'>";
                if (value != "" && value != "*")
                {
                    foreach (string item in value.Split('|'))
                    {
                        ret += "<nobr>";
                        ret += "<img src='res/quitar.png' onclick=\"documentSubmit('" + id + "_quitar','" + item + "')\" style='cursor:pointer;vertical-align:bottom;'>&nbsp;";
                        ret += item.Split(':')[1];
                        ret += "</nobr>";
                        ret += "<br>";
                    }
                }
                ret += "</td>";

                //disponibles
                ret += "<td class='" + v.editClassName + "' style='float:left;width:" + (width / 2 - 15) + "px;height:" + height + "px;overflow:scroll;vertical-align:top;'>";
                if (lista != "")
                {
                    foreach (string item in lista.Split('|'))
                    {
                        if (value.IndexOf(item.Split(':')[0]) == -1)
                        {
                            ret += "<nobr>";
                            ret += "<img src='res/agregar.png' ";
                            ret += "onclick=\"setNotEmpyList('" + id + "');documentSubmit('" + id + "_agregar','" + item + "')\" style='cursor:pointer;vertical-align:bottom;'>&nbsp;";
                            ret += item.Split(':')[1];
                            ret += "</nobr>";
                            ret += "<br>";
                        }
                    }
                }
                ret += "</td></tr>";
                ret += "</table>";
                //pongo input invisible para guardar el valor como cualquier otro
                ret += "<br><input type='hidden' id='" + id + "' value='" + value + "' size=90>"; //no vacio para que lo envie en el submit
                ret += "<br>";
            }
            else if (prop != null)
            {
                //ver
                //seleccionados
                if (value == "*")
                {
                    ret += "(vac&iacute;o)";
                }
                else
                {
                    string divitem = "";
                    try
                    {
                        divitem  = "<div ";
                        divitem += "class='" + v.className + "'>";
                        if (value != "")
                        {
                            foreach (string item in value.Split('|'))
                            {
                                divitem += "<nobr>";
                                divitem += item.Split(':')[1];;
                                divitem += "</nobr>";
                                divitem += "<br>";
                            }
                        }
                        divitem += "</div>";
                        ret     += divitem;
                    }
                    catch (Exception)
                    {
                        //el valor guardado no tiene el formato correcto, lo descarto
                    }
                }
                ret += "<br>";
            }
            else
            {
                ret += "<div style='color:gray;font-size:12px;'>" + Tools.tr("No tiene flores para crear una propuesta", idioma) + "</div>";
            }


            return(ret);
        }
Пример #12
0
        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);
        }