From 03d9b8a0a0d24b819ec7263eb97889dad53c83fc Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Fri, 7 Feb 2025 15:38:55 +0700 Subject: [PATCH] Ansichtsausweis und Datenblatt --- Makefile | 28 +++---- bun.lock | 3 - cypress.config.ts | 2 +- docker-compose.yml | 2 +- package.json | 1 - src/astro-typesafe-api-caller.ts | 4 +- src/components/AnsichtsausweisButton.svelte | 12 ++- .../Ausweis/AusweisPreviewContainer.svelte | 6 +- .../Ausweis/PerformanceScore.svelte | 8 +- .../Dashboard/DashboardAusweis.svelte | 2 +- src/components/DatenblattButton.svelte | 12 ++- .../Verbrauchsausweis/audits/EndEnergie.ts | 6 +- .../VerbrauchsausweisWohnen_2016.ts | 39 +++++---- src/lib/Berechnungen/endEnergieVerbrauch.ts | 7 +- .../pdfDatenblattVerbrauchsausweisWohnen.ts | 80 +++++++++---------- src/lib/pdf/pdfVerbrauchsausweisWohnen.ts | 37 +++++---- .../BedarfsausweisWohnenModule.svelte | 1 + .../VerbrauchsausweisGewerbeModule.svelte | 1 + .../VerbrauchsausweisWohnenModule.svelte | 1 + src/pages/pdf/ansichtsausweis.astro | 18 +++-- src/pages/pdf/datenblatt.astro | 80 ++++++++++++++++--- 21 files changed, 211 insertions(+), 139 deletions(-) diff --git a/Makefile b/Makefile index 82b60cbe..26bfb791 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ -.PHONY: dev database api online-energieausweis all prod bun-install-database bun-install-api +.PHONY: dev database online-energieausweis all prod bun-install-database # api bun-install-api online-energieausweis: bun run dev --host -dev: online-energieausweis api database +dev: database online-energieausweis # api database: $(MAKE) -C ../database dev @@ -13,19 +13,19 @@ bun-install-database: bun link bun install -bun-install-api: bun-install-database - cd ../api - bun install - bun link @ibcornelsen/database +# bun-install-api: bun-install-database +# cd ../api +# bun install +# bun link @ibcornelsen/database -api: - $(MAKE) -C ../api dev +# api: +# $(MAKE) -C ../api dev all: mkdir -p ~/logs bun run dev 2>&1 | tee ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log -prod: bun-install-api bun-install-database +prod: bun-install-database # bun-install-api mkdir -p ~/logs mkdir -p ~/persistent/online-energieausweis @@ -37,11 +37,11 @@ prod: bun-install-api bun-install-database fi # Auch die API sollte bereits laufen - @if [ $$(pm2 pid api) -eq "0" ]; then \ - cd ../api; \ - $(MAKE) prod; \ - cd ../online-energieausweis; \ - fi +# @if [ $$(pm2 pid api) -eq "0" ]; then \ +# cd ../api; \ +# $(MAKE) prod; \ +# cd ../online-energieausweis; \ +# fi - rm -f ~/online-energieausweis/.env; - touch ~/online-energieausweis/.env; diff --git a/bun.lock b/bun.lock index 801d86d2..6fe042a6 100644 --- a/bun.lock +++ b/bun.lock @@ -8,7 +8,6 @@ "@astrojs/node": "^8.3.4", "@astrojs/svelte": "^2.2.0", "@astrojs/tailwind": "^3.1.3", - "@ibcornelsen/api": "link:@ibcornelsen/api", "@ibcornelsen/database": "link:@ibcornelsen/database", "@ibcornelsen/ui": "^0.0.2", "@mollie/api-client": "^4.1.0", @@ -255,8 +254,6 @@ "@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@1.2.1", "", {}, "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="], - "@ibcornelsen/api": ["@ibcornelsen/api@link:@ibcornelsen/api", {}], - "@ibcornelsen/database": ["@ibcornelsen/database@link:@ibcornelsen/database", {}], "@ibcornelsen/ui": ["@ibcornelsen/ui@0.0.2", "", { "dependencies": { "@astrojs/svelte": "^2.1.1", "cookiejs": "^2.1.2", "knex": "^2.4.2", "moment": "^2.29.4", "svelte": "^3.54.0", "svelte-preprocess": "^5.0.1", "tailwindcss": "^3.0.24", "uuid": "^9.0.0", "zod": "^3.21.4" } }, "sha512-TF29f0uY6MqxQszEySKRI5RJa1FmHCqaY5SjcIJjbI/9MjUL3tB/u9m+o7t/SpzPRNT419/HMdXSo7uOATX2Aw=="], diff --git a/cypress.config.ts b/cypress.config.ts index 446b2884..d39cc165 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -14,7 +14,7 @@ export default defineConfig({ setupNodeEvents(on, config) { on("file:preprocessor", vitePreprocessor({ optimizeDeps: { - exclude: ["@ibcornelsen/api", "@ibcornelsen/database"] + exclude: ["@ibcornelsen/database"] }, resolve: { alias: { diff --git a/docker-compose.yml b/docker-compose.yml index 8aa3088b..a97dbbbb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,7 @@ services: - ./:/online-energieausweis - ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui - ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database - - ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api + # - ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api - ./node_modules/radix-svelte-icons:/online-energieausweis/node_modules/radix-svelte-icons - ../api/persistent:/persistent ibcornelsen-api: diff --git a/package.json b/package.json index 993d6443..8c120117 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "@astrojs/node": "^8.3.4", "@astrojs/svelte": "^2.2.0", "@astrojs/tailwind": "^3.1.3", - "@ibcornelsen/api": "link:@ibcornelsen/api", "@ibcornelsen/database": "link:@ibcornelsen/database", "@ibcornelsen/ui": "^0.0.2", "@mollie/api-client": "^4.1.0", diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 1ed6bb4e..7b0ed16d 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -5,8 +5,8 @@ export const createCaller = createCallerFactory({ "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid].ts"), "aufnahme": await import("../src/pages/api/aufnahme/index.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"), "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"), @@ -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 f3b1cd79..df939d4b 100644 --- a/src/components/AnsichtsausweisButton.svelte +++ b/src/components/AnsichtsausweisButton.svelte @@ -1,13 +1,19 @@ - + Ausweis Ansichtsausweis diff --git a/src/components/Ausweis/AusweisPreviewContainer.svelte b/src/components/Ausweis/AusweisPreviewContainer.svelte index b4d9dbd4..72ae01ec 100644 --- a/src/components/Ausweis/AusweisPreviewContainer.svelte +++ b/src/components/Ausweis/AusweisPreviewContainer.svelte @@ -9,6 +9,7 @@ } from "@ibcornelsen/database/client"; import { + AufnahmeClient, BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, @@ -17,6 +18,7 @@ } from "./types.js"; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; + export let aufnahme: AufnahmeClient; export let objekt: ObjektClient; export let images: UploadedGebaeudeBild[] = []; @@ -58,8 +60,8 @@
- - + +
diff --git a/src/components/Ausweis/PerformanceScore.svelte b/src/components/Ausweis/PerformanceScore.svelte index d49a756d..164d236a 100644 --- a/src/components/Ausweis/PerformanceScore.svelte +++ b/src/components/Ausweis/PerformanceScore.svelte @@ -54,13 +54,7 @@ let translation_2 = 0; $: { (async () => { - const result = await endEnergieVerbrauchVerbrauchsausweis_2016({ - ...ausweis, - aufnahme: { - ...aufnahme, - objekt: objekt, - }, - }); + const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); if (!result) { return; diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte index 268afc63..75f6f376 100644 --- a/src/components/Dashboard/DashboardAusweis.svelte +++ b/src/components/Dashboard/DashboardAusweis.svelte @@ -132,7 +132,7 @@ {progress}% - {#await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis)} + {#await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt)} {:then calculations}
diff --git a/src/components/DatenblattButton.svelte b/src/components/DatenblattButton.svelte index c16f9226..c734fab2 100644 --- a/src/components/DatenblattButton.svelte +++ b/src/components/DatenblattButton.svelte @@ -1,13 +1,19 @@ - + Datenblatt Datenblatt \ No newline at end of file diff --git a/src/components/Verbrauchsausweis/audits/EndEnergie.ts b/src/components/Verbrauchsausweis/audits/EndEnergie.ts index bc060b84..a282ad2c 100644 --- a/src/components/Verbrauchsausweis/audits/EndEnergie.ts +++ b/src/components/Verbrauchsausweis/audits/EndEnergie.ts @@ -3,7 +3,7 @@ import { AuditType, hidden } from "./hidden.js"; import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js"; import { getKlimafaktoren } from "#lib/Klimafaktoren.js"; -export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: ObjektClient, aufnahme: AufnahmeClient): Promise { +export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, objekt: ObjektClient, aufnahme: AufnahmeClient): Promise { if (hidden.has(AuditType.END_ENERGIE)) { return false; } @@ -11,9 +11,9 @@ export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, ge if (aufnahme){ if (aufnahme.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) { try { - const response = await getKlimafaktoren(ausweis.startdatum, gebaeude.plz); + const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz); // Alle Klimfaktoren konnten abgefragt werden. - const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016({...ausweis, aufnahme: {...aufnahme, objekt: gebaeude}}); + const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); if (eevva){ if (eevva?.endEnergieVerbrauchGesamt <= 45 || eevva?.endEnergieVerbrauchGesamt >= 500) { return true; diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts index 1e7b3e77..c0df7134 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts @@ -1,33 +1,32 @@ -import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; +import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { getKlimafaktoren } from "#lib/Klimafaktoren.js"; import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js"; import { Enums } from "@ibcornelsen/database/client"; import moment from "moment"; export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016( - ausweis: VerbrauchsausweisWohnenClient + ausweis: VerbrauchsausweisWohnenClient, + aufnahme: AufnahmeClient ): number { - if (!ausweis.aufnahme.objekt) { - return 0 - } - let faktorKeller = 1.2; // Falls das Gebäude einen Keller besitzt der Beheizt ist erhöhen wir die Nutzfläche um 15% - if (ausweis.aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (ausweis.aufnahme.einheiten || 1) <= 2) { + if (aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (aufnahme.einheiten || 1) <= 2) { faktorKeller = 1.35; } - if ((ausweis.aufnahme.nutzflaeche || 0) > 0) { - return ausweis.aufnahme.nutzflaeche || 0; + if ((aufnahme.nutzflaeche || 0) > 0) { + return aufnahme.nutzflaeche || 0; } else { - return (ausweis.aufnahme.flaeche || 0) * faktorKeller; + return (aufnahme.flaeche || 0) * faktorKeller; } } export async function endEnergieVerbrauchVerbrauchsausweis_2016( - ausweis: VerbrauchsausweisWohnenClient + ausweis: VerbrauchsausweisWohnenClient, + aufnahme: AufnahmeClient, + objekt: ObjektClient ) { - if (!ausweis.aufnahme || !ausweis.aufnahme.objekt) { + if (!aufnahme || !objekt || !ausweis) { return null; } @@ -50,7 +49,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( }]; try { - const response = await getKlimafaktoren(ausweis.startdatum, ausweis.aufnahme.objekt.plz) + const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz) if (response) { klimafaktoren = response @@ -65,16 +64,16 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( // Endenergieverbrauch // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. let brennstoff_1 = getHeizwertfaktor( - ausweis.aufnahme.brennstoff_1 as string, + aufnahme.brennstoff_1 as string, ausweis.einheit_1 as string ); let brennstoff_2 = getHeizwertfaktor( - ausweis.aufnahme.brennstoff_2 as string, + aufnahme.brennstoff_2 as string, ausweis.einheit_2 as string ); const energetischeNutzflaeche = - energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis); + energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis, aufnahme); let energieVerbrauchGesamt_1 = ((ausweis.verbrauch_1 || 0) + @@ -91,10 +90,10 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( let energieVerbrauchWarmwasser_2 = 0; let leerstandsZuschlagWarmwasser = 0; // Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden. - let leerstand = (ausweis.aufnahme.leerstand || 0) / 100; + let leerstand = (aufnahme.leerstand || 0) / 100; if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) { - if (ausweis.aufnahme.solarsystem_warmwasser) { + if (aufnahme.solarsystem_warmwasser) { // Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * @@ -117,7 +116,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( leerstand * (energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2); } else { - if (ausweis.aufnahme.solarsystem_warmwasser) { + if (aufnahme.solarsystem_warmwasser) { // Wenn Warmwasser Anteil unbekannt und Solarsystem energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 12 * 3; energieVerbrauchWarmwasser_2 = 0; @@ -189,7 +188,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( let primaerfaktorww = 0; let primaerfaktorww_1 = 0; - if (!ausweis.warmwasser_enthalten && ausweis.aufnahme.durchlauf_erhitzer) { + if (!ausweis.warmwasser_enthalten && aufnahme.durchlauf_erhitzer) { primaerfaktorww = 1.8; primaerfaktorww_1 = 1.8; } else { diff --git a/src/lib/Berechnungen/endEnergieVerbrauch.ts b/src/lib/Berechnungen/endEnergieVerbrauch.ts index 94b3dd7d..86da72c7 100644 --- a/src/lib/Berechnungen/endEnergieVerbrauch.ts +++ b/src/lib/Berechnungen/endEnergieVerbrauch.ts @@ -1,8 +1,9 @@ -import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client"; +import type { VerbrauchsausweisWohnen } from "@ibcornelsen/database/client"; import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js"; +import { AufnahmeClient, ObjektClient } from "#components/Ausweis/types.js"; -export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): Promise { - const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis); +export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen, aufnahme: AufnahmeClient, objekt: ObjektClient): Promise { + const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); if (!result) { return 0; diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts index 0740427d..9a7d259c 100644 --- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts @@ -1,4 +1,4 @@ -import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; +import { AufnahmeClient, BenutzerClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js"; import * as fs from "fs" import { PDFDocument, rgb, StandardFonts, TextAlignment } from "pdf-lib"; @@ -9,14 +9,14 @@ import { Heizungsstatus } from "@ibcornelsen/database/server"; /* -------------------------------- Pdf Tools ------------------------------- */ -export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient) { +export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient) { const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64"); const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF) const pages = pdf.getPages() // const template = VerbrauchsausweisWohnen2016Template as Template; - const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis); + const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); const height = pages[0].getHeight() const width = pages[0].getWidth() @@ -30,7 +30,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau const marginX = 60; const marginY = 150; - const benutzer: typeof ausweis.benutzer = ausweis.benutzer || { + benutzer = benutzer || { vorname: "Max", name: "Mustermann", adresse: "Musterstraße 123", @@ -55,7 +55,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau Ausweis ID: ${ausweis.uid} Gebäudedaten - Adresse: ${ausweis.aufnahme.objekt.adresse}, ${ausweis.aufnahme.objekt.plz} ${ausweis.aufnahme.objekt.ort} + Adresse: ${objekt.adresse}, ${objekt.plz} ${objekt.ort} @@ -80,29 +80,29 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau Gebäudetyp: - ${ausweis.aufnahme.gebaeudetyp} + ${aufnahme.gebaeudetyp} Wohnfläche: - DIN Wohnfläche innen ${ausweis.aufnahme.flaeche} m² + DIN Wohnfläche innen ${aufnahme.flaeche} m² Leerstand: - ${ausweis.aufnahme.leerstand || 0}% + ${aufnahme.leerstand || 0}% Wohnungen: - ${ausweis.aufnahme.einheiten} + ${aufnahme.einheiten} Dachgeschoss: - ${translateHeizungsstatus[ausweis.aufnahme.dachgeschoss || "NICHT_VORHANDEN"]} + ${translateHeizungsstatus[aufnahme.dachgeschoss || "NICHT_VORHANDEN"]} Keller: - ${translateHeizungsstatus[ausweis.aufnahme.keller || "NICHT_VORHANDEN"]} + ${translateHeizungsstatus[aufnahme.keller || "NICHT_VORHANDEN"]} @@ -126,14 +126,14 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau - ${ausweis.aufnahme.brennstoff_1} + ${aufnahme.brennstoff_1} ${ausweis.verbrauch_1} ${ausweis.einheit_1} ${ausweis.verbrauch_2} ${ausweis.einheit_1} ${ausweis.verbrauch_3} ${ausweis.einheit_1} zusätzliche Heizquelle - ${ausweis.aufnahme.brennstoff_2 || ""} + ${aufnahme.brennstoff_2 || ""} ${ausweis.verbrauch_4 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_5 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_6 || ""} ${ausweis.einheit_2 || ""} @@ -152,55 +152,55 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau - + Zentralheizung - + Einzelöfen - + Durchlauferhitzer - + Standardkessel - + Solarsystem für Warmwasser - + Wärmepumpe - + Niedertemperaturkessel - + Brennwertkessel - + Warmwasserrohre gedämmt - + Heizungsrohre gedämmt - + Zirkulation - + Raumtemperaturregelung @@ -209,15 +209,15 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau - + Einfachglas - + Doppelverglasung - + Isolierverglasung @@ -227,25 +227,25 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau Passivhausfenster - + Alle Fenster dicht - + Fenster teilweise undicht - + Türen teilweise undicht - + Alle Türen dicht - + Rollladenkästen gedämmt @@ -254,33 +254,33 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau - + 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 diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 02f95640..bf42987a 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -14,7 +14,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne // const template = VerbrauchsausweisWohnen2016Template as Template; - const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis); + const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); const height = pages[0].getHeight() @@ -48,13 +48,13 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil) - const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude.toString()) + const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString()) - const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung.toString()) + const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString()) - const einheiten = fillFormField("einheiten", aufnahme.einheiten.toString()) + const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString()) - const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche.toString()}m²`) + const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`) fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`) @@ -72,20 +72,23 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung") toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges") + console.log(bilder); + + const gebaeudeBild = bilder.find(image => image.kategorie === "Gebaeude"); /* -------------------------------- Seite 2 -------------------------------- */ - const co2Emissionen = fillFormField("co2emissionen", berechnungen.co2EmissionenGesamt.toString(), 8, TextAlignment.Center) + 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 250 als Wert zwischen 0 und 1 festlegen - const endenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt)) / 250 - const primaerenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt)) / 250 + const endenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 250 + const primaerenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt || 0)) / 250 const minTranslation = 68 const maxTranslation = 504 @@ -182,57 +185,57 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne 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, { + 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, { + pages[2].drawText(zeitraum_bis || "", { x: initialXOffset + 47, y: initialHeight - (i * yOffset), size: 8, font }) - pages[2].drawText(energietraeger, { + pages[2].drawText(energietraeger || "", { x: initialXOffset + 94, y: initialHeight - (i * yOffset), size: 8, font }) - pages[2].drawText(primaerfaktor, { + pages[2].drawText(primaerfaktor || "", { x: initialXOffset + 317, y: initialHeight - (i * yOffset), size: 8, font }) - pages[2].drawText(energieverbrauch, { + pages[2].drawText(energieverbrauch || "", { x: initialXOffset + 351, y: initialHeight - (i * yOffset), size: 8, font }) - pages[2].drawText(anteil_warmwasser, { + pages[2].drawText(anteil_warmwasser || "", { x: initialXOffset + 402, y: initialHeight - (i * yOffset), size: 8, font }) - pages[2].drawText(anteil_heizung, { + pages[2].drawText(anteil_heizung || "", { x: initialXOffset + 453, y: initialHeight - (i * yOffset), size: 8, font }) - pages[2].drawText(klimafaktor, { + pages[2].drawText(klimafaktor || "", { x: initialXOffset + 504, y: initialHeight - (i * yOffset), size: 8, diff --git a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte index 33184d2e..58d200b1 100644 --- a/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte +++ b/src/modules/BedarfsausweisWohnen/BedarfsausweisWohnenModule.svelte @@ -1000,6 +1000,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc bind:images bind:ausweis bind:gebaeude + bind:aufnahme /> diff --git a/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte b/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte index 6592f72e..7aad51ab 100644 --- a/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte +++ b/src/modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte @@ -161,6 +161,7 @@ bind:images={bilder} bind:ausweis bind:objekt + bind:aufnahme />
diff --git a/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte b/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte index ce04fbf5..90c771aa 100644 --- a/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte @@ -290,6 +290,7 @@ const ausweisart: Enums.Ausweisart = "VerbrauchsausweisWohnen" bind:images={bilder} bind:ausweis bind:objekt={objekt} + bind:aufnahme /> diff --git a/src/pages/pdf/ansichtsausweis.astro b/src/pages/pdf/ansichtsausweis.astro index d8f47231..979c016b 100644 --- a/src/pages/pdf/ansichtsausweis.astro +++ b/src/pages/pdf/ansichtsausweis.astro @@ -5,16 +5,20 @@ import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen" import { Enums } from "@ibcornelsen/database/client"; import { createCaller } from "src/astro-typesafe-api-caller"; -const base64 = Astro.url.searchParams.get("base64"); +const base64Ausweis = Astro.url.searchParams.get("ausweis"); +const base64Aufnahme = Astro.url.searchParams.get("aufnahme"); +const base64Objekt = Astro.url.searchParams.get("objekt"); +const base64Bilder = Astro.url.searchParams.get("bilder"); let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | null = null; let aufnahme: AufnahmeClient = {} as AufnahmeClient; let objekt: ObjektClient = {} as ObjektClient; let user: BenutzerClient = {} as BenutzerClient; -let images: UploadedGebaeudeBild[] = [] -if (base64) { - const buffer = Buffer.from(base64, "base64"); - const json = buffer.toString("utf-8"); - ausweis = JSON.parse(json) as VerbrauchsausweisWohnenClient; +let bilder: UploadedGebaeudeBild[] = [] +if (base64Ausweis && base64Aufnahme && base64Objekt && base64Bilder) { + ausweis = JSON.parse(Buffer.from(base64Ausweis, "base64").toString("utf-8")) as VerbrauchsausweisWohnenClient; + objekt = JSON.parse(Buffer.from(base64Objekt, "base64").toString("utf-8")) as ObjektClient; + aufnahme = JSON.parse(Buffer.from(base64Aufnahme, "base64").toString("utf-8")) as AufnahmeClient; + bilder = JSON.parse(Buffer.from(base64Bilder, "base64").toString("utf-8")) as UploadedGebaeudeBild[]; } else { const uidAusweis = Astro.url.searchParams.get("uid"); @@ -76,7 +80,7 @@ if (base64) { }); } -const pdf = await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, images, user); +const pdf = await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user); return new Response(pdf, { headers: { diff --git a/src/pages/pdf/datenblatt.astro b/src/pages/pdf/datenblatt.astro index b24d89ae..cf3add73 100644 --- a/src/pages/pdf/datenblatt.astro +++ b/src/pages/pdf/datenblatt.astro @@ -1,14 +1,25 @@ --- -import { BenutzerClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; -import { createCaller } from "#lib/caller"; +import { AufnahmeClient, BenutzerClient, getAusweisartFromUUID, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants"; import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen"; +import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen"; +import { Enums } from "@ibcornelsen/database/client"; +import { createCaller } from "src/astro-typesafe-api-caller"; -const base64 = Astro.url.searchParams.get("base64"); -let ausweis: VerbrauchsausweisWohnenClient | null = null; -if (base64) { - const buffer = Buffer.from(base64, "base64"); - const json = buffer.toString("utf-8"); - ausweis = JSON.parse(json) as VerbrauchsausweisWohnenClient; +const base64Ausweis = Astro.url.searchParams.get("ausweis"); +const base64Aufnahme = Astro.url.searchParams.get("aufnahme"); +const base64Objekt = Astro.url.searchParams.get("objekt"); +const base64Bilder = Astro.url.searchParams.get("bilder"); +let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | null = null; +let aufnahme: AufnahmeClient = {} as AufnahmeClient; +let objekt: ObjektClient = {} as ObjektClient; +let benutzer: BenutzerClient = {} as BenutzerClient; +let bilder: UploadedGebaeudeBild[] = [] +if (base64Ausweis && base64Aufnahme && base64Objekt && base64Bilder) { + ausweis = JSON.parse(Buffer.from(base64Ausweis, "base64").toString("utf-8")) as VerbrauchsausweisWohnenClient; + objekt = JSON.parse(Buffer.from(base64Objekt, "base64").toString("utf-8")) as ObjektClient; + aufnahme = JSON.parse(Buffer.from(base64Aufnahme, "base64").toString("utf-8")) as AufnahmeClient; + bilder = JSON.parse(Buffer.from(base64Bilder, "base64").toString("utf-8")) as UploadedGebaeudeBild[]; } else { const uidAusweis = Astro.url.searchParams.get("uid"); @@ -16,14 +27,61 @@ if (base64) { return Astro.redirect("/404"); } + const ausweisart = getAusweisartFromUUID(uidAusweis) + const caller = createCaller(Astro); - ausweis = await caller.v1.verbrauchsausweisWohnen.get({ - uid: uidAusweis + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + ausweis = await caller["verbrauchsausweis-wohnen"]._uid.GET.fetch(undefined, { + params: { + uid: uidAusweis + }, + headers: { + Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` + } + }); + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + ausweis = await caller["verbrauchsausweis-gewerbe"]._uid.GET.fetch(undefined, { + params: { + uid: uidAusweis + }, + headers: { + Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` + } + }); + } + + + if (!ausweis) { + return Astro.redirect("/"); + } + + aufnahme = await caller.aufnahme._uid.GET.fetch(undefined, { + params: { + uid: ausweis.uid_aufnahme + }, + headers: { + Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` + } + }); + + objekt = await caller.objekt._uid.GET.fetch(undefined, { + params: { + uid: ausweis.uid_objekt + }, + headers: { + Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` + } + }); + + benutzer = await caller.user.self.GET.fetch(undefined, { + headers: { + Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` + } }); } -const pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis); +const pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, benutzer); return new Response(pdf, {