forked from jappel/leistungsbilanz-ts
- Project settings gain siteAddress, workStage, projectLead and projectEditor (project.update-settings schema version 3, migration 0009); versions 2 and 1 stay executable and keep the current cover values. Snapshot schema 6 carries the fields; older versions upgrade with null. - Global office profile (office name/address) next to the document logo: table document_branding_settings, PUT /api/document-branding/office, editable from the print view toolbar. - Cover page reads all fields; empty values show the "[ergänzen]" marker. The Planstände editor column shows the project editor. - Shared logo constants moved to a dependency-free module so the Next.js bundler can import them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
106 lines
5.1 KiB
Markdown
106 lines
5.1 KiB
Markdown
# Seitenansicht und PDF-Export
|
||
|
||
Die Seitenansicht ist rein lesend und verändert keine Projektdaten.
|
||
|
||
## Aufruf
|
||
|
||
- Projektseite → Button **Seitenansicht** öffnet
|
||
`/projects/:projectId/print` in einem neuen Tab.
|
||
- **Als PDF speichern / Drucken** nutzt den Druckdialog des Browsers
|
||
(Ziel „Als PDF speichern“). Der Dokumenttitel `Leistungsbilanz – <Projekt>`
|
||
wird als Dateiname vorgeschlagen.
|
||
- **Planformat** schaltet die Verteilerpläne zwischen A4 quer und A3 quer um.
|
||
Deckblatt bleibt A4 hoch.
|
||
- **Büroangaben** pflegt Büroname und Büroanschrift (Planverfasser, für alle
|
||
Projekte).
|
||
- **Logo hinterlegen / ersetzen / entfernen** verwaltet das Büro-Logo.
|
||
|
||
## Seiten
|
||
|
||
1. **Deckblatt (A4 hoch)** – tabellarisch: Projekt, Planverfasser, Dokument,
|
||
Planstände (aus benannten Sicherungspunkten) und Inhalt. Leere Angaben
|
||
erscheinen als orangefarbenes „[ergänzen]“.
|
||
2. **Verteilerübersicht (quer)** – Versorgungsstruktur und Tabelle je
|
||
Verteiler mit Stromkreisanzahl, P<sub>inst</sub> (Anzahl × Leistung je
|
||
Stück), P<sub>Geräte</sub> (mit Geräte-GZF), Verteiler-GZF,
|
||
P<sub>gl</sub>, I<sub>B</sub> und „Σ inkl. unterlagert“.
|
||
3. **Verteilerpläne (quer, je Verteiler)** – Titelleiste mit
|
||
Verteilernummer, Bezeichnung, Örtlichkeit, Netzart, „Gespeist von“ und
|
||
P<sub>gl</sub>; darunter Kopfkomponenten, Gruppen, Stromkreise
|
||
(mehrzeilige mit Sammelzeile und eingerückten Gerätezeilen),
|
||
Gruppensummen und Verteilersumme. Fehlende Kabelangaben sind als „offen“
|
||
markiert. Die Titelleiste steht im Tabellenkopf und wiederholt sich beim
|
||
Drucken auf Folgeseiten.
|
||
|
||
Seitenformat, Ränder und „Seite x von y“ kommen beim Drucken aus benannten
|
||
`@page`-Regeln (`lb-portrait`, `lb-landscape`), die die Seite zur Laufzeit
|
||
einfügt. Die Bildschirmansicht zeigt Blätter in Papiergröße; die exakte
|
||
Seitenaufteilung langer Verteilerpläne entsteht erst beim Drucken.
|
||
|
||
## Vorläufige Punkte
|
||
|
||
- **Einspeisung / Hierarchie:** `fedFrom` ist Freitext. Die Übersicht ordnet
|
||
einen Verteiler nur dann unter, wenn der Text genau der Nummer oder
|
||
Bezeichnung eines anderen Verteilers entspricht; „Σ inkl. unterlagert“ ist
|
||
eine einfache Summe ohne übergeordneten GZF. Die fachliche Verknüpfung
|
||
(Verteiler und/oder speisender Stromkreis) und die Summierungslogik sind
|
||
offen.
|
||
- **I<sub>B</sub>** ist ein symmetrischer Drehstromwert
|
||
S / (√3 · U<sub>3~</sub>) mit S aus P / cos φ je Gerätezeile
|
||
(fehlendes cos φ = 1) und Verteiler-GZF.
|
||
- **Corporate Design:** Farben (`--pd-*` in
|
||
`src/frontend/print/print-document.css`) und Schrift (Arial) sind aus Logo
|
||
und kbp-Präsentationsmaterial abgeleitet und werden durch die offizielle
|
||
CD-Vorgabe ersetzt, falls diese abweicht.
|
||
- **Planstände:** Die Spalte „Bearbeitung“ zeigt für jeden Planstand die
|
||
aktuelle Bearbeitung aus den Projekteinstellungen, weil Sicherungspunkte
|
||
(noch) keinen Bearbeiter speichern.
|
||
|
||
## Datenquellen des Deckblatts
|
||
|
||
| Feld | Quelle |
|
||
|---|---|
|
||
| Bauvorhaben, Bauherr, Projektnummern, Beschreibung | Projekteinstellungen |
|
||
| Anschrift Bauvorhaben, Leistungsphase, Projektleitung, Bearbeitung | Projekteinstellungen → Abschnitt „Deckblatt“ (`siteAddress`, `workStage`, `projectLead`, `projectEditor`) |
|
||
| Büro, Anschrift Büro | Seitenansicht → „Büroangaben“ (global) |
|
||
| Stand, Datenstand, Anzahl Verteiler, Inhalt | automatisch |
|
||
| Planstände | benannte Sicherungspunkte |
|
||
|
||
Die vier Projektfelder laufen über `project.update-settings` (Schema-Version
|
||
3, Migration `0009`) und sind Teil von Snapshot-Schema 6 und Projektexport.
|
||
Im `PUT /api/projects/:projectId` sind sie optional; fehlende Felder behalten
|
||
ihren Wert.
|
||
|
||
## Büroangaben
|
||
|
||
- Tabelle `document_branding_settings` (Schlüssel/Wert, Migration `0009`),
|
||
global wie das Logo.
|
||
- `GET /api/document-branding` liefert zusätzlich
|
||
`office: { officeName, officeAddress }`.
|
||
- `PUT /api/document-branding/office` mit `{ "officeName", "officeAddress" }`
|
||
(max. 200 / 500 Zeichen, leerer Text = nicht gesetzt).
|
||
|
||
## Logo
|
||
|
||
- Globale Büro-Einstellung, nicht Teil von Projekten, Revisionen, Snapshots
|
||
oder Projektexport.
|
||
- Tabelle `document_branding_assets` (Migration `0008`).
|
||
- `GET /api/document-branding` → `{ logo: { mimeType, fileName, sizeBytes, updatedAtIso } | null }`
|
||
- `GET /api/document-branding/logo` → Bilddaten (`404` ohne Logo), mit
|
||
`X-Content-Type-Options: nosniff` und restriktiver CSP.
|
||
- `PUT /api/document-branding/logo` mit
|
||
`{ "fileName", "mimeType": "image/png" | "image/jpeg" | "image/svg+xml", "contentBase64" }`,
|
||
maximal 2 MB; der Dateiinhalt wird gegen das Format geprüft.
|
||
- `DELETE /api/document-branding/logo` → `204`.
|
||
|
||
## Code
|
||
|
||
- `src/app/projects/[projectId]/print/page.tsx` – Datenladen, Werkzeugleiste,
|
||
`@page`-Regeln
|
||
- `src/frontend/print/print-document-model.ts` – reine Berechnungen und
|
||
Formatierung (Tests: `tests/print-document-model.test.ts`)
|
||
- `src/frontend/print/print-document.tsx` – Blätter und Tabellen
|
||
- `src/frontend/print/print-document.css` – Layout, auf `.print-view`
|
||
begrenzt
|
||
- `src/frontend/components/distribution-board-info-card.tsx` – Infokarte im
|
||
Bearbeiten-Dialog der Verteilung
|