Fix Klimafaktoren + Base Schema
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 " +
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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) {
|
||||
|
||||
37
src/lib/zodGenerateDefaultSchema.ts
Normal file
37
src/lib/zodGenerateDefaultSchema.ts
Normal 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}`);
|
||||
}
|
||||
}
|
||||
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
Reference in New Issue
Block a user