Jede Rolle sieht ihre eigene Zahl -- Schulle zaehlte das ganze Haus
Filipe (screen22), nachdem Managerin Schulle "2 Creator" angezeigt bekam, obwohl sie einen hat: "die zahl die da angezeigt wird soll bitte immer jedem genau zutreffend sein." Und dazu (screen23), wer was sehen soll: "dogfather und cigdem haben die zahl vom insgesamten. manager sehen nur die gesamte zahl ihrer scouts und ihren creator die ihnen zugeteilt sind, die scout sehen die zahl nur von ihren creator und die creator da termine vom tag selber" DIE ZAHL WAR NICHT FALSCH GERECHNET, SIE BEANTWORTETE DIE FALSCHE FRAGE. Hier stand `SELECT ... FROM personen WHERE aktiv = 1` -- alle, fuer jeden aus der Leitung gleich. Ein Manager sah damit das ganze Haus als "sein Team", einschliesslich Leuten, mit denen er nichts zu tun hat. Jetzt je Rolle: admin/spicy alle aktiven Personen, ohne sich selbst manager seine Scouts UND die Creator (eigene wie die der Scouts) scout nur seine Creator creator unveraendert der eigene Tag SCOUTS BEKOMMEN DIESEN RING NEU. Sie zaehlen nicht zur Leitung und sahen deshalb den Stundenring des eigenen Tages -- aber ein Scout hat ein Team, naemlich seine Creator. Genau danach hat Filipe gefragt. Der Ring heisst bei ihm "Creator versorgt" statt "Team versorgt": Sonst liest ein Scout "Team" und sucht die anderen vier Rollen darin. OHNE SICH SELBST: Wer den Ring ansieht, ist die Person, die ihn liest. Sich selbst als Segment im eigenen Team mitzuzaehlen verschiebt jede Prozentangabe um einen Platz. KEINE ZWEITE RECHENVORSCHRIFT. Die Zuordnung wird nicht hier nachgebaut: `betreuteIds` kennt die Kette Manager -> Scouts -> deren Creator bereits, `scoutsVon` die Scouts. Eine eigene Fassung derselben Frage waere genau der Weg, auf dem zwei Wahrheiten entstehen. Dazu screen26: "liegt liegen, keine ahnung was das bedeuten soll aber das soll viel besser sein bitte." Gezaehlt werden Personen mit unerledigten Terminen aus der VERGANGENHEIT -- das Schild heisst jetzt "ueberfaellig". GEMESSEN an einer Lage, die den Fehler enthaelt: fuenf aktive Personen, darunter ein Creator, der zu niemandem gehoert. DogFather 4 im Team [Fremder, Tili, Schulle, Patrick] Manager Schulle 2 im Team [Tili, Patrick] <- ohne "Fremder" Scout Patrick 1 meine Creator [Tili] Creator Tili eigener Tag pruef-start-ansicht EXIT=0 (140), pruef-rollen EXIT=0 (97). Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -50,7 +50,7 @@
|
||||
===================================================================== */
|
||||
|
||||
import express from "express";
|
||||
import { db, sitzungLesen, istLeitung, betreuteIds } from "./workspace.js";
|
||||
import { db, sitzungLesen, istLeitung, betreuteIds, scoutsVon } from "./workspace.js";
|
||||
|
||||
export const zentraleRouter = express.Router();
|
||||
|
||||
@@ -85,19 +85,71 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => {
|
||||
ihrs?" gefuehrt. */
|
||||
const zeigt = req.person.sicht || req.person;
|
||||
|
||||
if (istLeitung(ich)) {
|
||||
/* ================================================================
|
||||
WESSEN TEAM? JEDE ROLLE SIEHT IHR EIGENES (08.09.2026)
|
||||
|
||||
Filipe, nachdem Managerin Schulle "2 Creator" angezeigt bekam,
|
||||
obwohl sie einen hat: "die zahl die da angezeigt wird soll bitte
|
||||
immer jedem genau zutreffend sein" -- und dazu, wer was sieht:
|
||||
|
||||
"dogfather und cigdem haben die zahl vom insgesamten. manager
|
||||
sehen nur die gesamte zahl ihrer scouts und ihren creator die
|
||||
ihnen zugeteilt sind, die scout sehen die zahl nur von ihren
|
||||
creator und die creator da termine vom tag selber"
|
||||
|
||||
Vorher stand hier `SELECT ... FROM personen WHERE aktiv = 1` --
|
||||
ALLE, fuer jeden aus der Leitung gleich. Deshalb sah Schulle das
|
||||
ganze Haus statt ihres Teams. Die Zahl war nicht falsch berechnet,
|
||||
sie beantwortete die falsche Frage.
|
||||
|
||||
Die Zuordnung selbst wird NICHT hier nachgebaut: `betreuteIds`
|
||||
kennt die Kette Manager -> Scouts -> deren Creator bereits, und
|
||||
`scoutsVon` die Scouts. Eine zweite Rechenvorschrift fuer
|
||||
dieselbe Frage waere genau der Weg, auf dem zwei Wahrheiten
|
||||
entstehen.
|
||||
|
||||
SCOUTS BEKOMMEN JETZT AUCH DIESEN RING. Sie zaehlen nicht zur
|
||||
Leitung und sahen deshalb den Stundenring des eigenen Tages --
|
||||
aber ein Scout hat ein Team, naemlich seine Creator. Genau danach
|
||||
hat Filipe gefragt. */
|
||||
const istTeamsicht = istLeitung(ich) || ich.rolle === "scout";
|
||||
|
||||
if (istTeamsicht) {
|
||||
/* ---------- DAS TEAM ----------
|
||||
Ein Segment je aktiver Person. Der Zustand einer Person ist
|
||||
bewusst GROB in drei Stufen -- mehr taeuschte Genauigkeit vor,
|
||||
die es nicht gibt (dieselbe Ueberlegung steht in VanVans Kranz).
|
||||
Ein Segment je Person im eigenen Verantwortungsbereich. Der
|
||||
Zustand einer Person ist bewusst GROB in drei Stufen -- mehr
|
||||
taeuschte Genauigkeit vor, die es nicht gibt (dieselbe
|
||||
Ueberlegung steht in VanVans Kranz).
|
||||
|
||||
frei - nichts Offenes, keine Termine heute -> ruhig
|
||||
dran - hat heute Termine -> die sind versorgt
|
||||
offen - hat unerledigte Termine aus der VERGANGENHEIT
|
||||
-> das ist das, was liegen bleibt
|
||||
*/
|
||||
const leute = d.prepare(
|
||||
`SELECT id, name, rolle FROM personen WHERE aktiv = 1 ORDER BY rolle, name`).all();
|
||||
let leute;
|
||||
if (ich.rolle === "admin" || ich.rolle === "spicy") {
|
||||
/* Das ganze Haus -- und zwar ohne sich selbst: Wer den Ring
|
||||
ansieht, ist die Person, die ihn liest; sich selbst als
|
||||
Segment im eigenen Team zu zaehlen, verschiebt jede Prozent-
|
||||
angabe um einen Platz. */
|
||||
leute = d.prepare(
|
||||
`SELECT id, name, rolle FROM personen
|
||||
WHERE aktiv = 1 AND id <> ? ORDER BY rolle, name`).all(ich.id);
|
||||
} else {
|
||||
/* Manager: seine Scouts UND die Creator (eigene wie die seiner
|
||||
Scouts). Scout: nur seine Creator. */
|
||||
const ids = [...new Set([
|
||||
...(ich.rolle === "manager" ? scoutsVon(ich.id) : []),
|
||||
...betreuteIds(ich),
|
||||
])].filter((id) => id !== ich.id);
|
||||
|
||||
leute = ids.length
|
||||
? d.prepare(
|
||||
`SELECT id, name, rolle FROM personen
|
||||
WHERE aktiv = 1 AND id IN (${ids.map(() => "?").join(",")})
|
||||
ORDER BY rolle, name`).all(...ids)
|
||||
: [];
|
||||
}
|
||||
|
||||
const heuteZaehler = d.prepare(
|
||||
`SELECT COUNT(*) AS n FROM termine t
|
||||
@@ -123,15 +175,26 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => {
|
||||
});
|
||||
|
||||
const versorgt = segmente.filter((s) => s.stufe !== "offen").length;
|
||||
|
||||
/* Ein Scout fuehrt Creator, kein "Team" im Sinne des Hauses. Das
|
||||
Wort auf dem Ring sagt deshalb, WEN er zaehlt -- sonst liest ein
|
||||
Scout "Team versorgt" und sucht die anderen vier Rollen darin. */
|
||||
const nurCreator = ich.rolle === "scout";
|
||||
|
||||
return res.json({
|
||||
art: "team",
|
||||
titel: "Team versorgt",
|
||||
titel: nurCreator ? "Creator versorgt" : "Team versorgt",
|
||||
prozent: segmente.length ? Math.round((versorgt / segmente.length) * 100) : 100,
|
||||
segmente,
|
||||
zahlen: [
|
||||
{ wert: segmente.length, schild: "im Team" },
|
||||
{ wert: segmente.length, schild: nurCreator ? "meine Creator" : "im Team" },
|
||||
{ wert: segmente.filter((s) => s.stufe === "dran").length, schild: "heute dran" },
|
||||
{ wert: segmente.filter((s) => s.stufe === "offen").length, schild: "liegt liegen" },
|
||||
/* "liegt liegen" stand hier und war nicht zu verstehen -- Filipe
|
||||
wortwoertlich: "keine ahnung was das bedeuten soll". Gezaehlt
|
||||
werden Personen mit unerledigten Terminen aus der
|
||||
VERGANGENHEIT. "Ueberfaellig" sagt das in einem Wort und ist
|
||||
der Begriff, der auch sonst im Haus dafuer steht. */
|
||||
{ wert: segmente.filter((s) => s.stufe === "offen").length, schild: "überfällig" },
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user