From cdfdb6c0014302632e0732cb049d64f39a01694f Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Tue, 15 Apr 2025 17:49:58 +0200 Subject: [PATCH] PDF gefixt !! --- src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts | 187 +++++++++++++++------ src/lib/pdf/pdfVerbrauchsausweisWohnen.ts | 187 ++++++++++++++------- 2 files changed, 266 insertions(+), 108 deletions(-) diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index dd2b0b1e..3f703eda 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -4,14 +4,12 @@ import { Enums } from "#lib/server/prisma.js"; import * as fs from "fs" import moment from "moment"; import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib"; -import { addCheckMark } from "./utils/checkbox.js"; import { addText } from "./utils/text.js"; import { addAnsichtsausweisLabel, addDatumGEG, addRegistriernummer } from "./utils/helpers.js"; import { getS3File } from "#lib/s3.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Server.js"; - export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, vorschau = true) { const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/GEG24_Nichtwohngebaeude.pdf", import.meta.url), "base64"); const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF) @@ -104,7 +102,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe }) if (ausweis.warmwasser_enthalten) { - pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { + pages[3].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, y: height - 299, size: 10 @@ -113,30 +111,73 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) { - addCheckMark(pages[0], 213, height - 334) + pages[0].drawText("x", { + x: 214, + y: height - 342, + size: 10, + font: bold + }) } else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) { - addCheckMark(pages[0], 213, height - 345) + pages[0].drawText("x", { + x: 214, + y: height - 353, + size: 10, + font: bold + }) } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) { - addCheckMark(pages[0], 355, height - 334) + pages[0].drawText("x", { + x: 356, + y: height - 342, + size: 10, + font: bold + }) } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) { - addCheckMark(pages[0], 355, height - 345) + pages[0].drawText("x", { + x: 356, + y: height - 353, + size: 10, + font: bold + }) } // Kühlung - if (aufnahme.kuehlung === "1") { - addCheckMark(pages[0], 213, height - 362.5) - } else { - addCheckMark(pages[0], 355, height - 373.5) + if (aufnahme.kuehlung === "1" && aufnahme.kuehlung !== null) { + pages[0].drawText("x", { + x: 356, + y: height - 370.5, + size: 10, + font: bold + }) } if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) { - addCheckMark(pages[0], 213, height - 406) + pages[0].drawText("x", { + x: 214, + y: height - 414, + size: 10, + font: bold + }) } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung) { - addCheckMark(pages[0], 213, height - 417) + pages[0].drawText("x", { + x: 214, + y: height - 425, + size: 10, + font: bold + }) } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Modernisierung) { - addCheckMark(pages[0], 344.5, height - 406) + pages[0].drawText("x", { + x: 345.5, + y: height - 414, + size: 10, + font: bold + }) } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Sonstiges) { - addCheckMark(pages[0], 463, height - 417) + pages[0].drawText("x", { + x: 464, + y: height - 425, + size: 10, + font: bold + }) } // Aushangpflicht // addCheckMark(pages[0], 463, height - 406) @@ -162,11 +203,21 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe } } - // Checkmark Angabe energetische Qualität des Gebäudes. - addCheckMark(pages[0], 40, height - 550) + // Checkmark Verbrauchsausweis. + pages[0].drawText("x", { + x: 41, + y: height - 558, + size: 10, + font: bold + }) // Datenerhebung durch Eigentümer - addCheckMark(pages[0], 295, height - 580) + pages[0].drawText("x", { + x: 296.5, + y: height - 587.5, + size: 10, + font: bold + }) // Ausstellungsdatum pages[0].drawText(moment().format("DD.MM.YYYY"), { @@ -187,7 +238,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe // Stempel und Unterschrift if (ausweis.ausgestellt || !vorschau) { const stempel = await pdf.embedPng(fs.readFileSync(new URL("../../../public/pdf/images/stempel-unterschrift.png", import.meta.url), "base64")); - const stempelHeight = 60 + const stempelHeight = 65 pages[0].drawImage(stempel, { x: 450, @@ -426,35 +477,75 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe addEnergieverbrauchSkalaPfeile(pages[2]) if (ausweis.warmwasser_enthalten) { - addCheckMark(pages[2], 41, height - 293) + pages[2].drawText("x", { + x: 42, + y: height - 301, + size: 10, + font: bold + }) } - if (aufnahme.kuehlung === "1") { - addCheckMark(pages[2], 41, height - 305) + if (ausweis.kuehlung_enthalten) { + pages[2].drawText("x", { + x: 42, + y: height - 313, + size: 10, + font: bold + }) } if (ausweis.stromverbrauch_enthaelt_heizung) { - addCheckMark(pages[2], 41, height - 456) + pages[2].drawText("x", { + x: 42, + y: height - 464, + size: 10, + font: bold + }) } if (ausweis.stromverbrauch_enthaelt_warmwasser) { - addCheckMark(pages[2], 131, height - 456) + pages[2].drawText("x", { + x: 132, + y: height - 464, + size: 10, + font: bold + }) } if (ausweis.stromverbrauch_enthaelt_lueftung) { - addCheckMark(pages[2], 218, height - 456) + pages[2].drawText("x", { + x: 219, + y: height - 464, + size: 10, + font: bold + }) } if (ausweis.stromverbrauch_enthaelt_beleuchtung) { - addCheckMark(pages[2], 281, height - 456) + pages[2].drawText("x", { + x: 282, + y: height - 464, + size: 10, + font: bold + }) } if (ausweis.stromverbrauch_enthaelt_kuehlung) { - addCheckMark(pages[2], 422, height - 456) + pages[2].drawText("x", { + x: 423, + y: height - 464, + size: 10, + font: bold + }) } if (ausweis.stromverbrauch_enthaelt_sonstige) { - addCheckMark(pages[2], 492, height - 456) + pages[2].drawText("x", { + x: 493, + y: height - 464, + size: 10, + font: bold + }) } addText(pages[2], berechnungen?.primaerEnergieVerbrauchGesamt.toString() || "", 475, height - 637, 10, font) @@ -548,7 +639,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe const addVerbrauch = addVerbrauchGenerator(); - if (ausweis.warmwasser_enthalten) { + if (!ausweis.warmwasser_enthalten) { // Mit Warmwasserzuschlag addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), @@ -556,7 +647,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe ausweis.brennstoff_1 || "", berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(), - Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), + "0", berechnungen?.endEnergieVerbrauchKuehlungsZuschlag_1, Math.round(berechnungen?.energieVerbrauchHeizung_1 || 0).toString(), berechnungen?.durchschnittsKlimafaktor.toString(), @@ -595,22 +686,22 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe // TODO - // if (!ausweis.warmwasser_enthalten) { - // /** - // * Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m² - // * @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2 - // */ - // addVerbrauch( - // moment(ausweis.startdatum).format("MM.YYYY"), - // moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - // "Warmwasserzuschlag", - // berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), - // Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), - // Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), - // 0, - // "0" - // ); - // } + if (!ausweis.warmwasser_enthalten) { + /** + * Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m² + * @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2 + */ + addVerbrauch( + moment(ausweis.startdatum).format("MM.YYYY"), + moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), + "Warmwasserzuschlag", + berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), + Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), + Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), + 0, + "0" + ); + } if (aufnahme.leerstand && aufnahme.leerstand > 0) { /** @@ -642,7 +733,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe } } - if (aufnahme.kuehlung === "1") { + if (aufnahme.kuehlung) { /** * Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m² * Primärenergiefaktor Strom @@ -655,7 +746,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe "", // TODO // berechnungen?.primaerfaktorww.toString(), - Math.round(berechnungen?.kuehlungsZuschlag || 0).toString(), + Math.round(berechnungen?.kuehlungsZuschlag_1 || 0).toString(), "0", 0, "" diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 14c1e6f8..5c684ff3 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -4,7 +4,6 @@ import { Enums } from "#lib/server/prisma.js"; import * as fs from "fs" import moment from "moment"; import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib"; -import { addCheckMark } from "./utils/checkbox.js"; import { addText } from "./utils/text.js"; import { addAnsichtsausweisLabel, addDatumGEG, addRegistriernummer } from "./utils/helpers.js"; import { getS3File } from "#lib/s3.js"; @@ -12,7 +11,6 @@ import { endEnergieVerbrauchVerbrauchsausweis_2016_Server } from "#lib/Berechnun /* -------------------------------- Pdf Tools ------------------------------- */ - export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, vorschau = true) { const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/GEG24_Wohngebaeude_ohne_pfeile.pdf", import.meta.url), "base64"); const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF) @@ -29,6 +27,18 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne const font = await pdf.embedFont(StandardFonts.Helvetica) const bold = await pdf.embedFont(StandardFonts.HelveticaBold) + + for (let i = 0; i < pages.length; i++) { + const page = pages[i]; + if (vorschau) { + addAnsichtsausweisLabel(page, font) + } + addDatumGEG(page, font) + if (i !== pages.length - 1) { + addRegistriernummer(page, font, ausweis.registriernummer || "") + } + } + pages[0].drawText(`ID: ${ausweis.id || ""}`, { x: 211, y: height - 112.5, @@ -41,6 +51,23 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne size: 10 }) + const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); + + if (bild) { + const file = await getS3File("ibc-images", `${bild.id}.jpg`); + + if (file) { + let image: PDFImage; + image = await pdf.embedJpg(file) + pages[0].drawImage(image, { + x: 460.5, + y: height - 289, + width: 111, + height: 138 + }) + } + } + pages[0].drawText(objekt.adresse || "", { x: 211, y: height - 194, @@ -76,7 +103,16 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne y: height - 285, size: 10 }) - + + // Nach 82 aus Wohnfläche ermittelt + if (aufnahme.nutzflaeche == 0) { + pages[0].drawText("x", { + x: 275, + y: height - 285, + size: 10, + font: bold + }) + } pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, @@ -84,6 +120,14 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne size: 10 }) + if (ausweis.warmwasser_enthalten) { + pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { + x: 211, + y: height - 299, + size: 10 + }) + } + if (ausweis.warmwasser_enthalten) { pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, @@ -93,6 +137,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne } + const erneuerbareEnergienVerwendung = [] if (ausweis.alternative_heizung) { @@ -117,67 +162,98 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne size: 8 }) - if (ausweis.warmwasser_enthalten) { - pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { - x: 211, - y: height - 299, - size: 10 - }) - } - - if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) { - addCheckMark(pages[0], 213, height - 347) + pages[0].drawText("x", { + x: 214, + y: height - 293, + size: 10, + font: bold + }) } else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) { - addCheckMark(pages[0], 213, height - 358) + pages[0].drawText("x", { + x: 214, + y: height - 366, + size: 10, + font: bold + }) } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) { - addCheckMark(pages[0], 355, height - 347) + pages[0].drawText("x", { + x: 356, + y: height - 355, + size: 10, + font: bold + }) } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) { - addCheckMark(pages[0], 355, height - 358) + pages[0].drawText("x", { + x: 356, + y: height - 366, + size: 10, + font: bold + }) } // Kühlung if (aufnahme.kuehlung === "1") { - addCheckMark(pages[0], 213, height - 375.5) - } + pages[0].drawText("x", { + x: 213, + y: height - 383.5, + size: 10, + font: bold + }) + } else { + pages[0].drawText("x", { + x: 356, + y: height - 394.5, + size: 10, + font: bold + }) + } if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) { - addCheckMark(pages[0], 213, height - 419) + pages[0].drawText("x", { + x: 214, + y: height - 427, + size: 10, + font: bold + }) } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung || ausweis.ausstellgrund === Enums.Ausstellgrund.Verkauf) { - addCheckMark(pages[0], 213, height - 430) + pages[0].drawText("x", { + x: 214, + y: height - 438, + size: 10, + font: bold + }) } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Modernisierung) { - addCheckMark(pages[0], 344.5, height - 419) + pages[0].drawText("x", { + x: 345.5, + y: height - 427, + size: 10, + font: bold + }) } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Sonstiges) { - addCheckMark(pages[0], 463, height - 419) + pages[0].drawText("x", { + x: 464, + y: height - 427, + size: 10, + font: bold + }) } - const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); - - if (bild) { - const file = await getS3File("ibc-images", `${bild.id}.jpg`); - - if (file) { - let image: PDFImage; - image = await pdf.embedJpg(file) - pages[0].drawImage(image, { - x: 460.5, - y: height - 289, - width: 111, - height: 138 - }) - } - } - - // Nach 82 aus Wohnfläche ermittelt - if (aufnahme.nutzflaeche == 0) { - addCheckMark(pages[0], 274, height - 277) - } - - // Checkmark Angabe energetische Qualität des Gebäudes. - addCheckMark(pages[0], 43, height - 560) + // Checkmark Angabe Verbrauchsausweis + pages[0].drawText("x", { + x: 44, + y: height - 568, + size: 10, + font: bold + }) // Datenerhebung durch Eigentümer - addCheckMark(pages[0], 298, height - 590) + pages[0].drawText("x", { + x: 299, + y: height - 598, + size: 10, + font: bold + }) // Ausstellungsdatum pages[0].drawText(moment().format("DD.MM.YYYY"), { @@ -198,7 +274,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne // Stempel und Unterschrift if (!vorschau) { const stempel = await pdf.embedPng(fs.readFileSync(new URL("../../../public/pdf/images/stempel-unterschrift.png", import.meta.url), "base64")); - const stempelHeight = 60 + const stempelHeight = 65 pages[0].drawImage(stempel, { x: 450, @@ -326,7 +402,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne } } - addEnergieverbrauchSkalaPfeile(pages[2]) + // CO2 Emissionen pages[2].drawText(berechnungen?.co2EmissionenGesamt.toString() || "", { @@ -336,6 +412,8 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne size: 10 }) + addEnergieverbrauchSkalaPfeile(pages[2]) + // Endenergieverbrauch pages[2].drawText(berechnungen?.endEnergieVerbrauchGesamt.toString() || "", { x: 455, @@ -593,16 +671,5 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten) } - for (let i = 0; i < pages.length; i++) { - const page = pages[i]; - if (vorschau) { - addAnsichtsausweisLabel(page, font) - } - addDatumGEG(page, font) - if (i !== pages.length - 1) { - addRegistriernummer(page, font, ausweis.registriernummer || "") - } - } - return pdf.save(); } \ No newline at end of file