Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5925a61dfe | ||
|
|
e3f7826ca5 |
@@ -50,7 +50,7 @@
|
|||||||
===================================================================== */
|
===================================================================== */
|
||||||
|
|
||||||
import express from "express";
|
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();
|
export const zentraleRouter = express.Router();
|
||||||
|
|
||||||
@@ -85,19 +85,71 @@ zentraleRouter.get("/workspace/api/zentrale", (req, res) => {
|
|||||||
ihrs?" gefuehrt. */
|
ihrs?" gefuehrt. */
|
||||||
const zeigt = req.person.sicht || req.person;
|
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 ----------
|
/* ---------- DAS TEAM ----------
|
||||||
Ein Segment je aktiver Person. Der Zustand einer Person ist
|
Ein Segment je Person im eigenen Verantwortungsbereich. Der
|
||||||
bewusst GROB in drei Stufen -- mehr taeuschte Genauigkeit vor,
|
Zustand einer Person ist bewusst GROB in drei Stufen -- mehr
|
||||||
die es nicht gibt (dieselbe Ueberlegung steht in VanVans Kranz).
|
taeuschte Genauigkeit vor, die es nicht gibt (dieselbe
|
||||||
|
Ueberlegung steht in VanVans Kranz).
|
||||||
|
|
||||||
frei - nichts Offenes, keine Termine heute -> ruhig
|
frei - nichts Offenes, keine Termine heute -> ruhig
|
||||||
dran - hat heute Termine -> die sind versorgt
|
dran - hat heute Termine -> die sind versorgt
|
||||||
offen - hat unerledigte Termine aus der VERGANGENHEIT
|
offen - hat unerledigte Termine aus der VERGANGENHEIT
|
||||||
-> das ist das, was liegen bleibt
|
-> das ist das, was liegen bleibt
|
||||||
*/
|
*/
|
||||||
const leute = d.prepare(
|
let leute;
|
||||||
`SELECT id, name, rolle FROM personen WHERE aktiv = 1 ORDER BY rolle, name`).all();
|
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(
|
const heuteZaehler = d.prepare(
|
||||||
`SELECT COUNT(*) AS n FROM termine t
|
`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;
|
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({
|
return res.json({
|
||||||
art: "team",
|
art: "team",
|
||||||
titel: "Team versorgt",
|
titel: nurCreator ? "Creator versorgt" : "Team versorgt",
|
||||||
prozent: segmente.length ? Math.round((versorgt / segmente.length) * 100) : 100,
|
prozent: segmente.length ? Math.round((versorgt / segmente.length) * 100) : 100,
|
||||||
segmente,
|
segmente,
|
||||||
zahlen: [
|
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 === "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' },
|
gross: true, rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'uebersicht.html', szene: 'showbuehne' },
|
||||||
{ name: 'Aufgaben', unter: 'Offen, in Arbeit, Review', zeichen: 'aufgaben', ton: 13,
|
{ name: 'Aufgaben', unter: 'Offen, in Arbeit, Review', zeichen: 'aufgaben', ton: 13,
|
||||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'aufgaben.html', szene: 'garage' },
|
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,
|
{ name: 'Kalender', unter: 'Termine und Calls', zeichen: 'kalender', ton: 8,
|
||||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'kalender.html', szene: 'skyline' },
|
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'kalender.html', szene: 'skyline' },
|
||||||
{ name: 'Calls & Protokolle', unter: 'Gespräche mit To-dos', zeichen: 'calls', ton: 15,
|
{ name: 'Calls & Protokolle', unter: 'Gespräche mit To-dos', zeichen: 'calls', ton: 15,
|
||||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'calls.html', szene: 'lounge' },
|
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,
|
{ name: 'Dateien', unter: 'Ablage und Freigaben', zeichen: 'dateien', ton: 19,
|
||||||
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'dateien.html', szene: 'arena' },
|
rollen: ['spicy', 'admin', 'manager', 'creator', 'scout'], ziel: 'dateien.html', szene: 'arena' },
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in New Issue
Block a user