Compare commits
2
Commits
ff8ea38595
...
5925a61dfe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5925a61dfe | ||
|
|
e3f7826ca5 |
@@ -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" },
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
@@ -313,17 +313,27 @@
|
||||
gross: true, rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'uebersicht.html', szene: 'showbuehne' },
|
||||
{ name: 'Aufgaben', unter: 'Offen, in Arbeit, Review', zeichen: 'aufgaben', ton: 13,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'aufgaben.html', szene: 'garage' },
|
||||
/* REIHENFOLGE: CHAT, KALENDER, CALLS (08.09.2026).
|
||||
|
||||
Filipe, screen31: "die reihenfolge von denen, links der chat,
|
||||
mitte den kalender und rechts calls & protokolle".
|
||||
|
||||
Vorher stand der Chat hinter "Calls & Protokolle", mit der
|
||||
Begruendung, dass beides Gespraech ist. Die neue Ordnung ist
|
||||
die nach VERBINDLICHKEIT, und sie liest sich von links nach
|
||||
rechts: Der Chat laeuft nebenher, der Kalender bindet an eine
|
||||
Uhrzeit, das Protokoll haelt fest, was verabredet wurde.
|
||||
|
||||
Die Toene bleiben an ihren Kacheln (Chat 4, Kalender 8, Calls
|
||||
15) -- sie kennzeichnen die Kachel, nicht ihren Platz. Wer sie
|
||||
beim Umsortieren mitwandern liesse, haette am naechsten Tag
|
||||
zwei Kacheln in derselben Farbe. */
|
||||
{ name: 'Chat', unter: 'Nachrichten mit deinem Team', zeichen: 'chat', ton: 4,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'chat.html', szene: 'lounge' },
|
||||
{ name: 'Kalender', unter: 'Termine und Calls', zeichen: 'kalender', ton: 8,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'kalender.html', szene: 'skyline' },
|
||||
{ name: 'Calls & Protokolle', unter: 'Gespräche mit To-dos', zeichen: 'calls', ton: 15,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'calls.html', szene: 'lounge' },
|
||||
/* CHAT (06.09.2026). Steht neben "Calls & Protokolle", weil
|
||||
beides Gespraech ist -- das eine geplant und protokolliert,
|
||||
das andere zwischendurch. Ton 14 (Gruen), weil die taegliche
|
||||
Gruppe sonst 3, 11, 16, 9 und 2 traegt und sich der Chat
|
||||
davon abheben soll. */
|
||||
{ name: 'Chat', unter: 'Nachrichten mit deinem Team', zeichen: 'chat', ton: 4,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'chat.html', szene: 'lounge' },
|
||||
{ name: 'Dateien', unter: 'Ablage und Freigaben', zeichen: 'dateien', ton: 19,
|
||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'dateien.html', szene: 'arena' },
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user