leistungsbilanz-ts/docs/print-view.md

6.3 KiB
Raw Blame History

Seitenansicht und PDF-Export

Die Seitenansicht ist rein lesend und verändert keine Projektdaten. Die Aktionen für Büroangaben und Logo speichern dagegen globale Einstellungen. Projekt- und Verteilerangaben werden in den jeweiligen Bearbeitungsdialogen über Projektbefehle mit Undo/Redo gepflegt.

Beim Laden werden die Projektrevisionen aller Stromkreislisten und ein abschließend erneut gelesener Projektstand verglichen. Ändert sich das Projekt währenddessen, wird statt eines gemischten Datenstands eine Aufforderung zum Neuladen angezeigt. Eine bereits geladene Seitenansicht aktualisiert sich nicht automatisch bei späteren Änderungen in einem anderen Tab.

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, Pinst (Anzahl × Leistung je Stück), PGeräte (mit Geräte-GZF), Verteiler-GZF, Pgl, IB und „Σ inkl. unterlagert“.
  3. 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: fedFrom ist Freitext. Die Übersicht ordnet einen Verteiler nur dann unter, wenn der Text eindeutig der Nummer oder Bezeichnung eines anderen Verteilers entspricht (ohne Beachtung von Groß-/Kleinschreibung und äußeren Leerzeichen). Mehrdeutige Treffer bleiben ohne Zuordnung; „Σ 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-* 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 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, Migration 0008), 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).
  • Globale Büro-Einstellung, nicht Teil von Projekten, Revisionen, Snapshots oder Projektexport.
  • Tabelle document_branding_assets (Migration 0007).
  • 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

Bestehende Datenbanken

Vor dem Anwenden der additiven Migrationen 0007 und 0008 eine verifizierte Datenbanksicherung mit npm run db:backup erstellen. Die neuen Projekt- und Verteilerfelder bleiben bei bestehenden Datensätzen zunächst leer (null). Snapshot-Schema 6 enthält beide Feldgruppen; die unterstützten Versionen 1–5 werden beim Lesen hochgestuft. Restore und Projektkopie erhalten die neuen Angaben. Globale Büroangaben und Logo gehören zur Datenbanksicherung, nicht zum logischen Projektsnapshot oder Projekttransfer.