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); } } } } } } }
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(); }
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); } } }
public string HTMLFlores(Nodo n, bool showVariante, Usuario u) { string ret; ret = "<div class='votos' style='clear:right;float:right;vertical-align:center;'><nobr> "; ret += n.born.ToString("dd/MM/yy"); ret += " <img src='res/icono.png' style='vertical-align:middle'>"; ret += " " + n.getFloresTotales(); ret += " </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); }
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); }
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 += " " + 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; }
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(); }
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ón</font></a>"; return(ret); }