feat(validation): add editing versioning revalidation and aligned reports
This commit is contained in:
parent
f73a24df13
commit
302e542fda
28 changed files with 2691 additions and 406 deletions
|
|
@ -2,29 +2,75 @@ from __future__ import annotations
|
|||
|
||||
from pathlib import Path
|
||||
|
||||
from weasyprint import HTML
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.modules.orion.components import (
|
||||
AttachmentComponent,
|
||||
ChecklistComponent,
|
||||
CoverComponent,
|
||||
CustomerComponent,
|
||||
DeviceComponent,
|
||||
DryingComponent,
|
||||
EnvironmentComponent,
|
||||
EquipmentComponent,
|
||||
LoadingComponent,
|
||||
MeasurementComponent,
|
||||
ProgramComponent,
|
||||
RecommendationComponent,
|
||||
ReportComponent,
|
||||
StaticTextComponent,
|
||||
SummaryComponent,
|
||||
TocComponent,
|
||||
)
|
||||
from app.modules.orion.context import OrionContextBuilder, ReportContext
|
||||
from app.modules.orion.templates.report import render_document
|
||||
|
||||
|
||||
class OrionReportService:
|
||||
chapters = [
|
||||
"Deckblatt",
|
||||
"Inhaltsverzeichnis",
|
||||
"Zusammenfassung",
|
||||
"Gerät",
|
||||
"Kunde",
|
||||
"Normen",
|
||||
"Prüfmittel",
|
||||
"Programme",
|
||||
"Beladung",
|
||||
"Messungen",
|
||||
"Diagramme",
|
||||
"Empfehlungen",
|
||||
"Anlagen",
|
||||
]
|
||||
def __init__(self, session: Session, generated_dir: Path | None = None) -> None:
|
||||
self.session = session
|
||||
self.generated_dir = generated_dir or Path("/app/reports")
|
||||
|
||||
def render_pdf(self, title: str, output_path: Path) -> Path:
|
||||
chapter_markup = "".join(f"<section><h2>{chapter}</h2></section>" for chapter in self.chapters)
|
||||
html = f"<html><body><h1>{title}</h1>{chapter_markup}</body></html>"
|
||||
HTML(string=html).write_pdf(output_path)
|
||||
def render_html(self, validation_id: str) -> str:
|
||||
context = OrionContextBuilder(self.session, self.generated_dir).build(validation_id)
|
||||
components = self._components()
|
||||
chapters = [component.render(context) for component in components]
|
||||
return render_document(context, chapters)
|
||||
|
||||
def render_pdf(self, validation_id: str) -> Path:
|
||||
from weasyprint import HTML
|
||||
|
||||
context = OrionContextBuilder(self.session, self.generated_dir).build(validation_id)
|
||||
output_path = context.generated_dir / f"{context.validation.report_number}.pdf"
|
||||
html = self.render_html(validation_id)
|
||||
HTML(string=html, base_url=str(context.generated_dir)).write_pdf(output_path)
|
||||
return output_path
|
||||
|
||||
def _components(self) -> list[ReportComponent]:
|
||||
chapters: list[ReportComponent] = [
|
||||
StaticTextComponent("bq", "1. Funktionsqualifikation (BQ)", "Anlass, Ziel und gesetzliche Grundlagen werden anhand der erfassten Validierungsdaten bewertet."),
|
||||
StaticTextComponent("bq-goal", "1.1 Anlass und Ziel der Pruefung"),
|
||||
StaticTextComponent("legal", "1.2 Gesetzliche Grundlagen"),
|
||||
DeviceComponent(),
|
||||
StaticTextComponent("performance", "1.4 Leistungsueberpruefung"),
|
||||
ChecklistComponent(),
|
||||
StaticTextComponent("work-instructions", "Arbeitsanweisungen"),
|
||||
EnvironmentComponent(),
|
||||
StaticTextComponent("batch-control", "1.9 Chargenkontrolle"),
|
||||
ProgramComponent(),
|
||||
LoadingComponent(),
|
||||
StaticTextComponent("reference-load", "1.12 Referenzbeladung"),
|
||||
EquipmentComponent(),
|
||||
StaticTextComponent("equipment-thermo", "2.2 Pruefmittel zur thermoelektrischen Untersuchung"),
|
||||
StaticTextComponent("configuration", "3. Pruefkonfiguration"),
|
||||
MeasurementComponent(),
|
||||
StaticTextComponent("results", "4. Ergebnisse der Validierung"),
|
||||
DryingComponent(),
|
||||
RecommendationComponent(),
|
||||
AttachmentComponent(),
|
||||
StaticTextComponent("cycles", "6. Programmablaeufe / Zyklen"),
|
||||
StaticTextComponent("risk", "7. Risikoeinstufung und Abschlussgespraech"),
|
||||
StaticTextComponent("certificates", "8. Zertifikate"),
|
||||
StaticTextComponent("calibration-certificates", "9. Kalibrierzertifikate"),
|
||||
]
|
||||
return [CoverComponent(), SummaryComponent(), TocComponent(chapters), CustomerComponent(), *chapters]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue