import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js"; import * as fs from "fs" import { PDFDocument, StandardFonts } from "pdf-lib"; import { xml2pdf } from "./elements/xml2pdf.js"; import moment from "moment"; import { Enums, Heizungsstatus } from "#lib/server/prisma.js"; import { copyPage } from "./utils/copyPage.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Server.js"; /* -------------------------------- Pdf Tools ------------------------------- */ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) { const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64"); const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF) const page3 = copyPage(pdf.getPages()[0]); pdf.addPage(page3); const pages = pdf.getPages() // const template = VerbrauchsausweisWohnen2016Template as Template; const berechnungen = await endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Server(ausweis, aufnahme, objekt); const height = pages[0].getHeight() const width = pages[0].getWidth() const font = await pdf.embedFont(StandardFonts.Helvetica) const bold = await pdf.embedFont(StandardFonts.HelveticaBold) const form = pdf.getForm() form.updateFieldAppearances(font) const marginX = 60; const marginY = 150; benutzer = benutzer || { vorname: "Max", name: "Mustermann", adresse: "Musterstraße 123", plz: "12345", ort: "Beispielhausen" }; const translateHeizungsstatus: Record = { BEHEIZT: "beheizt", NICHT_VORHANDEN: "nicht vorhanden", UNBEHEIZT: "unbeheizt" } const innerWidth = pages[0].getWidth() - marginX * 2; const stromverbrauchEnthaelt = [] if (ausweis.stromverbrauch_enthaelt_beleuchtung) { stromverbrauchEnthaelt.push("Beleuchtung") } if (ausweis.stromverbrauch_enthaelt_heizung) { stromverbrauchEnthaelt.push("Heizung") } if (ausweis.stromverbrauch_enthaelt_kuehlung) { stromverbrauchEnthaelt.push("Kühlung") } if (ausweis.stromverbrauch_enthaelt_lueftung) { stromverbrauchEnthaelt.push("Lüftung") } if (ausweis.stromverbrauch_enthaelt_warmwasser) { stromverbrauchEnthaelt.push("Warmwasser") } if (ausweis.stromverbrauch_enthaelt_sonstige) { stromverbrauchEnthaelt.push("Sonstige") } const layout = xml2pdf(` ${benutzer.vorname} ${benutzer.name} ${benutzer.adresse} ${benutzer.plz} ${benutzer.ort} Datenblatt Energieausweis Ausweis ID: ${ausweis.id} Gebäudedaten Adresse: ${objekt.adresse}, ${objekt.plz} ${objekt.ort} Neubau Vermietung/Verkauf Modernisierung Sonstiges Baujahr Gebäude: ${aufnahme.baujahr_gebaeude.join(", ")} Baujahr Heizung: ${aufnahme.baujahr_heizung.join(", ")} Nutzfläche: Beheizte Nutzfläche ${aufnahme.nutzflaeche} m² Lüftungskonzept: ${aufnahme.lueftung} Gebäudetyp: ${aufnahme.gebaeudetyp} Dachgeschoss: ${translateHeizungsstatus[aufnahme.dachgeschoss || "NICHT_VORHANDEN"]} Keller: ${translateHeizungsstatus[aufnahme.keller || "NICHT_VORHANDEN"]} Baujahr Klimaanlage: ${aufnahme.baujahr_klima.join(", ")} Anlage zur Kühlung: ${aufnahme.kuehlung ? "Ja" : "Nein"} Leerstand: ${aufnahme.leerstand || 0}% Verbrauch Von: ${moment(ausweis.startdatum).format("DD.MM.YYYY")} Von: ${moment(ausweis.startdatum).add("1", "years").format("DD.MM.YYYY")} Von: ${moment(ausweis.startdatum).add("2", "years").format("DD.MM.YYYY")} Bis: ${moment(ausweis.startdatum).add("1", "year").format("DD.MM.YYYY")} Bis: ${moment(ausweis.startdatum).add("2", "years").format("DD.MM.YYYY")} Bis: ${moment(ausweis.startdatum).add("3", "years").format("DD.MM.YYYY")} ${ausweis.brennstoff_1} ${ausweis.verbrauch_1} ${ausweis.einheit_1} ${ausweis.verbrauch_2} ${ausweis.einheit_1} ${ausweis.verbrauch_3} ${ausweis.einheit_1} zusätzliche Heizquelle ${ausweis.brennstoff_2 || ""} ${ausweis.verbrauch_4 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_5 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_6 || ""} ${ausweis.einheit_2 || ""} Stromverbrauch Von: ${moment(ausweis.startdatum).format("DD.MM.YYYY")} Von: ${moment(ausweis.startdatum).add("1", "years").format("DD.MM.YYYY")} Von: ${moment(ausweis.startdatum).add("2", "years").format("DD.MM.YYYY")} Bis: ${moment(ausweis.startdatum).add("1", "year").format("DD.MM.YYYY")} Bis: ${moment(ausweis.startdatum).add("2", "years").format("DD.MM.YYYY")} Bis: ${moment(ausweis.startdatum).add("3", "years").format("DD.MM.YYYY")} ${ausweis.strom_1} ${ausweis.strom_2} ${ausweis.strom_3} Im Stromverbrauch enthalten: ${stromverbrauchEnthaelt.join(", ")} Warmwasseranteil: ${ausweis.anteil_warmwasser_1}% `, { "default": font, bold: bold }) const layoutPage2 = xml2pdf(` Stand der Technik: Heizungsanlage Zentralheizung Einzelöfen Durchlauferhitzer Standardkessel Solarsystem für Warmwasser Wärmepumpe Niedertemperaturkessel Brennwertkessel Warmwasserrohre gedämmt Heizungsrohre gedämmt Zirkulation Raumtemperaturregelung Fenster/Dachfenster/Türen Einfachglas Doppelverglasung Isolierverglasung Passivhausfenster Alle Fenster dicht Fenster teilweise undicht Türen teilweise undicht Alle Türen dicht Rollladenkästen gedämmt Wärmedämmung Kelleraußenwand gedämmt Kellerdecke gedämmt Außenwand gedämmt Dachgeschoss min. 12cm gedämmt Dachgeschoss gedämmt Oberste Geschossdecke gedämmt Oberste Geschossdecke min. 12cm gedämmt `, { "default": font, bold }) const images: string[][] = [] for (const bild of bilder) { let badge: string[]; let image: string = ""; if (bild.kategorie === Enums.BilderKategorie.Gebaeude) { continue; } if (bild.id) { image = `` } if (images.length > 0) { let badge = images[images.length - 1] if (badge.length == 3) { badge = [image] images.push(badge) } else { badge.push(image) } } else { badge = [image] images.push(badge) } } const layoutPage3 = xml2pdf(` ${images.map(badge => `${badge.join("")}`).join("")} `, { "default": font }) await layout.draw(pages[0], 0, pages[0].getHeight()) await layoutPage2.draw(pages[1], 0, pages[1].getHeight()) await layoutPage3.draw(pages[2], 0, pages[2].getHeight()) return pdf.save(); }