- 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>
5.1 KiB
5.1 KiB
Seitenansicht und PDF-Export
Die Seitenansicht ist rein lesend und verändert keine Projektdaten.
Aufruf
- Projektseite → Button Seitenansicht öffnet
/projects/:projectId/printin 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
- Deckblatt (A4 hoch) – tabellarisch: Projekt, Planverfasser, Dokument, Planstände (aus benannten Sicherungspunkten) und Inhalt. Leere Angaben erscheinen als orangefarbenes „[ergänzen]“.
- Verteilerübersicht (quer) – Versorgungsstruktur und Tabelle je Verteiler mit Stromkreisanzahl, Pinst (Anzahl × Leistung je Stück), PGeräte (mit Geräte-GZF), Verteiler-GZF, Pgl, IB und „Σ inkl. unterlagert“.
- Verteilerpläne (quer, je Verteiler) – Titelleiste mit Verteilernummer, Bezeichnung, Örtlichkeit, Netzart, „Gespeist von“ und Pgl; 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:
fedFromist 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. - IB ist ein symmetrischer Drehstromwert S / (√3 · U3~) mit S aus P / cos φ je Gerätezeile (fehlendes cos φ = 1) und Verteiler-GZF.
- Corporate Design: Farben (
--pd-*insrc/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 0008) 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, Migration0008), global wie das Logo. GET /api/document-brandingliefert zusätzlichoffice: { officeName, officeAddress }.PUT /api/document-branding/officemit{ "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(Migration0007). GET /api/document-branding→{ logo: { mimeType, fileName, sizeBytes, updatedAtIso } | null }GET /api/document-branding/logo→ Bilddaten (404ohne Logo), mitX-Content-Type-Options: nosniffund restriktiver CSP.PUT /api/document-branding/logomit{ "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-Regelnsrc/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 Tabellensrc/frontend/print/print-document.css– Layout, auf.print-viewbegrenztsrc/frontend/components/distribution-board-info-card.tsx– Infokarte im Bearbeiten-Dialog der Verteilung