From 022fe205241d003a666b07cefe31ff5f9facbae0 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Thu, 29 Feb 2024 11:09:23 +0700 Subject: [PATCH] =?UTF-8?q?Ausweis=20Pr=C3=BCfen=20und=20Email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 + src/components/AusweisPruefenBox.svelte | 755 ++++++++++-------- .../Dashboard/DashboardAusweis.svelte | 4 +- src/layouts/Layout.astro | 1 - .../VerbrauchsausweisWohnen_2016.ts | 24 + .../Dashboard/DashboardAusweiseModule.svelte | 3 + src/pages/bilder/[uid].webp.ts | 5 + src/pages/dashboard/ausweise/index.astro | 19 +- src/pages/email.astro | 31 + 9 files changed, 501 insertions(+), 343 deletions(-) create mode 100644 src/pages/email.astro diff --git a/package.json b/package.json index 3ecc2f07..53cc61c2 100644 --- a/package.json +++ b/package.json @@ -56,12 +56,14 @@ "sass": "^1.62.1", "svelte": "^3.59.1", "svelte-dialogs": "^1.2.2", + "svelte-katex": "^0.1.2", "svelte-preprocess": "^5.0.3", "svelte-ripple-action": "^1.0.5", "svelte-tabs": "^1.1.0", "tailwindcss": "^3.3.2", "trpc-openapi": "^1.2.0", "uuid": "^9.0.0", + "uuid-validate": "^0.0.3", "vite-tsconfig-paths": "^4.2.0", "zod": "^3.22.4" }, diff --git a/src/components/AusweisPruefenBox.svelte b/src/components/AusweisPruefenBox.svelte index 9524cdce..cff9c2b4 100644 --- a/src/components/AusweisPruefenBox.svelte +++ b/src/components/AusweisPruefenBox.svelte @@ -6,23 +6,23 @@ } from "./Ausweis/types.js"; import AusweisPruefenTooltip from "./AusweisPruefenTooltip.svelte"; import { addNotification } from "./NotificationProvider/shared"; + import { CheckCircled, CrossCircled, Image } from "radix-svelte-icons"; + import ChevronDown from "radix-svelte-icons/src/lib/icons/ChevronDown.svelte"; + export let ausweis: VerbrauchsausweisWohnenClient; export let calculations: Awaited< ReturnType >; + console.log(ausweis); + const gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein const ausweisArt = "VA"; // TODO: Das ist ein Platzhalter, hier muss die Ausweisart aus dem Ausweisobjekt kommen - - - try { - // TODO: In Zukunft sollen die Bilder von unserer API kommen, das ist allerdings noch nicht ganz fertig. - // images = JSON.parse(ausweis.images) - } catch (e) {} + const images = ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.gebaeude_bilder; let verbrauchWWGesamt_1 = ""; let verbrauchWWGesamt_2 = ""; @@ -448,328 +448,429 @@ ausweis = ausweis; } + + let bilderModal: HTMLDialogElement; + let infoVisible = false; - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + {@html gebaeude_aufnahme_allgemein.kontrolldatei + ? `` + : ""} + {@html !gebaeude_aufnahme_allgemein.registriernummer + ? `` + : ""} + + +
Status{zurueckGestellt} - -
- {gebaeude_aufnahme_allgemein.adresse} {gebaeude_aufnahme_allgemein.plz} {gebaeude_aufnahme_allgemein.ort} -
- {gebaeude_aufnahme_allgemein.gebaeudetyp}, Einheiten: {gebaeude_aufnahme_allgemein.einheiten} -
- {ausweisArt} - {ausweis.uid.split("-")[0]} - {moment(gebaeude_aufnahme_allgemein.erstellungsdatum).format("DD.MM.YYYY")} -
- -
- Baujahr Gebäude / Baujahr Heizung -
- {gebaeude_aufnahme_allgemein.baujahr_gebaeude.join(", ")} - {gebaeude_aufnahme_allgemein.baujahr_heizung.join(", ")} -
-
- -
- -
- Wohnfläche in m² -
- {gebaeude_aufnahme_allgemein.faktorKeller} x {gebaeude_aufnahme_allgemein.flaeche}m² Energetische Nutzfläche (Keller {gebaeude_aufnahme_allgemein.keller}) in m² -
- {gebaeude_aufnahme_allgemein.flaeche} - {calculations?.energetische_nutzfläche} -
-
- -
- {tooltip4Z1} -
- {tooltip4Z2} -
- {table4Z1} - {table4Z2} -
- -
- {tooltip5Z1} -
- {tooltip5Z2} -
- {tooltip5Z3} -
- {table5Z1} - {table5Z2} -
-
- -
- {tooltip6Z1} -
- {tooltip6Z2} -
- {table6Z1} - {table6Z2} -
- -
- {tooltip7Z1} -
- {tooltip7Z2} -
- {table7Z1} - {table7Z2} -
- -
- {tooltip8Z1} -
- {tooltip8Z2} -
- {table8Z1} - {table8Z2} -
- -
- {tooltip9Z1} -
- {tooltip9Z2} -
- {table9Z1} - {table9Z2} -
- -
- {tooltip10Z1} -
- {tooltip10Z2} -
- {table10Z1} - {table10Z2} -
- -
- {tooltip11Z1} -
- {tooltip11Z2} -
- {table11Z1} - {table11Z2} -
- -
- {tooltip12Z1} -
- {tooltip12Z2} -
- {table12Z1} - {table12Z2} -
-
- -
- {tooltip13Z1} -
- {tooltip13Z2} -
- {table13Z1} - {table13Z2} -
-
- -
- {tooltip14Z1} -
- {tooltip14Z2} -
- {table14Z1} - {table14Z2} -
-
- -
- {tooltip15Z1} -
- {tooltip15Z2} -
- {table15Z1} - {table15Z2} -
-
- -
- {tooltip16Z1} -
- {tooltip16Z2} -
- {table16Z1} - {table16Z2} -
-
- Gebäudebilder -
- Boxpruefung - + +
+ +
+ {gebaeude_aufnahme_allgemein.prueftext} +
+ {#if gebaeude_aufnahme_allgemein.boxpruefung} + + {:else} + + {/if} +
EnergieausweisDatenblattF
+ +
+
+
+

Wichtige Daten

+ + + + + + + + + + + + + + + + + + + +
Angewendete BerechnungsformelEnEV 2016
Berechnungsergebnis{calculations?.endEnergieVerbrauchGesamt}kWh/m2/A - Energieeffizienzklasse {calculations?.energieEffizienzKlasse}
Informationen des Nutzers{gebaeude_aufnahme_allgemein.boxpruefung}
UID
{ausweis.uid}
+
+
+

Ereignisse

+
    +
  • +
    + +
    +
    + +
    Ausweis erstellt
    +
    +
    +
  • + {#each ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.events as event, i} +
  • +
    +
    + +
    +
    + +
    {event.title}
    + {event.description || ""} +
    +
    +
  • + {/each} + {#if ausweis.erledigt} +
  • +
    +
    + +
    +
    + +
    Ausweis ausgestellt
    + {ausweis.registriernummer ? `Registriernummer: ${ausweis.registriernummer}` : ""} +
    +
    +
  • + {/if} +
+
+
+
+ diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte index 31b05017..903eaee7 100644 --- a/src/components/Dashboard/DashboardAusweis.svelte +++ b/src/components/Dashboard/DashboardAusweis.svelte @@ -13,9 +13,7 @@ } from "radix-svelte-icons"; import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016"; import { client } from "src/trpc"; - import { verbrauchsausweisWohnenCalculateFormProgress } from "#lib/VerbrauchsausweisWohnen/calculateFormProgress"; - import { number } from "zod"; - + export let ausweis: VerbrauchsausweisWohnenClient; export let progress: number; diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 6300a12f..32f375ea 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -8,7 +8,6 @@ import Header from "../components/Header.astro"; import SidebarLeft from "../components/SidebarLeft.astro"; import SidebarRight from "../components/SidebarRight.astro"; import { NotificationWrapper } from "@ibcornelsen/ui"; -import HeaderAlternative from "#components/HeaderAlternative.svelte"; export interface Props { title: string; diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts index 7d181872..fdf21bb9 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts @@ -232,6 +232,29 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( co2EmissionenLeerstandsZuschlag + co2EmissionenKuehlungsZuschlag; + // Energieeffizienzklasse + let energieEffizienzKlasse = ""; + if (endEnergieVerbrauchGesamt < 30) { + energieEffizienzKlasse = 'A+'; + }else if (endEnergieVerbrauchGesamt < 50) { + energieEffizienzKlasse = 'A'; + }else if (endEnergieVerbrauchGesamt < 75) { + energieEffizienzKlasse = 'B'; + }else if (endEnergieVerbrauchGesamt < 100) { + energieEffizienzKlasse = 'C'; + }else if (endEnergieVerbrauchGesamt < 130) { + energieEffizienzKlasse = 'D'; + }else if (endEnergieVerbrauchGesamt < 160) { + energieEffizienzKlasse = 'E'; + }else if (endEnergieVerbrauchGesamt < 200) { + energieEffizienzKlasse = 'F'; + }else if (endEnergieVerbrauchGesamt < 250) { + energieEffizienzKlasse = 'G'; + }else if (endEnergieVerbrauchGesamt >= 250) { + energieEffizienzKlasse = 'H'; + } + + return { brennstoff_1: brennstoff_1, brennstoff_2: brennstoff_2, @@ -320,5 +343,6 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( primaerEnergieVerbrauchGesamt: Math.round( primaerEnergieVerbrauchGesamt ), + energieEffizienzKlasse }; } diff --git a/src/modules/Dashboard/DashboardAusweiseModule.svelte b/src/modules/Dashboard/DashboardAusweiseModule.svelte index 825bd4b7..c85ff5b4 100644 --- a/src/modules/Dashboard/DashboardAusweiseModule.svelte +++ b/src/modules/Dashboard/DashboardAusweiseModule.svelte @@ -17,6 +17,9 @@ limit: 10 }); + console.log(ausweise); + + if (!ausweise) return; ausweisUeberpruefung = ausweise.map(ausweis => verbrauchsausweisWohnenCalculateFormProgress(ausweis)); diff --git a/src/pages/bilder/[uid].webp.ts b/src/pages/bilder/[uid].webp.ts index 4a02912f..dcd4dde1 100644 --- a/src/pages/bilder/[uid].webp.ts +++ b/src/pages/bilder/[uid].webp.ts @@ -1,5 +1,6 @@ import { createCaller } from "#lib/caller"; import { APIRoute } from "astro"; +import { validate } from "uuid"; export const get: APIRoute = async ({params, cookies}) => { const { uid } = params; @@ -8,6 +9,10 @@ export const get: APIRoute = async ({params, cookies}) => { return new Response("No uid provided", { status: 400 }); } + if (!validate(uid)) { + return new Response("Invalid uid", { status: 400 }); + } + const caller = createCaller({ cookies }) const image = await caller.v1.bilder.getBase64({ uid }) diff --git a/src/pages/dashboard/ausweise/index.astro b/src/pages/dashboard/ausweise/index.astro index b6bbdc91..e0e34f16 100644 --- a/src/pages/dashboard/ausweise/index.astro +++ b/src/pages/dashboard/ausweise/index.astro @@ -1,24 +1,19 @@ --- import UserLayout from "../../../layouts/UserLayout.astro"; -import { API_UID_COOKIE_NAME } from "../../../lib/constants"; import DashboardAusweiseModule from "#modules/Dashboard/DashboardAusweiseModule.svelte"; -import { prisma } from "@ibcornelsen/database/server"; -const uid = Astro.cookies.get(API_UID_COOKIE_NAME).value +import { validateAccessTokenServer } from "src/server/lib/validateAccessToken"; +import { createCaller } from "#lib/caller"; -if (!uid) { +const accessTokenValid = await validateAccessTokenServer(Astro); + +if (!accessTokenValid) { return Astro.redirect("/auth/login") } -const user = await prisma.benutzer.findUnique({ - where: { - uid - } -}) +const caller = createCaller(Astro); -if (!user) { - return Astro.redirect("/auth/login") -} +const user = await caller.v1.benutzer.self(); --- diff --git a/src/pages/email.astro b/src/pages/email.astro new file mode 100644 index 00000000..2d289d68 --- /dev/null +++ b/src/pages/email.astro @@ -0,0 +1,31 @@ +--- +import ThemeController from "../components/ThemeController.svelte"; +import moment from "moment" + +const lightTheme = Astro.cookies.get("theme").value === "light"; +--- + + + + + + + email + + +
+
+ +
+
+

Erinnerung vom IBCornelsen

+

Bitte denken sie daran, die restlichen Bilder für ihr Gebäude hochzuladen. Die aktuelle Gesetzgebung erfordert dies, bevor ihr Ausweis ausgestellt werden kann.

+ Bilder Hochladen +
+ +
+ + + \ No newline at end of file