From 4e54511fe025a879e931d138bab8f34b422f4c38 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Sun, 14 Sep 2025 14:02:37 -0400 Subject: [PATCH] Klimafaktoren Bug Gefixt In dem Client Skript was sich die Klimfaktoren abholen sollte war noch eine alte Definition der getKlimafaktoren Funktion genutzt worden. --- src/astro-typesafe-api-caller.ts | 18 +++++++------- .../Ausweis/PerformanceScore.svelte | 3 +++ .../Verbrauchsausweis/audits/EndEnergie.ts | 2 +- .../VerbrauchsausweisGewerbe_2016_Client.ts | 3 +-- .../VerbrauchsausweisWohnen_2016_Client.ts | 6 +++-- src/lib/Klimafaktoren.ts | 24 ++++++++----------- src/lib/Memoization.ts | 23 ++++++++++-------- src/pages/dashboard/objekte/index.astro | 4 ++-- 8 files changed, 43 insertions(+), 40 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 6a6f79e0..a9150c03 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -5,7 +5,6 @@ export const createCaller = createCallerFactory({ "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "unterlage": await import("../src/pages/api/unterlage.ts"), - "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "admin/bedarfsausweis-ausstellen": await import("../src/pages/api/admin/bedarfsausweis-ausstellen.ts"), "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), @@ -14,32 +13,33 @@ export const createCaller = createCallerFactory({ "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), "ausweise": await import("../src/pages/api/ausweise/index.ts"), + "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), - "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), + "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), + "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"), "geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"), "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"), "geg-nachweis-wohnen/[id]": await import("../src/pages/api/geg-nachweis-wohnen/[id].ts"), "geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"), + "objekt": await import("../src/pages/api/objekt/index.ts"), "rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"), "rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"), - "objekt": await import("../src/pages/api/objekt/index.ts"), + "ticket": await import("../src/pages/api/ticket/index.ts"), "user": await import("../src/pages/api/user/index.ts"), "user/self": await import("../src/pages/api/user/self.ts"), - "ticket": await import("../src/pages/api/ticket/index.ts"), - "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), - "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), - "objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"), + "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), + "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), + "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), "aufnahme/[id]/unterlagen": await import("../src/pages/api/aufnahme/[id]/unterlagen.ts"), - "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), + "objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"), }) \ No newline at end of file diff --git a/src/components/Ausweis/PerformanceScore.svelte b/src/components/Ausweis/PerformanceScore.svelte index 5a40e520..984d05a1 100644 --- a/src/components/Ausweis/PerformanceScore.svelte +++ b/src/components/Ausweis/PerformanceScore.svelte @@ -60,6 +60,8 @@ return centeredValue; } + + let translation_1 = 0; let translation_2 = 0; $: { @@ -74,6 +76,7 @@ if (!result) { return; } + translation_1 = Math.max( 0, Math.min( diff --git a/src/components/Verbrauchsausweis/audits/EndEnergie.ts b/src/components/Verbrauchsausweis/audits/EndEnergie.ts index 09bfe707..b536a3f5 100644 --- a/src/components/Verbrauchsausweis/audits/EndEnergie.ts +++ b/src/components/Verbrauchsausweis/audits/EndEnergie.ts @@ -11,7 +11,7 @@ export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient | V if (aufnahme){ if (aufnahme.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) { try { - const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz); + const response = await getKlimafaktoren(ausweis.startdatum as Date, objekt.plz as string); // Alle Klimfaktoren konnten abgefragt werden. const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt); if (eevva){ diff --git a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.ts b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.ts index 0c8842b5..0dcd60f9 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.ts @@ -10,9 +10,8 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Client( ) { const startdatum = moment(ausweis.startdatum); let klimafaktoren = await getKlimafaktoren( - objekt.plz as string, startdatum.toDate(), - startdatum.add(2, "years").toDate() + objekt.plz as string, ); if (!klimafaktoren || klimafaktoren.length === 0) { diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.ts index 7bee248d..7be891c2 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.ts @@ -13,12 +13,14 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016_Client( objekt: ObjektClient, ) { const startdatum = moment(ausweis.startdatum); + let klimafaktoren = await getKlimafaktoren( - objekt.plz as string, startdatum.toDate(), - startdatum.add(2, "years").toDate() + objekt.plz as string ); + console.log("Klimafaktoren", klimafaktoren); + if (!klimafaktoren || klimafaktoren.length === 0) { klimafaktoren = [ { diff --git a/src/lib/Klimafaktoren.ts b/src/lib/Klimafaktoren.ts index 9dbed741..3a0a8647 100644 --- a/src/lib/Klimafaktoren.ts +++ b/src/lib/Klimafaktoren.ts @@ -5,19 +5,15 @@ import { api } from "astro-typesafe-api/client" export const getKlimafaktoren = memoize(async (date: Date, plz: string) => { if (!plz || !date) { return null; - } + } - try { - const response = await api.klimafaktoren.GET.fetch({ - plz, - genauigkeit: "years", - // @ts-ignore Der Adapter nimmt z.coerce.date() - startdatum: moment(date).utc(true).toString(), - // @ts-ignore Der Adapter nimmt z.coerce.date() - enddatum: moment(date).add(2, "years").utc(true).toString(), - }); - return response; - } catch (e) { - return null; - } + const response = await api.klimafaktoren.GET.fetch({ + plz, + genauigkeit: "years", + // @ts-ignore Der Adapter nimmt z.coerce.date() + startdatum: moment(date).utc(true).toString(), + // @ts-ignore Der Adapter nimmt z.coerce.date() + enddatum: moment(date).add(2, "years").utc(true).toString(), + }); + return response; }); diff --git a/src/lib/Memoization.ts b/src/lib/Memoization.ts index b80180fa..19abd0e9 100644 --- a/src/lib/Memoization.ts +++ b/src/lib/Memoization.ts @@ -1,18 +1,21 @@ -type MemoizedFunction = (...args: any[]) => T; +type MemoizedFunction Promise | any> = (...args: Parameters) => Promise> | ReturnType; -export function memoize(func: (...args: any[]) => T): MemoizedFunction { - const cache = new Map(); - - return (...args: any[]): T => { +export function memoize Promise | any>(func: T): MemoizedFunction { + const cache = new Map>(); + + return (...args: Parameters): Promise> | ReturnType => { const key = JSON.stringify(args); - if (cache.has(key)) { return cache.get(key)!; } - const result = func(...args); - cache.set(key, result); - - return result; + if (result instanceof Promise) { + return result.then(resolved => { + return resolved; + }); + } else { + cache.set(key, result); + return result; + } }; } diff --git a/src/pages/dashboard/objekte/index.astro b/src/pages/dashboard/objekte/index.astro index ca263de2..58f3f013 100644 --- a/src/pages/dashboard/objekte/index.astro +++ b/src/pages/dashboard/objekte/index.astro @@ -1,6 +1,5 @@ --- import { Enums, prisma } from "#lib/server/prisma"; -import UserLayout from "#layouts/DashboardLayout.astro"; import { getCurrentUser } from "#lib/server/user"; const page = Number(Astro.url.searchParams.get("p")); @@ -13,7 +12,7 @@ if (!user) { const totalPageCount = await prisma.aufnahme.count({ where: - user.rolle !== Enums.BenutzerRolle.ADMIN || Enums.BenutzerRolle.RESELLER + ((user.rolle !== Enums.BenutzerRolle.ADMIN) && (user.rolle !== Enums.BenutzerRolle.RESELLER)) ? { benutzer: { id: user.id, @@ -22,6 +21,7 @@ const totalPageCount = await prisma.aufnahme.count({ : {}, }); + if ((page < 1 || page > totalPageCount) && totalPageCount > 0) { return Astro.redirect("/dashboard/objekte?p=1"); } else if (totalPageCount === 0) {