diff --git a/package.json b/package.json index 1a0aeb5a..4e457027 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,15 @@ "cookiejs": "^2.1.2", "express": "^4.18.2", "jwt-simple": "^0.5.6", + "katex": "^0.16.7", "knex": "^2.4.2", "moment": "^2.29.4", "pg": "^8.10.0", "svelte": "^3.54.0", + "svelte-preprocess": "^5.0.1", "tailwindcss": "^3.0.24", "uuid": "^9.0.0", - "zod": "^3.21.4", - "svelte-preprocess": "^5.0.1" + "zod": "^3.21.4" }, "devDependencies": { "@types/uuid": "^9.0.1", diff --git a/src/components/AusweisCard.svelte b/src/components/AusweisCard.svelte index 5d6a7b9d..517c5c03 100644 --- a/src/components/AusweisCard.svelte +++ b/src/components/AusweisCard.svelte @@ -1,18 +1,297 @@ -
-
-

{strasse}, {plz} {stadt}

- + + +
- Gebäudeansicht - \ No newline at end of file + Gebäudeansicht +
+
+

+ Datenprüfung Verbrauchsausweis - ID {ausweis.id} - {ausweis.objekt_strasse}, + {ausweis.objekt_plz} + {ausweis.objekt_ort} +

+ (hidden = true)} + className="p-1 hover:bg-gray-100 cursor-pointer w-[25px] h-[25px] rounded-lg" + /> +
+
Abschnitt A,B,C,D und E
+
+
+ + + + + + + + + + + + + + + + + + + + + +
AL:{ausweis.ausstellgrund}
BH:{ausweis.baujahr_anlage}
BG:{ausweis.baujahr_gebaeude}
AW:{ausweis.anzahl_einheiten}
ST:{ausweis.objekt_saniert}
+
+
+ + + + + + + + + + + + + + + + + + + + + +
WF:{ausweis.wohnflaeche}
F:{ausweis.baujahr_anlage}
AN:{ausweis.baujahr_gebaeude}
KB:{ausweis.keller_beheizt}
DB:{ausweis.dachgeschoss}
+
+
+ + + + + + + + + + + + + + + + + + + + +
WWE:{ausweis.warmwasser_enthalten}
WWA:{ausweis.anteil_warmwasser_1}
WWAZH:{ausweis.anteil_warmwasser_2}
AEVS: +
SSWW:{ausweis.dachgeschoss}
+
+
+ + + + + + + + + + + + + + + + + + + +
GT:{ausweis.objekt_gebaeudeteil}
GTL: +
L:{ausweis.lueftungskonzept}
AK: +
LS:{ausweis.leerstand}
+
+
+
+ + + + + + + + + + + + + + + + +
{energieverbrauchDaten[0].format("MMMM YYYY")}
{energieverbrauchDaten[0].format("MM.YYYY")} - {energieverbrauchDaten[1].format( + "MM.YYYY" + )}
{energieverbrauchDaten[1].format("MM.YYYY")} - {energieverbrauchDaten[2].format( + "MM.YYYY" + )}
{energieverbrauchDaten[2].format("MM.YYYY")} - {energieverbrauchDaten[3].format( + "MM.YYYY" + )}
Faktoren Hi / PF / COE
+ + + + + + + + + + + + + + + + +
Primäre Heizquelle (1)
{ausweis.energieverbrauch_1_heizquelle_1} + {ausweis.energietraeger_einheit_heizquelle_1} + {ausweis.energietraeger_1}
{ausweis.energieverbrauch_2_heizquelle_1} + {ausweis.energietraeger_einheit_heizquelle_1} + {ausweis.energietraeger_1}
{ausweis.energieverbrauch_3_heizquelle_1} + {ausweis.energietraeger_einheit_heizquelle_1} + {ausweis.energietraeger_1}
10 / 1.1 / 2.5
+ + + + + + + + + + + + + + + + +
Sekundäre Heizquelle (2)
{ausweis.energieverbrauch_1_heizquelle_2} + {ausweis.energietraeger_einheit_heizquelle_2} + {ausweis.energietraeger_2}
{ausweis.energieverbrauch_2_heizquelle_2} + {ausweis.energietraeger_einheit_heizquelle_2} + {ausweis.energietraeger_2}
{ausweis.energieverbrauch_3_heizquelle_2} + {ausweis.energietraeger_einheit_heizquelle_2} + {ausweis.energietraeger_2}
10 / 1.1 / 2.5
+ + + + + + + + + + + + + + + + +
Klimafaktoren
1.12
1.15
1.12
-
+
+
+ diff --git a/src/components/Icons/Cross.svelte b/src/components/Icons/Cross.svelte new file mode 100644 index 00000000..000038fd --- /dev/null +++ b/src/components/Icons/Cross.svelte @@ -0,0 +1,23 @@ + + + diff --git a/src/components/Icons/Home.svelte b/src/components/Icons/Home.svelte index 3f0daba9..93025171 100644 --- a/src/components/Icons/Home.svelte +++ b/src/components/Icons/Home.svelte @@ -11,6 +11,8 @@ viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" + on:click + {...$$restProps} > + import katex from "katex"; + export let math: string; + export let displayMode: boolean = false; + + const options = { + displayMode: displayMode, + throwOnError: false + } + + let katexString: any; + $: katexString = katex.renderToString(math, options) + + + + + + +{@html katexString} \ No newline at end of file diff --git a/src/lib/Ausweis/Verbrauchsausweis.ts b/src/lib/Ausweis/Verbrauchsausweis.ts index c3e85545..46f11d0c 100644 --- a/src/lib/Ausweis/Verbrauchsausweis.ts +++ b/src/lib/Ausweis/Verbrauchsausweis.ts @@ -1,4 +1,5 @@ import { getKlimafaktorenClient } from "../Klimafaktoren"; +import { getHeizwertfaktorClient } from "../server/Heizwertfaktor"; export enum AusweisType { VERBRAUCHSAUSWEIS, @@ -16,6 +17,40 @@ export enum Lueftungskonzept { export type Ausweisart = "VA" | "BA" | "VANW"; export type Ausstellgrund = "Vermietung" | "Neubau" | "Verkauf" | "Modernisierung" | "Sonstiges"; +class BitChecker { + public value: number; + + constructor(number: number) { + this.value = number; + } + + public isSet(bitIndex: number): boolean { + const bitMask = 1 << bitIndex; + return (this.value & bitMask) !== 0; + } + + public set(index: number): number { + if (!this.isSet(index)) { + this.value += 2 ** index; + } + + return this.value; + } + + public off(index: number) { + if (this.isSet(index)) { + this.value -= 2 ** index; + } + + return this.value; + } + + public valueOf(): number { + return this.value; + } +} + + export class Verbrauchsausweis { public ausweisart: Ausweisart = "VA"; public id: number = 0; @@ -35,8 +70,7 @@ export class Verbrauchsausweis { public erstellungsdatum: Date = new Date(); public ausstellgrund: Ausstellgrund = "Vermietung"; - public energieverbrauch_zeitraum_monat: number = 0; - public energieverbrauch_zeitraum_jahr: number = 0; + public energieverbrauch_zeitraum: Date = new Date(); public energieverbrauch_1_heizquelle_1: number = 0; public energieverbrauch_2_heizquelle_1: number = 0; public energieverbrauch_3_heizquelle_1: number = 0; @@ -52,7 +86,7 @@ export class Verbrauchsausweis { public anteil_warmwasser_1: number = 0; public anteil_warmwasser_2: number = 0; - public public_id: string = ""; + public uid: string = ""; public wohnflaeche: number = 0; public keller_beheizt: boolean = false; @@ -66,7 +100,7 @@ export class Verbrauchsausweis { public versorgungssysteme: number = 0; public fenster_dach: number = 0; - public energiequelle_2_nutzung: number = 0; + public energiequelle_2_nutzung: BitChecker = new BitChecker(0); public daemmung: number = 0; public energetische_nutzfläche: number = 0; @@ -160,7 +194,7 @@ export class Verbrauchsausweis { ]; if (this.energietraeger_1 && this.energietraeger_einheit_heizquelle_1) { [umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] = - getHeizwertfaktor( + await getHeizwertfaktorClient( this.energietraeger_1, this.energietraeger_einheit_heizquelle_1 ); @@ -168,7 +202,7 @@ export class Verbrauchsausweis { if (this.energietraeger_2 && this.energietraeger_einheit_heizquelle_2) { [umrechnungsfaktor_1, primaerfaktor_1, heizwertfaktor_1, coe_1] = - getHeizwertfaktor( + await getHeizwertfaktorClient( this.energietraeger_2, this.energietraeger_einheit_heizquelle_2 ); @@ -215,7 +249,7 @@ export class Verbrauchsausweis { durchschnittsKlimafaktor; } - if (energiequelle_2_nutzung[3]) { + if (this.energiequelle_2_nutzung.isSet(3)) { kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3; } diff --git a/src/lib/Ausweis/index.ts b/src/lib/Ausweis/index.ts index dfd9f2c4..30cf25d7 100644 --- a/src/lib/Ausweis/index.ts +++ b/src/lib/Ausweis/index.ts @@ -1,5 +1,5 @@ export class Ausweis { - public static fromPublicId(public_id: string) { + public static fromUID(uid: string) { } diff --git a/src/lib/Klimafaktoren.ts b/src/lib/Klimafaktoren.ts index 8ab7eeb0..603556f1 100644 --- a/src/lib/Klimafaktoren.ts +++ b/src/lib/Klimafaktoren.ts @@ -1,5 +1,5 @@ import moment from "moment"; -import { memoize } from "./Memization"; +import { memoize } from "./Memoization"; export const getKlimafaktorenClient = memoize>(async (date: Date, zip: string) => { const response = await fetch(`/api/klimafaktoren?date=${moment(date).format("YYYY-MM-DD")}&zip=${zip}`); diff --git a/src/lib/Memization.ts b/src/lib/Memoization.ts similarity index 100% rename from src/lib/Memization.ts rename to src/lib/Memoization.ts diff --git a/src/lib/User/index.ts b/src/lib/User/index.ts index fae65aaa..9ca54bba 100644 --- a/src/lib/User/index.ts +++ b/src/lib/User/index.ts @@ -10,7 +10,7 @@ export class User { * @param uid Die unique/public id des gesuchten Benutzers. * @returns {UserType | null} Die Daten des Nutzers oder null falls dieser nicht gefunden werden kann. */ - public static async fromPublicId(uid: string): Promise { + public static async fromUID(uid: string): Promise { if (!uid || typeof uid !== "string") { return null; } diff --git a/src/lib/server/Heizwertfaktor.ts b/src/lib/server/Heizwertfaktor.ts new file mode 100644 index 00000000..4e2656bc --- /dev/null +++ b/src/lib/server/Heizwertfaktor.ts @@ -0,0 +1,5 @@ +import { memoize } from "../Memoization"; + +export const getHeizwertfaktorClient = memoize>(async function() { + return [1,1,1,1]; +}) \ No newline at end of file diff --git a/src/lib/server/Klimafaktoren.ts b/src/lib/server/Klimafaktoren.ts new file mode 100644 index 00000000..37e8b10b --- /dev/null +++ b/src/lib/server/Klimafaktoren.ts @@ -0,0 +1,3 @@ +export async function getKlimafaktorenServer(date: Date, zip: string) { + +}; \ No newline at end of file diff --git a/src/pages/api/user.ts b/src/pages/api/user.ts index fc4d0398..a29b8e1a 100644 --- a/src/pages/api/user.ts +++ b/src/pages/api/user.ts @@ -14,7 +14,7 @@ export const get: APIRoute = async ({ request }) => { return MissingPropertyError(["uid"]); } - const user = User.fromPublicId(body.uid); + const user = User.fromUID(body.uid); if (!user) { return MissingEntityError("user"); diff --git a/src/pages/user/index.astro b/src/pages/user/index.astro index 848d5df9..e707db75 100644 --- a/src/pages/user/index.astro +++ b/src/pages/user/index.astro @@ -4,6 +4,7 @@ import { decodeToken } from "../../lib/JsonWebToken"; import { User } from "../../lib/User"; import UserLayout from "~/layouts/UserLayout.astro"; import AusweisCard from "~/components/AusweisCard.svelte"; +import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis"; const token = Astro.cookies.get("token").value; const expires = Astro.cookies.get("expires").number(); @@ -16,7 +17,7 @@ if (!token || now > expires) { } const parsed = decodeToken(token); -const user = await User.fromPublicId(parsed.uid); +const user = await User.fromUID(parsed.uid); if (!user) { Astro.cookies.delete("token"); @@ -30,11 +31,9 @@ if (!user) {

Willkommen zurück {user.email}

Ihre Ausweise

-
- - - - - +
+ + +
\ No newline at end of file