diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts index 37ead769..b363db7d 100644 --- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts @@ -12,7 +12,7 @@ import { PERSISTENT_DIR } from "#lib/server/constants.js"; /* -------------------------------- Pdf Tools ------------------------------- */ -export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: UploadedGebaeudeBild[]) { +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]); @@ -365,8 +365,6 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa if (bild.uid) { image = `` - } else if (bild.data) { - image = `` } if (images.length > 0) { diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts index ba73e5ea..21daada6 100644 --- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts @@ -12,7 +12,7 @@ import { PERSISTENT_DIR } from "#lib/server/constants.js"; /* -------------------------------- Pdf Tools ------------------------------- */ -export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: UploadedGebaeudeBild[]) { +export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, 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]); @@ -308,8 +308,6 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau if (bild.uid) { image = `` - } else if (bild.data) { - image = `` } if (images.length > 0) { diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index 58677b90..bb41a6cb 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -1,4 +1,4 @@ -import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js"; +import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js"; import { Enums } from "#lib/server/prisma.js"; @@ -8,9 +8,11 @@ import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib" import { addCheckMark } from "./utils/checkbox.js"; import { addText } from "./utils/text.js"; import { addAnsichtsausweisLabel, addDatumGEG } from "./utils/helpers.js"; +import { PERSISTENT_DIR } from "#lib/server/constants.js"; +import { fileURLToPath } from "url"; -export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) { +export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient) { const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/GEG24_Nichtwohngebaeude.pdf", import.meta.url), "base64"); const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF) const pages = pdf.getPages() @@ -137,20 +139,15 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe - const gebaeudeBild = bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); + const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); - if (gebaeudeBild) { - let image: PDFImage | null; - try { - image = await pdf.embedJpg(gebaeudeBild.data) - } catch(e) { - try { - image = await pdf.embedPng(gebaeudeBild.data) - } catch(e) { - image = null; - } - } - if (image) { + if (bild) { + const path = `${PERSISTENT_DIR}/images/${bild.uid}.jpg`; + + if (fs.existsSync(path)) { + const file = fs.readFileSync(fileURLToPath(new URL(path, import.meta.url))) + let image: PDFImage; + image = await pdf.embedJpg(file) pages[0].drawImage(image, { x: 460.5, y: height - 289, diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 5f77f8bc..c3368939 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -48,40 +48,122 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne } } - const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "") + pages[0].drawText(aufnahme.gebaeudetyp || "", { + x: 211, + y: height - 166, + size: 10 + }) - const adresse = fillFormField("adresse", objekt.adresse || "") - + pages[0].drawText(objekt.adresse || "", { + x: 211, + y: height - 194, + size: 10 + }) - const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "") + pages[0].drawText(aufnahme.gebaeudeteil || "", { + x: 211, + y: height - 214.5, + size: 10 + }) - const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString()) + pages[0].drawText(aufnahme.baujahr_gebaeude?.toString() || "", { + x: 211, + y: height - 229.5, + size: 10 + }) - const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString()) + pages[0].drawText(aufnahme.baujahr_heizung?.toString() || "", { + x: 211, + y: height - 250, + size: 10 + }) - const einheiten = fillFormField("einheiten", (aufnahme.einheiten || 1).toString()) + pages[0].drawText(aufnahme.einheiten?.toString() || "", { + x: 211, + y: height - 271.5, + size: 10 + }) - const nutzflaeche = fillFormField("nutzflaeche", `${berechnungen?.energetischeNutzflaeche?.toString()}m²`) + pages[0].drawText(aufnahme.nutzflaeche?.toString() || "", { + x: 211, + y: height - 285, + size: 10 + }) - fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`) + pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + x: 211, + y: height - 298.5, + size: 10 + }) if (ausweis.warmwasser_enthalten) { - fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`) + pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + x: 211, + y: height - 312, + size: 10 + }) } - if (aufnahme.durchlauf_erhitzer && !ausweis.warmwasser_enthalten) { - fillFormField("energietraeger_warmwasser", "Strommix"); + + const erneuerbareEnergienVerwendung = [] + + if (ausweis.alternative_heizung) { + erneuerbareEnergienVerwendung.push("Heizung") } - toggleCheck("fensterlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung) - toggleCheck("schachtlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung) - toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) - toggleCheck("lueftungsanlage_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) + if (ausweis.alternative_kuehlung) { + erneuerbareEnergienVerwendung.push("Kühlung") + } - toggleCheck("anlass_neubau", ausweis.ausstellgrund == "Neubau") - toggleCheck("anlass_vermietung", ausweis.ausstellgrund == "Vermietung" || ausweis.ausstellgrund == "Verkauf") - toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung") - toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges") + if (ausweis.alternative_lueftung) { + erneuerbareEnergienVerwendung.push("Lüftung") + } + + if (ausweis.alternative_warmwasser) { + erneuerbareEnergienVerwendung.push("Warmwasser") + } + + pages[0].drawText(erneuerbareEnergienVerwendung.join(", "), { + x: 358, + y: height - 325, + size: 8 + }) + + if (ausweis.warmwasser_enthalten) { + pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + x: 211, + y: height - 299, + size: 10 + }) + } + + + if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) { + addCheckMark(pages[0], 213, height - 347) + } else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) { + addCheckMark(pages[0], 213, height - 358) + } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) { + addCheckMark(pages[0], 355, height - 347) + } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) { + addCheckMark(pages[0], 355, height - 358) + } + + // Kühlung + if (aufnahme.kuehlung) { + addCheckMark(pages[0], 213, height - 375.5) + } else { + addCheckMark(pages[0], 355, height - 386.5) + } + + if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) { + addCheckMark(pages[0], 213, height - 419) + } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung || ausweis.ausstellgrund === Enums.Ausstellgrund.Verkauf) { + addCheckMark(pages[0], 213, height - 430) + } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Modernisierung) { + addCheckMark(pages[0], 344.5, height - 419) + } else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Sonstiges) { + addCheckMark(pages[0], 463, height - 419) + } const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); @@ -150,35 +232,6 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne height: 50 }) - const erneuerbareEnergienVerwendung = [] - - if (ausweis.alternative_heizung) { - erneuerbareEnergienVerwendung.push("Heizung") - } - - if (ausweis.alternative_kuehlung) { - erneuerbareEnergienVerwendung.push("Kühlung") - } - - if (ausweis.alternative_lueftung) { - erneuerbareEnergienVerwendung.push("Lüftung") - } - - if (ausweis.alternative_warmwasser) { - erneuerbareEnergienVerwendung.push("Warmwasser") - } - - pages[0].drawText(erneuerbareEnergienVerwendung.join(", "), { - x: 358, - y: height - 337, - size: 8 - }) - - // Kühlung - if (aufnahme.kuehlung) { - addCheckMark(pages[0], 354, height - 376.5) - } - /* -------------------------------- Seite 2 -------------------------------- */ diff --git a/src/lib/server/ausweis.ts b/src/lib/server/ausweis.ts index a06672d0..ced5d156 100644 --- a/src/lib/server/ausweis.ts +++ b/src/lib/server/ausweis.ts @@ -31,9 +31,9 @@ export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient } if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { - return await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user) + return await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { - return await pdfVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, bilder, user) + return await pdfVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, bilder, user) } return null @@ -49,9 +49,9 @@ export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | Ver } if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { - return await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user) + return await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { - return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, bilder, user) + return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder) } return null