From d9966c9623978b842e87e4cbc48962155a55a917 Mon Sep 17 00:00:00 2001 From: Andrei Laas Date: Tue, 29 Sep 2026 21:03:50 +0200 Subject: [PATCH] Personalnummer im gedruckten Organigramm, wahlweise Von Max gewuenscht, ausdruecklich mit Auswahl oben. Ein Haekchen in "Was soll aufs Papier?" stellt die Nummer hinter den Namen -- nicht in eine eigene Zeile: auf einem Blatt mit zweihundert Kaesten kostet jede zusaetzliche Zeile Massstab, und der entscheidet darueber, ob das Blatt noch lesbar ist. Angeboten auf jeder Tiefe, nicht nur bei "mit Personen". Die Leitung einer Einheit steht auch auf den Blaettern, die sonst keine Namen fuehren; ein Haekchen, das dort fehlte, saehe aus, als gaebe es dort keine Namen. Als Kontext statt als Eigenschaft durch den Baum: die Angabe betrifft eine einzige Zeile ganz unten, muesste aber sonst durch vier Signaturen der Seitenerzeugung durchgereicht werden. Und die Kennung der Messung traegt den Schalter mit -- die Zeilen werden breiter, also muss der Massstab neu gemessen werden, sonst liefe das Blatt ueber den Rand. --- components/orgchart/PrintChart.tsx | 39 ++++++++++++++++++++++++++-- tests/components/PrintChart.test.tsx | 28 ++++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/components/orgchart/PrintChart.tsx b/components/orgchart/PrintChart.tsx index 9f70c0b..7f5bcbb 100644 --- a/components/orgchart/PrintChart.tsx +++ b/components/orgchart/PrintChart.tsx @@ -2,7 +2,7 @@ import { ChevronRight, Printer } from "lucide-react"; import Link from "next/link"; -import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react"; +import { createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react"; import { Button } from "@/components/ui/Button"; import { fmtDate } from "@/lib/format"; import type { PrintModel, PrintPerson, PrintUnit } from "@/lib/orgchart-print"; @@ -40,6 +40,16 @@ const TIEFEN: { wert: Tiefe; label: string; hinweis: string }[] = [ { wert: "personen", label: "mit Personen", hinweis: "je Abteilung ein Blatt, mit allen Namen" }, ]; +/** + * Ob die Personalnummer mitgedruckt wird. + * + * Als Kontext und nicht als Eigenschaft durch den Baum: die Angabe betrifft + * eine einzige Zeile ganz unten (PersonZeile), müsste aber sonst durch jede + * Ebene der Seitenerzeugung durchgereicht werden — vier Signaturen für ein + * Häkchen. Gewünscht von Max am 30.09., ausdrücklich mit Wahlmöglichkeit. + */ +const NummerImDruck = createContext(false); + type Format = "a4" | "a3"; // Die Satzfläche ist die Blattgrösse abzüglich der Ränder aus @page, ein // wenig knapper gerechnet. Die Vorschau bekommt genau diese Masse fest @@ -160,6 +170,7 @@ function seitenBauen(model: PrintModel, bereiche: PrintUnit[], tiefe: Tiefe, asO export function PrintChart({ model, asOf, today }: { model: PrintModel; asOf: string; today: string }) { const [format, setFormat] = useState("a4"); const [tiefe, setTiefe] = useState("team"); + const [mitNummer, setMitNummer] = useState(false); const [gewaehlt, setGewaehlt] = useState>(() => new Set(model.divisions.map((d) => d.id))); const [schritt, setSchritt] = useState<"auswahl" | "vorschau">("auswahl"); @@ -203,6 +214,7 @@ export function PrintChart({ model, asOf, today }: { model: PrintModel; asOf: st } return ( +