Fix Klimafaktoren + Base Schema

This commit is contained in:
Moritz Utcke
2024-02-28 10:06:41 +07:00
parent f5a1314b9b
commit 52786a87f5
7 changed files with 56 additions and 27 deletions

View File

@@ -4,9 +4,7 @@
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient, GebaeudeClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types";
import ThickArrowUp from "radix-svelte-icons/src/lib/icons/ThickArrowUp.svelte";
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
export let gebaeude: GebaeudeClient;
export let ausweis: VerbrauchsausweisWohnenClient;
let maxPerformance = 250;
@@ -43,7 +41,7 @@
let translation_2 = 0;
$: {
(async () => {
const result = (await endEnergieVerbrauchVerbrauchsausweis_2016({ ...ausweis, gebaeude_stammdaten: gebaeude, gebaeude_aufnahme_allgemein}));
const result = (await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis));
if (!result) {
return

View File

@@ -127,7 +127,7 @@
symbolPruefung = "img/kreiskreuz.png";
}
if (ausweis.gebaeude_aufnahme_allgemein.zurueckGestellt) {
if (ausweis.gebaeude_aufnahme_allgemein.zurueckgestellt) {
zurueckGestellt =
"<img src='img/zurueckGestellt.svg' alt='Status' width=\"25\" height=\"25\"></img>";
} else {
@@ -353,7 +353,7 @@
"((" +
calculations?.energieVerbrauchHeizungBereinigt_1 +
" x " +
calculations?.primaerfaktor +
calculations?.primaerfaktor_1 +
") + (" +
calculations?.energieVerbrauchWarmwasser_1 +
" x " +

View File

@@ -1,14 +1,10 @@
import { VerbrauchsausweisWohnenClient, GebaeudeClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types";
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { getKlimafaktoren } from "#lib/Klimafaktoren";
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
import moment from "moment";
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
ausweis: VerbrauchsausweisWohnenClient & {
gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient & {
gebaeude_stammdaten: GebaeudeClient;
};
}
ausweis: VerbrauchsausweisWohnenClient
): number {
if (!ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten) {
return 0
@@ -27,15 +23,13 @@ export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
}
export async function endEnergieVerbrauchVerbrauchsausweis_2016(
ausweis: VerbrauchsausweisWohnenClient & {
gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient & {
gebaeude_stammdaten: GebaeudeClient;
}
}
ausweis: VerbrauchsausweisWohnenClient
) {
let startdatum = moment(ausweis.startdatum);
console.log(startdatum);
let klimafaktoren: Awaited<ReturnType<typeof getKlimafaktoren>> = [{
month: startdatum.month(),
year: startdatum.year(),

View File

@@ -11,8 +11,8 @@ export const getKlimafaktoren = memoize(async (date: Date, plz: string) => {
const response = await client.v1.klimafaktoren.query({
plz,
genauigkeit: "years",
startdatum: date,
enddatum: moment(date).add(2, "years").toDate(),
startdatum: moment(date).utc(true).toDate(),
enddatum: moment(date).add(2, "years").utc(true).toDate(),
});
return response;
} catch (e) {

View File

@@ -0,0 +1,37 @@
import { z } from "zod";
export function zodGenerateDefaultSchema<Schema extends z.ZodFirstPartySchemaTypes>(schema: Schema): z.TypeOf<Schema> {
switch (schema._def.typeName) {
case z.ZodFirstPartyTypeKind.ZodDefault:
return schema._def.defaultValue();
case z.ZodFirstPartyTypeKind.ZodObject: {
// The switch wasn't able to infer this but the cast should
// be safe.
return Object.fromEntries(
Object.entries(
(schema as z.SomeZodObject).shape
).map(([key, value]) => [key, zodGenerateDefaultSchema(value)])
);
}
case z.ZodFirstPartyTypeKind.ZodString:
return "";
case z.ZodFirstPartyTypeKind.ZodNull:
return null;
case z.ZodFirstPartyTypeKind.ZodNullable:
return null;
case z.ZodFirstPartyTypeKind.ZodUndefined:
return undefined;
case z.ZodFirstPartyTypeKind.ZodNumber:
return 0;
case z.ZodFirstPartyTypeKind.ZodBoolean:
return false;
case z.ZodFirstPartyTypeKind.ZodOptional:
return undefined;
case z.ZodFirstPartyTypeKind.ZodNativeEnum:
return schema._def.values[0];
case z.ZodFirstPartyTypeKind.ZodArray:
return [];
default:
throw new Error(`Unsupported type ${schema._def.typeName}`);
}
}

View File

@@ -23,8 +23,8 @@
import { dialogs } from "svelte-dialogs";
import LoginDialog from "#components/LoginDialog.svelte";
import { exclude } from "#lib/exclude";
export let ausweis: VerbrauchsausweisWohnenClient = {} as VerbrauchsausweisWohnenClient;
export let ausweis: VerbrauchsausweisWohnenClient;
export let user: BenutzerClient = {} as BenutzerClient;
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
@@ -225,7 +225,7 @@
<Progressbar progress={0} />
</div>
<PerformanceScore bind:ausweis bind:gebaeude bind:gebaeude_aufnahme_allgemein />
<PerformanceScore bind:ausweis />
</div>
<form on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">

View File

@@ -2,11 +2,13 @@
import AusweisLayout from "#layouts/AusweisLayout.astro";
import VerbrauchsausweisWohnenModule from "#modules/Ausweise/VerbrauchsausweisWohnenModule.svelte";
import { UploadedGebaeudeBild, VerbrauchsausweisWohnenClient, GebaeudeClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types";
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { createCaller } from "#lib/caller";
import { zodGenerateDefaultSchema } from "#lib/zodGenerateDefaultSchema";
import { VerbrauchsausweisWohnenValidator } from "@ibcornelsen/api";
const uid = Astro.url.searchParams.get("uid");
let ausweis: VerbrauchsausweisWohnenClient = {} as VerbrauchsausweisWohnenClient;
let ausweis: VerbrauchsausweisWohnenClient = zodGenerateDefaultSchema(VerbrauchsausweisWohnenValidator);
const caller = createCaller(Astro);
@@ -21,8 +23,6 @@ if (uid) {
return Astro.redirect("/energieausweis-erstellen/verbrauchsausweis-wohnen");
}
}
const user = await caller.v1.benutzer.self();
---
<AusweisLayout title="Verbrauchsausweis erstellen">