diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts index 3eb1607c..178a0233 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts @@ -20,7 +20,7 @@ export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016( if ((ausweis.gebaeude_aufnahme_allgemein.nutzflaeche || 0) > 0) { return ausweis.gebaeude_aufnahme_allgemein.nutzflaeche || 0; } else { - return (ausweis.gebaeude_aufnahme_allgemein.flaeche || 1) * faktorKeller; + return (ausweis.gebaeude_aufnahme_allgemein.flaeche || 0) * faktorKeller; } } diff --git a/src/lib/XML/getEmpfehlungen.ts b/src/lib/XML/getEmpfehlungen.ts index d309a04c..1e7812f8 100644 --- a/src/lib/XML/getEmpfehlungen.ts +++ b/src/lib/XML/getEmpfehlungen.ts @@ -1,33 +1,34 @@ -import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client"; +import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { Enums } from "@ibcornelsen/database/client"; import moment from "moment"; -export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnen, gebaeude: GebaeudeStammdaten): { +export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): { title: string, description: string, anlagenteil: string }[] { - let Warmwasserrohre_gedaemmt = gebaeude.warmwasser_rohre_gedaemmt; - let Heizungsrohre_gedaemmt = gebaeude.heizungsrohre_gedaemmt; - let Waermepumpe = gebaeude.waermepumpe; - let Kellerwand_gedaemmt = gebaeude.keller_wand_gedaemmt; - let Keller = ausweis.keller_beheizt; - let Kellerdecke_Kalraeume_gedaemmt = gebaeude.keller_decke_gedaemmt; - let Brennwertkessel = gebaeude.brennwert_kessel; - let baujahr_anlagesanlage = gebaeude.baujahr_heizung[0]; - let Zentralheizung = gebaeude.zentralheizung; - let photovoltaik = gebaeude.photovoltaik; - let Brennstoff = ausweis.brennstoff_1; - let Aussenwand_gedaemmt = gebaeude.aussenwand_gedaemmt; - let Dachgeschoss = gebaeude.dachgeschoss; - let Dachgeschoss_gedaemmt = gebaeude.dachgeschoss_gedaemmt; - let Oberste_Geschossdecke_gedaemmt = gebaeude.oberste_geschossdecke_gedaemmt; - let Einfachglas = gebaeude.einfach_verglasung; - let Doppelfenster = gebaeude.doppel_verglasung; - let Fenster_teilw_undicht = gebaeude.fenster_teilweise_undicht; + let Warmwasserrohre_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.warmwasser_rohre_gedaemmt; + let Heizungsrohre_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.heizungsrohre_gedaemmt; + let Waermepumpe = ausweis.gebaeude_aufnahme_allgemein.waermepumpe; + let Kellerwand_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.keller_wand_gedaemmt; + let Keller = ausweis.gebaeude_aufnahme_allgemein.keller; + let Kellerdecke_Kalraeume_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.keller_decke_gedaemmt; + let Brennwertkessel = ausweis.gebaeude_aufnahme_allgemein.brennwert_kessel; + let baujahr_anlagesanlage = ausweis.gebaeude_aufnahme_allgemein.baujahr_heizung[0]; + let Zentralheizung = ausweis.gebaeude_aufnahme_allgemein.zentralheizung; + let photovoltaik = ausweis.gebaeude_aufnahme_allgemein.photovoltaik; + let Brennstoff = ausweis.gebaeude_aufnahme_allgemein.brennstoff_1; + let Aussenwand_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.aussenwand_gedaemmt; + let Dachgeschoss = ausweis.gebaeude_aufnahme_allgemein.dachgeschoss; + let Dachgeschoss_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt; + let Oberste_Geschossdecke_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt; + let Einfachglas = ausweis.gebaeude_aufnahme_allgemein.einfach_verglasung; + let Doppelfenster = ausweis.gebaeude_aufnahme_allgemein.doppel_verglasung; + let Fenster_teilw_undicht = ausweis.gebaeude_aufnahme_allgemein.fenster_teilweise_undicht; let empfehlungen = []; - if (gebaeude.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) { + if (ausweis.gebaeude_aufnahme_allgemein.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) { empfehlungen.push({ "title" : "Erneuerung der Fenster", "description" : "Alte und undichte Fenster mit Wärmeschutzfenstern auswechseln.", @@ -35,13 +36,13 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnen, gebaeude: Geba }); } - if (gebaeude.dachgeschoss == "Unbeheizt" && !Oberste_Geschossdecke_gedaemmt) { + if (ausweis.gebaeude_aufnahme_allgemein.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) { empfehlungen.push({ "title" : "Zusätzliche Dämmung des Fußbodens des kalten Dachraumes", "description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.", "anlagenteil" : "Dach" }); - } else if (Dachgeschoss == "Beheizt" && !Dachgeschoss_gedaemmt) { + } else if (Dachgeschoss == Enums.Heizungsstatus.BEHEIZT && !Dachgeschoss_gedaemmt) { empfehlungen.push({ "title" : "Zusätzliche Dämmung des Daches bzw. Dachraumes", "description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff, wenn möglich, verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.", @@ -67,13 +68,13 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnen, gebaeude: Geba }); } - if (!Kellerdecke_Kalraeume_gedaemmt && Keller == "Unbeheizt") { + if (!Kellerdecke_Kalraeume_gedaemmt && Keller == Enums.Heizungsstatus.UNBEHEIZT) { empfehlungen.push({ "title" : "Nachträgliche Dämmung der Kellerdecke", "description" : "Je nach Deckenhöhe, den vorhandenen Raum voll ausnutzen. Das Einsparpotenzial für jeden zusätzlichen cm Dämmung sehr hoch.", "anlagenteil" : "Kellerdecke" }); - } else if (!Kellerwand_gedaemmt && Keller == "Beheizt") { + } else if (!Kellerwand_gedaemmt && Keller == Enums.Heizungsstatus.BEHEIZT) { empfehlungen.push({ "title" : "Nachträgliche Dämmung der Kellerwände", "description" : "Man sollte mit Dämmstärken ab 12cm planen. Das Einsparpotenzial für jeden zusätzlichen cm Dämmung sehr hoch.", diff --git a/src/lib/pdf/plugins/variables/index.ts b/src/lib/pdf/plugins/variables/index.ts index c7f738f3..84a3c947 100644 --- a/src/lib/pdf/plugins/variables/index.ts +++ b/src/lib/pdf/plugins/variables/index.ts @@ -259,7 +259,7 @@ const propPanel: PropPanel = { backgroundColor: "", opacity: DEFAULT_OPACITY, variable: undefined - }, + } }; export const variable: Plugin = { diff --git a/src/pages/pdf/ansichtsausweis.astro b/src/pages/pdf/ansichtsausweis.astro index e99c2951..bcaa5ac6 100644 --- a/src/pages/pdf/ansichtsausweis.astro +++ b/src/pages/pdf/ansichtsausweis.astro @@ -10,9 +10,10 @@ import { Schema, Template } from "@pdfme/common"; import { Moment } from "moment"; import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016"; import moment from "moment"; +import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen"; const base64 = Astro.url.searchParams.get("base64"); -let ausweis: Partial | null = null; +let ausweis: VerbrauchsausweisWohnenClient | null = null; if (base64) { const buffer = Buffer.from(base64, "base64"); const json = buffer.toString("utf-8"); @@ -32,6 +33,7 @@ if (base64) { } const template = VerbrauchsausweisWohnen2016Template as Template; + const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis); let inputs: Record = {}; @@ -170,10 +172,58 @@ if (ausweis.zusaetzliche_heizquelle) { ); } +const convertedInputs = { ...convertAusweisData(ausweis), ...inputs }; +const empfehlungen = getEmpfehlungen(ausweis); + +const addEmpfehlung = (() => { + let i = 0; + let columnWidth = [9, 25, 81, 13, 10, 17, 31]; + + const getPosition = (column: number) => { + return { + position: { + x: + 13 + + columnWidth.reduce( + (a, c, i) => (i >= column ? a : a + c), + 0 + ), + y: 94 + i * 15, + }, + height: 15, + width: columnWidth[column], + type: "text", + fontSize: 8, + verticalAlign: "middle", + }; + }; + + return (empfehlung: ReturnType[0]) => { + template.schemas[3][`empfehlung_${i}_nr`] = getPosition(0) + template.schemas[3][`empfehlung_${i}_bauteil`] = getPosition(1) + template.schemas[3][`empfehlung_${i}_beschreibung`] = getPosition(2) + template.schemas[3][`empfehlung_${i}_amortisationszeit`] = getPosition(5) + template.schemas[3][`empfehlung_${i}_kosten`] = getPosition(6) + + convertedInputs[`empfehlung_${i}_nr`] = (i + 1).toString(); + convertedInputs[`empfehlung_${i}_bauteil`] = empfehlung.anlagenteil; + convertedInputs[`empfehlung_${i}_beschreibung`] = empfehlung.description; + convertedInputs[`empfehlung_${i}_amortisationszeit`] = ""; + convertedInputs[`empfehlung_${i}_kosten`] = ""; + + i++; + } +})() + + +for (const empfehlung of empfehlungen) { + addEmpfehlung(empfehlung); +} + const pdf = await generate({ template, - plugins: { text, image, variable }, - inputs: [{ ...convertAusweisData(ausweis), ...inputs }], + plugins: { text, image, variable: { ...variable, pdf: variable.pdf.bind(convertedInputs), ui: variable.ui.bind(convertedInputs) } }, + inputs: [convertedInputs], options: { author: "IB Cornelsen", creationDate: new Date(),