diff --git a/server/workspace-zentrale.js b/server/workspace-zentrale.js index def012a4..2f4c01bb 100644 --- a/server/workspace-zentrale.js +++ b/server/workspace-zentrale.js @@ -52,6 +52,7 @@ import express from "express"; import { db, sitzungLesen, istLeitung, betreuteIds, scoutsVon, verborgeneIds, hausBedingung, TEAM_DOGI_ROLLEN } from "./workspace.js"; +import { freigabeBedingung } from "./workspace-treff.js"; export const zentraleRouter = express.Router(); @@ -332,12 +333,43 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => { die Zahl, die an dieser Stelle etwas bedeutet -- und sie bekommt nur zu sehen, wer ohnehin weiss, dass es die Runde gibt. */ - TEAM_DOGI_ROLLEN.has(zeigt.rolle) - ? { wert: db().prepare( - `SELECT COUNT(*) AS n FROM personen WHERE rolle IN (${ - [...TEAM_DOGI_ROLLEN].map((r) => `'${r}'`).join(", ")}) AND aktiv = 1`).get().n, - schild: "im Team" } - : { wert: betreuteIds(zeigt).length, schild: "betreut" }, + /* UND FUER DIE COMMUNITY GILT DASSELBE (18.09.2026). + + Der Absatz darueber loest dieses Problem seit dem 10.09. fuer + einen Modi -- fuer ein Mitglied der Community blieb es + stehen. Es betreut erst recht niemanden; auf seiner + Startseite stand dauerhaft „0 betreut", aus genau demselben + Grund und mit genau derselben Wirkung: Wer eine Zahl sieht, + die sich nie aendert, sucht den Fehler bei sich. + + Stattdessen die Zahl, bei der es MITREDEN kann: offene + Wuensche. Dort entscheidet die Community mit, was als + Naechstes passiert -- eine Zahl, die zum Hingehen einlaedt, + statt eine, die nichts sagt. + + WORAN ERKANNT: `freigabeBedingung` gibt nur fuer Leute von + aussen eine Bedingung zurueck, sonst null. Damit steht die + Frage „ist das jemand aus der Community" schon beantwortet, + ohne dass hier ein Rollenname steht -- und die Bedingung + sorgt zugleich dafuer, dass nur gezaehlt wird, was diese + Person auch sehen darf. Zwei Fliegen, eine Zeile. */ + (() => { + if (TEAM_DOGI_ROLLEN.has(zeigt.rolle)) { + return { wert: db().prepare( + `SELECT COUNT(*) AS n FROM personen WHERE rolle IN (${ + [...TEAM_DOGI_ROLLEN].map((r) => `'${r}'`).join(", ")}) AND aktiv = 1`).get().n, + schild: "im Team" }; + } + const bed = freigabeBedingung(zeigt, "e"); + if (bed) { + const n = db().prepare( + `SELECT COUNT(*) AS n FROM eintraege e + WHERE e.bereich = 'wunsch' AND e.status = 'offen' AND ${bed.wo}`) + .get(...bed.werte).n; + return { wert: n, schild: "Wünsche offen" }; + } + return { wert: betreuteIds(zeigt).length, schild: "betreut" }; + })(), ], }); } catch (fehler) { diff --git a/tools/community-blick.mjs b/tools/community-blick.mjs index e3c075fd..104100f8 100644 --- a/tools/community-blick.mjs +++ b/tools/community-blick.mjs @@ -237,6 +237,23 @@ console.log(""); const zahlenlinks = await seite.evaluate(() => [...document.querySelectorAll("#zahlen a")].map((a2) => a2.getAttribute("href"))); console.log(` Zahlen-Links: ${zahlenlinks.length}`); + + /* DIE ZENTRALE OBEN: Ring, drei Zaehler, Uhr. Was davon betrifft + ein Mitglied ueberhaupt? */ + const zentrale = await seite.evaluate(() => { + const txt = (w) => (document.querySelector(w)?.textContent || "").replace(/\s+/g, " ").trim(); + return { + ring: txt(".ring, .ringblock, [class*='ring']"), + zaehler: [...document.querySelectorAll(".standzahl, .stand, [class*='stand']")] + .map((e) => e.textContent.replace(/\s+/g, " ").trim()).filter(Boolean).slice(0, 6), + kopfzeilen: [...document.querySelectorAll(".zentrale *")] + .map((e) => e.children.length ? "" : (e.textContent || "").replace(/\s+/g, " ").trim()) + .filter((t) => t && t.length < 60).slice(0, 14), + }; + }); + console.log(` Ring: „${zentrale.ring.slice(0, 60)}"`); + console.log(` Zaehler: ${zentrale.zaehler.join(" | ") || "(nicht gefunden)"}`); + console.log(` Texte oben: ${zentrale.kopfzeilen.join(" · ")}`); if (zahlenlinks.length) { const ziel = new URL(zahlenlinks[0], `${BASIS}/workspace/`).href; const antwort = await seite.goto(ziel, { waitUntil: "domcontentloaded" }); @@ -319,11 +336,17 @@ console.log(fehlerAufSeite.length block: !document.getElementById("zahlen-block")?.hidden, links: document.querySelectorAll("#zahlen a").length, satz: document.body.innerText.includes("Vorarbeiten"), + /* Behaelt DogFather seine dritte Zahl? „Wuensche offen" waere fuer + ihn die falsche -- er sieht ohnehin alles. */ + drittezahl: [...document.querySelectorAll(".standzahl, .stand, [class*='stand']")] + .map((e) => e.textContent.replace(/\s+/g, " ").trim()) + .find((t) => /betreut|im Team|Wünsche offen/.test(t)) || "(keine)", })); console.log(""); console.log("=== Gegenprobe: DogFather auf derselben Seite ==="); console.log(` Aufgabenblock: ${z.block ? "DA" : "FEHLT"} · Zahlen-Links: ${z.links}` + ` · „Vorarbeiten": ${z.satz ? "ja" : "nein"}`); + console.log(` Dritte Zahl: ${z.drittezahl}`); await ctx2.close(); }