diff --git a/public/images/formular/skala-verbrauchsausweis-gewerbe.png b/public/images/formular/skala-verbrauchsausweis-gewerbe.png new file mode 100644 index 00000000..686e54f8 Binary files /dev/null and b/public/images/formular/skala-verbrauchsausweis-gewerbe.png differ diff --git a/public/images/formular/SKALA-910.png b/public/images/formular/skala-verbrauchsausweis-wohnen.png similarity index 100% rename from public/images/formular/SKALA-910.png rename to public/images/formular/skala-verbrauchsausweis-wohnen.png diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 6cc46fc7..81eb88cc 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -8,8 +8,8 @@ export const createCaller = createCallerFactory({ "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), + "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "objekt": await import("../src/pages/api/objekt/index.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"), "ticket": await import("../src/pages/api/ticket/index.ts"), @@ -17,9 +17,9 @@ export const createCaller = createCallerFactory({ "user/self": await import("../src/pages/api/user/self.ts"), "verbrauchsausweis-gewerbe/[uid]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[uid].ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), - "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"), "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), + "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "objekt/[uid]/bilder": await import("../src/pages/api/objekt/[uid]/bilder.ts"), "objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"), }) \ No newline at end of file diff --git a/src/components/AnsichtsausweisButton.svelte b/src/components/AnsichtsausweisButton.svelte index a111aa9a..831c8dc7 100644 --- a/src/components/AnsichtsausweisButton.svelte +++ b/src/components/AnsichtsausweisButton.svelte @@ -1,11 +1,13 @@
@@ -60,8 +61,8 @@
- - + +
diff --git a/src/components/Ausweis/PerformanceScore.svelte b/src/components/Ausweis/PerformanceScore.svelte index 164d236a..8487f6c3 100644 --- a/src/components/Ausweis/PerformanceScore.svelte +++ b/src/components/Ausweis/PerformanceScore.svelte @@ -9,12 +9,20 @@ VerbrauchsausweisWohnenClient, } from "./types.js"; import ThickArrowUp from "radix-svelte-icons/src/lib/icons/ThickArrowUp.svelte"; + import { Enums } from "@ibcornelsen/database/client"; + import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let aufnahme: AufnahmeClient; export let objekt: ObjektClient; + export let ausweisart: Enums.Ausweisart; - let maxPerformance = 250; + let maxPerformance = { + [Enums.Ausweisart.VerbrauchsausweisGewerbe]: 1000, + [Enums.Ausweisart.VerbrauchsausweisWohnen]: 250, + [Enums.Ausweisart.BedarfsausweisWohnen]: 250, + [Enums.Ausweisart.BedarfsausweisGewerbe]: 250 + }[ausweisart]; /** * We use linear interpolation to scale the value between the given boundaries. @@ -54,7 +62,12 @@ let translation_2 = 0; $: { (async () => { - const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); + let result; + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + result = await endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis, aufnahme, objekt); + } if (!result) { return; @@ -71,7 +84,11 @@ }
- Energieeffizienz Skala + {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen} + Energieeffizienz Skala + {:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe} + Energieeffizienz Skala + {/if} 500 && aufnahme.nutzflaeche <= 50000) { + faktorHeizung = 4.53 * (aufnahme.nutzflaeche ** -0.215) + 0.27; + } else { + faktorHeizung = 0.71; + } + + let tekHeizung = tekWerte[0] * faktorHeizung; + let tekWarmwasser = tekWerte[1] * faktorWarmwasser; + let tekLueftung = ausweis.stromverbrauch_enthaelt_lueftung ? tekWerte[2] : 0; + + let tekEingebauteBeleuchtung = ausweis.stromverbrauch_enthaelt_beleuchtung ? tekWerte[3] : 0; + let tekKaelte = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[4] : 0; + + let tekHilfsenergieKuehlung = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[5] : 0; + let tekBeEntfeuchtung = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[6] : 0; + + // TODO: let tekAufzug = ausweis.nwaufzug ? 2 : 0; + let tekAufzug = 0; + + let tekSonstiges = (ausweis.stromverbrauch_enthaelt_sonstige != null && ausweis.stromverbrauch_enthaelt_sonstige.length > 0) ? tekWerte[7] : 0; + + let vergleichsWertWaerme = tekHeizung + tekKaelte + tekBeEntfeuchtung; + let vergleichsWertStrom = tekWarmwasser + tekLueftung + tekEingebauteBeleuchtung + tekHilfsenergieKuehlung + tekAufzug + tekSonstiges; + + return [vergleichsWertWaerme, vergleichsWertStrom]; +} + +/** + * Gibt einen array bestehend aus + * [0]: Endenergieverbrauch + * [1]: Primärenergiebedarf + * zurück. + * + * @param Ausweis ausweis Ein Ausweis dessen Energiebedarf berechnet werden soll + * @return VerbrauchsausweisGewerbeCalculationResult + */ +export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient) { + if (!aufnahme || !objekt || !ausweis) { + return null; + } + + const nutzflaeche = aufnahme.nutzflaeche || 0; + + let startdatum = moment(ausweis.startdatum); + + let klimafaktoren: Awaited> = [{ + month: startdatum.month(), + year: startdatum.year(), + klimafaktor: 1 + }, + { + month: startdatum.month(), + year: startdatum.year() + 1, + klimafaktor: 1 + }, + { + month: startdatum.month(), + year: startdatum.year() + 2, + klimafaktor: 1 + }]; + + try { + const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz) + + if (response) { + klimafaktoren = response + } + } catch (e) { + // TODO: Entweder setzen wir hier mit falschen Klimafaktoren fort, oder wir geben null zurück. + // Im Moment setzen wir einfach fort, aber das ist nicht unbedingt die beste Lösung. + // return null + } + + // Endenergieverbrauch + // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. + let umrechnungsfaktor = 1, primaerfaktor = 1, coe = 1; + let umrechnungsfaktor_1 = 1, primaerfaktor_1 = 1, coe_1 = 1; + if (ausweis.brennstoff_1 && ausweis.einheit_1) { + let result = getHeizwertfaktor(ausweis.brennstoff_1, ausweis.einheit_1); + umrechnungsfaktor = result.umrechnungsfaktor + primaerfaktor = result.primaerenergiefaktor + coe = result.coe + } + + if (ausweis.brennstoff_2 && ausweis.einheit_2) { + let result = getHeizwertfaktor(ausweis.brennstoff_2, ausweis.einheit_2); + umrechnungsfaktor_1 = result.umrechnungsfaktor + primaerfaktor_1 = result.primaerenergiefaktor + coe_1 = result.coe + } + + let energieVerbrauchGesamt_1 = ((ausweis.verbrauch_1 || 0) + (ausweis.verbrauch_2 || 0) + (ausweis.verbrauch_3 || 0)) * umrechnungsfaktor; + let energieVerbrauchGesamt_2 = ((ausweis.verbrauch_4 || 0) + (ausweis.verbrauch_5 || 0) + (ausweis.verbrauch_6 || 0)) * umrechnungsfaktor_1; + + let energieVerbrauchWarmwasser_1 = 0; + let energieVerbrauchWarmwasser_2 = 0; + + if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 != 0) { + + // Wenn Warmwasser enthalten und Anteil bekannt + energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_warmwasser_1 || 0) / 100); + energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100); + + } else if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 == 0){ + if (aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre)" || aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung" || aufnahme.gebaeudetyp == "Schwimmhallen") { + energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.5; + energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100); + + } else { + energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.05; + energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100); + + } + } else + { + energieVerbrauchWarmwasser_1 = 0; + energieVerbrauchWarmwasser_2 = 0; + } + + let kuehlungsZuschlag_1: number; + let kuehlungsZuschlag_2: number; + if (ausweis.wird_gekuehlt) { + kuehlungsZuschlag_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_kuehlung_1 || 0) / 100); + kuehlungsZuschlag_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_kuehlung_2 || 0) / 100); + } else { + kuehlungsZuschlag_1 = kuehlungsZuschlag_2 = 0; + } + + // Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden. + let leerstand = (aufnahme.leerstand || 0) / 100; + + let energieVerbrauchHeizung_1 = energieVerbrauchGesamt_1 - energieVerbrauchWarmwasser_1 - kuehlungsZuschlag_1; + let energieVerbrauchHeizung_2 = energieVerbrauchGesamt_2 - energieVerbrauchWarmwasser_2 - kuehlungsZuschlag_2; + + let durchschnittsKlimafaktor = klimafaktoren.reduce((acc, c) => acc + c.klimafaktor, 0) / klimafaktoren.length; + + let energieVerbrauchHeizungBereinigt_1 = energieVerbrauchHeizung_1 * durchschnittsKlimafaktor; + let energieVerbrauchHeizungBereinigt_2 = energieVerbrauchHeizung_2 * durchschnittsKlimafaktor; + + let durchschnittsEnergieVerbrauchHeizungBereingt = (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchHeizungBereinigt_2) / (3 * nutzflaeche); + + let faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = -0.0028 * durchschnittsEnergieVerbrauchHeizungBereingt + 0.9147; + + if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt <= 0.25) { + faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 0.25; + } else if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt >= 1.0) { + faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 1.0; + } + + let leerstandsZuschlagHeizung = faktorDurchschnittsEnergieVerbrauchHeizungBereinigt * leerstand * (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchHeizungBereinigt_2); + let leerstandsZuschlagWarmwasser = leerstand * (energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2); + let leerstandsZuschlagKuehlung = leerstand * (kuehlungsZuschlag_1 + kuehlungsZuschlag_2); + + + let endEnergieVerbrauch_1 = (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchWarmwasser_1 + kuehlungsZuschlag_1) / (3 * nutzflaeche); + let endEnergieVerbrauch_2 = (energieVerbrauchHeizungBereinigt_2 + energieVerbrauchWarmwasser_2 + kuehlungsZuschlag_2) / (3 * nutzflaeche); + + let energieVerbrauchStrom = ausweis.strom_1 + ausweis.strom_2 + ausweis.strom_3; + let leerstandsZuschlagStrom = leerstand * energieVerbrauchStrom; + + let endEnergieVerbrauchStrom = (energieVerbrauchStrom + leerstandsZuschlagStrom) / (3 * nutzflaeche); + let primaerEnergieVerbrauchStrom = endEnergieVerbrauchStrom * 1.8; + + let co2EmissionenStrom = endEnergieVerbrauchStrom * 0.560; + + let endEnergieVerbrauchLeerstandsZuschlag = (leerstandsZuschlagHeizung + leerstandsZuschlagWarmwasser + leerstandsZuschlagKuehlung) / (3 * nutzflaeche); + let endEnergieVerbrauchKuehlungsZuschlag_1 = kuehlungsZuschlag_1 / (3 * nutzflaeche); + let endEnergieVerbrauchKuehlungsZuschlag_2 = kuehlungsZuschlag_2 / (3 * nutzflaeche); + + let primaerEnergieVerbrauch_1 = endEnergieVerbrauch_1 * primaerfaktor; + let primaerEnergieVerbrauch_2 = endEnergieVerbrauch_2 * primaerfaktor_1; + + let primaerEnergieVerbrauchLeerstandsZuschlag = endEnergieVerbrauchLeerstandsZuschlag * primaerfaktor; + let primaerEnergieVerbrauchKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * primaerfaktor; + let primaerEnergieVerbrauchKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * primaerfaktor_1; + + let co2Emissionen_1 = endEnergieVerbrauch_1 * coe; + let co2Emissionen_2 = endEnergieVerbrauch_2 * coe_1; + + let co2EmissionenLeerstandsZuschlag = endEnergieVerbrauchLeerstandsZuschlag * coe; + let co2EmissionenKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * coe; + let co2EmissionenKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * coe_1; + + let endEnergieVerbrauchGesamt = endEnergieVerbrauch_1 + endEnergieVerbrauch_2 + endEnergieVerbrauchLeerstandsZuschlag; + let primaerEnergieVerbrauchGesamt = primaerEnergieVerbrauch_1 + primaerEnergieVerbrauch_2 + primaerEnergieVerbrauchLeerstandsZuschlag + primaerEnergieVerbrauchStrom; + let co2EmissionenGesamt = co2Emissionen_1 + co2Emissionen_2 + co2EmissionenLeerstandsZuschlag + co2EmissionenStrom; + + let [vergleichsWertWaerme, vergleichsWertStrom] = vergleichsWertNichtWohngebaeude(ausweis, aufnahme); + + // Return all the steps that this function includes for debugging as a json object + return { + umrechnungsfaktor : umrechnungsfaktor, + primaerfaktor : primaerfaktor, + coe : coe, + umrechnungsfaktor_1 : umrechnungsfaktor_1, + primaerfaktor_1 : primaerfaktor_1, + coe_1 : coe_1, + kuehlungsZuschlag_1 : Math.round(kuehlungsZuschlag_1), + kuehlungsZuschlag_2: Math.round(kuehlungsZuschlag_2), + durchschnittsKlimafaktor : Math.round(durchschnittsKlimafaktor,2), + Klimafaktor_1 : klimafaktoren[0], + Klimafaktor_2 : klimafaktoren[1], + Klimafaktor_3 : klimafaktoren[2], + anteil_heizung_1: 1 - ((ausweis.anteil_warmwasser_1 || 0) / 100), + anteil_heizung_2: 1 - ((ausweis.anteil_warmwasser_2 || 0) / 100), + verbrauch_1_kwh: ausweis.verbrauch_1 * umrechnungsfaktor, + verbrauch_2_kwh: ausweis.verbrauch_2 * umrechnungsfaktor, + verbrauch_3_kwh: ausweis.verbrauch_3 * umrechnungsfaktor, + verbrauch_4_kwh: ausweis.verbrauch_4 * umrechnungsfaktor_1, + verbrauch_5_kwh: ausweis.verbrauch_5 * umrechnungsfaktor_1, + verbrauch_6_kwh: ausweis.verbrauch_6 * umrechnungsfaktor_1, + klimafaktoren : klimafaktoren, + nutzflaeche : Math.round(nutzflaeche), + leerstand : leerstand, + leerstandsZuschlagHeizung: Math.round(leerstandsZuschlagHeizung), + leerstandsZuschlagWarmwasser: Math.round(leerstandsZuschlagWarmwasser), + leerstandsZuschlagKuehlung: Math.round(leerstandsZuschlagKuehlung), + endEnergieVerbrauchLeerstandsZuschlag: Math.round(endEnergieVerbrauchLeerstandsZuschlag), + endEnergieVerbrauchKuehlungsZuschlag_1: Math.round(endEnergieVerbrauchKuehlungsZuschlag_1), + endEnergieVerbrauchKuehlungsZuschlag_2: Math.round(endEnergieVerbrauchKuehlungsZuschlag_2), + coeeffkg : co2EmissionenGesamt, + energieVerbrauchGesamt_1: Math.round(energieVerbrauchGesamt_1), + energieVerbrauchGesamt_2: Math.round(energieVerbrauchGesamt_2), + energieVerbrauchWarmwasser_1: Math.round(energieVerbrauchWarmwasser_1), + energieVerbrauchWarmwasser_2: Math.round(energieVerbrauchWarmwasser_2), + energieVerbrauchHeizung_1: energieVerbrauchHeizung_1, + energieVerbrauchHeizung_2: energieVerbrauchHeizung_2, + anteil_warmwasser_1: ausweis.anteil_warmwasser_1 / 100, + anteil_warmwasser_2: ausweis.anteil_warmwasser_2 / 100, + energieVerbrauchHeizungBereinigt_1: Math.round(energieVerbrauchHeizungBereinigt_1), + energieVerbrauchHeizungBereinigt_2: Math.round(energieVerbrauchHeizungBereinigt_2), + durchschnittsEnergieVerbrauchHeizungBereingt: Math.round(durchschnittsEnergieVerbrauchHeizungBereingt), + faktorDurchschnittsEnergieVerbrauchHeizungBereinigt: Math.round(faktorDurchschnittsEnergieVerbrauchHeizungBereinigt,3), + endEnergieVerbrauch_1: Math.round(endEnergieVerbrauch_1), + endEnergieVerbrauch_2: Math.round(endEnergieVerbrauch_2), + energieVerbrauchStrom: energieVerbrauchStrom, + leerstandsZuschlagStrom: leerstandsZuschlagStrom, + endEnergieVerbrauchStrom: Math.round(endEnergieVerbrauchStrom), + primaerEnergieVerbrauchStrom: Math.round(primaerEnergieVerbrauchStrom), + primaerEnergieVerbrauch_1: Math.round(primaerEnergieVerbrauch_1), + primaerEnergieVerbrauch_2: Math.round(primaerEnergieVerbrauch_2), + primaerEnergieVerbrauchLeerstandsZuschlag: Math.round(primaerEnergieVerbrauchLeerstandsZuschlag), + primaerEnergieVerbrauchKuehlungsZuschlag_1: Math.round(primaerEnergieVerbrauchKuehlungsZuschlag_1), + primaerEnergieVerbrauchKuehlungsZuschlag_2: Math.round(primaerEnergieVerbrauchKuehlungsZuschlag_2), + co2Emissionen_1: co2Emissionen_1, + co2Emissionen_2: co2Emissionen_2, + co2EmissionenLeerstandsZuschlag: co2EmissionenLeerstandsZuschlag, + co2EmissionenKuehlungsZuschlag_1: co2EmissionenKuehlungsZuschlag_1, + co2EmissionenKuehlungsZuschlag_2: co2EmissionenKuehlungsZuschlag_2, + co2EmissionenGesamt: Math.round(co2EmissionenGesamt), + endEnergieVerbrauchGesamt: Math.round(endEnergieVerbrauchGesamt), + primaerEnergieVerbrauchGesamt: Math.round(primaerEnergieVerbrauchGesamt), + vergleichsWertWaerme: vergleichsWertWaerme, + vergleichsWertStrom: vergleichsWertStrom, + } +} \ No newline at end of file diff --git a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/bauwerkskatalog.json b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/bauwerkskatalog.json new file mode 100644 index 00000000..18fff39d --- /dev/null +++ b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/bauwerkskatalog.json @@ -0,0 +1,54 @@ +{ + "Verwaltungsgebäude (allgemein)": [48.5, 6.9, 3.2, 10.7, 2.6, 3.1, 0.1, 2.8], + "Parlaments- und Gerichtsgebäude": [49.9, 6.8, 3, 9.5, 1.2, 0.9, 1.7, 0.6], + "Ministerien u. Ämter u. Behörden": [48.3, 7.4, 3.7, 10.8, 1.5, 1.2, 1, 0.7], + "Polizeidienstgebäude": [52.4, 7.4, 2.5, 10.4, 0.5, 0.4, 0, 0.7], + "Gebäude für öffentliche Bereitschaftsdienste": [51.6, 10.2, 3, 7.8, 0.3, 0.2, 0, 4], + "Feuerwehrdienstgebäude": [50.8, 7.1, 3.2, 6.7, 0.3, 0.2, 0, 3.7], + "Bürogebäude": [49, 8.1, 4.7, 12.9, 2.9, 2.2, 0, 2.8], + "Bürogebäude - überwiegend Großraumbüros": [47.4, 12.8, 7.3, 16.6, 6, 4.3, 0, 0.9], + "Bankgebäude": [48, 6.4, 1.6, 10.7, 1.5, 1.1, 0, 0.6], + "Hochschule und Forschung (allgemein)": [66.5, 6.7, 13.3, 11, 3.4, 2.2, 3.8, 1.2], + "Gebäude für Lehre": [57.2, 5.6, 8.7, 8.5, 2.5, 1.5, 0.4, 1.1], + "Institute für Lehre und Forschung": [65, 7.6, 13.8, 11.7, 3.5, 2.4, 14.7, 2.1], + "Gebäude für Forschung ohne Lehre": [87.8, 7.4, 14.9, 14.8, 3.5, 2.4, 0, 1.2], + "Laborgebäude": [82.8, 8, 20.3, 13.5, 4.2, 2.9, 1.7, 1.3], + "Gesundheitswesen (allgemein)": [55.7, 15.3, 4.9, 17.4, 1.6, 1.3, 0, 1.1], + "Krankenhäuser (ohne Forschung und Lehre)": [64.1, 40.8, 10.4, 15.8, 1.7, 1.6, 0, 1.2], + "Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung": [61.7, 33.6, 9.2, 15.9, 1.7, 1.6, 0, 0.9], + "Medizinische Einrichtungen für nicht stationäre Versorgung": [51.2, 8.6, 2.2, 18.3, 1.4, 1, 0, 1.3], + "Gebäude für Reha": [null, 59.4, 22.1, 6, 14.6, 0.9, 0.7, 0, 3.5], + "Bildungseinrichtungen (allgemein)": [49.7, 19.5, 4.1, 5.5, 0.2, 0.2, 0, 0.6], + "Schulen": [49.3, 22.4, 3.9, 5.5, 0.3, 0.2, 0, 0.6], + "Kinderbetreuungseinrichtungen": [50.4, 17.3, 4.2, 5.5, 0.1, 0.1, 0, 0.6], + "Kultureinrichtungen (allgemein)": [55.9, 7.5, 6.7, 9, 1.6, 1.2, 0.1, 0.3], + "Bibliotheken/Archive": [49, 5, 2.1, 14.3, 0.5, 0.4, 0, 0.3], + "Ausstellungsgebäude": [57.6, 7.7, 6.3, 7.8, 1.7, 1.3, 0.3, 0.2], + "Veranstaltungsgebäude": [58.4, 9.1, 7, 8.9, 1.3, 0.9, 0.1, 0.3], + "Gemeinschafts-/Gemeindehäuser": [63.6, 10, 5.6, 10.8, 0.8, 0.6, 0.1, 6], + "Opern/Theater": [58.8, 7.6, 9.1, 8.6, 2, 1.3, 0, 0.9], + "Sporteinrichtungen (allgemein)": [65.5, 27.3, 6.4, 14.5, 0.6, 0.6, 0, 1.9], + "Sporthallen": [68.6, 22, 4.6, 14.3, 0.2, 0.2, 0, 0.1], + "Fitnessstudios": [60.6, 62.2, 11.9, 24.5, 4, 4.2, 0, 8.9], + "Schwimmhallen": [63.8, 24.7, 8.3, 13.4, 1.1, 1.1, 30, 7.3], + "Gebäude für Sportaußenanlagen": [75.2, 22.5, 5.7, 10.2, 0, 0, 0, 5.5], + "Verpflegungseinrichtungen (allgemein)": [75.9, 77.7, 16.6, 18.1, 3.5, 3, 0, 24.8], + "Beherbergungsstätten (allgemein)": [52.1, 86, 9.1, 9.1, 3.3, 2.7, 0, 7], + "Hotels/Pensionen": [51.2, 89.1, 9.1, 8.6, 3.5, 2.9, 0, 6.8], + "Jugendherbergen u. Ferienhäuser": [63.4, 50.9, 1.9, 12.6, 0, 0, 0, 8.8], + "Gaststätten": [77.8, 79, 13.7, 19.7, 3.8, 3.3, 0, 25.2], + "Mensen u. Kantinen": [67, 67.3, 21, 11.4, 0.7, 0.5, 0, 22.7], + "Gewerbliche und industrielle Gebäude (allgemein)": [38.7, 12.6, 2.1, 9.6, 0.8, 0.5, 0, 12.2], + "Gewerbliche und industrielle Gebäude - schwere Arbeit": [null, 37.8, 20, 3.1, 11.8, 1, 0.6, 0, 22.6], + "Gewerbliche und industrielle Gebäude - Mischung aus leichter u. schwerer Arbeit": [36, 24.2, 3.8, 13, 2.1, 1.2, 0, 24.9], + "Gewerbliche und industrielle Gebäude - leichte Arbeit": [null, 38.1, 19.8, 3.3, 15.2, 1.9, 1.1, 0, 22.3], + "Gebäude für Lagerung": [38.1, 19.3, 3.3, 13.2, 1.7, 1, 0, 21.6], + "Verkaufsstätten (allgemein)": [47.9, 7.6, 5.6, 16.3, 2.6, 2, 0, 6.9], + "Kaufhäuser": [45.9, 6.4, 6, 16.6, 1.1, 0.9, 0, 2.7], + "Kaufhauszentren/Einkaufszentren": [47.3, 11.1, 7.4, 16.6, 4.6, 3.5, 0.1, 5.5], + "Märkte": [48.7, 6.2, 7.3, 17.3, 2.8, 2.1, 0, 10.5], + "Märkte mit sehr hohem Anteil von Kühlung für Lebensmittel": [48.7, 6.2, 7.3, 17.3, 2.8, 2.1, 0, 72.5], + "Läden": [46.8, 6.4, 1.9, 15.8, 0.9, 0.7, 0, 2.1], + "Läden mit sehr hohem Anteil von Kühlung für Lebensmittel": [46.8, 6.4, 1.9, 15.8, 0.9, 0.7, 0, 54.1], + "Fernmeldetechnik": [38.4, 4, 3.4, 16, 0, 0, 0, 53.7] +} \ No newline at end of file diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index 241733c9..bd8f6f6a 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -1,5 +1,375 @@ -import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js"; +import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } 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 "@ibcornelsen/database/server"; +import * as fs from "fs" +import moment from "moment"; +import { PDFDocument, PDFFont, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib"; -export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) { +export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) { + const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/GEG24_Nichtwohngebaeude.pdf", import.meta.url), "base64"); + const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF) + const pages = pdf.getPages() + + // const template = VerbrauchsausweisWohnen2016Template as Template; + + const berechnungen = await endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis, aufnahme, objekt); + console.log(berechnungen); + + const empfehlungen = getEmpfehlungen(ausweis, aufnahme, objekt) + + const height = pages[0].getHeight() + + const font = await pdf.embedFont(StandardFonts.Helvetica) + const bold = await pdf.embedFont(StandardFonts.HelveticaBold) + + const form = pdf.getForm() + form.updateFieldAppearances(font) + + const fillFormField = (name: string, value: string, fontSize: number = 8, alignment: TextAlignment = TextAlignment.Left) => { + const field = form.getTextField(name) + field.setFontSize(fontSize) + field.setText(value) + field.setAlignment(alignment) + } + + const toggleCheck = (name: string, checked: boolean = true) => { + const field = form.getCheckBox(name) + + if (checked) { + field.check() + } else { + field.uncheck() + } + } + + // const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "") + + // const adresse = fillFormField("adresse", objekt.adresse) + + + // const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "") + + // const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString()) + + // const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString()) + + // const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString()) + + // const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`) + + // fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`) + + // if (ausweis.warmwasser_enthalten) { + // fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`) + // } + + // 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) + + // 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") + + + // const gebaeudeBild = bilder.find(image => image.kategorie === "Gebaeude"); + + + // /* -------------------------------- Seite 2 -------------------------------- */ + + // const co2Emissionen = fillFormField("co2emissionen", berechnungen?.co2EmissionenGesamt.toString(), 8, TextAlignment.Center) + + const addEnergieverbrauchSkalaPfeile = async (page: PDFPage) => { + const pfeilNachUnten = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-unten.png", import.meta.url), "base64")) + const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64")) + + // Wir müssen den berechneten Wert zwischen 0 und 1000 als Wert zwischen 0 und 1 festlegen + const endenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 1000 + const primaerenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt || 0)) / 1000 + + const minTranslation = 120 + const maxTranslation = 457 + const endenergieverbrauchTranslationX = minTranslation + (maxTranslation - minTranslation) * endenergieverbrauchTranslationPercentage; + const primaerenergieverbrauchTranslationX = minTranslation + (maxTranslation - minTranslation) * primaerenergieverbrauchTranslationPercentage; + + const pfeilWidth = 20 + const margin = 5; + + page.drawImage(pfeilNachUnten, { + x: endenergieverbrauchTranslationX, + y: height - 215, + width: pfeilWidth, + height: 30 + }) + + const endEnergieVerbrauchGesamtText = `${berechnungen?.endEnergieVerbrauchGesamt.toString()}kWh/(m²a)`; + const primaerEnergieVerbrauchGesamtText = `${berechnungen?.primaerEnergieVerbrauchGesamt.toString()}kWh/(m²a)`; + + if (endenergieverbrauchTranslationPercentage > 0.5) { + page.drawText("Endenergieverbrauch", { + x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch", 10), + y: height - 193, + size: 10 + }) + + page.drawText(endEnergieVerbrauchGesamtText, { + x: endenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(endEnergieVerbrauchGesamtText, 10), + y: height - 207, + size: 10, + font: bold + }) + } else { + page.drawText("Endenergieverbrauch", { + x: endenergieverbrauchTranslationX + pfeilWidth + margin, + y: height - 193, + size: 10 + }) + page.drawText(endEnergieVerbrauchGesamtText, { + x: endenergieverbrauchTranslationX + pfeilWidth + margin, + y: height - 207, + size: 10, + font: bold + }) + } + + page.drawImage(pfeilNachOben, { + x: primaerenergieverbrauchTranslationX, + y: height - 298, + width: pfeilWidth, + height: 30 + }) + + if (endenergieverbrauchTranslationPercentage > 0.5) { + page.drawText("Primärenergieverbrauch", { + x: primaerenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Primärenergieverbrauch", 10), + y: height - 280, + size: 10 + }) + + page.drawText(primaerEnergieVerbrauchGesamtText, { + x: primaerenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(primaerEnergieVerbrauchGesamtText, 10), + y: height - 294, + size: 10, + font: bold + }) + } else { + page.drawText("Primärenergieverbrauch", { + x: primaerenergieverbrauchTranslationX + pfeilWidth + margin, + y: height - 280, + size: 10 + }) + page.drawText(primaerEnergieVerbrauchGesamtText, { + x: primaerenergieverbrauchTranslationX + pfeilWidth + margin, + y: height - 294, + size: 10, + font: bold + }) + } + } + + addEnergieverbrauchSkalaPfeile(pages[1]) + addEnergieverbrauchSkalaPfeile(pages[2]) + + // const primaerenergiebedarfIst = fillFormField("primaerenergiebedarf_ist", berechnungen?.primaerEnergieVerbrauchGesamt.toString()) + + + /* -------------------------------- Seite 3 -------------------------------- */ + + // Verbräuche + + const addVerbrauchGenerator = () => { + let i = 0; + let yOffset = 14.6; + const initialHeight = 435 + const initialXOffset = 36; + return (zeitraum_von?: string, zeitraum_bis?: string, energietraeger?: string, primaerfaktor?: string, energieverbrauch?: string, anteil_warmwasser?: string, anteil_heizung?: string, klimafaktor?: string) => { + pages[2].drawText(zeitraum_von || "", { + x: initialXOffset, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(zeitraum_bis || "", { + x: initialXOffset + 47, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(energietraeger || "", { + x: initialXOffset + 94, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(primaerfaktor || "", { + x: initialXOffset + 317, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(energieverbrauch || "", { + x: initialXOffset + 351, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(anteil_warmwasser || "", { + x: initialXOffset + 402, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(anteil_heizung || "", { + x: initialXOffset + 453, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[2].drawText(klimafaktor || "", { + x: initialXOffset + 504, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + i++; + } + } + + const addVerbrauch = addVerbrauchGenerator(); + + addVerbrauch( + moment(ausweis.startdatum).format("MM.YYYY"), + moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"), + aufnahme.brennstoff_1, + berechnungen?.primaerfaktor.toString(), + Math.round(berechnungen?.verbrauch_1_kwh).toString(), + Math.round( + berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_1_kwh + ).toString(), + Math.round( + berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_1_kwh + ).toString(), + berechnungen?.klimafaktoren[0].klimafaktor.toString() + ); + + addVerbrauch( + moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"), + moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"), + aufnahme.brennstoff_1, + berechnungen?.primaerfaktor.toString(), + Math.round(berechnungen?.verbrauch_2_kwh).toString(), + Math.round( + berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_2_kwh + ).toString(), + Math.round( + berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_2_kwh + ).toString(), + berechnungen?.klimafaktoren[0].klimafaktor.toString() + ); + + addVerbrauch( + moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"), + moment(ausweis.startdatum).add(3, "year").format("MM.YYYY"), + aufnahme.brennstoff_1, + berechnungen?.primaerfaktor.toString(), + Math.round(berechnungen?.verbrauch_3_kwh).toString(), + Math.round( + berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_3_kwh + ).toString(), + Math.round( + berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_3_kwh + ).toString(), + berechnungen?.klimafaktoren[0].klimafaktor.toString() + ); + + /* -------------------------------- Seite 4 -------------------------------- */ + + const splitToSize = (text: string, size: number, font: PDFFont, fontSize: number) => { + const lines = [] + + let currentLine = "" + for (const char of text) { + if (font.widthOfTextAtSize(currentLine + char, fontSize) <= size) { + currentLine += char; + } else { + lines.push(currentLine) + currentLine = char; + } + } + + lines.push(currentLine) + + return lines.join("\n") + } + + const addEmpfehlungenGenerator = () => { + let i = 0; + let yOffset = 43; + const initialHeight = 568 + const initialXOffset = 36; + return (bauteil?: string, beschreibung?: string, alsEinzelmassnahme?: boolean, amortisationszeit?: string, kosten?: string) => { + pages[3].drawText((i + 1).toString(), { + x: initialXOffset, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[3].drawText(splitToSize(bauteil || "", 70, font, 8), { + x: initialXOffset + 25, + y: initialHeight - (i * yOffset), + size: 8, + font, + lineHeight: 10 + }) + + pages[3].drawText(splitToSize(beschreibung || "", 230, font, 8), { + x: initialXOffset + 98, + y: initialHeight - (i * yOffset), + size: 8, + font, + lineHeight: 10 + }) + + + + pages[3].drawText(amortisationszeit || "", { + x: initialXOffset + 403, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + + pages[3].drawText(kosten || "", { + x: initialXOffset + 451, + y: initialHeight - (i * yOffset), + size: 8, + font + }) + i++; + } + } + + const addEmpfehlung = addEmpfehlungenGenerator() + + for (const empfehlung of empfehlungen) { + addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten) + } + + + + // pdf.getForm().flatten() + + return pdf.save(); } \ No newline at end of file diff --git a/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf b/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf new file mode 100644 index 00000000..a1ed6ed7 Binary files /dev/null and b/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf differ diff --git a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte index 58d200b1..65c06117 100644 --- a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte +++ b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte @@ -1001,6 +1001,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc bind:ausweis bind:gebaeude bind:aufnahme + {ausweisart} /> diff --git a/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte b/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte index 7aad51ab..e1d2bfc1 100644 --- a/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte +++ b/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte @@ -20,6 +20,7 @@ import { BenutzerClient } from "#components/Ausweis/types.js"; import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte"; import { Enums } from "@ibcornelsen/database/client"; + import moment from "moment"; export let ausweis: VerbrauchsausweisGewerbeClient; export let user: BenutzerClient = {} as BenutzerClient; @@ -28,7 +29,38 @@ export let bilder: UploadedGebaeudeBild[] = []; export let ausweisart = Enums.Ausweisart.VerbrauchsausweisGewerbe; - function automatischAusfüllen() {} + function automatischAusfüllen() { + aufnahme.baujahr_gebaeude = [1952]; + aufnahme.baujahr_heizung = [1952]; + aufnahme.saniert = true; + aufnahme.einheiten = 1; + aufnahme.gebaeudetyp = "Polizeidienstgebäude"; + aufnahme.keller = + Enums.Heizungsstatus.NICHT_VORHANDEN; + aufnahme.dachgeschoss = + Enums.Heizungsstatus.NICHT_VORHANDEN; + aufnahme.lueftung = "Fensterlueftung"; + aufnahme.kuehlung = "1"; + ausweis.ausstellgrund = "Vermietung"; + ausweis.verbrauch_1 = 15000; + ausweis.verbrauch_2 = 14000; + ausweis.verbrauch_3 = 16000; + aufnahme.flaeche = 152; + aufnahme.nutzflaeche = 172; + ausweis.keller_beheizt = true; + + aufnahme.brennstoff_1 = "Erdgas H"; + ausweis.einheit_1 = "kWh"; + ausweis.anteil_warmwasser_1 = 18; + ausweis.startdatum = moment("01.01.2021").toDate(); + objekt.plz = "21039"; + objekt.ort = "Hamburg"; + objekt.adresse = "Curslacker Deich 170"; + aufnahme.gebaeudeteil = "Gesamtgebäude"; + + objekt = objekt; + ausweis = ausweis; + } async function spaeterWeitermachen() { } @@ -45,6 +77,7 @@ bind:ausweis bind:aufnahme={aufnahme} bind:objekt={objekt} + {ausweisart} />
@@ -162,6 +195,7 @@ bind:ausweis bind:objekt bind:aufnahme + {ausweisart} /> diff --git a/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte b/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte index 90c771aa..ff0a0e4b 100644 --- a/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte @@ -185,6 +185,7 @@ const ausweisart: Enums.Ausweisart = "VerbrauchsausweisWohnen" bind:ausweis bind:aufnahme={aufnahme} bind:objekt={objekt} + {ausweisart} /> @@ -291,6 +292,7 @@ const ausweisart: Enums.Ausweisart = "VerbrauchsausweisWohnen" bind:ausweis bind:objekt={objekt} bind:aufnahme + {ausweisart} /> diff --git a/src/pages/pdf/ansichtsausweis.ts b/src/pages/pdf/ansichtsausweis.ts index dc5cdc7e..f71add4a 100644 --- a/src/pages/pdf/ansichtsausweis.ts +++ b/src/pages/pdf/ansichtsausweis.ts @@ -1,5 +1,6 @@ -import { AufnahmeClient, BenutzerClient, getAusweisartFromUUID, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { AufnahmeClient, BenutzerClient, getAusweisartFromUUID, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; +import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js"; import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js"; import { Enums } from "@ibcornelsen/database/client"; import { APIRoute } from "astro"; @@ -71,7 +72,12 @@ export const GET: APIRoute = async (Astro) => { } }); - const pdf = await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user); + let pdf: Uint8Array | null = null; + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + pdf = await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user); + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + pdf = await pdfVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, bilder, user); + } return new Response(pdf, { headers: { @@ -90,6 +96,7 @@ export const POST: APIRoute = async (Astro) => { const aufnahme = JSON.parse(params.get("aufnahme")); const objekt = JSON.parse(params.get("objekt")); const bilder = JSON.parse(params.get("bilder")); + const ausweisart: Enums.Ausweisart = params.get("ausweisart") let user: BenutzerClient = {}; @@ -103,7 +110,12 @@ export const POST: APIRoute = async (Astro) => { } - const pdf = await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user); + let pdf: Uint8Array | null = null; + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + pdf = await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user); + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + pdf = await pdfVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, bilder, user); + } return new Response(pdf, { headers: {