API größtenteils umgezogen und Funktionen angepasst
This commit is contained in:
@@ -1 +1 @@
|
||||
{"openapi":"3.0.3","info":{"title":"Title","version":"1.0.0","description":""},"paths":{"[id]":{"patch":{"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{}}}}}}},"index":{"post":{"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{}}}}}}}}}
|
||||
{"openapi":"3.0.3","info":{"title":"Title","version":"1.0.0","description":""},"paths":{"postleitzahlen":{"get":{"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"plz":{"type":"string","minLength":1,"maxLength":5},"limit":{"type":"integer","maximum":50,"minimum":1,"default":10}},"required":["plz"],"additionalProperties":false}}}},"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"plz":{"type":"string","minLength":4,"maxLength":5},"stadt":{"type":"string"},"bundesland":{"type":"string"},"landkreis":{"type":"string"},"lat":{"type":"number"},"lon":{"type":"number"}},"required":["plz","stadt","bundesland","landkreis","lat","lon"],"additionalProperties":false}}}}}}}},"index":{"post":{"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{}}}}}}},"[id]":{"patch":{"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{}}}}}}},"refresh-token":{"get":{"description":"Erstellt sowohl einen neuen Refresh Token als auch einen Access Token für den gegebenen Benutzer. Der Refresh Token kann später für die Erstellung neuer Access Token genutzt werden.","tags":["Benutzer"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"passwort":{"type":"string","minLength":8,"maxLength":100}},"required":["email","passwort"],"additionalProperties":false}}}},"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"uid":{"type":"string","format":"uuid"},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"refreshTokenBase64":{"type":"string"},"accessTokenBase64":{"type":"string"},"exp":{"type":"number"}},"required":["uid","accessToken","refreshToken","refreshTokenBase64","accessTokenBase64","exp"],"additionalProperties":false}}}}}}},"self":{"get":{"description":"Gibt die Daten des momentan eingeloggten Benutzers zurück. Falls der Authorization Key invalid ist wird stattdessen null zurückgegeben.","tags":["Benutzer"],"requestBody":{"required":true,"content":{"application/json":{"schema":{}}}},"parameters":[],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string","nullable":true},"vorname":{"type":"string","nullable":true},"email":{"type":"string"},"profilbild":{"type":"string","nullable":true},"plz":{"type":"string","nullable":true},"ort":{"type":"string","nullable":true},"adresse":{"type":"string","nullable":true},"telefon":{"type":"string","nullable":true},"anrede":{"type":"string","nullable":true},"rolle":{"type":"string","enum":["USER","ADMIN"]}},"required":["uid","email","rolle"],"additionalProperties":false},{"enum":["null"],"nullable":true}]}}}}}}}}}
|
||||
@@ -30,7 +30,8 @@
|
||||
"@pdfme/ui": "^5.2.16",
|
||||
"@trpc/client": "^10.45.2",
|
||||
"@trpc/server": "^10.45.2",
|
||||
"astro": "^4.16.18",
|
||||
"astro": "^4.16.17",
|
||||
"astro-typesafe-api": "link:astro-typesafe-api",
|
||||
"body-scroll-lock": "^4.0.0-beta.0",
|
||||
"buffer": "^6.0.3",
|
||||
"bun": "^1.1.45",
|
||||
@@ -38,6 +39,7 @@
|
||||
"express": "^4.21.2",
|
||||
"flag-icons": "^6.15.0",
|
||||
"fontkit": "^2.0.4",
|
||||
"is-base64": "^1.1.0",
|
||||
"js-cookie": "^3.0.5",
|
||||
"js-interpolate": "^1.3.2",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
@@ -63,7 +65,9 @@
|
||||
"@types/body-scroll-lock": "^3.1.2",
|
||||
"@types/express": "^5.0.0",
|
||||
"@types/fontkit": "^2.0.7",
|
||||
"@types/is-base64": "^1.1.3",
|
||||
"@types/js-cookie": "^3.0.6",
|
||||
"@types/jsonwebtoken": "^9.0.7",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
"@typescript-eslint/parser": "^5.62.0",
|
||||
@@ -79,5 +83,8 @@
|
||||
"postcss-nesting": "^13.0.1",
|
||||
"prettier": "^2.8.8",
|
||||
"typescript": "^4.9.5"
|
||||
},
|
||||
"overrides": {
|
||||
"zod": "^3.24.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
import { createCallerFactory } from "astro-typesafe-api/server";
|
||||
import { type AstroGlobal } from "astro";
|
||||
|
||||
export const createCaller = createCallerFactory({
|
||||
"aufnahme/[id]": await import("../src/pages/api/aufnahme/[id].ts"),
|
||||
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
|
||||
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
||||
"ticket": await import("../src/pages/api/ticket.ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||
"aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid].ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||
"user/self": await import("../src/pages/api/user/self.ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||
"objekt/[id]": await import("../src/pages/api/objekt/[id].ts"),
|
||||
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
||||
"user/self": await import("../src/pages/api/user/self.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/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"),
|
||||
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
||||
"objekt/[uid]/bilder": await import("../src/pages/api/objekt/[uid]/bilder.ts"),
|
||||
"objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"),
|
||||
})
|
||||
@@ -1,7 +1,9 @@
|
||||
import Cookies from "js-cookie";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME, API_UID_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { client } from "../../trpc.js";
|
||||
import moment from "moment";
|
||||
import jwt from "jsonwebtoken"
|
||||
import { TokenData, TokenType } from "#lib/auth/token.js";
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
|
||||
|
||||
export async function validateAccessTokenClient() {
|
||||
@@ -9,10 +11,12 @@ export async function validateAccessTokenClient() {
|
||||
const refreshToken = Cookies.get(API_REFRESH_TOKEN_COOKIE_NAME);
|
||||
|
||||
if (accessToken) {
|
||||
const { valid } = await client.v1.benutzer.validateAccessToken.query({accessToken})
|
||||
const { exp, typ, uid } = jwt.decode(accessToken, {
|
||||
json: true
|
||||
}) as TokenData
|
||||
|
||||
if (valid) {
|
||||
return valid;
|
||||
if (exp > Date.now() && typ === TokenType.Access) {
|
||||
return true;
|
||||
} else {
|
||||
Cookies.remove(API_ACCESS_TOKEN_COOKIE_NAME);
|
||||
}
|
||||
@@ -33,7 +37,7 @@ export async function validateAccessTokenClient() {
|
||||
// Wenn das klappt, dann haben wir auch einen neuen Access Token.
|
||||
// Wenn das nicht klappt, dann müssen wir uns neu anmelden.
|
||||
try {
|
||||
const { accessToken: newAccessToken, accessTokenExpiry, refreshToken: newRefreshToken, refreshTokenExpiry } = await client.v1.benutzer.getAccessToken.query({
|
||||
const { accessToken: newAccessToken, accessTokenExpiry, refreshToken: newRefreshToken, refreshTokenExpiry } = await api.auth["access-token"].GET.fetch({
|
||||
refreshToken
|
||||
})
|
||||
|
||||
|
||||
@@ -1,86 +1,116 @@
|
||||
import {
|
||||
BenutzerClient,
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
|
||||
import { api } from "astro-typesafe-api/client"
|
||||
|
||||
import { exclude } from "#lib/exclude.js";
|
||||
import { client } from "src/trpc.js";
|
||||
import { bilderHochladen } from "./bilderHochladen.js";
|
||||
import { addNotification } from "@ibcornelsen/ui";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import Cookies from "js-cookie";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js";
|
||||
// import { addNotification } from "@ibcornelsen/ui";
|
||||
|
||||
export async function verbrauchsausweisWohnenSpeichern(
|
||||
ausweis: VerbrauchsausweisWohnenClient,
|
||||
gebaeude: GebaeudeClient,
|
||||
gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient,
|
||||
objekt: ObjektClient,
|
||||
aufnahme: AufnahmeClient,
|
||||
images: (UploadedGebaeudeBild & { base64?: string })[],
|
||||
user: BenutzerClient
|
||||
) {
|
||||
if (ausweis.uid) {
|
||||
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
|
||||
// Jetzt müssen wir ihn nun nur noch abspeichern.
|
||||
try {
|
||||
await client.v1.objekt.speichern.mutate()
|
||||
if (objekt.uid) {
|
||||
await api.objekt._uid.PATCH.fetch({
|
||||
...exclude(objekt, ["uid"])
|
||||
}, {
|
||||
params: {
|
||||
uid: objekt.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api.objekt.PUT.fetch({
|
||||
...exclude(objekt, ["uid"])
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
|
||||
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
|
||||
...ausweis,
|
||||
gebaeude_aufnahme_allgemein: {
|
||||
...exclude(
|
||||
gebaeude_aufnahme_allgemein,
|
||||
["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"]
|
||||
),
|
||||
gebaeude_stammdaten: {
|
||||
...exclude(gebaeude, [
|
||||
"gebaeude_bilder",
|
||||
]),
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
images = await bilderHochladen(images, gebaeude.uid);
|
||||
|
||||
return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid };
|
||||
} catch (e) {
|
||||
}
|
||||
} else {
|
||||
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
|
||||
try {
|
||||
const response =
|
||||
await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
|
||||
...ausweis,
|
||||
gebaeude_aufnahme_allgemein: {
|
||||
...gebaeude_aufnahme_allgemein,
|
||||
gebaeude_stammdaten: {
|
||||
...gebaeude,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
images = await bilderHochladen(images, response.gebaeude_uid);
|
||||
|
||||
return response;
|
||||
} catch (e: any) {
|
||||
await client.v1.tickets.erstellen.mutate({
|
||||
titel: "Ausweis konnte nicht gespeichert werden",
|
||||
beschreibung: e.stack,
|
||||
email: user.email ?? "",
|
||||
metadata: JSON.stringify({
|
||||
ausweis,
|
||||
}),
|
||||
});
|
||||
}
|
||||
objekt.uid = uid;
|
||||
}
|
||||
|
||||
addNotification({
|
||||
dismissable: false,
|
||||
message:
|
||||
"Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
|
||||
subtext:
|
||||
"Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
|
||||
timeout: 6000,
|
||||
type: "error",
|
||||
});
|
||||
|
||||
|
||||
if (aufnahme.uid) {
|
||||
await api.aufnahme._uid.PATCH.fetch({
|
||||
...exclude(aufnahme, ["uid"])
|
||||
}, {
|
||||
params: {
|
||||
uid: aufnahme.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api.aufnahme.PUT.fetch({
|
||||
aufnahme,
|
||||
uid_objekt: objekt.uid
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
|
||||
aufnahme.uid = uid
|
||||
}
|
||||
|
||||
if (ausweis.uid) {
|
||||
await api["verbrauchsausweis-wohnen"]._uid.PATCH.fetch({
|
||||
...exclude(ausweis, ["uid"])
|
||||
}, {
|
||||
params: {
|
||||
uid: ausweis.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
} else {
|
||||
await api["verbrauchsausweis-wohnen"].PUT.fetch({
|
||||
ausweis,
|
||||
uid_aufnahme: aufnahme.uid
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
uid_ausweis: ausweis.uid,
|
||||
uid_aufnahme: aufnahme.uid,
|
||||
uid_objekt: objekt.uid
|
||||
}
|
||||
|
||||
|
||||
// await client.v1.tickets.erstellen.mutate({
|
||||
// titel: "Ausweis konnte nicht gespeichert werden",
|
||||
// beschreibung: e.stack,
|
||||
// email: user.email ?? "",
|
||||
// metadata: JSON.stringify({
|
||||
// ausweis,
|
||||
// }),
|
||||
// });
|
||||
|
||||
// addNotification({
|
||||
// dismissable: false,
|
||||
// message:
|
||||
// "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
|
||||
// subtext:
|
||||
// "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
|
||||
// timeout: 6000,
|
||||
// type: "error",
|
||||
// });
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<script lang="ts">
|
||||
import AnsichtsausweisButton from "#components/AnsichtsausweisButton.svelte";
|
||||
import DatenblattButton from "#components/DatenblattButton.svelte";
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
import ImageGrid from "#components/ImageGrid.svelte";
|
||||
import {
|
||||
Enums,
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
<script lang="ts">
|
||||
|
||||
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
|
||||
@@ -18,15 +16,14 @@
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let objekt: GebaeudeClient;
|
||||
export let ausweis:
|
||||
| VerbrauchsausweisWohnenClient
|
||||
| VerbrauchsausweisGewerbeClient
|
||||
| BedarfsausweisWohnenClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
|
||||
export let Energieausweis;
|
||||
console.log('HALLO:'+Energieausweis);
|
||||
export let ausweisart: Enums.Ausweisart;
|
||||
</script>
|
||||
|
||||
<div id="ausweisart" class="bereich-box grid
|
||||
@@ -70,11 +67,11 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
name="gebaeudetyp"
|
||||
data-test="gebaeudetyp"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp}
|
||||
bind:value={aufnahme.gebaeudetyp}
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
|
||||
{#if Energieausweis=="Verbrauchsausweis Wohngebäude"}
|
||||
{#if ausweisart=="VerbrauchsausweisWohnen"}
|
||||
<option value="Einfamilienhaus">Einfamilienhaus</option>
|
||||
<option value="Freistehendes Einfamilienhaus">Freistehendes Einfamilienhaus</option>
|
||||
<option value="Freistehendes Zweifamilienhaus">Freistehendes Zweifamilienhaus</option>
|
||||
@@ -86,7 +83,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<option value="Atrium-Bungalow">Atrium-Bungalow</option>
|
||||
<option value="Winkelbungalow">Winkelbungalow</option>
|
||||
|
||||
{:else if Energieausweis=="Verbrauchsausweis Gewerbe"}
|
||||
{:else if ausweisart=="VerbrauchsausweisGewerbe"}
|
||||
<option value="Verwaltungsgebäude (allgemein)">Verwaltungsgebäude (allgemein)</option>
|
||||
<option value="Parlaments- und Gerichtsgebäude">Parlaments- und Gerichtsgebäude</option>
|
||||
<option value="Ministerien u. Ämter u. Behörden">Ministerien u. Ämter u. Behörden</option>
|
||||
@@ -162,7 +159,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
autocomplete="off"
|
||||
data-msg="Pflichtfeld"
|
||||
maxlength="3"
|
||||
bind:value={gebaeude_aufnahme_allgemein.einheiten}
|
||||
bind:value={aufnahme.einheiten}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
@@ -181,7 +178,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
name="saniert"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.saniert}
|
||||
bind:value={aufnahme.saniert}
|
||||
>
|
||||
<option disabled selected>Bitte auswählen</option>
|
||||
<option value={true}>saniert</option>
|
||||
@@ -221,10 +218,10 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
onFocusOut={() => {
|
||||
deleteNotification("GEBAEUDE_BAUJAHR");
|
||||
}}
|
||||
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)
|
||||
className={auditHeizungGebaeudeBaujahr(aufnahme)
|
||||
? "linked"
|
||||
: ""}
|
||||
bind:tags={gebaeude_aufnahme_allgemein.baujahr_gebaeude}
|
||||
bind:tags={aufnahme.baujahr_gebaeude}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
@@ -259,10 +256,10 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
onFocusOut={() => {
|
||||
deleteNotification("HEIZUNG_BAUJAHR");
|
||||
}}
|
||||
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)
|
||||
className={auditHeizungGebaeudeBaujahr(aufnahme)
|
||||
? "linked"
|
||||
: ""}
|
||||
bind:tags={gebaeude_aufnahme_allgemein.baujahr_heizung}
|
||||
bind:tags={aufnahme.baujahr_heizung}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
</script>
|
||||
@@ -37,18 +37,18 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
|
||||
">
|
||||
|
||||
<SanierungsOption label="Zentral/Etage" name="zentralheizung" help="Bitte anklicken wenn die Heizwärme <b>zentral erzeugt</b> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu." value="ZH" bind:checked={gebaeude_aufnahme_allgemein.zentralheizung}></SanierungsOption>
|
||||
<SanierungsOption label="Einzelofen" name="einzelofen" help="Bei <b>dezentraler Erzeugung</b> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu." value="EO" bind:checked={gebaeude_aufnahme_allgemein.einzelofen}></SanierungsOption>
|
||||
<SanierungsOption label="Durchlauferhitzer (elektrisch)" name="durchlauf_erhitzer" help="Wenn <b>dezentrale</b> elektrische <b>Warmwassererzeugung</b> vorhanden ist" value="DH" bind:checked={gebaeude_aufnahme_allgemein.durchlauf_erhitzer}></SanierungsOption>
|
||||
<SanierungsOption label="Standardkessel" name="standard_kessel" help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel" value="SK" bind:checked={gebaeude_aufnahme_allgemein.standard_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Solarsystem für Warmwasser" name="solarsystem_warmwasser" help="Solarpanele auf dem Dach zur <b>alternativen Warmwassererzeugung</b> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik." value="SSWW" bind:checked={gebaeude_aufnahme_allgemein.solarsystem_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Wärmepumpe" name="waermepumpe" help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <b>Umgebungsluft, dem Erdreich oder Grundwasser</b> nutzbar macht." value="WP" bind:checked={gebaeude_aufnahme_allgemein.waermepumpe}></SanierungsOption>
|
||||
<SanierungsOption label="Niedertemperaturkessel" name="niedertemperatur_kessel" help="Heizkessel der mit <b>niedrigen Vorlauftemperaturen</b> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt." value="NK" bind:checked={gebaeude_aufnahme_allgemein.niedertemperatur_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Brennwertkessel" name="brennwert_kessel" help="Hat einen besonders <b>hohen Wirkungsgrad</b> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt." value="BWK" bind:checked={gebaeude_aufnahme_allgemein.brennwert_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasserrohre gedämmt" name="warmwasser_rohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen." value="BWK" bind:checked={gebaeude_aufnahme_allgemein.warmwasser_rohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Heizungsrohre gedämmt" name="heizungsrohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen.ext" value="HRGD" bind:checked={gebaeude_aufnahme_allgemein.heizungsrohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Zirkulation" name="zirkulation" help="Kreislauf von Heizungs- oder Warmwasser <b>innerhalb eines Leitungssystems</b>, um eine gleichmäßige Wärmeverteilung sicherzustellen." value="ZK" bind:checked={gebaeude_aufnahme_allgemein.zirkulation}></SanierungsOption>
|
||||
<SanierungsOption label="Photovoltaik auf dem Dach" name="photovoltaik" help="Direkte Umwandlung von Sonnenlicht in <b>elektrische Energie</b> mittels Solarzellen, die den photoelektrischen Effekt nutzen." value="PV" bind:checked={gebaeude_aufnahme_allgemein.photovotaik}></SanierungsOption>
|
||||
<SanierungsOption label="Zentral/Etage" name="zentralheizung" help="Bitte anklicken wenn die Heizwärme <b>zentral erzeugt</b> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu." value="ZH" bind:checked={aufnahme.zentralheizung}></SanierungsOption>
|
||||
<SanierungsOption label="Einzelofen" name="einzelofen" help="Bei <b>dezentraler Erzeugung</b> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu." value="EO" bind:checked={aufnahme.einzelofen}></SanierungsOption>
|
||||
<SanierungsOption label="Durchlauferhitzer (elektrisch)" name="durchlauf_erhitzer" help="Wenn <b>dezentrale</b> elektrische <b>Warmwassererzeugung</b> vorhanden ist" value="DH" bind:checked={aufnahme.durchlauf_erhitzer}></SanierungsOption>
|
||||
<SanierungsOption label="Standardkessel" name="standard_kessel" help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel" value="SK" bind:checked={aufnahme.standard_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Solarsystem für Warmwasser" name="solarsystem_warmwasser" help="Solarpanele auf dem Dach zur <b>alternativen Warmwassererzeugung</b> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik." value="SSWW" bind:checked={aufnahme.solarsystem_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Wärmepumpe" name="waermepumpe" help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <b>Umgebungsluft, dem Erdreich oder Grundwasser</b> nutzbar macht." value="WP" bind:checked={aufnahme.waermepumpe}></SanierungsOption>
|
||||
<SanierungsOption label="Niedertemperaturkessel" name="niedertemperatur_kessel" help="Heizkessel der mit <b>niedrigen Vorlauftemperaturen</b> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt." value="NK" bind:checked={aufnahme.niedertemperatur_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Brennwertkessel" name="brennwert_kessel" help="Hat einen besonders <b>hohen Wirkungsgrad</b> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt." value="BWK" bind:checked={aufnahme.brennwert_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasserrohre gedämmt" name="warmwasser_rohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen." value="BWK" bind:checked={aufnahme.warmwasser_rohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Heizungsrohre gedämmt" name="heizungsrohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen.ext" value="HRGD" bind:checked={aufnahme.heizungsrohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Zirkulation" name="zirkulation" help="Kreislauf von Heizungs- oder Warmwasser <b>innerhalb eines Leitungssystems</b>, um eine gleichmäßige Wärmeverteilung sicherzustellen." value="ZK" bind:checked={aufnahme.zirkulation}></SanierungsOption>
|
||||
<SanierungsOption label="Photovoltaik auf dem Dach" name="photovoltaik" help="Direkte Umwandlung von Sonnenlicht in <b>elektrische Energie</b> mittels Solarzellen, die den photoelektrischen Effekt nutzen." value="PV" bind:checked={aufnahme.photovotaik}></SanierungsOption>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -86,7 +86,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="einfach_verglasung"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.einfach_verglasung}
|
||||
bind:checked={aufnahme.einfach_verglasung}
|
||||
value="EG"
|
||||
/>Einfachglas</label
|
||||
>
|
||||
@@ -97,7 +97,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="doppel_verglasung"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.doppel_verglasung}
|
||||
bind:checked={aufnahme.doppel_verglasung}
|
||||
value="DF"
|
||||
/>Doppelverglasung</label
|
||||
>
|
||||
@@ -108,7 +108,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="isolier_verglasung"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.isolier_verglasung}
|
||||
bind:checked={aufnahme.isolier_verglasung}
|
||||
value="IVG"
|
||||
/>Isolierverglasung</label
|
||||
>
|
||||
@@ -119,7 +119,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="dreifach_verglasung"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.dreifach_verglasung}
|
||||
bind:checked={aufnahme.dreifach_verglasung}
|
||||
value="PHF"
|
||||
/>Dreifachverglasung</label
|
||||
>
|
||||
@@ -130,7 +130,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="fenster_dicht"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.fenster_dicht}
|
||||
bind:checked={aufnahme.fenster_dicht}
|
||||
value="FD"
|
||||
/>Alle Fenster dicht</label
|
||||
>
|
||||
@@ -141,7 +141,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="fenster_teilweise_undicht"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.fenster_teilweise_undicht}
|
||||
bind:checked={aufnahme.fenster_teilweise_undicht}
|
||||
value="FTUD"
|
||||
/>Fenster teilweise undicht</label
|
||||
>
|
||||
@@ -152,7 +152,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="tueren_dicht"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.tueren_dicht}
|
||||
bind:checked={aufnahme.tueren_dicht}
|
||||
value="TD"
|
||||
/>Alle Türen dicht</label
|
||||
>
|
||||
@@ -163,7 +163,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="tueren_undicht"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.tueren_undicht}
|
||||
bind:checked={aufnahme.tueren_undicht}
|
||||
value="TUD"
|
||||
/>Türen teilweise undicht</label
|
||||
>
|
||||
@@ -174,7 +174,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="rolllaeden_kaesten_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.rolllaeden_kaesten_gedaemmt}
|
||||
bind:checked={aufnahme.rolllaeden_kaesten_gedaemmt}
|
||||
value="RKD"
|
||||
/>Rollladenkästen gedämmt, luftdicht</label
|
||||
>
|
||||
@@ -207,7 +207,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="aussenwand_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.aussenwand_gedaemmt}
|
||||
bind:checked={aufnahme.aussenwand_gedaemmt}
|
||||
value="AWD"
|
||||
/>Außenwand gedämmt</label
|
||||
>
|
||||
@@ -218,7 +218,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="keller_wand_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.keller_wand_gedaemmt}
|
||||
bind:checked={aufnahme.keller_wand_gedaemmt}
|
||||
value="KWD"
|
||||
/>Kelleraußenwand gedämmt</label
|
||||
>
|
||||
@@ -229,7 +229,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="keller_decke_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.keller_decke_gedaemmt}
|
||||
bind:checked={aufnahme.keller_decke_gedaemmt}
|
||||
value="KDD"
|
||||
/>Kellerdecke gedämmt</label
|
||||
>
|
||||
@@ -240,7 +240,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="dachgeschoss_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt}
|
||||
bind:checked={aufnahme.dachgeschoss_gedaemmt}
|
||||
value="DGD"
|
||||
/>Dachgeschoss gedämmt</label
|
||||
>
|
||||
@@ -251,7 +251,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="oberste_geschossdecke_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt}
|
||||
bind:checked={aufnahme.oberste_geschossdecke_gedaemmt}
|
||||
value="OGDDW"
|
||||
/>Oberste Geschossdecke gedämmt</label
|
||||
>
|
||||
@@ -262,7 +262,7 @@ xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="oberste_geschossdecke_min_12cm_gedaemmt"
|
||||
bind:checked={gebaeude_aufnahme_allgemein.oberste_geschossdecke_min_12cm_gedaemmt}
|
||||
bind:checked={aufnahme.oberste_geschossdecke_min_12cm_gedaemmt}
|
||||
value="OGDD"
|
||||
/>Oberste Geschossdecke min. 12cm gedämmt</label
|
||||
>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
export let images;
|
||||
export let user;
|
||||
export let gebaeude;
|
||||
export let gebaeude_aufnahme_allgemein;
|
||||
export let aufnahme;
|
||||
|
||||
export let spaeterWeitermachen;
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
bind:images
|
||||
bind:user
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
></AusweisWeiter>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
export let images;
|
||||
export let user;
|
||||
export let gebaeude;
|
||||
export let gebaeude_aufnahme_allgemein;
|
||||
export let aufnahme;
|
||||
|
||||
export let spaeterWeitermachen;
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import ZipSearch from "#components/PlzSuche.svelte";
|
||||
import { Enums } from "@ibcornelsen/database/client"
|
||||
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
|
||||
</script>
|
||||
|
||||
@@ -29,7 +29,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
required
|
||||
data-msg-minlength="min. 5 Zeichen"
|
||||
data-msg-maxlength="max. 40 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.adresse}
|
||||
bind:value={aufnahme.adresse}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
@@ -47,8 +47,8 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<Inputlabel title="PLZ *"></Inputlabel>
|
||||
|
||||
<ZipSearch
|
||||
bind:zip={gebaeude_aufnahme_allgemein.plz}
|
||||
bind:city={gebaeude_aufnahme_allgemein.ort}
|
||||
bind:zip={aufnahme.plz}
|
||||
bind:city={aufnahme.ort}
|
||||
name="plz"
|
||||
/>
|
||||
|
||||
@@ -61,7 +61,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
name="ort"
|
||||
data-test="ort"
|
||||
readonly={true}
|
||||
bind:value={gebaeude_aufnahme_allgemein.ort}
|
||||
bind:value={aufnahme.ort}
|
||||
type="text"
|
||||
/>
|
||||
|
||||
@@ -89,7 +89,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
autocomplete="off"
|
||||
data-rule-minlength="2"
|
||||
data-msg-minlength="min. 2 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.flaeche}
|
||||
bind:value={aufnahme.flaeche}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
@@ -110,7 +110,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
name="dachgeschoss"
|
||||
data-test="dachgeschoss"
|
||||
bind:value={gebaeude_aufnahme_allgemein.dachgeschoss}
|
||||
bind:value={aufnahme.dachgeschoss}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
@@ -136,7 +136,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
name="keller"
|
||||
data-test="keller"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.keller}
|
||||
bind:value={aufnahme.keller}
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
<option value={Enums.Heizungsstatus.NICHT_VORHANDEN}>nicht vorhanden</option>
|
||||
@@ -168,7 +168,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
autocomplete="off"
|
||||
data-rule-minlength="2"
|
||||
data-msg-minlength="min. 2 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.nutzflaeche}
|
||||
bind:value={aufnahme.nutzflaeche}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
|
||||
</script>
|
||||
|
||||
@@ -25,7 +25,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
name="gebaeudeteil"
|
||||
data-test="gebaeudeteil"
|
||||
bind:value={gebaeude_aufnahme_allgemein.gebaeudeteil}
|
||||
bind:value={aufnahme.gebaeudeteil}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
@@ -53,7 +53,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
data-test="leerstand"
|
||||
maxlength="2"
|
||||
type="number"
|
||||
bind:value={gebaeude_aufnahme_allgemein.leerstand}
|
||||
bind:value={aufnahme.leerstand}
|
||||
/>
|
||||
|
||||
<div class="help-label">
|
||||
@@ -76,7 +76,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
name="lueftung"
|
||||
data-test="lueftung"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.lueftung}
|
||||
bind:value={aufnahme.lueftung}
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
<option value="Fensterlüftung">Fensterlüftung</option>
|
||||
@@ -109,7 +109,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
name="kuehlung"
|
||||
data-test="kuehlung"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.kuehlung}
|
||||
bind:value={aufnahme.kuehlung}
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
<option value="1">vorhanden</option>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||
import ThickArrowDown from "radix-svelte-icons/src/lib/icons/ThickArrowDown.svelte";
|
||||
import {
|
||||
BedarfsausweisWohnenClient,
|
||||
@@ -7,12 +7,12 @@
|
||||
GebaeudeClient,
|
||||
VerbrauchsausweisGewerbeClient,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types";
|
||||
} from "./types.js";
|
||||
import ThickArrowUp from "radix-svelte-icons/src/lib/icons/ThickArrowUp.svelte";
|
||||
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let objekt: GebaeudeClient;
|
||||
|
||||
let maxPerformance = 250;
|
||||
|
||||
@@ -56,14 +56,12 @@
|
||||
(async () => {
|
||||
const result = await endEnergieVerbrauchVerbrauchsausweis_2016({
|
||||
...ausweis,
|
||||
gebaeude_aufnahme_allgemein: {
|
||||
...gebaeude_aufnahme_allgemein,
|
||||
gebaeude_stammdaten: gebaeude,
|
||||
aufnahme: {
|
||||
...aufnahme,
|
||||
objekt: objekt,
|
||||
},
|
||||
});
|
||||
|
||||
console.log(result, ausweis);
|
||||
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
|
||||
@@ -32,15 +32,15 @@
|
||||
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
||||
">
|
||||
|
||||
<SanierungsOption label="Einfachglas" name="einfach_verglasung" help="" value="EG" bind:checked={gebaeude_aufnahme_allgemein.einfach_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Doppelverglasung" name="doppel_verglasung" help="" value="DF" bind:checked={gebaeude_aufnahme_allgemein.doppel_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Dreifachverglasung" name="dreifach_verglasung" help="" value="PHF" bind:checked={gebaeude_aufnahme_allgemein.dreifach_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Isolierverglasung" name="isolier_verglasung" help="" value="IVG" bind:checked={gebaeude_aufnahme_allgemein.isolier_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Alle Fenster dicht" name="fenster_dicht" help="" value="FD" bind:checked={gebaeude_aufnahme_allgemein.fenster_dicht}></SanierungsOption>
|
||||
<SanierungsOption label="Fenster teilweise undicht" name="fenster_teilweise_undicht" help="" value="FTUD" bind:checked={gebaeude_aufnahme_allgemein.fenster_teilweise_undicht}></SanierungsOption>
|
||||
<SanierungsOption label="Rollladenkästen gedämmt, luftdicht" name="rolllaeden_kaesten_gedaemmt" help="" value="TUD" bind:checked={gebaeude_aufnahme_allgemein.rolllaeden_kaesten_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Alle Türen dicht" name="tueren_dicht" help="" value="TD" bind:checked={gebaeude_aufnahme_allgemein.tueren_dicht}></SanierungsOption>
|
||||
|
||||
<SanierungsOption label="Einfachglas" name="einfach_verglasung" help="" value="EG" bind:checked={aufnahme.einfach_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Doppelverglasung" name="doppel_verglasung" help="" value="DF" bind:checked={aufnahme.doppel_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Dreifachverglasung" name="dreifach_verglasung" help="" value="PHF" bind:checked={aufnahme.dreifach_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Isolierverglasung" name="isolier_verglasung" help="" value="IVG" bind:checked={aufnahme.isolier_verglasung}></SanierungsOption>
|
||||
<SanierungsOption label="Alle Fenster dicht" name="fenster_dicht" help="" value="FD" bind:checked={aufnahme.fenster_dicht}></SanierungsOption>
|
||||
<SanierungsOption label="Fenster teilweise undicht" name="fenster_teilweise_undicht" help="" value="FTUD" bind:checked={aufnahme.fenster_teilweise_undicht}></SanierungsOption>
|
||||
<SanierungsOption label="Rollladenkästen gedämmt, luftdicht" name="rolllaeden_kaesten_gedaemmt" help="" value="TUD" bind:checked={aufnahme.rolllaeden_kaesten_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Alle Türen dicht" name="tueren_dicht" help="" value="TD" bind:checked={aufnahme.tueren_dicht}></SanierungsOption>
|
||||
<SanierungsOption label="Türen teilweise undicht" name="tueren_undicht" help="" value="TUD" bind:checked={aufnahme.tueren_undicht}></SanierungsOption>
|
||||
|
||||
</div>
|
||||
@@ -84,7 +84,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="aussenwand_gedaemmt"
|
||||
name="aussenwand_gedaemmt"
|
||||
bind:checked={aufnahme.aussenwand_gedaemmt}
|
||||
value="AWD"
|
||||
/>Außenwand gedämmt</label
|
||||
@@ -95,7 +95,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="keller_wand_gedaemmt"
|
||||
name="keller_wand_gedaemmt"
|
||||
bind:checked={aufnahme.keller_wand_gedaemmt}
|
||||
value="KWD"
|
||||
/>Kelleraußenwand gedämmt</label
|
||||
@@ -106,7 +106,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="keller_decke_gedaemmt"
|
||||
name="keller_decke_gedaemmt"
|
||||
bind:checked={aufnahme.keller_decke_gedaemmt}
|
||||
value="KDD"
|
||||
/>Kellerdecke gedämmt</label
|
||||
@@ -117,7 +117,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="dachgeschoss_gedaemmt"
|
||||
name="dachgeschoss_gedaemmt"
|
||||
bind:checked={aufnahme.dachgeschoss_gedaemmt}
|
||||
value="DGD"
|
||||
/>Dachgeschoss gedämmt</label
|
||||
@@ -128,7 +128,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="oberste_geschossdecke_gedaemmt"
|
||||
name="oberste_geschossdecke_gedaemmt"
|
||||
bind:checked={aufnahme.oberste_geschossdecke_gedaemmt}
|
||||
value="OGDDW"
|
||||
/>Oberste Geschossdecke gedämmt</label
|
||||
@@ -139,7 +139,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="oberste_geschossdecke_min_12cm_gedaemmt"
|
||||
name="oberste_geschossdecke_min_12cm_gedaemmt"
|
||||
bind:checked={aufnahme.oberste_geschossdecke_min_12cm_gedaemmt}
|
||||
value="OGDD"
|
||||
/>Oberste Geschossdecke min. 12cm gedämmt</label
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
|
||||
@@ -33,18 +33,18 @@
|
||||
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
||||
">
|
||||
|
||||
<SanierungsOption label="Zentral/Etage" name="zentralheizung" help="Bitte anklicken wenn die Heizwärme <strong>zentral erzeugt</strong> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu." value="ZH" bind:checked={gebaeude_aufnahme_allgemein.zentralheizung}></SanierungsOption>
|
||||
<SanierungsOption label="Einzelofen" name="einzelofen" help="Bei <strong>dezentraler Erzeugung</strong> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu." value="EO" bind:checked={gebaeude_aufnahme_allgemein.einzelofen}></SanierungsOption>
|
||||
<SanierungsOption label="Durchlauferhitzer (elektrisch)" name="durchlauf_erhitzer" help="Wenn <strong>dezentrale</strong> elektrische <strong>Warmwassererzeugung</strong> vorhanden ist" value="DH" bind:checked={gebaeude_aufnahme_allgemein.durchlauf_erhitzer}></SanierungsOption>
|
||||
<SanierungsOption label="Standardkessel" name="standard_kessel" help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel" value="SK" bind:checked={gebaeude_aufnahme_allgemein.standard_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Solarsystem für Warmwasser" name="solarsystem_warmwasser" help="Solarpanele auf dem Dach zur <strong>alternativen Warmwassererzeugung</strong> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik." value="SSWW" bind:checked={gebaeude_aufnahme_allgemein.solarsystem_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Wärmepumpe" name="waermepumpe" help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <strong>Umgebungsluft, dem Erdreich oder Grundwasser</strong> nutzbar macht." value="WP" bind:checked={gebaeude_aufnahme_allgemein.waermepumpe}></SanierungsOption>
|
||||
<SanierungsOption label="Niedertemperaturkessel" name="niedertemperatur_kessel" help="Heizkessel der mit <strong>niedrigen Vorlauftemperaturen</strong> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt." value="NK" bind:checked={gebaeude_aufnahme_allgemein.niedertemperatur_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Brennwertkessel" name="brennwert_kessel" help="Hat einen besonders <strong>hohen Wirkungsgrad</strong> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt." value="BWK" bind:checked={gebaeude_aufnahme_allgemein.brennwert_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasserrohre gedämmt" name="warmwasser_rohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen." value="BWK" bind:checked={gebaeude_aufnahme_allgemein.warmwasser_rohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Heizungsrohre gedämmt" name="heizungsrohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen.ext" value="HRGD" bind:checked={gebaeude_aufnahme_allgemein.heizungsrohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Zirkulation" name="zirkulation" help="Kreislauf von Heizungs- oder Warmwasser <strong>innerhalb eines Leitungssystems</strong>, um eine gleichmäßige Wärmeverteilung sicherzustellen." value="ZK" bind:checked={gebaeude_aufnahme_allgemein.zirkulation}></SanierungsOption>
|
||||
|
||||
<SanierungsOption label="Zentral/Etage" name="zentralheizung" help="Bitte anklicken wenn die Heizwärme <strong>zentral erzeugt</strong> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu." value="ZH" bind:checked={aufnahme.zentralheizung}></SanierungsOption>
|
||||
<SanierungsOption label="Einzelofen" name="einzelofen" help="Bei <strong>dezentraler Erzeugung</strong> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu." value="EO" bind:checked={aufnahme.einzelofen}></SanierungsOption>
|
||||
<SanierungsOption label="Durchlauferhitzer (elektrisch)" name="durchlauf_erhitzer" help="Wenn <strong>dezentrale</strong> elektrische <strong>Warmwassererzeugung</strong> vorhanden ist" value="DH" bind:checked={aufnahme.durchlauf_erhitzer}></SanierungsOption>
|
||||
<SanierungsOption label="Standardkessel" name="standard_kessel" help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel" value="SK" bind:checked={aufnahme.standard_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Solarsystem für Warmwasser" name="solarsystem_warmwasser" help="Solarpanele auf dem Dach zur <strong>alternativen Warmwassererzeugung</strong> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik." value="SSWW" bind:checked={aufnahme.solarsystem_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Wärmepumpe" name="waermepumpe" help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <strong>Umgebungsluft, dem Erdreich oder Grundwasser</strong> nutzbar macht." value="WP" bind:checked={aufnahme.waermepumpe}></SanierungsOption>
|
||||
<SanierungsOption label="Niedertemperaturkessel" name="niedertemperatur_kessel" help="Heizkessel der mit <strong>niedrigen Vorlauftemperaturen</strong> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt." value="NK" bind:checked={aufnahme.niedertemperatur_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Brennwertkessel" name="brennwert_kessel" help="Hat einen besonders <strong>hohen Wirkungsgrad</strong> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt." value="BWK" bind:checked={aufnahme.brennwert_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasserrohre gedämmt" name="warmwasser_rohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen." value="BWK" bind:checked={aufnahme.warmwasser_rohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Heizungsrohre gedämmt" name="heizungsrohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen.ext" value="HRGD" bind:checked={aufnahme.heizungsrohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Zirkulation" name="zirkulation" help="Kreislauf von Heizungs- oder Warmwasser <strong>innerhalb eines Leitungssystems</strong>, um eine gleichmäßige Wärmeverteilung sicherzustellen." value="ZK" bind:checked={aufnahme.zirkulation}></SanierungsOption>
|
||||
<SanierungsOption label="Photovoltaik auf dem Dach" name="photovoltaik" help="Direkte Umwandlung von Sonnenlicht in <strong>elektrische Energie</strong> mittels Solarzellen, die den photoelektrischen Effekt nutzen." value="PV" bind:checked={aufnahme.photovotaik}></SanierungsOption>
|
||||
</div>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="aussenwand_gedaemmt"
|
||||
name="aussenwand_gedaemmt"
|
||||
bind:checked={aufnahme.aussenwand_gedaemmt}
|
||||
value="AWD"
|
||||
/>Außenwand gedämmt</label
|
||||
@@ -85,7 +85,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="keller_wand_gedaemmt"
|
||||
name="keller_wand_gedaemmt"
|
||||
bind:checked={aufnahme.keller_wand_gedaemmt}
|
||||
value="KWD"
|
||||
/>Kelleraußenwand gedämmt</label
|
||||
@@ -96,7 +96,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="keller_decke_gedaemmt"
|
||||
name="keller_decke_gedaemmt"
|
||||
bind:checked={aufnahme.keller_decke_gedaemmt}
|
||||
value="KDD"
|
||||
/>Kellerdecke gedämmt</label
|
||||
@@ -107,7 +107,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="dachgeschoss_gedaemmt"
|
||||
name="dachgeschoss_gedaemmt"
|
||||
bind:checked={aufnahme.dachgeschoss_gedaemmt}
|
||||
value="DGD"
|
||||
/>Dachgeschoss gedämmt</label
|
||||
@@ -118,7 +118,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="oberste_geschossdecke_gedaemmt"
|
||||
name="oberste_geschossdecke_gedaemmt"
|
||||
bind:checked={aufnahme.oberste_geschossdecke_gedaemmt}
|
||||
value="OGDDW"
|
||||
/>Oberste Geschossdecke gedämmt</label
|
||||
@@ -129,7 +129,7 @@
|
||||
><input
|
||||
type="checkbox"
|
||||
class="checkbox"
|
||||
name="oberste_geschossdecke_min_12cm_gedaemmt"
|
||||
name="oberste_geschossdecke_min_12cm_gedaemmt"
|
||||
bind:checked={aufnahme.oberste_geschossdecke_min_12cm_gedaemmt}
|
||||
value="OGDD"
|
||||
/>Oberste Geschossdecke min. 12cm gedämmt</label
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
||||
">
|
||||
|
||||
<SanierungsOption label="Außenwand gedämmt" name="aussenwand_gedaemmt" help="" value="AWD" bind:checked={gebaeude_aufnahme_allgemein.aussenwand_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Kelleraußenwand gedämmt" name="keller_wand_gedaemmt" help="" value="KWD" bind:checked={gebaeude_aufnahme_allgemein.keller_wand_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Kellerdecke gedämmt" name="keller_decke_gedaemmt" help="" value="KDD" bind:checked={gebaeude_aufnahme_allgemein.keller_decke_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Dachgeschoss gedämmt" name="dachgeschoss_gedaemmt" help="" value="DGD" bind:checked={gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Oberste Geschossdecke gedämmt" name="oberste_geschossdecke_gedaemmt" help="" value="DGD" bind:checked={gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt}></SanierungsOption>
|
||||
|
||||
<SanierungsOption label="Außenwand gedämmt" name="aussenwand_gedaemmt" help="" value="AWD" bind:checked={aufnahme.aussenwand_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Kelleraußenwand gedämmt" name="keller_wand_gedaemmt" help="" value="KWD" bind:checked={aufnahme.keller_wand_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Kellerdecke gedämmt" name="keller_decke_gedaemmt" help="" value="KDD" bind:checked={aufnahme.keller_decke_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Dachgeschoss gedämmt" name="dachgeschoss_gedaemmt" help="" value="DGD" bind:checked={aufnahme.dachgeschoss_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Oberste Geschossdecke gedämmt" name="oberste_geschossdecke_gedaemmt" help="" value="DGD" bind:checked={aufnahme.oberste_geschossdecke_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Oberste Geschossdecke min. 12cm gedämmt" name="oberste_geschossdecke_min_12cm_gedaemmt" help="" value="DGD" bind:checked={aufnahme.oberste_geschossdecke_min_12cm_gedaemmt}></SanierungsOption>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<script lang="ts">
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#labels/InputLabel.svelte";
|
||||
import Verbrauchslabel from "#labels/VerbrauchsLabel.svelte";
|
||||
import StromVerbrauchslabel from "#labels/StromVerbrauchslabel.svelte";
|
||||
import VerbrauchsHelpLabel from "#labels/VerbrauchsHelpLabel.svelte";
|
||||
import StromVerbrauchsHelpLabel from "#labels/StromVerbrauchsHelpLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
import Verbrauchslabel from "#components/labels/VerbrauchsLabel.svelte";
|
||||
import StromVerbrauchslabel from "#components/labels/StromVerbrauchslabel.svelte";
|
||||
import VerbrauchsHelpLabel from "#components/labels/VerbrauchsHelpLabel.svelte";
|
||||
import StromVerbrauchsHelpLabel from "#components/labels/StromVerbrauchsHelpLabel.svelte";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
import { addNotification } from "#components/Notifications/shared.js";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
|
||||
// Wir dürfen bis zu 4.5 Jahre alte Klimafaktoren benutzen, also nehmen wir alle Monate seitdem und generieren daraus die Auswahl.
|
||||
@@ -48,12 +48,12 @@
|
||||
];
|
||||
|
||||
const startDate = moment(
|
||||
ausweis.gebaeude_aufnahme_allgemein.erstellungsdatum || Date.now()
|
||||
ausweis.aufnahme.erstellungsdatum || Date.now()
|
||||
)
|
||||
.subtract(4, "years")
|
||||
.subtract(6, "months");
|
||||
const endDate = moment(
|
||||
ausweis.gebaeude_aufnahme_allgemein.erstellungsdatum || Date.now()
|
||||
ausweis.aufnahme.erstellungsdatum || Date.now()
|
||||
).subtract(3, "years");
|
||||
|
||||
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
||||
@@ -236,7 +236,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
class="rounded-e-none"
|
||||
name="brennstoff_1"
|
||||
bind:value={gebaeude_aufnahme_allgemein.brennstoff_1}
|
||||
bind:value={aufnahme.brennstoff_1}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
@@ -268,11 +268,11 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
class="rounded-s-none"
|
||||
name="einheit_1"
|
||||
bind:value={ausweis.einheit_1}
|
||||
disabled={!gebaeude_aufnahme_allgemein.brennstoff_1}
|
||||
disabled={!aufnahme.brennstoff_1}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
{#each fuelMap.hasOwnProperty(gebaeude_aufnahme_allgemein.brennstoff_1) ? fuelMap[gebaeude_aufnahme_allgemein.brennstoff_1] : [] as unit}
|
||||
{#each fuelMap.hasOwnProperty(aufnahme.brennstoff_1) ? fuelMap[aufnahme.brennstoff_1] : [] as unit}
|
||||
<option value={unit}>{unit}</option>
|
||||
{/each}
|
||||
</select>
|
||||
@@ -308,7 +308,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={1}
|
||||
heizquelle={1}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -336,7 +336,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={2}
|
||||
heizquelle={1}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -364,7 +364,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={3}
|
||||
heizquelle={1}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -416,7 +416,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
class="rounded-e-none"
|
||||
name="brennstoff_2"
|
||||
bind:value={gebaeude_aufnahme_allgemein.brennstoff_2}
|
||||
bind:value={aufnahme.brennstoff_2}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}
|
||||
@@ -450,13 +450,13 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
class="rounded-s-none"
|
||||
name="einheit_2"
|
||||
bind:value={ausweis.einheit_2}
|
||||
disabled={!gebaeude_aufnahme_allgemein.brennstoff_2}
|
||||
disabled={!aufnahme.brennstoff_2}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}
|
||||
>Bitte auswählen</option
|
||||
>
|
||||
{#each fuelMap.hasOwnProperty(gebaeude_aufnahme_allgemein.brennstoff_2) ? fuelMap[gebaeude_aufnahme_allgemein.brennstoff_2] : [] as unit}
|
||||
{#each fuelMap.hasOwnProperty(aufnahme.brennstoff_2) ? fuelMap[aufnahme.brennstoff_2] : [] as unit}
|
||||
<option value={unit}>{unit}</option>
|
||||
{/each}
|
||||
</select>
|
||||
@@ -490,7 +490,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={1}
|
||||
heizquelle={2}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -517,7 +517,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={2}
|
||||
heizquelle={2}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -544,7 +544,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={3}
|
||||
heizquelle={2}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -579,7 +579,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<StromVerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={1}
|
||||
heizquelle={1}
|
||||
></StromVerbrauchsHelpLabel>
|
||||
@@ -606,7 +606,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<StromVerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={2}
|
||||
heizquelle={1}
|
||||
></StromVerbrauchsHelpLabel>
|
||||
@@ -633,7 +633,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<StromVerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={3}
|
||||
heizquelle={1}
|
||||
></StromVerbrauchsHelpLabel>
|
||||
@@ -655,11 +655,11 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
|
||||
<!-- Enthält Stromverbrauch für: -->
|
||||
|
||||
<SanierungsOption label="Heizung" name="stromverbrauch_enthaelt_heizung" help="" bind:checked={gebaeude_aufnahme_allgemein.stromverbrauch_enthaelt_heizung}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasser " name="stromverbrauch_enthaelt_warmwasser" help="" bind:checked={gebaeude_aufnahme_allgemein.stromverbrauch_enthaelt_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Lüftung " name="stromverbrauch_enthaelt_lueftung" help="" bind:checked={gebaeude_aufnahme_allgemein.stromverbrauch_enthaelt_lueftung}></SanierungsOption>
|
||||
<SanierungsOption label="Beleuchtung" name="stromverbrauch_enthaelt_beleuchtung" help="" bind:checked={gebaeude_aufnahme_allgemein.stromverbrauch_enthaelt_beleuchtung}></SanierungsOption>
|
||||
<SanierungsOption label="Kühlung" name="stromverbrauch_enthaelt_kuehlung" help="" bind:checked={gebaeude_aufnahme_allgemein.stromverbrauch_enthaelt_kuehlung}></SanierungsOption>
|
||||
<SanierungsOption label="Heizung" name="stromverbrauch_enthaelt_heizung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_heizung}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasser " name="stromverbrauch_enthaelt_warmwasser" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Lüftung " name="stromverbrauch_enthaelt_lueftung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_lueftung}></SanierungsOption>
|
||||
<SanierungsOption label="Beleuchtung" name="stromverbrauch_enthaelt_beleuchtung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_beleuchtung}></SanierungsOption>
|
||||
<SanierungsOption label="Kühlung" name="stromverbrauch_enthaelt_kuehlung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_kuehlung}></SanierungsOption>
|
||||
|
||||
<div class="input-standard">
|
||||
<Inputlabel title="Sonstige"></Inputlabel>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
|
||||
export let ausweis;
|
||||
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
import fuelList from "./brennstoffListe.js";
|
||||
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung.js";
|
||||
import {
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { addNotification } from "#components/Notifications/shared.js";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
|
||||
// Wir dürfen bis zu 4.5 Jahre alte Klimafaktoren benutzen, also nehmen wir alle Monate seitdem und generieren daraus die Auswahl.
|
||||
@@ -44,12 +44,12 @@
|
||||
];
|
||||
|
||||
const startDate = moment(
|
||||
ausweis.aufnahme.erstellungsdatum || Date.now()
|
||||
aufnahme.erstellungsdatum || Date.now()
|
||||
)
|
||||
.subtract(4, "years")
|
||||
.subtract(6, "months");
|
||||
const endDate = moment(
|
||||
ausweis.aufnahme.erstellungsdatum || Date.now()
|
||||
aufnahme.erstellungsdatum || Date.now()
|
||||
).subtract(3, "years");
|
||||
|
||||
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
||||
@@ -232,7 +232,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
class="rounded-e-none"
|
||||
name="brennstoff_1"
|
||||
bind:value={gebaeude_aufnahme_allgemein.brennstoff_1}
|
||||
bind:value={aufnahme.brennstoff_1}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
@@ -264,11 +264,11 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
class="rounded-s-none"
|
||||
name="einheit_1"
|
||||
bind:value={ausweis.einheit_1}
|
||||
disabled={!gebaeude_aufnahme_allgemein.brennstoff_1}
|
||||
disabled={!aufnahme.brennstoff_1}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}>Bitte auswählen</option>
|
||||
{#each fuelMap.hasOwnProperty(gebaeude_aufnahme_allgemein.brennstoff_1) ? fuelMap[gebaeude_aufnahme_allgemein.brennstoff_1] : [] as unit}
|
||||
{#each fuelMap.hasOwnProperty(aufnahme.brennstoff_1) ? fuelMap[aufnahme.brennstoff_1] : [] as unit}
|
||||
<option value={unit}>{unit}</option>
|
||||
{/each}
|
||||
</select>
|
||||
@@ -304,7 +304,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={1}
|
||||
heizquelle={1}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -332,7 +332,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={2}
|
||||
heizquelle={1}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -360,7 +360,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={3}
|
||||
heizquelle={1}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -412,7 +412,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<select
|
||||
class="rounded-e-none"
|
||||
name="brennstoff_2"
|
||||
bind:value={gebaeude_aufnahme_allgemein.brennstoff_2}
|
||||
bind:value={aufnahme.brennstoff_2}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}
|
||||
@@ -446,13 +446,13 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
class="rounded-s-none"
|
||||
name="einheit_2"
|
||||
bind:value={ausweis.einheit_2}
|
||||
disabled={!gebaeude_aufnahme_allgemein.brennstoff_2}
|
||||
disabled={!aufnahme.brennstoff_2}
|
||||
required
|
||||
>
|
||||
<option disabled selected value={false}
|
||||
>Bitte auswählen</option
|
||||
>
|
||||
{#each fuelMap.hasOwnProperty(gebaeude_aufnahme_allgemein.brennstoff_2) ? fuelMap[gebaeude_aufnahme_allgemein.brennstoff_2] : [] as unit}
|
||||
{#each fuelMap.hasOwnProperty(aufnahme.brennstoff_2) ? fuelMap[aufnahme.brennstoff_2] : [] as unit}
|
||||
<option value={unit}>{unit}</option>
|
||||
{/each}
|
||||
</select>
|
||||
@@ -486,7 +486,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={1}
|
||||
heizquelle={2}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -513,7 +513,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={2}
|
||||
heizquelle={2}
|
||||
></VerbrauchsHelpLabel>
|
||||
@@ -540,7 +540,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<HelpLabel>
|
||||
<VerbrauchsHelpLabel
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
addYear={3}
|
||||
heizquelle={2}
|
||||
></VerbrauchsHelpLabel>
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
import { AppRouter } from "@ibcornelsen/api";
|
||||
import { Benutzer, GebaeudeBilder } from "@ibcornelsen/database/client";
|
||||
import { inferProcedureInput, inferProcedureOutput } from "@trpc/server";
|
||||
import {
|
||||
Aufnahme,
|
||||
BedarfsausweisWohnen,
|
||||
Benutzer,
|
||||
GebaeudeBilder,
|
||||
Objekt,
|
||||
VerbrauchsausweisGewerbe,
|
||||
VerbrauchsausweisWohnen,
|
||||
} from "@ibcornelsen/database/client";
|
||||
|
||||
export type UploadedGebaeudeBild = inferProcedureOutput<
|
||||
AppRouter["v1"]["verbrauchsausweisWohnen"]["get"]
|
||||
>["gebaeude_aufnahme_allgemein"]["gebaeude_stammdaten"]["gebaeude_bilder"][0] & { base64?: string, update?: boolean };
|
||||
type OmitKeys<T, K extends keyof T> = Omit<T, K>;
|
||||
|
||||
export type UploadedGebaeudeBild = OmitKeys<GebaeudeBilder, "id" | "objekt_id"> & {
|
||||
base64: string
|
||||
}
|
||||
|
||||
/**
|
||||
* Das ist der Typescript Type für den Verbrauchsausweis Wohnen mit allen Feldern die
|
||||
@@ -17,8 +24,28 @@ AppRouter["v1"]["verbrauchsausweisWohnen"]["get"]
|
||||
* @export
|
||||
* @typedef {VerbrauchsausweisWohnenClient}
|
||||
*/
|
||||
export type VerbrauchsausweisWohnenClient = inferProcedureOutput<
|
||||
AppRouter["v1"]["verbrauchsausweisWohnen"]["get"]
|
||||
export type VerbrauchsausweisWohnenClient = OmitKeys<
|
||||
VerbrauchsausweisWohnen,
|
||||
"id" | "aufnahme_id" | "benutzer_id"
|
||||
> & {
|
||||
uid_objekt: string,
|
||||
uid_aufnahme: string,
|
||||
uid_benutzer?: string
|
||||
};
|
||||
|
||||
/**
|
||||
* Das ist der Typescript Type für den Verbrauchsausweis Gewerbe mit allen Feldern die
|
||||
* von der API erwartet werden. Das Backend wird dem Client nur diese Daten zur Verfügung stellen.
|
||||
* Hiermit kann sichergestellt werden, dass eine Funktion auf dem Client mit den richtigen Daten
|
||||
* ausgeführt werden kann.
|
||||
* @date 1/14/2024 - 3:33:33 PM
|
||||
*
|
||||
* @export
|
||||
* @typedef {VerbrauchsausweisWohnenClient}
|
||||
*/
|
||||
export type VerbrauchsausweisGewerbeClient = OmitKeys<
|
||||
VerbrauchsausweisGewerbe,
|
||||
"id" | "aufnahme_id" | "benutzer_id"
|
||||
>;
|
||||
|
||||
/**
|
||||
@@ -31,25 +58,10 @@ AppRouter["v1"]["verbrauchsausweisWohnen"]["get"]
|
||||
* @export
|
||||
* @typedef {VerbrauchsausweisWohnenClient}
|
||||
*/
|
||||
export type VerbrauchsausweisGewerbeClient = inferProcedureInput<
|
||||
AppRouter["v1"]["verbrauchsausweisGewerbe"]["2016"]["speichern"]
|
||||
>["ausweis"];
|
||||
|
||||
/**
|
||||
* Das ist der Typescript Type für den Verbrauchsausweis Gewerbe mit allen Feldern die
|
||||
* von der API erwartet werden. Das Backend wird dem Client nur diese Daten zur Verfügung stellen.
|
||||
* Hiermit kann sichergestellt werden, dass eine Funktion auf dem Client mit den richtigen Daten
|
||||
* ausgeführt werden kann.
|
||||
* @date 1/14/2024 - 3:33:33 PM
|
||||
*
|
||||
* @export
|
||||
* @typedef {VerbrauchsausweisWohnenClient}
|
||||
*/
|
||||
export type BedarfsausweisWohnenClient = inferProcedureInput<
|
||||
AppRouter["v1"]["bedarfsausweisWohen"]["2016"]["speichern"]
|
||||
>["ausweis"];
|
||||
|
||||
|
||||
export type BedarfsausweisWohnenClient = OmitKeys<
|
||||
BedarfsausweisWohnen,
|
||||
"id" | "aufnahme_id" | "benutzer_id"
|
||||
>;
|
||||
|
||||
/**
|
||||
* Das ist der Typescript Type für die Gebäude Stammdaten mit allen Feldern die
|
||||
@@ -59,15 +71,13 @@ export type BedarfsausweisWohnenClient = inferProcedureInput<
|
||||
* @date 1/14/2024 - 3:33:33 PM
|
||||
*
|
||||
* @export
|
||||
* @typedef {GebaeudeClient}
|
||||
* @typedef {ObjektClient}
|
||||
*/
|
||||
export type GebaeudeClient = inferProcedureOutput<
|
||||
AppRouter["v1"]["verbrauchsausweisWohnen"]["get"]
|
||||
>["gebaeude_aufnahme_allgemein"]["gebaeude_stammdaten"];
|
||||
export type ObjektClient = OmitKeys<Objekt, "benutzer_id" | "id">;
|
||||
|
||||
export type AufnahmeClient = OmitKeys<
|
||||
Aufnahme,
|
||||
"id" | "objekt_id" | "benutzer_id"
|
||||
>;
|
||||
|
||||
export type GebaeudeAufnahmeClient = inferProcedureOutput<
|
||||
AppRouter["v1"]["verbrauchsausweisWohnen"]["get"]
|
||||
>["gebaeude_aufnahme_allgemein"];
|
||||
|
||||
export type BenutzerClient = inferProcedureOutput<AppRouter["v1"]["benutzer"]["fromPublicId"]>
|
||||
export type BenutzerClient = OmitKeys<Benutzer, "id" | "passwort">;
|
||||
|
||||
@@ -17,12 +17,12 @@
|
||||
|
||||
console.log(ausweis);
|
||||
|
||||
const gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein
|
||||
const aufnahme = ausweis.aufnahme
|
||||
|
||||
|
||||
const ausweisArt = "VA"; // TODO: Das ist ein Platzhalter, hier muss die Ausweisart aus dem Ausweisobjekt kommen
|
||||
|
||||
const images = ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.gebaeude_bilder;
|
||||
const images = ausweis.aufnahme.objekt.gebaeude_bilder;
|
||||
|
||||
let verbrauchWWGesamt_1 = "";
|
||||
let verbrauchWWGesamt_2 = "";
|
||||
@@ -97,12 +97,12 @@
|
||||
|
||||
let Abgeschlossen: any;
|
||||
|
||||
if (gebaeude_aufnahme_allgemein.erledigt) {
|
||||
if (aufnahme.erledigt) {
|
||||
Ausweisbild = "/images/dashboard/ausweishaken.jpg";
|
||||
DatenBlattBild = "/images/dashboard/datenblatthaken.jpg";
|
||||
StatusIcon = "/images/dashboard/erledigt.svg";
|
||||
Abgeschlossen = 0;
|
||||
} else if (gebaeude_aufnahme_allgemein.bestellt) {
|
||||
} else if (aufnahme.bestellt) {
|
||||
Ausweisbild = "/images/dashboard/ausweis.jpg";
|
||||
DatenBlattBild = "/images/dashboard/datenblatt.jpg";
|
||||
StatusIcon = "/images/dashboard/bestellt.svg";
|
||||
@@ -114,13 +114,13 @@
|
||||
Abgeschlossen = 2;
|
||||
}
|
||||
|
||||
if (gebaeude_aufnahme_allgemein.boxpruefung) {
|
||||
if (aufnahme.boxpruefung) {
|
||||
symbolPruefung = "/images/dashboard/kreishaken.png";
|
||||
} else {
|
||||
symbolPruefung = "/images/dashboard/kreiskreuz.png";
|
||||
}
|
||||
|
||||
if (gebaeude_aufnahme_allgemein.zurueckgestellt) {
|
||||
if (aufnahme.zurueckgestellt) {
|
||||
zurueckGestellt =
|
||||
"<img src='/images/dashboard/zurueckGestellt.svg' alt='Status' width=\"25\" height=\"25\"></img>";
|
||||
} else {
|
||||
@@ -143,7 +143,7 @@
|
||||
ausweis.warmwasser_enthalten &&
|
||||
ausweis.warmwasser_anteil_bekannt
|
||||
) {
|
||||
if (gebaeude_aufnahme_allgemein.solarsystem_warmwasser) {
|
||||
if (aufnahme.solarsystem_warmwasser) {
|
||||
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
|
||||
verbrauchWWGesamt_1 = `${calculations?.energieVerbrauchGesamt_1} kWh x ${ausweis.anteil_warmwasser_1 / 100} x 0.6`;
|
||||
verbrauchWWGesamt_2 = `${calculations?.energieVerbrauchGesamt_2} kWh x ${ausweis.anteil_warmwasser_2 / 100} x 0.6`;
|
||||
@@ -155,7 +155,7 @@
|
||||
solarsystemWarmwasser = "kein Solarsystem Warmwasser";
|
||||
}
|
||||
} else {
|
||||
if (gebaeude_aufnahme_allgemein.solarsystem_warmwasser) {
|
||||
if (aufnahme.solarsystem_warmwasser) {
|
||||
// Wenn Warmwasser Anteil unbekannt und Solarsystem
|
||||
verbrauchWWGesamt_1 =
|
||||
calculations?.energetischeNutzflaeche +
|
||||
@@ -176,11 +176,11 @@
|
||||
tooltip3Z2 =
|
||||
ausweis.faktorKeller +
|
||||
" x " +
|
||||
gebaeude_aufnahme_allgemein.flaeche +
|
||||
aufnahme.flaeche +
|
||||
" m² Energetische Nutzfläche (Keller " +
|
||||
ausweis.keller_beheizt +
|
||||
" ) in m²";
|
||||
table3Z1 = gebaeude_aufnahme_allgemein.flaeche;
|
||||
table3Z1 = aufnahme.flaeche;
|
||||
table3Z2 = calculations?.energetischeNutzflaeche;
|
||||
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
" kWh/" +
|
||||
ausweis.einheit_1 +
|
||||
" >> Verbrauch 1 " +
|
||||
gebaeude_aufnahme_allgemein.brennstoff_1 +
|
||||
aufnahme.brennstoff_1 +
|
||||
" in kWh";
|
||||
tooltip4Z2 =
|
||||
"(" +
|
||||
@@ -222,7 +222,7 @@
|
||||
" kWh/" +
|
||||
ausweis.einheit_2 +
|
||||
" >> Verbrauch 2 " +
|
||||
gebaeude_aufnahme_allgemein.brennstoff_2 +
|
||||
aufnahme.brennstoff_2 +
|
||||
" in kWh";
|
||||
table4Z1 = calculations?.energieVerbrauchGesamt_1;
|
||||
table4Z2 = calculations?.energieVerbrauchGesamt_2;
|
||||
@@ -411,7 +411,7 @@
|
||||
" Primärenergieverbrauch in kWh/m²a";
|
||||
tooltip16Z2 = "Effizienzklasse";
|
||||
table16Z1 = calculations?.primaerEnergieVerbrauchGesamt;
|
||||
table16Z2 = gebaeude_aufnahme_allgemein.energieeffizienzklasse;
|
||||
table16Z2 = aufnahme.energieeffizienzklasse;
|
||||
|
||||
let imagePreview = "";
|
||||
|
||||
@@ -436,7 +436,7 @@
|
||||
timeout: 3000,
|
||||
})
|
||||
|
||||
ausweis.gebaeude_aufnahme_allgemein.storniert = true;
|
||||
ausweis.aufnahme.storniert = true;
|
||||
|
||||
ausweis = ausweis;
|
||||
}
|
||||
@@ -452,11 +452,11 @@
|
||||
<td><button on:click={() => infoVisible = !infoVisible}><ChevronDown size={22} class="transition-all {infoVisible ? "" : "rotate-180"}"></ChevronDown></button></td>
|
||||
<td class="w-6 px-2"
|
||||
>
|
||||
{#if gebaeude_aufnahme_allgemein.erledigt}
|
||||
{#if aufnahme.erledigt}
|
||||
<div class="tooltip" data-tip="Ausweis wurde ausgestellt">
|
||||
<div class="rounded-full w-6 h-6 bg-success"></div>
|
||||
</div>
|
||||
{:else if gebaeude_aufnahme_allgemein.bestellt}
|
||||
{:else if aufnahme.bestellt}
|
||||
<div class="tooltip" data-tip="Ausweis wurde bestellt">
|
||||
<div class="rounded-full w-6 h-6 bg-warning"></div>
|
||||
</div>
|
||||
@@ -471,12 +471,12 @@
|
||||
>
|
||||
<AusweisPruefenTooltip>
|
||||
<div slot="tooltip">
|
||||
<span>{gebaeude_aufnahme_allgemein.adresse} {gebaeude_aufnahme_allgemein.plz} {gebaeude_aufnahme_allgemein.ort}</span>
|
||||
<span>{aufnahme.adresse} {aufnahme.plz} {aufnahme.ort}</span>
|
||||
<br>
|
||||
<span>{gebaeude_aufnahme_allgemein.gebaeudetyp}, Einheiten: {gebaeude_aufnahme_allgemein.einheiten}</span>
|
||||
<span>{aufnahme.gebaeudetyp}, Einheiten: {aufnahme.einheiten}</span>
|
||||
</div>
|
||||
<span>{ausweisArt} - {gebaeude_aufnahme_allgemein.id}</span>
|
||||
<span>{moment(gebaeude_aufnahme_allgemein.erstellungsdatum).format("DD.MM.YYYY")}</span>
|
||||
<span>{ausweisArt} - {aufnahme.id}</span>
|
||||
<span>{moment(aufnahme.erstellungsdatum).format("DD.MM.YYYY")}</span>
|
||||
</AusweisPruefenTooltip></td
|
||||
>
|
||||
<td width="35px"
|
||||
@@ -485,8 +485,8 @@
|
||||
<div slot="tooltip">
|
||||
<span>Baujahr Gebäude / Baujahr Heizung</span>
|
||||
</div>
|
||||
<span>{gebaeude_aufnahme_allgemein.baujahr_gebaeude.join(", ")}</span>
|
||||
<span>{gebaeude_aufnahme_allgemein.baujahr_heizung.join(", ")}</span>
|
||||
<span>{aufnahme.baujahr_gebaeude.join(", ")}</span>
|
||||
<span>{aufnahme.baujahr_heizung.join(", ")}</span>
|
||||
</AusweisPruefenTooltip>
|
||||
<div class="tooltip" data-tip="">
|
||||
|
||||
@@ -498,9 +498,9 @@
|
||||
<div slot="tooltip">
|
||||
<span>Wohnfläche in m²</span>
|
||||
<br>
|
||||
<span>{ausweis.faktorKeller} x {gebaeude_aufnahme_allgemein.flaeche}m² Energetische Nutzfläche (Keller {gebaeude_aufnahme_allgemein.keller}) in m²</span>
|
||||
<span>{ausweis.faktorKeller} x {aufnahme.flaeche}m² Energetische Nutzfläche (Keller {aufnahme.keller}) in m²</span>
|
||||
</div>
|
||||
<span>{gebaeude_aufnahme_allgemein.flaeche}</span>
|
||||
<span>{aufnahme.flaeche}</span>
|
||||
<span><strong>{calculations?.energetischeNutzflaeche}</strong></span>
|
||||
</AusweisPruefenTooltip>
|
||||
</td
|
||||
@@ -697,9 +697,9 @@
|
||||
>
|
||||
<AusweisPruefenTooltip>
|
||||
<div slot="tooltip">
|
||||
<span>{gebaeude_aufnahme_allgemein.prueftext}</span>
|
||||
<span>{aufnahme.prueftext}</span>
|
||||
</div>
|
||||
{#if gebaeude_aufnahme_allgemein.boxpruefung}
|
||||
{#if aufnahme.boxpruefung}
|
||||
<CheckCircled size={22}></CheckCircled>
|
||||
{:else}
|
||||
<CrossCircled size={22}></CrossCircled>
|
||||
@@ -740,7 +740,7 @@
|
||||
<td title="Ausweis ausstellen" class="w-4 p-1"
|
||||
><button
|
||||
class="btn btn-xs btn-ghost"
|
||||
on:click={() => ausweisAusstellen(gebaeude_aufnahme_allgemein.uid)}>A</button
|
||||
on:click={() => ausweisAusstellen(aufnahme.uid)}>A</button
|
||||
></td
|
||||
>
|
||||
<td
|
||||
@@ -748,7 +748,7 @@
|
||||
class="w-4 p-1"
|
||||
><button
|
||||
class="btn btn-xs btn-ghost"
|
||||
on:click={() => ausweisAusstellenPost(gebaeude_aufnahme_allgemein.uid)}>P</button
|
||||
on:click={() => ausweisAusstellenPost(aufnahme.uid)}>P</button
|
||||
></td
|
||||
>
|
||||
<td
|
||||
@@ -756,7 +756,7 @@
|
||||
class="w-4 p-1"
|
||||
><button
|
||||
class="btn btn-xs btn-ghost"
|
||||
on:click={() => ausweisnichtAusstellen(gebaeude_aufnahme_allgemein.uid)}>N</button
|
||||
on:click={() => ausweisnichtAusstellen(aufnahme.uid)}>N</button
|
||||
></td
|
||||
>
|
||||
<td
|
||||
@@ -764,7 +764,7 @@
|
||||
class="w-4 p-1"
|
||||
><button
|
||||
class="btn btn-xs btn-ghost"
|
||||
on:click={() => bestellBestaetigung(gebaeude_aufnahme_allgemein.uid)}>B</button
|
||||
on:click={() => bestellBestaetigung(aufnahme.uid)}>B</button
|
||||
></td
|
||||
>
|
||||
<td
|
||||
@@ -772,7 +772,7 @@
|
||||
class="w-4 p-1"
|
||||
><button
|
||||
class="btn btn-xs btn-ghost"
|
||||
on:click={() => erinnern(gebaeude_aufnahme_allgemein.uid)}
|
||||
on:click={() => erinnern(aufnahme.uid)}
|
||||
>E</button
|
||||
></td
|
||||
>
|
||||
@@ -782,17 +782,17 @@
|
||||
><a
|
||||
class="btn btn-xs btn-ghost"
|
||||
target="_blank"
|
||||
href="/energieausweis-erstellen/gespeichert?id={gebaeude_aufnahme_allgemein.uid}">F</a
|
||||
href="/energieausweis-erstellen/gespeichert?id={aufnahme.uid}">F</a
|
||||
></td
|
||||
>
|
||||
{#if gebaeude_aufnahme_allgemein.kontrolldatei}
|
||||
{#if aufnahme.kontrolldatei}
|
||||
<td title="XML-Datei an das DiBT verschicken." class="w-4 p-1"><button class="btn btn-xs btn-ghost" on:click={() => {
|
||||
xmlAbschicken(gebaeude_aufnahme_allgemein.uid)
|
||||
xmlAbschicken(aufnahme.uid)
|
||||
}}>X</button></td>
|
||||
{/if}
|
||||
{#if !gebaeude_aufnahme_allgemein.registriernummer}
|
||||
{#if !aufnahme.registriernummer}
|
||||
<td title="Registriernummer vom DiBT anfordern." class="w-4 p-1"><button class="btn btn-xs btn-ghost" on:click={() => {
|
||||
registriernummerAnfordern(gebaeude_aufnahme_allgemein.uid)
|
||||
registriernummerAnfordern(aufnahme.uid)
|
||||
}}>R</button></td>
|
||||
{/if}
|
||||
</tr>
|
||||
@@ -815,7 +815,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Informationen des Nutzers</td>
|
||||
<td>{gebaeude_aufnahme_allgemein.boxpruefung}</td>
|
||||
<td>{aufnahme.boxpruefung}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>UID</td>
|
||||
@@ -837,7 +837,7 @@
|
||||
</div>
|
||||
<hr/>
|
||||
</li>
|
||||
{#each ausweis.gebaeude_aufnahme_allgemein.events as event, i}
|
||||
{#each ausweis.aufnahme.events as event, i}
|
||||
<li>
|
||||
<hr />
|
||||
<div class="timeline-middle">
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
uid: ausweis.uid
|
||||
})
|
||||
|
||||
ausweis.gebaeude_aufnahme_allgemein.storniert = true;
|
||||
ausweis.aufnahme.storniert = true;
|
||||
ausweis = ausweis;
|
||||
|
||||
dialogs.alert({
|
||||
@@ -58,14 +58,14 @@
|
||||
</script>
|
||||
|
||||
<div class="card lg:card-side bg-base-200 card-bordered border-base-300">
|
||||
{#if ausweis.gebaeude_aufnahme_allgemein.storniert}
|
||||
{#if ausweis.aufnahme.storniert}
|
||||
<div class="absolute top-0 left-0 w-full h-full bg-[rgba(0,0,0,0.7)] z-[5] rounded-lg select-none">
|
||||
<h1 class="absolute -rotate-[25deg] text-5xl md:text-7xl tracking-wide uppercase text-red-500 border-4 border-red-500 rounded-lg top-[50%] translate-y-[-50%] left-[50%] translate-x-[-50%]">Storniert</h1>
|
||||
</div>
|
||||
{/if}
|
||||
<figure class="lg:w-1/2">
|
||||
<img
|
||||
src={(ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.gebaeude_bilder && `/bilder/${ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.gebaeude_bilder[0]?.uid}.webp`) || "/images/placeholder.jpg"}
|
||||
src={(ausweis.aufnahme.objekt.gebaeude_bilder && `/bilder/${ausweis.aufnahme.objekt.gebaeude_bilder[0]?.uid}.webp`) || "/images/placeholder.jpg"}
|
||||
class="object-cover w-full h-full"
|
||||
alt="Gebäudebild"
|
||||
/>
|
||||
@@ -95,15 +95,15 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex flex-row flex-wrap gap-2">
|
||||
{#if ausweis.gebaeude_aufnahme_allgemein.ausweisart == "VerbrauchsausweisWohnen"}
|
||||
{#if ausweis.aufnahme.ausweisart == "VerbrauchsausweisWohnen"}
|
||||
<div class="badge badge-accent font-semibold">
|
||||
Verbrauchsausweis Wohnen
|
||||
</div>
|
||||
{:else if ausweis.gebaeude_aufnahme_allgemein.ausweisart == "BedarfsausweisWohnen"}
|
||||
{:else if ausweis.aufnahme.ausweisart == "BedarfsausweisWohnen"}
|
||||
<div class="badge badge-accent font-semibold">
|
||||
Bedarfsausweis Wohnen
|
||||
</div>
|
||||
{:else if ausweis.gebaeude_aufnahme_allgemein.ausweisart == "VerbrauchsausweisGewerbe"}
|
||||
{:else if ausweis.aufnahme.ausweisart == "VerbrauchsausweisGewerbe"}
|
||||
<div class="badge badge-accent font-semibold">
|
||||
Verbrauchsausweis Gewerbe
|
||||
</div>
|
||||
@@ -113,7 +113,7 @@
|
||||
<div class="badge badge-success font-semibold">Ausgestellt</div>
|
||||
{/if}
|
||||
</div>
|
||||
<h2 class="card-title">{ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.adresse}</h2>
|
||||
<h2 class="card-title">{ausweis.aufnahme.objekt.adresse}</h2>
|
||||
<div class="mb-4 flex flex-row items-center gap-4">
|
||||
<progress class="progress w-full" value={progress} max="100"></progress>
|
||||
<!-- TODO: Metrics für den Fortschritt festlegen -->
|
||||
@@ -144,16 +144,16 @@
|
||||
<span
|
||||
class="font-bold text-base-content"
|
||||
title="Gebäude / Heizung"
|
||||
>{ausweis.gebaeude_aufnahme_allgemein.baujahr_gebaeude[0] || "N/A"} /
|
||||
{ausweis.gebaeude_aufnahme_allgemein.baujahr_heizung[0] ||
|
||||
>{ausweis.aufnahme.baujahr_gebaeude[0] || "N/A"} /
|
||||
{ausweis.aufnahme.baujahr_heizung[0] ||
|
||||
"N/A"}</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>Wohnfläche</span>
|
||||
<span class="font-bold text-base-content"
|
||||
>{ausweis.gebaeude_aufnahme_allgemein.flaeche
|
||||
? `${ausweis.gebaeude_aufnahme_allgemein.flaeche}m²`
|
||||
>{ausweis.aufnahme.flaeche
|
||||
? `${ausweis.aufnahme.flaeche}m²`
|
||||
: "N/A"}</span
|
||||
>
|
||||
</div>
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
<script lang="ts">
|
||||
import Label from "./Label.svelte";
|
||||
import { client } from "src/trpc";
|
||||
import type { inferProcedureOutput } from "@trpc/server";
|
||||
import type { AppRouter } from "@ibcornelsen/api";
|
||||
import { API, api, inferOutput } from "astro-typesafe-api/client";
|
||||
|
||||
export let name: string;
|
||||
export let readonly: boolean = false;
|
||||
@@ -11,7 +9,7 @@
|
||||
|
||||
|
||||
let hideZipDropdown: boolean = true;
|
||||
let zipCodes: inferProcedureOutput<AppRouter["v1"]["postleitzahlen"]> = [];
|
||||
let zipCodes: inferOutput<API["postleitzahlen"]["GET"]> = [];
|
||||
|
||||
async function fetchZipCodeInformation() {
|
||||
if (!zip || (zip.length < 2)) {
|
||||
@@ -19,7 +17,7 @@
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await client.v1.postleitzahlen.query({ plz: zip });
|
||||
const result = await api.postleitzahlen.GET.fetch({ plz: zip });
|
||||
|
||||
if (result.length > 0) {
|
||||
zipCodes = result;
|
||||
@@ -67,7 +65,7 @@
|
||||
maxlength="5"
|
||||
/>
|
||||
|
||||
<div data-test="plz-container" class="absolute top-[calc(100%+4px)] left-0 w-full bg-white py-2 shadow-md rounded-lg" hidden={hideZipDropdown}>
|
||||
<div data-test="plz-container" class="absolute top-[calc(100%+4px)] left-0 w-full bg-white py-2 shadow-md rounded-lg z-50" hidden={hideZipDropdown}>
|
||||
{#each zipCodes as zipCode}
|
||||
<div class="hover:bg-gray-100 cursor-pointer px-2 py-0.5" tabindex="-1" on:click={() => {
|
||||
zip = zipCode.plz;
|
||||
|
||||
@@ -3,17 +3,17 @@ import { AuditType, hidden } from "./hidden.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||
|
||||
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient, gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient): Promise<boolean> {
|
||||
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient, aufnahme: GebaeudeAufnahmeClient): Promise<boolean> {
|
||||
if (hidden.has(AuditType.END_ENERGIE)) {
|
||||
return false;
|
||||
}
|
||||
//sobald Fläche, Klimafaktoren und alle Verbrauchsjahre eingegeben wurden.
|
||||
if (gebaeude_aufnahme_allgemein){
|
||||
if (gebaeude_aufnahme_allgemein.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) {
|
||||
if (aufnahme){
|
||||
if (aufnahme.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) {
|
||||
try {
|
||||
const response = await getKlimafaktoren(ausweis.startdatum, gebaeude.plz);
|
||||
// Alle Klimfaktoren konnten abgefragt werden.
|
||||
const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016({...ausweis, gebaeude_aufnahme_allgemein: {...gebaeude_aufnahme_allgemein, gebaeude_stammdaten: gebaeude}});
|
||||
const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016({...ausweis, aufnahme: {...aufnahme, objekt: gebaeude}});
|
||||
if (eevva){
|
||||
if (eevva?.endEnergieVerbrauchGesamt <= 45 || eevva?.endEnergieVerbrauchGesamt >= 500) {
|
||||
return true;
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { client } from "src/trpc.js";
|
||||
import { GebaeudeClient } from "#components/Ausweis/types.js";
|
||||
import { memoize } from "src/lib/Memoization.js";
|
||||
import { AuditType, hidden } from "../audits/hidden.js";
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
|
||||
export const auditPlzNichtErkannt = memoize(
|
||||
async (gebaeude: GebaeudeAufnahmeClient) => {
|
||||
async (gebaeude: GebaeudeClient) => {
|
||||
if (gebaeude.plz) {
|
||||
if (gebaeude.plz.length == 5) {
|
||||
try {
|
||||
const result = await client.v1.postleitzahlen.query({
|
||||
const result = await api.postleitzahlen.GET.fetch({
|
||||
plz: gebaeude.plz,
|
||||
limit: 1,
|
||||
});
|
||||
|
||||
@@ -10,5 +10,6 @@ export enum AuditType {
|
||||
WARM_WASSER,
|
||||
LEER_STAND,
|
||||
END_ENERGIE,
|
||||
WOHNFLAECHE_GROESSER_GESAMTFLAECHE
|
||||
WOHNFLAECHE_GROESSER_GESAMTFLAECHE,
|
||||
PLZ_NICHT_ERKANNT
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
export let addYear: number;
|
||||
export let heizquelle: number;
|
||||
export let gebaeude_aufnahme_allgemein;
|
||||
export let aufnahme;
|
||||
export let ausweis;
|
||||
</script>
|
||||
|
||||
|
||||
@@ -3,21 +3,21 @@
|
||||
|
||||
export let addYear: number;
|
||||
export let heizquelle: number;
|
||||
export let gebaeude_aufnahme_allgemein;
|
||||
export let aufnahme;
|
||||
export let ausweis;
|
||||
</script>
|
||||
|
||||
{#if ausweis.startdatum}
|
||||
Bitte geben Sie Ihren
|
||||
{#if heizquelle == 1}
|
||||
{#if gebaeude_aufnahme_allgemein.brennstoff_1}<b>
|
||||
{gebaeude_aufnahme_allgemein.brennstoff_1}
|
||||
{#if aufnahme.brennstoff_1}<b>
|
||||
{aufnahme.brennstoff_1}
|
||||
</b>{/if}
|
||||
Verbrauch {#if ausweis.einheit_1}
|
||||
in <b>{ausweis.einheit_1} </b>{/if}
|
||||
{:else if heizquelle == 2}
|
||||
{#if gebaeude_aufnahme_allgemein.brennstoff_2}<b>
|
||||
{gebaeude_aufnahme_allgemein.brennstoff_2}
|
||||
{#if aufnahme.brennstoff_2}<b>
|
||||
{aufnahme.brennstoff_2}
|
||||
</b>{/if}
|
||||
Verbräuche {#if ausweis.einheit_2}
|
||||
in <b>{ausweis.einheit_2} </b>{/if}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,38 +0,0 @@
|
||||
import type { ZodError } from "zod";
|
||||
|
||||
export function success(data: any = {}) {
|
||||
return new Response(JSON.stringify({
|
||||
success: true,
|
||||
data
|
||||
}))
|
||||
}
|
||||
|
||||
export function error(errors: any[]) {
|
||||
return new Response(JSON.stringify({
|
||||
success: false,
|
||||
errors
|
||||
}))
|
||||
}
|
||||
|
||||
export function MissingPropertyError(properties: string[]) {
|
||||
return error(properties.map(property => {
|
||||
return `Missing property '${property}' in request body.`
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Signalisiert ein fehlendes Objekt und gibt den Fehler als HTTP Response zurück.
|
||||
* @param name Der Name der Entität, die nicht gefunden werden konnte.
|
||||
* @returns {Response} HTTP Response Objekt
|
||||
*/
|
||||
export function MissingEntityError(name: string): Response {
|
||||
return error([`Missing entity, ${name} does not exist.`])
|
||||
}
|
||||
|
||||
export function ActionFailedError(): Response {
|
||||
return error(["Failed executing action, error encountered."]);
|
||||
}
|
||||
|
||||
export function InvalidDataError(err: ZodError): Response {
|
||||
return error(err.issues);
|
||||
}
|
||||
@@ -10,7 +10,7 @@ export function convertAusweisData(
|
||||
let pdfInputs: z.infer<typeof verbrauchsausweisWohnenPDFValidator> = {
|
||||
...inputs,
|
||||
pdf: {
|
||||
"brennstoff": [inputs.gebaeude_aufnahme_allgemein?.brennstoff_1, inputs.gebaeude_aufnahme_allgemein?.brennstoff_2].filter(x => x).join(", ")
|
||||
"brennstoff": [inputs.aufnahme?.brennstoff_1, inputs.aufnahme?.brennstoff_2].filter(x => x).join(", ")
|
||||
}
|
||||
}
|
||||
let result = recursiveFlatten(inputs, "");
|
||||
|
||||
@@ -5,7 +5,7 @@ import moment from "moment";
|
||||
export function energetischeNutzflaecheBedarfsausweisWohnen_18599(
|
||||
ausweis: BedarfsausweisWohnenClient
|
||||
): number {
|
||||
if (!ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten) {
|
||||
if (!ausweis.aufnahme.objekt) {
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ export function energetischeNutzflaecheBedarfsausweisWohnen_18599(
|
||||
export async function endEnergieBedarfBedarfsausweis_18599(
|
||||
ausweis: BedarfsausweisWohnenClient
|
||||
) {
|
||||
if (!ausweis.gebaeude_aufnahme_allgemein || !ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten) {
|
||||
if (!ausweis.aufnahme || !ausweis.aufnahme.objekt) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ export function berechnungRechnerischeLauzeitHeizung(ausweis: VerbrauchsausweisW
|
||||
|
||||
let rechnerischeLaufzeiten = new Array(12).fill(0) as unknown as FixedLengthArray<number, 12>
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.gebaeudetyp === "Einfamilienhaus") {
|
||||
if (ausweis.aufnahme.gebaeudetyp === "Einfamilienhaus") {
|
||||
for (let i = 0; i < 12; i++) {
|
||||
rechnerischeLaufzeiten[i] = zeitkonstanteHeizung * faktorWochenendAbschaltung * zeitkonstanteRechnerischeLaufzeitEinfamilienhaus[i]
|
||||
}
|
||||
|
||||
@@ -7,27 +7,27 @@ import moment from "moment";
|
||||
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
|
||||
ausweis: VerbrauchsausweisWohnenClient
|
||||
): number {
|
||||
if (!ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten) {
|
||||
if (!ausweis.aufnahme.objekt) {
|
||||
return 0
|
||||
}
|
||||
|
||||
let faktorKeller = 1.2;
|
||||
// Falls das Gebäude einen Keller besitzt der Beheizt ist erhöhen wir die Nutzfläche um 15%
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.keller == Enums.Heizungsstatus.BEHEIZT && (ausweis.gebaeude_aufnahme_allgemein.einheiten || 1) <= 2) {
|
||||
if (ausweis.aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (ausweis.aufnahme.einheiten || 1) <= 2) {
|
||||
faktorKeller = 1.35;
|
||||
}
|
||||
|
||||
if ((ausweis.gebaeude_aufnahme_allgemein.nutzflaeche || 0) > 0) {
|
||||
return ausweis.gebaeude_aufnahme_allgemein.nutzflaeche || 0;
|
||||
if ((ausweis.aufnahme.nutzflaeche || 0) > 0) {
|
||||
return ausweis.aufnahme.nutzflaeche || 0;
|
||||
} else {
|
||||
return (ausweis.gebaeude_aufnahme_allgemein.flaeche || 0) * faktorKeller;
|
||||
return (ausweis.aufnahme.flaeche || 0) * faktorKeller;
|
||||
}
|
||||
}
|
||||
|
||||
export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
ausweis: VerbrauchsausweisWohnenClient
|
||||
) {
|
||||
if (!ausweis.gebaeude_aufnahme_allgemein || !ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten) {
|
||||
if (!ausweis.aufnahme || !ausweis.aufnahme.objekt) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
}];
|
||||
|
||||
try {
|
||||
const response = await getKlimafaktoren(ausweis.startdatum, ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.plz)
|
||||
const response = await getKlimafaktoren(ausweis.startdatum, ausweis.aufnahme.objekt.plz)
|
||||
|
||||
if (response) {
|
||||
klimafaktoren = response
|
||||
@@ -65,11 +65,11 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
let brennstoff_1 = getHeizwertfaktor(
|
||||
ausweis.gebaeude_aufnahme_allgemein.brennstoff_1 as string,
|
||||
ausweis.aufnahme.brennstoff_1 as string,
|
||||
ausweis.einheit_1 as string
|
||||
);
|
||||
let brennstoff_2 = getHeizwertfaktor(
|
||||
ausweis.gebaeude_aufnahme_allgemein.brennstoff_2 as string,
|
||||
ausweis.aufnahme.brennstoff_2 as string,
|
||||
ausweis.einheit_2 as string
|
||||
);
|
||||
|
||||
@@ -91,10 +91,10 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
let energieVerbrauchWarmwasser_2 = 0;
|
||||
let leerstandsZuschlagWarmwasser = 0;
|
||||
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
|
||||
let leerstand = (ausweis.gebaeude_aufnahme_allgemein.leerstand || 0) / 100;
|
||||
let leerstand = (ausweis.aufnahme.leerstand || 0) / 100;
|
||||
|
||||
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.solarsystem_warmwasser) {
|
||||
if (ausweis.aufnahme.solarsystem_warmwasser) {
|
||||
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
|
||||
energieVerbrauchWarmwasser_1 =
|
||||
energieVerbrauchGesamt_1 *
|
||||
@@ -117,7 +117,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
leerstand *
|
||||
(energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
|
||||
} else {
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.solarsystem_warmwasser) {
|
||||
if (ausweis.aufnahme.solarsystem_warmwasser) {
|
||||
// Wenn Warmwasser Anteil unbekannt und Solarsystem
|
||||
energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 12 * 3;
|
||||
energieVerbrauchWarmwasser_2 = 0;
|
||||
@@ -189,7 +189,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
let primaerfaktorww = 0;
|
||||
let primaerfaktorww_1 = 0;
|
||||
|
||||
if (!ausweis.warmwasser_enthalten && ausweis.gebaeude_aufnahme_allgemein.durchlauf_erhitzer) {
|
||||
if (!ausweis.warmwasser_enthalten && ausweis.aufnahme.durchlauf_erhitzer) {
|
||||
primaerfaktorww = 1.8;
|
||||
primaerfaktorww_1 = 1.8;
|
||||
} else {
|
||||
|
||||
@@ -2,19 +2,19 @@ import { getKlimafaktoren } from "#lib/Klimafaktoren";
|
||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor";
|
||||
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
||||
|
||||
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2023(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): number {
|
||||
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2023(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): number {
|
||||
return (
|
||||
ausweis.gebaeude_stammdaten.flaeche *
|
||||
(ausweis.gebaeude_stammdaten.keller ? 1.35 : 1.2)
|
||||
ausweis.objekt.flaeche *
|
||||
(ausweis.objekt.keller ? 1.35 : 1.2)
|
||||
);
|
||||
}
|
||||
|
||||
export async function endEnergieVerbrauchVerbrauchsausweis_2023(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {
|
||||
export async function endEnergieVerbrauchVerbrauchsausweis_2023(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): Promise<number> {
|
||||
const date = ausweis.startdatum;
|
||||
|
||||
const klimafaktoren = await getKlimafaktoren(
|
||||
date,
|
||||
ausweis.gebaeude_stammdaten.plz
|
||||
ausweis.objekt.plz
|
||||
);
|
||||
|
||||
// Endenergieverbrauch
|
||||
@@ -50,7 +50,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2023(ausweis: Verbrau
|
||||
warmwasserZuschlag = 20 * energetischeNutzflaeche * 3;
|
||||
}
|
||||
|
||||
if (ausweis.gebaeude_stammdaten.leerstand > 0) {
|
||||
if (ausweis.objekt.leerstand > 0) {
|
||||
let durchschnittsKlimafaktor =
|
||||
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
|
||||
|
||||
@@ -61,11 +61,11 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2023(ausweis: Verbrau
|
||||
verbrauch_4_kwh +
|
||||
verbrauch_5_kwh +
|
||||
verbrauch_6_kwh) *
|
||||
(ausweis.gebaeude_stammdaten.leerstand / 100)) /
|
||||
(ausweis.objekt.leerstand / 100)) /
|
||||
durchschnittsKlimafaktor;
|
||||
}
|
||||
|
||||
if (ausweis.gebaeude_stammdaten.energiequelle_2_nutzung[3]) {
|
||||
if (ausweis.objekt.energiequelle_2_nutzung[3]) {
|
||||
kuehlungsZuschlag = 6 * energetischeNutzflaeche * 3;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||
|
||||
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { gebaeude_stammdaten: GebaeudeStammdaten }): Promise<number> {
|
||||
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): Promise<number> {
|
||||
const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
|
||||
|
||||
if (!result) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import moment from "moment";
|
||||
import { memoize } from "./Memoization.js";
|
||||
import { client } from "src/trpc.js";
|
||||
import { api } from "astro-typesafe-api/client"
|
||||
|
||||
export const getKlimafaktoren = memoize(async (date: Date, plz: string) => {
|
||||
if (!plz || !date) {
|
||||
@@ -8,7 +9,7 @@ export const getKlimafaktoren = memoize(async (date: Date, plz: string) => {
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await client.v1.klimafaktoren.query({
|
||||
const response = await api.klimafaktoren.GET.fetch({
|
||||
plz,
|
||||
genauigkeit: "years",
|
||||
startdatum: moment(date).utc(true).toDate(),
|
||||
|
||||
@@ -26,7 +26,7 @@ export function verbrauchsausweisWohnenCalculateFormProgress(ausweis: Verbrauchs
|
||||
progress: 100,
|
||||
errors: []
|
||||
};
|
||||
} else if (ausweis.gebaeude_aufnahme_allgemein.storniert) {
|
||||
} else if (ausweis.aufnahme.storniert) {
|
||||
// Der Ausweis wurde storniert, also ist der Fortschritt 0%
|
||||
return {
|
||||
progress: 0,
|
||||
@@ -34,7 +34,7 @@ export function verbrauchsausweisWohnenCalculateFormProgress(ausweis: Verbrauchs
|
||||
};
|
||||
}
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.baujahr_gebaeude.length === 0) {
|
||||
if (ausweis.aufnahme.baujahr_gebaeude.length === 0) {
|
||||
errors.push({
|
||||
title: "Fehlendes Baujahr",
|
||||
description: "Eines ihrer Gebäude hat noch kein Baujahr angegeben. Beheben sie dies indem sie auf den untenstehenden Link klicken.",
|
||||
@@ -44,11 +44,11 @@ export function verbrauchsausweisWohnenCalculateFormProgress(ausweis: Verbrauchs
|
||||
|
||||
}
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.adresse) {
|
||||
if (ausweis.aufnahme.adresse) {
|
||||
progress += 5;
|
||||
}
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.ort) {
|
||||
if (ausweis.aufnahme.ort) {
|
||||
progress += 5;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ export class AusweisBerechnungen2016 {
|
||||
}
|
||||
|
||||
public getAusweisart() {
|
||||
switch (this.ausweis.gebaeude_aufnahme_allgemein.ausweisart.toLowerCase()) {
|
||||
switch (this.ausweis.aufnahme.ausweisart.toLowerCase()) {
|
||||
case ('va'):
|
||||
return {'typ' : 'Wohngebaeude', 'art' : 'Verbrauchsausweis Wohngebäude', 'kuerzel' : 'va'};
|
||||
case ('ba'):
|
||||
@@ -73,7 +73,7 @@ export class AusweisBerechnungen2016 {
|
||||
public getGebaeudeTeil() {
|
||||
if (this.gebaeude.gebaeudeteil == "Gesamtgebäude") {
|
||||
return "Ganzes Gebäude";
|
||||
} else if (this.gebaeude.gebaeudeteil == "Wohnen" && this.ausweis.gebaeude_aufnahme_allgemein.ausweisart == "VANW") {
|
||||
} else if (this.gebaeude.gebaeudeteil == "Wohnen" && this.ausweis.aufnahme.ausweisart == "VANW") {
|
||||
return "Teil des Wohngebäudes";
|
||||
} else {
|
||||
return "Teil des Nichtwohngebäudes";
|
||||
|
||||
@@ -14,10 +14,10 @@ import moment from "moment";
|
||||
|
||||
export async function xmlVerbrauchsausweisWohnen_2016(
|
||||
ausweis: VerbrauchsausweisWohnen & {
|
||||
gebaeude_stammdaten: GebaeudeStammdaten;
|
||||
objekt: GebaeudeStammdaten;
|
||||
}
|
||||
): Promise<string> {
|
||||
const gebaeude = ausweis.gebaeude_stammdaten;
|
||||
const gebaeude = ausweis.objekt;
|
||||
|
||||
const bundesland = await prisma.postleitzahlen.findUnique({
|
||||
where: {
|
||||
@@ -35,7 +35,7 @@ export async function xmlVerbrauchsausweisWohnen_2016(
|
||||
|
||||
const berechnungen = new AusweisBerechnungen2016(
|
||||
ausweis,
|
||||
ausweis.gebaeude_stammdaten,
|
||||
ausweis.objekt,
|
||||
result
|
||||
);
|
||||
const klimafaktoren = await getKlimafaktoren(
|
||||
|
||||
@@ -7,28 +7,28 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): {
|
||||
description: string,
|
||||
anlagenteil: string
|
||||
}[] {
|
||||
let Warmwasserrohre_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.warmwasser_rohre_gedaemmt;
|
||||
let Heizungsrohre_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.heizungsrohre_gedaemmt;
|
||||
let Waermepumpe = ausweis.gebaeude_aufnahme_allgemein.waermepumpe;
|
||||
let Kellerwand_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.keller_wand_gedaemmt;
|
||||
let Keller = ausweis.gebaeude_aufnahme_allgemein.keller;
|
||||
let Kellerdecke_Kalraeume_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.keller_decke_gedaemmt;
|
||||
let Brennwertkessel = ausweis.gebaeude_aufnahme_allgemein.brennwert_kessel;
|
||||
let baujahr_anlagesanlage = ausweis.gebaeude_aufnahme_allgemein.baujahr_heizung[0];
|
||||
let Zentralheizung = ausweis.gebaeude_aufnahme_allgemein.zentralheizung;
|
||||
let photovoltaik = ausweis.gebaeude_aufnahme_allgemein.photovoltaik;
|
||||
let Brennstoff = ausweis.gebaeude_aufnahme_allgemein.brennstoff_1;
|
||||
let Aussenwand_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.aussenwand_gedaemmt;
|
||||
let Dachgeschoss = ausweis.gebaeude_aufnahme_allgemein.dachgeschoss;
|
||||
let Dachgeschoss_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt;
|
||||
let Oberste_Geschossdecke_gedaemmt = ausweis.gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt;
|
||||
let Einfachglas = ausweis.gebaeude_aufnahme_allgemein.einfach_verglasung;
|
||||
let Doppelfenster = ausweis.gebaeude_aufnahme_allgemein.doppel_verglasung;
|
||||
let Fenster_teilw_undicht = ausweis.gebaeude_aufnahme_allgemein.fenster_teilweise_undicht;
|
||||
let Warmwasserrohre_gedaemmt = ausweis.aufnahme.warmwasser_rohre_gedaemmt;
|
||||
let Heizungsrohre_gedaemmt = ausweis.aufnahme.heizungsrohre_gedaemmt;
|
||||
let Waermepumpe = ausweis.aufnahme.waermepumpe;
|
||||
let Kellerwand_gedaemmt = ausweis.aufnahme.keller_wand_gedaemmt;
|
||||
let Keller = ausweis.aufnahme.keller;
|
||||
let Kellerdecke_Kalraeume_gedaemmt = ausweis.aufnahme.keller_decke_gedaemmt;
|
||||
let Brennwertkessel = ausweis.aufnahme.brennwert_kessel;
|
||||
let baujahr_anlagesanlage = ausweis.aufnahme.baujahr_heizung[0];
|
||||
let Zentralheizung = ausweis.aufnahme.zentralheizung;
|
||||
let photovoltaik = ausweis.aufnahme.photovoltaik;
|
||||
let Brennstoff = ausweis.aufnahme.brennstoff_1;
|
||||
let Aussenwand_gedaemmt = ausweis.aufnahme.aussenwand_gedaemmt;
|
||||
let Dachgeschoss = ausweis.aufnahme.dachgeschoss;
|
||||
let Dachgeschoss_gedaemmt = ausweis.aufnahme.dachgeschoss_gedaemmt;
|
||||
let Oberste_Geschossdecke_gedaemmt = ausweis.aufnahme.oberste_geschossdecke_gedaemmt;
|
||||
let Einfachglas = ausweis.aufnahme.einfach_verglasung;
|
||||
let Doppelfenster = ausweis.aufnahme.doppel_verglasung;
|
||||
let Fenster_teilw_undicht = ausweis.aufnahme.fenster_teilweise_undicht;
|
||||
|
||||
let empfehlungen = [];
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
|
||||
if (ausweis.aufnahme.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
|
||||
empfehlungen.push({
|
||||
"title" : "Erneuerung der Fenster",
|
||||
"description" : "Alte und undichte Fenster mit Wärmeschutzfenstern auswechseln.",
|
||||
@@ -38,7 +38,7 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): {
|
||||
});
|
||||
}
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) {
|
||||
if (ausweis.aufnahme.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) {
|
||||
empfehlungen.push({
|
||||
"title" : "Zusätzliche Dämmung des Fußbodens des kalten Dachraumes",
|
||||
"description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.",
|
||||
|
||||
@@ -20,7 +20,7 @@ export async function importVerbrauchsausweisWohnenAltesSystem(count: number = 5
|
||||
|
||||
export function verbrauchsausweisWohnenImportTranslate(ausweis: Record<string, any>) {
|
||||
const ausweisTranslated: VerbrauchsausweisWohnenClient = {
|
||||
gebaeude_aufnahme_allgemein: {
|
||||
aufnahme: {
|
||||
rechnungen: null,
|
||||
baujahr_gebaeude: [ausweis.baujahr_gebaeude],
|
||||
baujahr_heizung: [ausweis.baujahr_anlage],
|
||||
@@ -38,7 +38,7 @@ export function verbrauchsausweisWohnenImportTranslate(ausweis: Record<string, a
|
||||
gebaeudeteil: ausweis.objekt_gebaeudeteil,
|
||||
lueftung: ausweis.lueftungskonzept,
|
||||
kuehlung: ausweis.wird_gekuehlt,
|
||||
gebaeude_stammdaten: {
|
||||
objekt: {
|
||||
adresse: ausweis.objekt_strasse,
|
||||
plz: ausweis.objekt_plz,
|
||||
ort: ausweis.objekt_ort,
|
||||
|
||||
@@ -10,7 +10,7 @@ export function verbrauchsausweisWohnenFaker(seed: number = 42): Verbrauchsauswe
|
||||
const verbrauch_4 = faker.number.int({ min: 5000, max: 15000 });
|
||||
|
||||
const ausweis: VerbrauchsausweisWohnenClient = {
|
||||
gebaeude_aufnahme_allgemein: {
|
||||
aufnahme: {
|
||||
rechnungen: [],
|
||||
baujahr_gebaeude: [faker.number.int({ min: 1960, max: 2014 })],
|
||||
baujahr_heizung: [faker.number.int({ min: 1960, max: 2014 })],
|
||||
@@ -28,7 +28,7 @@ export function verbrauchsausweisWohnenFaker(seed: number = 42): Verbrauchsauswe
|
||||
gebaeudeteil: "Gesamtgebäude",
|
||||
lueftung: "Fensterlüftung",
|
||||
kuehlung: "Vorhanden",
|
||||
gebaeude_stammdaten: {
|
||||
objekt: {
|
||||
adresse: faker.location.streetAddress(),
|
||||
plz: faker.location.zipCode({ format: "#####" }),
|
||||
ort: faker.location.city(),
|
||||
|
||||
@@ -78,4 +78,12 @@ export async function authorizationMiddleware(input: any, context: TypesafeAPICo
|
||||
code: "BAD_REQUEST",
|
||||
message: "Invalid authorization method in 'Authorization' header."
|
||||
})
|
||||
}
|
||||
|
||||
export async function maybeAuthorizationMiddleware(input: any, ctx: TypesafeAPIContextWithRequest<any>) {
|
||||
try {
|
||||
return authorizationMiddleware(input, ctx)
|
||||
} catch(e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
<text size="12">Ausweis ID: ${ausweis.uid}</text>
|
||||
</flex>
|
||||
<text size="12" lineHeight="14" font="bold" marginTop="10">Gebäudedaten</text>
|
||||
<text size="12" lineHeight="14">Adresse: ${ausweis.gebaeude_aufnahme_allgemein.adresse}, ${ausweis.gebaeude_aufnahme_allgemein.plz} ${ausweis.gebaeude_aufnahme_allgemein.ort}</text>
|
||||
<text size="12" lineHeight="14">Adresse: ${ausweis.aufnahme.objekt.adresse}, ${ausweis.aufnahme.objekt.plz} ${ausweis.aufnahme.objekt.ort}</text>
|
||||
|
||||
<flex direction="row" justify="space-between" width="${innerWidth}" marginTop="25">
|
||||
<flex direction="row" gap="5" align="center">
|
||||
@@ -80,29 +80,29 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
<flex direction="column" width="${(innerWidth) / 2 - 7.5}">
|
||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
||||
<text size="12" lineHeight="14">Gebäudetyp:</text>
|
||||
<text size="12" lineHeight="14">${ausweis.gebaeude_aufnahme_allgemein.gebaeudetyp}</text>
|
||||
<text size="12" lineHeight="14">${ausweis.aufnahme.gebaeudetyp}</text>
|
||||
</flex>
|
||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
||||
<text size="12" lineHeight="14">Wohnfläche:</text>
|
||||
<text size="12" lineHeight="14">DIN Wohnfläche innen ${ausweis.gebaeude_aufnahme_allgemein.flaeche} m²</text>
|
||||
<text size="12" lineHeight="14">DIN Wohnfläche innen ${ausweis.aufnahme.flaeche} m²</text>
|
||||
</flex>
|
||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
||||
<text size="12" lineHeight="14">Leerstand:</text>
|
||||
<text size="12" lineHeight="14">${ausweis.gebaeude_aufnahme_allgemein.leerstand || 0}%</text>
|
||||
<text size="12" lineHeight="14">${ausweis.aufnahme.leerstand || 0}%</text>
|
||||
</flex>
|
||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
||||
<text size="12" lineHeight="14">Wohnungen:</text>
|
||||
<text size="12" lineHeight="14">${ausweis.gebaeude_aufnahme_allgemein.einheiten}</text>
|
||||
<text size="12" lineHeight="14">${ausweis.aufnahme.einheiten}</text>
|
||||
</flex>
|
||||
</flex>
|
||||
<flex direction="column" width="${(innerWidth) / 2 - 7.5}">
|
||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
||||
<text size="12" lineHeight="14">Dachgeschoss:</text>
|
||||
<text size="12" lineHeight="14">${translateHeizungsstatus[ausweis.gebaeude_aufnahme_allgemein.dachgeschoss || "NICHT_VORHANDEN"]}</text>
|
||||
<text size="12" lineHeight="14">${translateHeizungsstatus[ausweis.aufnahme.dachgeschoss || "NICHT_VORHANDEN"]}</text>
|
||||
</flex>
|
||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
||||
<text size="12" lineHeight="14">Keller:</text>
|
||||
<text size="12" lineHeight="14">${translateHeizungsstatus[ausweis.gebaeude_aufnahme_allgemein.keller || "NICHT_VORHANDEN"]}</text>
|
||||
<text size="12" lineHeight="14">${translateHeizungsstatus[ausweis.aufnahme.keller || "NICHT_VORHANDEN"]}</text>
|
||||
</flex>
|
||||
</flex>
|
||||
</flex>
|
||||
@@ -126,14 +126,14 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
</flex>
|
||||
<flex direction="column" gap="4">
|
||||
<text></text>
|
||||
<text size="12" font="bold">${ausweis.gebaeude_aufnahme_allgemein.brennstoff_1}</text>
|
||||
<text size="12" font="bold">${ausweis.aufnahme.brennstoff_1}</text>
|
||||
<text size="12">${ausweis.verbrauch_1} ${ausweis.einheit_1}</text>
|
||||
<text size="12">${ausweis.verbrauch_2} ${ausweis.einheit_1}</text>
|
||||
<text size="12">${ausweis.verbrauch_3} ${ausweis.einheit_1}</text>
|
||||
</flex>
|
||||
<flex direction="column" gap="4">
|
||||
<text size="12">zusätzliche Heizquelle</text>
|
||||
<text size="12" font="bold">${ausweis.gebaeude_aufnahme_allgemein.brennstoff_2 || ""}</text>
|
||||
<text size="12" font="bold">${ausweis.aufnahme.brennstoff_2 || ""}</text>
|
||||
<text size="12">${ausweis.verbrauch_4 || ""} ${ausweis.einheit_2 || ""}</text>
|
||||
<text size="12">${ausweis.verbrauch_5 || ""} ${ausweis.einheit_2 || ""}</text>
|
||||
<text size="12">${ausweis.verbrauch_6 || ""} ${ausweis.einheit_2 || ""}</text>
|
||||
@@ -152,55 +152,55 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
<flex direction="row" justify="space-between" width="${pages[1].getWidth() - 120}" marginTop="15">
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.zentralheizung || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.zentralheizung || false}"></checkbox>
|
||||
<text size="12">Zentralheizung</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.einzelofen || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.einzelofen || false}"></checkbox>
|
||||
<text size="12">Einzelöfen</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.durchlauf_erhitzer || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.durchlauf_erhitzer || false}"></checkbox>
|
||||
<text size="12">Durchlauferhitzer</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.standard_kessel || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.standard_kessel || false}"></checkbox>
|
||||
<text size="12">Standardkessel</text>
|
||||
</flex>
|
||||
</flex>
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.solarsystem_warmwasser || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.solarsystem_warmwasser || false}"></checkbox>
|
||||
<text size="12">Solarsystem für Warmwasser</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.waermepumpe || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.waermepumpe || false}"></checkbox>
|
||||
<text size="12">Wärmepumpe</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.niedertemperatur_kessel || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.niedertemperatur_kessel || false}"></checkbox>
|
||||
<text size="12">Niedertemperaturkessel</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.brennwert_kessel || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.brennwert_kessel || false}"></checkbox>
|
||||
<text size="12">Brennwertkessel</text>
|
||||
</flex>
|
||||
</flex>
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.warmwasser_rohre_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.warmwasser_rohre_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Warmwasserrohre gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.heizungsrohre_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.heizungsrohre_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Heizungsrohre gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.zirkulation || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.zirkulation || false}"></checkbox>
|
||||
<text size="12">Zirkulation</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.raum_temperatur_regler || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.raum_temperatur_regler || false}"></checkbox>
|
||||
<text size="12">Raumtemperaturregelung</text>
|
||||
</flex>
|
||||
</flex>
|
||||
@@ -209,15 +209,15 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
<flex direction="row" justify="space-between" width="${pages[1].getWidth() - 120}" marginTop="15">
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.einfach_verglasung || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.einfach_verglasung || false}"></checkbox>
|
||||
<text size="12">Einfachglas</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.doppel_verglasung || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.doppel_verglasung || false}"></checkbox>
|
||||
<text size="12">Doppelverglasung</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.isolier_verglasung || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.isolier_verglasung || false}"></checkbox>
|
||||
<text size="12">Isolierverglasung</text>
|
||||
</flex>
|
||||
</flex>
|
||||
@@ -227,25 +227,25 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
<text size="12">Passivhausfenster</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.fenster_dicht || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.fenster_dicht || false}"></checkbox>
|
||||
<text size="12">Alle Fenster dicht</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.fenster_teilweise_undicht || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.fenster_teilweise_undicht || false}"></checkbox>
|
||||
<text size="12">Fenster teilweise undicht</text>
|
||||
</flex>
|
||||
</flex>
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.tueren_undicht || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.tueren_undicht || false}"></checkbox>
|
||||
<text size="12">Türen teilweise undicht</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.tueren_dicht || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.tueren_dicht || false}"></checkbox>
|
||||
<text size="12">Alle Türen dicht</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.rolllaeden_kaesten_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.rolllaeden_kaesten_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Rollladenkästen gedämmt</text>
|
||||
</flex>
|
||||
</flex>
|
||||
@@ -254,33 +254,33 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
<flex direction="row" justify="space-between" width="${pages[1].getWidth() - 120}" marginTop="15">
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.keller_wand_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.keller_wand_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Kelleraußenwand gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.keller_decke_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.keller_decke_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Kellerdecke gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.aussenwand_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.aussenwand_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Außenwand gedämmt</text>
|
||||
</flex>
|
||||
</flex>
|
||||
<flex direction="column" gap="4">
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.dachgeschoss_min_12cm_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.dachgeschoss_min_12cm_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Dachgeschoss min. 12cm gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.dachgeschoss_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Dachgeschoss gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.oberste_geschossdecke_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Oberste Geschossdecke gedämmt</text>
|
||||
</flex>
|
||||
<flex direction="row" gap="4" align="center">
|
||||
<checkbox width="8" height="8" checked="${ausweis.gebaeude_aufnahme_allgemein.oberste_geschossdecke_min_12cm_gedaemmt || false}"></checkbox>
|
||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.oberste_geschossdecke_min_12cm_gedaemmt || false}"></checkbox>
|
||||
<text size="12">Oberste Geschossdecke min. 12cm gedämmt</text>
|
||||
</flex>
|
||||
</flex>
|
||||
|
||||
@@ -41,38 +41,38 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
}
|
||||
}
|
||||
|
||||
const gebaeudetyp = fillFormField("gebaeudetyp", ausweis.gebaeude_aufnahme_allgemein.gebaeudetyp)
|
||||
const gebaeudetyp = fillFormField("gebaeudetyp", ausweis.aufnahme.gebaeudetyp)
|
||||
|
||||
const adresse = fillFormField("adresse", ausweis.gebaeude_aufnahme_allgemein.adresse)
|
||||
const adresse = fillFormField("adresse", ausweis.aufnahme.objekt.adresse)
|
||||
|
||||
|
||||
const gebaeudeteil = fillFormField("gebaeudeteil", ausweis.gebaeude_aufnahme_allgemein.gebaeudeteil)
|
||||
const gebaeudeteil = fillFormField("gebaeudeteil", ausweis.aufnahme.gebaeudeteil)
|
||||
|
||||
const baujahr_gebaeude = fillFormField("baujahr_gebaeude", ausweis.gebaeude_aufnahme_allgemein.baujahr_gebaeude.toString())
|
||||
const baujahr_gebaeude = fillFormField("baujahr_gebaeude", ausweis.aufnahme.baujahr_gebaeude.toString())
|
||||
|
||||
const baujahr_heizung = fillFormField("baujahr_heizung", ausweis.gebaeude_aufnahme_allgemein.baujahr_heizung.toString())
|
||||
const baujahr_heizung = fillFormField("baujahr_heizung", ausweis.aufnahme.baujahr_heizung.toString())
|
||||
|
||||
const einheiten = fillFormField("einheiten", ausweis.gebaeude_aufnahme_allgemein.einheiten.toString())
|
||||
const einheiten = fillFormField("einheiten", ausweis.aufnahme.einheiten.toString())
|
||||
|
||||
const nutzflaeche = fillFormField("nutzflaeche", `${ausweis.gebaeude_aufnahme_allgemein.nutzflaeche.toString()}m²`)
|
||||
const nutzflaeche = fillFormField("nutzflaeche", `${ausweis.aufnahme.nutzflaeche.toString()}m²`)
|
||||
|
||||
fillFormField("energietraeger_heizung", `${ausweis.gebaeude_aufnahme_allgemein.brennstoff_1}, ${ausweis.gebaeude_aufnahme_allgemein.brennstoff_2 || ""}`)
|
||||
fillFormField("energietraeger_heizung", `${ausweis.aufnahme.brennstoff_1}, ${ausweis.aufnahme.brennstoff_2 || ""}`)
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
fillFormField("energietraeger_warmwasser", `${ausweis.gebaeude_aufnahme_allgemein.brennstoff_1}, ${ausweis.gebaeude_aufnahme_allgemein.brennstoff_2 || ""}`)
|
||||
fillFormField("energietraeger_warmwasser", `${ausweis.aufnahme.brennstoff_1}, ${ausweis.aufnahme.brennstoff_2 || ""}`)
|
||||
}
|
||||
|
||||
toggleCheck("fensterlueftung", ausweis.gebaeude_aufnahme_allgemein.lueftung == Enums.Lueftungskonzept.Fensterlueftung)
|
||||
toggleCheck("schachtlueftung", ausweis.gebaeude_aufnahme_allgemein.lueftung == Enums.Lueftungskonzept.Schachtlueftung)
|
||||
toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", ausweis.gebaeude_aufnahme_allgemein.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung)
|
||||
toggleCheck("lueftungsanlage_waermerueckgewinnung", ausweis.gebaeude_aufnahme_allgemein.lueftung == Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung)
|
||||
toggleCheck("fensterlueftung", ausweis.aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung)
|
||||
toggleCheck("schachtlueftung", ausweis.aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung)
|
||||
toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", ausweis.aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung)
|
||||
toggleCheck("lueftungsanlage_waermerueckgewinnung", ausweis.aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung)
|
||||
|
||||
toggleCheck("anlass_neubau", ausweis.ausstellgrund == "Neubau")
|
||||
toggleCheck("anlass_vermietung", ausweis.ausstellgrund == "Vermietung" || ausweis.ausstellgrund == "Verkauf")
|
||||
toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
|
||||
toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
|
||||
|
||||
const gebaeudeBild = ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.gebaeude_bilder?.find(image => image.kategorie === "Gebaeude");
|
||||
const gebaeudeBild = ausweis.aufnahme.objekt.gebaeude_bilder?.find(image => image.kategorie === "Gebaeude");
|
||||
|
||||
|
||||
/* -------------------------------- Seite 2 -------------------------------- */
|
||||
@@ -247,7 +247,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"),
|
||||
ausweis.gebaeude_aufnahme_allgemein.brennstoff_1,
|
||||
ausweis.aufnahme.brennstoff_1,
|
||||
berechnungen?.primaerfaktorww.toString(),
|
||||
Math.round(berechnungen?.verbrauch_1_kwh).toString(),
|
||||
Math.round(
|
||||
@@ -262,7 +262,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"),
|
||||
ausweis.gebaeude_aufnahme_allgemein.brennstoff_1,
|
||||
ausweis.aufnahme.brennstoff_1,
|
||||
berechnungen?.primaerfaktorww.toString(),
|
||||
Math.round(berechnungen?.verbrauch_2_kwh).toString(),
|
||||
Math.round(
|
||||
@@ -277,7 +277,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "year").format("MM.YYYY"),
|
||||
ausweis.gebaeude_aufnahme_allgemein.brennstoff_1,
|
||||
ausweis.aufnahme.brennstoff_1,
|
||||
berechnungen?.primaerfaktorww.toString(),
|
||||
Math.round(berechnungen?.verbrauch_3_kwh).toString(),
|
||||
Math.round(
|
||||
|
||||
@@ -62,9 +62,9 @@ const UseDynamicFontSize = (props: PropPanelWidgetProps) => {
|
||||
rootElement.appendChild(label);
|
||||
};
|
||||
|
||||
type AusweisIndex = keyof Omit<Omit<VerbrauchsausweisWohnenClient, "gebaeude_aufnahme_allgemein">, "rechnungen">
|
||||
| `gebaeude_aufnahme_allgemein.${keyof VerbrauchsausweisWohnenClient["gebaeude_aufnahme_allgemein"]}`
|
||||
| `gebaeude_aufnahme_allgemein.gebaeude_stammdaten.${keyof VerbrauchsausweisWohnenClient["gebaeude_aufnahme_allgemein"]["gebaeude_stammdaten"]}`
|
||||
type AusweisIndex = keyof Omit<Omit<VerbrauchsausweisWohnenClient, "aufnahme">, "rechnungen">
|
||||
| `aufnahme.${keyof VerbrauchsausweisWohnenClient["aufnahme"]}`
|
||||
| `aufnahme.objekt.${keyof VerbrauchsausweisWohnenClient["aufnahme"]["objekt"]}`
|
||||
| `rechnungen.${keyof Rechnungen}`;
|
||||
|
||||
const ausweisKeys = zodGetKeys(verbrauchsausweisWohnenPDFValidator);
|
||||
|
||||
File diff suppressed because one or more lines are too long
255
src/lib/validators/index.ts
Normal file
255
src/lib/validators/index.ts
Normal file
@@ -0,0 +1,255 @@
|
||||
import {
|
||||
VerbrauchsausweisWohnenSchema,
|
||||
AufnahmeSchema,
|
||||
ObjektSchema,
|
||||
GebaeudeBilderSchema,
|
||||
RechnungSchema,
|
||||
EventSchema,
|
||||
BenutzerSchema,
|
||||
GebaeudePlaeneSchema,
|
||||
AnteilshaberSchema,
|
||||
BedarfsausweisWohnenSchema,
|
||||
VerbrauchsausweisGewerbeSchema
|
||||
} from "@ibcornelsen/database/client";
|
||||
import { z } from "zod";
|
||||
|
||||
export const RechnungValidator = RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
})
|
||||
|
||||
export const GebaeudePlaeneValidator = GebaeudePlaeneSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true
|
||||
})
|
||||
|
||||
export const AnteilshaberValidator = AnteilshaberSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
objekt_id: true
|
||||
})
|
||||
|
||||
export const GebaeudeBilderValidator = GebaeudeBilderSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true
|
||||
})
|
||||
|
||||
export const AufnahmeValidator = AufnahmeSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
verbrauchsausweis_wohnen: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}).nullable(),
|
||||
bedarfsausweis_wohnen: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}).nullable(),
|
||||
verbrauchsausweis_gewerbe: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}).nullable(),
|
||||
rechnungen: z.array(
|
||||
RechnungValidator
|
||||
),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
benutzer: BenutzerSchema.pick({ uid: true }),
|
||||
})
|
||||
)
|
||||
),
|
||||
})
|
||||
);
|
||||
|
||||
export const ObjektValidator = ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true
|
||||
}).merge(z.object({
|
||||
aufnahme: z.array(
|
||||
AufnahmeValidator
|
||||
).nullable().optional(),
|
||||
gebaeude_bilder: z.array(
|
||||
GebaeudeBilderValidator
|
||||
).nullable().optional(),
|
||||
gebaeude_plaene: z.array(
|
||||
GebaeudePlaeneValidator
|
||||
).nullable().optional(),
|
||||
Anteilshaber: z.array(
|
||||
AnteilshaberValidator
|
||||
).nullable().optional()
|
||||
}))
|
||||
|
||||
/**
|
||||
* Runtime überprüfung für den Verbrauchsausweis Wohnen
|
||||
* Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
|
||||
*/
|
||||
export const VerbrauchsausweisWohnenValidator =
|
||||
VerbrauchsausweisWohnenSchema.merge(
|
||||
z.object({
|
||||
benutzer: BenutzerSchema.omit({
|
||||
id: true,
|
||||
passwort: true
|
||||
}),
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
objekt: ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
gebaeude_bilder: z.array(
|
||||
GebaeudeBilderSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
),
|
||||
rechnungen: RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).array(),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}).merge(z.object({
|
||||
benutzer: BenutzerSchema.pick({
|
||||
uid: true
|
||||
})
|
||||
}))
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
).omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
});
|
||||
|
||||
export const VerbrauchsausweisWohnenBerechnungValidator2024 = z.object({
|
||||
endEnergieVerbrauchGesamt: z.number(),
|
||||
primaerEnergieVerbrauchGesamt: z.number(),
|
||||
energieEffizienzKlasse: z.string(),
|
||||
co2EmissionenGesamt: z.number()
|
||||
})
|
||||
|
||||
/**
|
||||
* Runtime überprüfung für den Verbrauchsausweis Wohnen
|
||||
* Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
|
||||
*/
|
||||
export const BedarfsausweisWohnenValidator =
|
||||
BedarfsausweisWohnenSchema.merge(
|
||||
z.object({
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
objekt: ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
gebaeude_bilder: z.array(
|
||||
GebaeudeBilderSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
),
|
||||
rechnungen: RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).array(),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}).merge(z.object({
|
||||
benutzer: BenutzerSchema.pick({
|
||||
uid: true
|
||||
})
|
||||
}))
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
).omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
});
|
||||
|
||||
/**
|
||||
* Runtime überprüfung für den Verbrauchsausweis Wohnen
|
||||
* Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
|
||||
*/
|
||||
export const VerbrauchsausweisGewerbeValidator =
|
||||
VerbrauchsausweisGewerbeSchema.merge(
|
||||
z.object({
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
objekt: ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
gebaeude_bilder: z.array(
|
||||
GebaeudeBilderSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
),
|
||||
rechnungen: RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).array(),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}).merge(z.object({
|
||||
benutzer: BenutzerSchema.pick({
|
||||
uid: true
|
||||
})
|
||||
}))
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
).omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
});
|
||||
@@ -23,11 +23,11 @@
|
||||
export let ausweis: BedarfsausweisWohnenClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
|
||||
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
|
||||
let aufnahme = ausweis.aufnahme || {};
|
||||
let gebaeude =
|
||||
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
|
||||
ausweis.aufnahme?.objekt || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] =
|
||||
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten
|
||||
ausweis.aufnahme?.objekt
|
||||
?.gebaeude_bilder || [];
|
||||
|
||||
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];
|
||||
@@ -54,7 +54,7 @@
|
||||
// const result = await verbrauchsausweisWohnenSpeichern(
|
||||
// ausweis,
|
||||
// gebaeude,
|
||||
// gebaeude_aufnahme_allgemein,
|
||||
// aufnahme,
|
||||
// images,
|
||||
// user
|
||||
// );
|
||||
@@ -63,7 +63,7 @@
|
||||
// // Sonst müsste er alles neu eingeben...
|
||||
// ausweis.uid = result.uid;
|
||||
// gebaeude.uid = result.gebaeude_uid;
|
||||
// gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid;
|
||||
// aufnahme.uid = result.gebaeude_aufnahme_uid;
|
||||
// window.history.pushState(
|
||||
// {},
|
||||
// "",
|
||||
@@ -153,8 +153,8 @@
|
||||
<div class="w-full rounded-lg border-gray/35 border-2 relative px-4">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:gebaeude
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:objekt={gebaeude}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -165,8 +165,8 @@
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<Ausweisart
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:objekt={gebaeude}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/>
|
||||
</Bereich>
|
||||
@@ -177,7 +177,7 @@
|
||||
<Bereich
|
||||
bereich="B"
|
||||
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
|
||||
><GebaeudeDaten bind:gebaeude_aufnahme_allgemein /></Bereich
|
||||
><GebaeudeDaten bind:aufnahme /></Bereich
|
||||
>
|
||||
|
||||
<hr />
|
||||
@@ -1360,7 +1360,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
|
||||
<BilderZusatzsysteme
|
||||
{ausweis}
|
||||
{gebaeude}
|
||||
{gebaeude_aufnahme_allgemein}
|
||||
{aufnahme}
|
||||
{images}
|
||||
/>
|
||||
<hr />
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
<div class="flex flex-col gap-4">
|
||||
{#each ausweise as ausweis}
|
||||
<div class="rounded-lg border p-2 flex flex-row items-center justify-between">
|
||||
<h2 class="text-black">{ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.adresse}</h2>
|
||||
<h2 class="text-black">{ausweis.aufnahme.objekt.adresse}</h2>
|
||||
<button class="btn btn-square btn-ghost p-1.5" on:click={() => {
|
||||
changeInputs(ausweis)
|
||||
}}><Check size={20}/></button>
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
export let title;
|
||||
export let bullets;
|
||||
|
||||
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
|
||||
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
|
||||
let aufnahme = ausweis.aufnahme || {};
|
||||
let gebaeude = ausweis.aufnahme?.objekt || {};
|
||||
|
||||
let services = [
|
||||
{
|
||||
@@ -58,8 +58,8 @@
|
||||
|
||||
let prices: number[] = [];
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.ausweisart) {
|
||||
prices = PRICES[ausweis.gebaeude_aufnahme_allgemein.ausweisart];
|
||||
if (ausweis.aufnahme.ausweisart) {
|
||||
prices = PRICES[ausweis.aufnahme.ausweisart];
|
||||
}
|
||||
|
||||
let basePrice: number = prices[0];
|
||||
@@ -102,8 +102,8 @@
|
||||
<div id="performance-box" class="w-full box relative px-4 order-2 2xl:order-1 self-stretch grid grid-cols-1">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:gebaeude
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:objekt={gebaeude}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -47,8 +47,8 @@
|
||||
|
||||
let prices: number[] = [];
|
||||
|
||||
if (ausweis.gebaeude_aufnahme_allgemein.ausweisart) {
|
||||
prices = PRICES[ausweis.gebaeude_aufnahme_allgemein.ausweisart];
|
||||
if (ausweis.aufnahme.ausweisart) {
|
||||
prices = PRICES[ausweis.aufnahme.ausweisart];
|
||||
}
|
||||
|
||||
let basePrice: number = prices[0];
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
import SanierungszustandWaermedammung from "#components/Ausweis/SanierungszustandWaermedammung.svelte";
|
||||
import AusweisPreviewContainer from "#components/Ausweis/AusweisPreviewContainer.svelte";
|
||||
|
||||
import Bereich from "#labels/Bereich.svelte";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import HelpLabel from "#components/HelpLabel.svelte";
|
||||
import Verbrauch from "#components/Ausweis/Verbrauch.svelte";
|
||||
import StromVerbrauch from "#components/Ausweis/StromVerbrauch.svelte";
|
||||
@@ -35,9 +35,9 @@
|
||||
|
||||
export let Energieausweis = "Verbrauchsausweis Gewerbe";
|
||||
|
||||
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
|
||||
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || [];
|
||||
let aufnahme = ausweis.aufnahme || {};
|
||||
let gebaeude = ausweis.aufnahme?.objekt || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.aufnahme?.objekt?.gebaeude_bilder || [];
|
||||
|
||||
function automatischAusfüllen() {
|
||||
}
|
||||
@@ -46,7 +46,7 @@
|
||||
const result = await verbrauchsausweisWohnenSpeichern(
|
||||
ausweis,
|
||||
gebaeude,
|
||||
gebaeude_aufnahme_allgemein,
|
||||
aufnahme,
|
||||
images,
|
||||
user
|
||||
);
|
||||
@@ -56,7 +56,7 @@
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid;
|
||||
gebaeude.uid = result.gebaeude_uid;
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid;
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid;
|
||||
window.history.pushState(
|
||||
{},
|
||||
"",
|
||||
@@ -76,8 +76,8 @@
|
||||
<div id="performance-box" class="w-full box relative px-4 order-2 2xl:order-1 self-stretch grid grid-cols-1">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:gebaeude
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:objekt={gebaeude}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -104,9 +104,9 @@
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<Ausweisart
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
{Energieausweis}
|
||||
ausweisart={Energieausweis}
|
||||
/>
|
||||
</Bereich>
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
|
||||
>
|
||||
<GebaeudeDaten
|
||||
bind:gebaeude_aufnahme_allgemein />
|
||||
bind:aufnahme />
|
||||
</Bereich
|
||||
>
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
>
|
||||
<StromVerbrauch
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
/>
|
||||
</Bereich>
|
||||
@@ -151,7 +151,7 @@
|
||||
<Bereich
|
||||
bereich="E"
|
||||
title="Eingabe von Gebäudeteil, Lüftung, Kühlung und Leerstand"
|
||||
><LueftungundLeerstand bind:gebaeude_aufnahme_allgemein /></Bereich
|
||||
><LueftungundLeerstand bind:aufnahme /></Bereich
|
||||
>
|
||||
|
||||
<!-- F Angaben zur Heizungsanlage -->
|
||||
@@ -160,7 +160,7 @@
|
||||
><SanierungszustandHeizungsanlage
|
||||
bind:images
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -171,7 +171,7 @@
|
||||
><SanierungszustandFensterTueren
|
||||
bind:images
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -181,7 +181,7 @@
|
||||
><SanierungszustandWaermedammung
|
||||
bind:images
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -202,7 +202,7 @@
|
||||
bind:images
|
||||
bind:user
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
>
|
||||
</ButtonWeiterHilfe>
|
||||
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
<script lang="ts">
|
||||
import { BenutzerClient, GebaeudeAufnahmeClient, GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { addNotification, updateNotification } from "@ibcornelsen/ui";
|
||||
import { validateAccessTokenClient } from "../../client/lib/validateAccessToken.js";
|
||||
import { client } from "src/trpc.js";
|
||||
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
|
||||
import Overlay from "#components/Overlay.svelte";
|
||||
import { validateAccessTokenClient } from "#client/lib/validateAccessToken.js";
|
||||
import { verbrauchsausweisWohnenSpeichern } from "#client/lib/verbrauchsausweisWohnenSpeichern.js";
|
||||
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { addNotification, updateNotification } from "#components/Notifications/index.js";
|
||||
import Overlay from "#components/Overlay.svelte";
|
||||
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
import { api } from "astro-typesafe-api/client"
|
||||
|
||||
export let objekt: ObjektClient;
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let user: BenutzerClient;
|
||||
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
|
||||
async function bilderHochladen() {
|
||||
// Alle Bilder hochladen
|
||||
@@ -27,17 +28,20 @@
|
||||
type: "info"
|
||||
})
|
||||
for (let i = 0; i < images.length; i++) {
|
||||
const image = images[i];
|
||||
const image = images[i];
|
||||
if (image.uid) {
|
||||
// Bild wurde bereits hochgeladen, wir müssen es also nicht nochmal hochladen.
|
||||
continue
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await client.v1.bilder.upload.mutate({
|
||||
const response = await api.objekt._uid.bilder.PUT.fetch({
|
||||
base64: image.base64,
|
||||
kategorie: image.kategorie,
|
||||
gebaeude_uid: gebaeude.uid
|
||||
kategorie: image.kategorie
|
||||
}, {
|
||||
params: {
|
||||
uid: objekt.uid
|
||||
}
|
||||
})
|
||||
|
||||
image.uid = response.uid
|
||||
@@ -75,8 +79,8 @@
|
||||
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
|
||||
try {
|
||||
const response = await verbrauchsausweisWohnenSpeichern(ausweis,
|
||||
gebaeude,
|
||||
gebaeude_aufnahme_allgemein,
|
||||
objekt,
|
||||
aufnahme,
|
||||
images,
|
||||
user)
|
||||
|
||||
@@ -84,22 +88,22 @@
|
||||
await bilderHochladen();
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = response.uid;
|
||||
gebaeude.uid = response.gebaeude_uid;
|
||||
gebaeude_aufnahme_allgemein.uid = response.gebaeude_aufnahme_uid;
|
||||
ausweis.uid = response.uid_ausweis;
|
||||
objekt.uid = response.uid_objekt;
|
||||
aufnahme.uid = response.uid_aufnahme;
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
return false;
|
||||
} catch (e: any) {
|
||||
await client.v1.tickets.erstellen.mutate({
|
||||
await api.ticket.PUT.fetch({
|
||||
titel: "Ausweis konnte nicht gespeichert werden",
|
||||
beschreibung: e.stack,
|
||||
email: user.email ?? "",
|
||||
metadata: JSON.stringify({
|
||||
ausweis,
|
||||
gebaeude
|
||||
gebaeude: objekt
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -30,48 +30,48 @@
|
||||
import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js";
|
||||
|
||||
// TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann
|
||||
// wenn gebaeude_aufnahme_allgemein oder gebaeude_stammdaten nicht existiert...
|
||||
// wenn aufnahme oder objekt nicht existiert...
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
|
||||
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
|
||||
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || [];
|
||||
let aufnahme = ausweis.aufnahme || {};
|
||||
let gebaeude = ausweis.aufnahme?.objekt || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.aufnahme?.objekt?.gebaeude_bilder || [];
|
||||
|
||||
async function spaeterWeitermachen() {
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user);
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, aufnahme, images, user);
|
||||
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid
|
||||
gebaeude.uid = result.gebaeude_uid
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${result.uid}`);
|
||||
speichernOverlayHidden = false;
|
||||
}
|
||||
}
|
||||
|
||||
function automatischAusfüllen() {
|
||||
gebaeude_aufnahme_allgemein.baujahr_gebaeude = [1962];
|
||||
gebaeude_aufnahme_allgemein.baujahr_heizung = [1952];
|
||||
gebaeude_aufnahme_allgemein.saniert = true;
|
||||
gebaeude_aufnahme_allgemein.einheiten = 1;
|
||||
aufnahme.baujahr_gebaeude = [1962];
|
||||
aufnahme.baujahr_heizung = [1952];
|
||||
aufnahme.saniert = true;
|
||||
aufnahme.einheiten = 1;
|
||||
ausweis.ausstellgrund = "Vermietung";
|
||||
ausweis.verbrauch_1 = 15000;
|
||||
ausweis.verbrauch_2 = 14000;
|
||||
ausweis.verbrauch_3 = 16000;
|
||||
gebaeude_aufnahme_allgemein.flaeche = 152;
|
||||
gebaeude_aufnahme_allgemein.nutzflaeche = 172;
|
||||
aufnahme.flaeche = 152;
|
||||
aufnahme.nutzflaeche = 172;
|
||||
ausweis.keller_beheizt = true;
|
||||
gebaeude_aufnahme_allgemein.brennstoff_1 = "Erdgas H";
|
||||
aufnahme.brennstoff_1 = "Erdgas H";
|
||||
ausweis.einheit_1 = "kWh";
|
||||
ausweis.anteil_warmwasser_1 = 18;
|
||||
ausweis.startdatum = moment("01.01.2019").toDate();
|
||||
gebaeude_aufnahme_allgemein.plz = "21039";
|
||||
gebaeude_aufnahme_allgemein.ort = "Hamburg";
|
||||
gebaeude_aufnahme_allgemein.adresse = "Curslacker Deich 170";
|
||||
gebaeude_aufnahme_allgemein.gebaeudeteil = "Gesamtgebäude";
|
||||
aufnahme.plz = "21039";
|
||||
aufnahme.ort = "Hamburg";
|
||||
aufnahme.adresse = "Curslacker Deich 170";
|
||||
aufnahme.gebaeudeteil = "Gesamtgebäude";
|
||||
|
||||
gebaeude = gebaeude;
|
||||
ausweis = ausweis;
|
||||
@@ -80,14 +80,14 @@
|
||||
|
||||
async function ausweisAbschicken(e: SubmitEvent) {
|
||||
if (e && e.preventDefault) e.preventDefault();
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user);
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, aufnahme, images, user);
|
||||
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid
|
||||
gebaeude.uid = result.gebaeude_uid
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${result.uid}`);
|
||||
window.location.href = `/kundendaten?uid=${result.uid}`;
|
||||
}
|
||||
@@ -97,12 +97,12 @@
|
||||
let speichernOverlayHidden = true;
|
||||
|
||||
$: {
|
||||
if (gebaeude_aufnahme_allgemein.saniert
|
||||
&& gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt === undefined
|
||||
&& gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt === undefined) {
|
||||
if (aufnahme.saniert
|
||||
&& aufnahme.oberste_geschossdecke_gedaemmt === undefined
|
||||
&& aufnahme.dachgeschoss_gedaemmt === undefined) {
|
||||
|
||||
gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt = true;
|
||||
gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt = true;
|
||||
aufnahme.oberste_geschossdecke_gedaemmt = true;
|
||||
aufnahme.dachgeschoss_gedaemmt = true;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -127,8 +127,8 @@
|
||||
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:gebaeude
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:objekt={gebaeude}
|
||||
/>
|
||||
</div>
|
||||
|
||||
@@ -153,8 +153,8 @@
|
||||
<Label>A - Prüfung der Ausweisart</Label>
|
||||
|
||||
<Ausweisart
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:objekt={gebaeude}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/>
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
required
|
||||
data-msg-minlength="min. 5 Zeichen"
|
||||
data-msg-maxlength="max. 40 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.adresse}
|
||||
bind:value={aufnahme.adresse}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -189,8 +189,8 @@
|
||||
<!-- PLZ -->
|
||||
<div class="form-group col-md-4 PLZ">
|
||||
<ZipSearch
|
||||
bind:zip={gebaeude_aufnahme_allgemein.plz}
|
||||
bind:city={gebaeude_aufnahme_allgemein.ort}
|
||||
bind:zip={aufnahme.plz}
|
||||
bind:city={aufnahme.ort}
|
||||
name="plz"
|
||||
/>
|
||||
</div>
|
||||
@@ -204,7 +204,7 @@
|
||||
name="ort"
|
||||
data-test="ort"
|
||||
readonly={true}
|
||||
bind:value={gebaeude_aufnahme_allgemein.ort}
|
||||
bind:value={aufnahme.ort}
|
||||
type="text"
|
||||
/>
|
||||
</div>
|
||||
@@ -227,7 +227,7 @@
|
||||
autocomplete="off"
|
||||
data-rule-minlength="2"
|
||||
data-msg-minlength="min. 2 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.flaeche}
|
||||
bind:value={aufnahme.flaeche}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -240,7 +240,7 @@
|
||||
name="keller"
|
||||
data-test="keller"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.keller}
|
||||
bind:value={aufnahme.keller}
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
<option value={Enums.Heizungsstatus.NICHT_VORHANDEN}
|
||||
@@ -263,7 +263,7 @@
|
||||
<select
|
||||
name="dachgeschoss"
|
||||
data-test="dachgeschoss"
|
||||
bind:value={gebaeude_aufnahme_allgemein.dachgeschoss}
|
||||
bind:value={aufnahme.dachgeschoss}
|
||||
required
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
@@ -299,7 +299,7 @@
|
||||
autocomplete="off"
|
||||
data-rule-minlength="2"
|
||||
data-msg-minlength="min. 2 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.nutzflaeche}
|
||||
bind:value={aufnahme.nutzflaeche}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -312,7 +312,7 @@
|
||||
<div class="GRB">
|
||||
<Verbrauch
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
/>
|
||||
</div>
|
||||
@@ -455,7 +455,7 @@
|
||||
<select
|
||||
name="gebaeudetyp"
|
||||
data-test="gebaeudetyp"
|
||||
bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp}
|
||||
bind:value={aufnahme.gebaeudetyp}
|
||||
required
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
@@ -499,7 +499,7 @@
|
||||
<select
|
||||
name="gebaeudeteil"
|
||||
data-test="gebaeudeteil"
|
||||
bind:value={gebaeude_aufnahme_allgemein.gebaeudeteil}
|
||||
bind:value={aufnahme.gebaeudeteil}
|
||||
required
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
@@ -520,7 +520,7 @@
|
||||
name="lueftung"
|
||||
data-test="lueftung"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.lueftung}
|
||||
bind:value={aufnahme.lueftung}
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
<option value="Fensterlüftung">Fensterlüftung</option>
|
||||
@@ -546,7 +546,7 @@
|
||||
name="kuehlung"
|
||||
data-test="kuehlung"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.kuehlung}
|
||||
bind:value={aufnahme.kuehlung}
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
<option value="1">vorhanden</option>
|
||||
@@ -568,7 +568,7 @@
|
||||
data-test="leerstand"
|
||||
maxlength="2"
|
||||
type="number"
|
||||
bind:value={gebaeude_aufnahme_allgemein.leerstand}
|
||||
bind:value={aufnahme.leerstand}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -580,7 +580,7 @@
|
||||
>F - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des
|
||||
Gebäudes</Label
|
||||
>
|
||||
<BilderZusatzsysteme bind:images bind:gebaeude bind:gebaeude_aufnahme_allgemein bind:ausweis />
|
||||
<BilderZusatzsysteme bind:images bind:gebaeude bind:aufnahme bind:ausweis />
|
||||
<hr />
|
||||
<div class="flex flex-row justify-between">
|
||||
<Hilfe />
|
||||
@@ -596,7 +596,7 @@
|
||||
</RawNotification>
|
||||
{/each}
|
||||
|
||||
{#if auditBedarfsausweisBenoetigt(ausweis, gebaeude_aufnahme_allgemein)}
|
||||
{#if auditBedarfsausweisBenoetigt(ausweis, aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Bedarfsausweis benötigt!",
|
||||
@@ -612,7 +612,7 @@
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#await auditPlzNichtErkannt(gebaeude_aufnahme_allgemein) then result}
|
||||
{#await auditPlzNichtErkannt(objekt) then result}
|
||||
{#if result}
|
||||
<RawNotification
|
||||
notification={{
|
||||
@@ -630,7 +630,7 @@
|
||||
{/if}
|
||||
{/await}
|
||||
|
||||
{#if auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditHeizungGebaeudeBaujahr(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -639,7 +639,7 @@
|
||||
dismissable: true,
|
||||
onUserDismiss: () => {
|
||||
hidden.add(AuditType.HEIZUNG_GEBAEUDE_BAUJAHR);
|
||||
gebaeude_aufnahme_allgemein = gebaeude_aufnahme_allgemein;
|
||||
aufnahme = aufnahme;
|
||||
},
|
||||
type: "warning",
|
||||
}}
|
||||
@@ -649,7 +649,7 @@
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#if auditHeizungJuengerDreiJahre(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditHeizungJuengerDreiJahre(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -719,7 +719,7 @@
|
||||
{/if}
|
||||
{/await}
|
||||
|
||||
{#if auditWohnFlaeche(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditWohnFlaeche(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -758,7 +758,7 @@
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#if auditLeerStand(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditLeerStand(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -778,7 +778,7 @@
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#if auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein).length > 0}
|
||||
{#if auditVerbrauchAbweichung(ausweis, aufnahme).length > 0}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -794,14 +794,14 @@
|
||||
>
|
||||
Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(
|
||||
ausweis,
|
||||
gebaeude_aufnahme_allgemein,
|
||||
)[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein)[1]} beträgt mehr
|
||||
aufnahme,
|
||||
)[0]} und {auditVerbrauchAbweichung(ausweis, aufnahme)[1]} beträgt mehr
|
||||
als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher,
|
||||
dass das stimmt?
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#await auditEndEnergie(ausweis, gebaeude, gebaeude_aufnahme_allgemein) then result}
|
||||
{#await auditEndEnergie(ausweis, gebaeude, aufnahme) then result}
|
||||
{#if result}
|
||||
<RawNotification
|
||||
notification={{
|
||||
@@ -823,7 +823,7 @@
|
||||
{/if}
|
||||
{/await}
|
||||
|
||||
{#if auditWohnflaecheGroesserGesamtflaeche(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditWohnflaecheGroesserGesamtflaeche(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
|
||||
@@ -47,41 +47,39 @@
|
||||
VerbrauchsausweisWohnenClient,
|
||||
BenutzerClient,
|
||||
UploadedGebaeudeBild,
|
||||
ObjektClient,
|
||||
AufnahmeClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js";
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
|
||||
// TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann
|
||||
// wenn gebaeude_aufnahme_allgemein oder gebaeude_stammdaten nicht existiert...
|
||||
// wenn aufnahme oder objekt nicht existiert...
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let objekt: ObjektClient
|
||||
export let aufnahme: AufnahmeClient
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
|
||||
let aufnahme = ausweis.aufnahme || {};
|
||||
let objekt =
|
||||
ausweis.aufnahme?.objekt || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] =
|
||||
ausweis.aufnahme?.objekt
|
||||
?.gebaeude_bilder || [];
|
||||
export let bilder: UploadedGebaeudeBild[] = []
|
||||
|
||||
async function spaeterWeitermachen() {
|
||||
const result = await verbrauchsausweisWohnenSpeichern(
|
||||
ausweis,
|
||||
objekt,
|
||||
aufnahme,
|
||||
images,
|
||||
bilder,
|
||||
user
|
||||
);
|
||||
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid;
|
||||
objekt.uid = result.gebaeude_uid;
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid;
|
||||
ausweis.uid = result.uid_ausweis;
|
||||
objekt.uid = result.uid_objekt;
|
||||
aufnahme.uid = result.uid_aufnahme;
|
||||
window.history.pushState(
|
||||
{},
|
||||
"",
|
||||
`${location.pathname}?uid=${result.uid}`
|
||||
`${location.pathname}?uid=${result.uid_ausweis}`
|
||||
);
|
||||
speichernOverlayHidden = false;
|
||||
}
|
||||
@@ -126,22 +124,22 @@
|
||||
ausweis,
|
||||
objekt,
|
||||
aufnahme,
|
||||
images,
|
||||
bilder,
|
||||
user
|
||||
);
|
||||
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid;
|
||||
objekt.uid = result.gebaeude_uid;
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid;
|
||||
ausweis.uid = result.uid_ausweis;
|
||||
objekt.uid = result.uid_objekt;
|
||||
aufnahme.uid = result.uid_aufnahme;
|
||||
window.history.pushState(
|
||||
{},
|
||||
"",
|
||||
`${location.pathname}?uid=${result.uid}`
|
||||
`${location.pathname}?uid=${result.uid_ausweis}`
|
||||
);
|
||||
window.location.href = `/kundendaten?uid=${result.uid}`;
|
||||
window.location.href = `/kundendaten?uid=${result.uid_ausweis}`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,6 +158,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
const ausweisart: Enums.Ausweisart = "VerbrauchsausweisWohnen"
|
||||
</script>
|
||||
|
||||
<Overlay bind:hidden={speichernOverlayHidden}>
|
||||
@@ -186,16 +185,16 @@
|
||||
<div id="performance-box" class="w-full box relative px-4 order-2 2xl:order-1 self-stretch grid grid-cols-1">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:gebaeude={objekt}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:objekt={objekt}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="progress-box" class="w-full box relative px-4 py-3 text-center order-1 2xl:order-2 self-stretch">
|
||||
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">{Energieausweis} {PRICES.VerbrauchsausweisWohnen[0]} €</h2>
|
||||
<ProgressBar progress={0} />
|
||||
<h2 class="text-primary text-xl">{ausweisart} {PRICES.VerbrauchsausweisWohnen[0]} €</h2>
|
||||
<Progressbar progress={0} />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -211,10 +210,10 @@
|
||||
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<Ausweisart
|
||||
bind:gebaeude={objekt}
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:objekt={objekt}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
{Energieausweis}
|
||||
{ausweisart}
|
||||
/>
|
||||
</Bereich>
|
||||
|
||||
@@ -223,7 +222,7 @@
|
||||
<Bereich
|
||||
bereich="B"
|
||||
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
|
||||
><GebaeudeDaten bind:gebaeude_aufnahme_allgemein={aufnahme} /></Bereich
|
||||
><GebaeudeDaten bind:aufnahme={aufnahme} /></Bereich
|
||||
>
|
||||
|
||||
<!-- C Eingabe von 3 zusammenhängenden Verbrauchsjahren -->
|
||||
@@ -233,7 +232,7 @@
|
||||
title="Eingabe von 3 zusammenhängenden Verbrauchsjahren"
|
||||
><Verbrauch
|
||||
bind:gebaeude={objekt}
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -251,16 +250,16 @@
|
||||
<Bereich
|
||||
bereich="E"
|
||||
title="Eingabe von Gebäudeteil, Lüftung, Kühlung und Leerstand"
|
||||
><LueftungundLeerstand bind:gebaeude_aufnahme_allgemein={aufnahme} /></Bereich
|
||||
><LueftungundLeerstand bind:aufnahme={aufnahme} /></Bereich
|
||||
>
|
||||
|
||||
<!-- F Angaben zur Heizungsanlage -->
|
||||
|
||||
<Bereich bereich="F" title="Angaben zur Heizunganlage"
|
||||
><SanierungszustandHeizungsanlage
|
||||
bind:images
|
||||
bind:images={bilder}
|
||||
bind:gebaeude={objekt}
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -269,9 +268,9 @@
|
||||
|
||||
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
|
||||
><SanierungszustandFensterTueren
|
||||
bind:images
|
||||
bind:images={bilder}
|
||||
bind:gebaeude={objekt}
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -279,9 +278,9 @@
|
||||
|
||||
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
|
||||
><SanierungszustandWaermedammung
|
||||
bind:images
|
||||
bind:images={bilder}
|
||||
bind:gebaeude={objekt}
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/></Bereich
|
||||
>
|
||||
@@ -290,7 +289,7 @@
|
||||
|
||||
<Bereich bereich="I" title="Gebäudebild und Energieausweis PDF Vorschau"
|
||||
><AusweisPreviewContainer
|
||||
bind:images
|
||||
bind:images={bilder}
|
||||
bind:ausweis
|
||||
bind:gebaeude={objekt}
|
||||
/></Bereich
|
||||
@@ -299,10 +298,10 @@
|
||||
|
||||
<ButtonWeiterHilfe {spaeterWeitermachen}
|
||||
bind:ausweis
|
||||
bind:images
|
||||
bind:images={bilder}
|
||||
bind:user
|
||||
bind:gebaeude={objekt}
|
||||
bind:gebaeude_aufnahme_allgemein={aufnahme}
|
||||
bind:aufnahme={aufnahme}
|
||||
>
|
||||
</ButtonWeiterHilfe>
|
||||
|
||||
@@ -364,7 +363,7 @@
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#await auditPlzNichtErkannt(aufnahme) then result}
|
||||
{#await auditPlzNichtErkannt(objekt) then result}
|
||||
{#if result}
|
||||
<RawNotification
|
||||
notification={{
|
||||
|
||||
@@ -31,48 +31,48 @@
|
||||
import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js";
|
||||
|
||||
// TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann
|
||||
// wenn gebaeude_aufnahme_allgemein oder gebaeude_stammdaten nicht existiert...
|
||||
// wenn aufnahme oder objekt nicht existiert...
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
|
||||
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
|
||||
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || [];
|
||||
let aufnahme = ausweis.aufnahme || {};
|
||||
let gebaeude = ausweis.aufnahme?.objekt || {};
|
||||
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.aufnahme?.objekt?.gebaeude_bilder || [];
|
||||
|
||||
async function spaeterWeitermachen() {
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user);
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, aufnahme, images, user);
|
||||
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid
|
||||
gebaeude.uid = result.gebaeude_uid
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${result.uid}`);
|
||||
speichernOverlayHidden = false;
|
||||
}
|
||||
}
|
||||
|
||||
function automatischAusfüllen() {
|
||||
gebaeude_aufnahme_allgemein.baujahr_gebaeude = [1962];
|
||||
gebaeude_aufnahme_allgemein.baujahr_heizung = [1952];
|
||||
gebaeude_aufnahme_allgemein.saniert = true;
|
||||
gebaeude_aufnahme_allgemein.einheiten = 1;
|
||||
aufnahme.baujahr_gebaeude = [1962];
|
||||
aufnahme.baujahr_heizung = [1952];
|
||||
aufnahme.saniert = true;
|
||||
aufnahme.einheiten = 1;
|
||||
ausweis.ausstellgrund = "Vermietung";
|
||||
ausweis.verbrauch_1 = 15000;
|
||||
ausweis.verbrauch_2 = 14000;
|
||||
ausweis.verbrauch_3 = 16000;
|
||||
gebaeude_aufnahme_allgemein.flaeche = 152;
|
||||
gebaeude_aufnahme_allgemein.nutzflaeche = 172;
|
||||
aufnahme.flaeche = 152;
|
||||
aufnahme.nutzflaeche = 172;
|
||||
ausweis.keller_beheizt = true;
|
||||
gebaeude_aufnahme_allgemein.brennstoff_1 = "Erdgas H";
|
||||
aufnahme.brennstoff_1 = "Erdgas H";
|
||||
ausweis.einheit_1 = "kWh";
|
||||
ausweis.anteil_warmwasser_1 = 18;
|
||||
ausweis.startdatum = moment("01.01.2019").toDate();
|
||||
gebaeude_aufnahme_allgemein.plz = "21039";
|
||||
gebaeude_aufnahme_allgemein.ort = "Hamburg";
|
||||
gebaeude_aufnahme_allgemein.adresse = "Curslacker Deich 170";
|
||||
gebaeude_aufnahme_allgemein.gebaeudeteil = "Gesamtgebäude";
|
||||
aufnahme.plz = "21039";
|
||||
aufnahme.ort = "Hamburg";
|
||||
aufnahme.adresse = "Curslacker Deich 170";
|
||||
aufnahme.gebaeudeteil = "Gesamtgebäude";
|
||||
|
||||
gebaeude = gebaeude;
|
||||
ausweis = ausweis;
|
||||
@@ -81,14 +81,14 @@
|
||||
|
||||
async function ausweisAbschicken(e: SubmitEvent) {
|
||||
if (e && e.preventDefault) e.preventDefault();
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user);
|
||||
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, aufnahme, images, user);
|
||||
|
||||
if (result !== null) {
|
||||
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
|
||||
// Sonst müsste er alles neu eingeben...
|
||||
ausweis.uid = result.uid
|
||||
gebaeude.uid = result.gebaeude_uid
|
||||
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid
|
||||
aufnahme.uid = result.gebaeude_aufnahme_uid
|
||||
window.history.pushState({}, "", `${location.pathname}?uid=${result.uid}`);
|
||||
window.location.href = `/kundendaten?uid=${result.uid}`;
|
||||
}
|
||||
@@ -98,12 +98,12 @@
|
||||
let speichernOverlayHidden = true;
|
||||
|
||||
$: {
|
||||
if (gebaeude_aufnahme_allgemein.saniert
|
||||
&& gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt === undefined
|
||||
&& gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt === undefined) {
|
||||
if (aufnahme.saniert
|
||||
&& aufnahme.oberste_geschossdecke_gedaemmt === undefined
|
||||
&& aufnahme.dachgeschoss_gedaemmt === undefined) {
|
||||
|
||||
gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt = true;
|
||||
gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt = true;
|
||||
aufnahme.oberste_geschossdecke_gedaemmt = true;
|
||||
aufnahme.dachgeschoss_gedaemmt = true;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:gebaeude
|
||||
/>
|
||||
</div>-->
|
||||
@@ -155,8 +155,8 @@ xs:grid-cols-2
|
||||
<div class="bereich-box">
|
||||
|
||||
<Ausweisart
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:objekt={gebaeude}
|
||||
bind:aufnahme={aufnahme}
|
||||
bind:ausweis
|
||||
/>
|
||||
|
||||
@@ -192,7 +192,7 @@ xs:grid-cols-2
|
||||
required
|
||||
data-msg-minlength="min. 5 Zeichen"
|
||||
data-msg-maxlength="max. 40 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.adresse}
|
||||
bind:value={aufnahme.adresse}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -201,8 +201,8 @@ xs:grid-cols-2
|
||||
<div class="PLZ">
|
||||
<Label>* PLZ</Label>
|
||||
<ZipSearch
|
||||
bind:zip={gebaeude_aufnahme_allgemein.plz}
|
||||
bind:city={gebaeude_aufnahme_allgemein.ort}
|
||||
bind:zip={aufnahme.plz}
|
||||
bind:city={aufnahme.ort}
|
||||
name="plz"
|
||||
/>
|
||||
</div>
|
||||
@@ -217,7 +217,7 @@ xs:grid-cols-2
|
||||
name="ort"
|
||||
data-test="ort"
|
||||
readonly={true}
|
||||
bind:value={gebaeude_aufnahme_allgemein.ort}
|
||||
bind:value={aufnahme.ort}
|
||||
type="text"
|
||||
/>
|
||||
</div>
|
||||
@@ -248,7 +248,7 @@ xs:grid-cols-2
|
||||
autocomplete="off"
|
||||
data-rule-minlength="2"
|
||||
data-msg-minlength="min. 2 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.flaeche}
|
||||
bind:value={aufnahme.flaeche}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -272,7 +272,7 @@ xs:grid-cols-2
|
||||
autocomplete="off"
|
||||
data-rule-minlength="2"
|
||||
data-msg-minlength="min. 2 Zeichen"
|
||||
bind:value={gebaeude_aufnahme_allgemein.nutzflaeche}
|
||||
bind:value={aufnahme.nutzflaeche}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -285,7 +285,7 @@ xs:grid-cols-2
|
||||
name="keller"
|
||||
data-test="keller"
|
||||
required
|
||||
bind:value={gebaeude_aufnahme_allgemein.keller}
|
||||
bind:value={aufnahme.keller}
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
<option value={Enums.Heizungsstatus.NICHT_VORHANDEN}
|
||||
@@ -308,7 +308,7 @@ xs:grid-cols-2
|
||||
<select
|
||||
name="dachgeschoss"
|
||||
data-test="dachgeschoss"
|
||||
bind:value={gebaeude_aufnahme_allgemein.dachgeschoss}
|
||||
bind:value={aufnahme.dachgeschoss}
|
||||
required
|
||||
>
|
||||
<option disabled>Bitte auswählen</option>
|
||||
@@ -345,7 +345,7 @@ xs:grid-cols-2
|
||||
|
||||
<Verbrauch
|
||||
bind:gebaeude
|
||||
bind:gebaeude_aufnahme_allgemein
|
||||
bind:aufnahme
|
||||
bind:ausweis
|
||||
/>
|
||||
</div>
|
||||
@@ -486,7 +486,7 @@ xs:grid-cols-2
|
||||
</RawNotification>
|
||||
{/each}
|
||||
|
||||
{#if auditBedarfsausweisBenoetigt(ausweis, gebaeude_aufnahme_allgemein)}
|
||||
{#if auditBedarfsausweisBenoetigt(ausweis, aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Bedarfsausweis benötigt!",
|
||||
@@ -502,7 +502,7 @@ xs:grid-cols-2
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#await auditPlzNichtErkannt(gebaeude_aufnahme_allgemein) then result}
|
||||
{#await auditPlzNichtErkannt(objekt) then result}
|
||||
{#if result}
|
||||
<RawNotification
|
||||
notification={{
|
||||
@@ -520,7 +520,7 @@ xs:grid-cols-2
|
||||
{/if}
|
||||
{/await}
|
||||
|
||||
{#if auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditHeizungGebaeudeBaujahr(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -529,7 +529,7 @@ xs:grid-cols-2
|
||||
dismissable: true,
|
||||
onUserDismiss: () => {
|
||||
hidden.add(AuditType.HEIZUNG_GEBAEUDE_BAUJAHR);
|
||||
gebaeude_aufnahme_allgemein = gebaeude_aufnahme_allgemein;
|
||||
aufnahme = aufnahme;
|
||||
},
|
||||
type: "warning",
|
||||
}}
|
||||
@@ -539,7 +539,7 @@ xs:grid-cols-2
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#if auditHeizungJuengerDreiJahre(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditHeizungJuengerDreiJahre(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -609,7 +609,7 @@ xs:grid-cols-2
|
||||
{/if}
|
||||
{/await}
|
||||
|
||||
{#if auditWohnFlaeche(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditWohnFlaeche(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -648,7 +648,7 @@ xs:grid-cols-2
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#if auditLeerStand(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditLeerStand(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -668,7 +668,7 @@ xs:grid-cols-2
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#if auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein).length > 0}
|
||||
{#if auditVerbrauchAbweichung(ausweis, aufnahme).length > 0}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
@@ -684,14 +684,14 @@ xs:grid-cols-2
|
||||
>
|
||||
Die Abweichung der Verbräuche zwischen Zeitraum {auditVerbrauchAbweichung(
|
||||
ausweis,
|
||||
gebaeude_aufnahme_allgemein,
|
||||
)[0]} und {auditVerbrauchAbweichung(ausweis, gebaeude_aufnahme_allgemein)[1]} beträgt mehr
|
||||
aufnahme,
|
||||
)[0]} und {auditVerbrauchAbweichung(ausweis, aufnahme)[1]} beträgt mehr
|
||||
als 30% und sie haben keinen Leerstand angegeben. Sind sie sich sicher,
|
||||
dass das stimmt?
|
||||
</RawNotification>
|
||||
{/if}
|
||||
|
||||
{#await auditEndEnergie(ausweis, gebaeude, gebaeude_aufnahme_allgemein) then result}
|
||||
{#await auditEndEnergie(ausweis, gebaeude, aufnahme) then result}
|
||||
{#if result}
|
||||
<RawNotification
|
||||
notification={{
|
||||
@@ -713,7 +713,7 @@ xs:grid-cols-2
|
||||
{/if}
|
||||
{/await}
|
||||
|
||||
{#if auditWohnflaecheGroesserGesamtflaeche(gebaeude_aufnahme_allgemein)}
|
||||
{#if auditWohnflaecheGroesserGesamtflaeche(aufnahme)}
|
||||
<RawNotification
|
||||
notification={{
|
||||
message: "Plausibilitätsprüfung",
|
||||
|
||||
@@ -1,9 +1,41 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { AufnahmeSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
fetch(input, context) {},
|
||||
input: AufnahmeSchema.omit({
|
||||
id: true,
|
||||
uid: true,
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
}),
|
||||
output: z.void(),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const { uid } = ctx.params
|
||||
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
benutzer_id: user.id
|
||||
},
|
||||
});
|
||||
|
||||
if (!aufnahme) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Aufnahme mit dieser UID existiert nicht oder gehört nicht dem aktuellen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
await prisma.aufnahme.update({
|
||||
where: {
|
||||
uid
|
||||
},
|
||||
data: input
|
||||
})
|
||||
},
|
||||
});
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
@@ -0,0 +1,59 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js"
|
||||
import { AufnahmeSchema, ObjektSchema, prisma } from "@ibcornelsen/database/server"
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server"
|
||||
import { z } from "zod"
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
input: z.object({
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
id: true,
|
||||
uid: true,
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
}).merge(z.object({
|
||||
baujahr_klima: z.array(z.number().int().positive()).optional()
|
||||
})),
|
||||
uid_objekt: z.string().uuid()
|
||||
}),
|
||||
output: z.object({
|
||||
uid: z.string().uuid()
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const objekt = await prisma.objekt.findUnique({
|
||||
where: {
|
||||
uid: input.uid_objekt,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Objekt konnte nicht gefunden werden oder gehört nicht diesem Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
const aufnahme = await prisma.aufnahme.create({
|
||||
data: {
|
||||
...input.aufnahme,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id
|
||||
}
|
||||
},
|
||||
objekt: {
|
||||
connect: {
|
||||
uid: input.uid_objekt
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
return {
|
||||
uid: aufnahme.uid
|
||||
}
|
||||
},
|
||||
})
|
||||
@@ -5,7 +5,7 @@ import { TokenType, encodeToken } from "../../../lib/auth/token.js";
|
||||
import { TRPCError } from "@trpc/server";
|
||||
import { defineApiRoute } from "astro-typesafe-api/server";
|
||||
|
||||
export const tRPC_V1_BenutzerGetAccessTokenProcedure = defineApiRoute({
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description:
|
||||
"Erstellt, basierend auf einem existierenden und gültigen Refresh Tokens, einen neuen Access Token, welcher zur Authentifizierung genutzt werden kann. Der resultierende Access Token ist nur 2 Tage gültig und muss danach neu generiert werden. Diese Funktion gibt ebenfalls einen neuen Refresh Token zurück, der alte wird dadurch invalidiert.",
|
||||
|
||||
77
src/pages/api/klimafaktoren.ts
Normal file
77
src/pages/api/klimafaktoren.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import { z } from "zod";
|
||||
import moment from "moment";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
plz: z.string().min(4).max(5),
|
||||
startdatum: z.coerce.date(),
|
||||
enddatum: z.coerce.date(),
|
||||
genauigkeit: z.enum(["months", "years"]),
|
||||
}),
|
||||
|
||||
output: z.array(
|
||||
z.object({
|
||||
month: z.number(),
|
||||
year: z.number(),
|
||||
klimafaktor: z.number(),
|
||||
})
|
||||
),
|
||||
|
||||
async fetch(input, ctx) {
|
||||
const start = moment(input.startdatum);
|
||||
const end = moment(input.enddatum);
|
||||
|
||||
if (start.isSameOrAfter(end)) {
|
||||
throw new APIError({
|
||||
code: "PRECONDITION_FAILED",
|
||||
message: "Das Startdatum kann nicht vor dem Enddatum liegen.",
|
||||
});
|
||||
}
|
||||
|
||||
const intervals = [];
|
||||
|
||||
let currentDate = start.clone();
|
||||
while (currentDate.isSameOrBefore(end)) {
|
||||
let copy = currentDate.clone();
|
||||
intervals.push(copy);
|
||||
currentDate.add(1, input.genauigkeit);
|
||||
}
|
||||
|
||||
let klimafaktoren = await prisma.klimafaktoren.findMany({
|
||||
where: {
|
||||
plz: input.plz,
|
||||
month: intervals[0].month(),
|
||||
OR: intervals.map((date) => {
|
||||
return {
|
||||
year: date.year(),
|
||||
};
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
if (!klimafaktoren) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message:
|
||||
"Die Klimafaktoren konnten nicht geladen werden. Das kann daran liegen, dass sie für diesen Zeitraum oder Ort nicht verfügbar sind.",
|
||||
});
|
||||
}
|
||||
|
||||
// NOTE: Sollten wir hier lieber den Output padden und trotzdem die gefundenen zurückgeben?
|
||||
if (klimafaktoren.length !== intervals.length) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message:
|
||||
"Für diesen Zeitraum konnten nicht alle Klimafaktoren gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return klimafaktoren.map((klimafaktor) => ({
|
||||
month: klimafaktor.month,
|
||||
year: klimafaktor.year,
|
||||
klimafaktor: klimafaktor.klimafaktor,
|
||||
}));
|
||||
},
|
||||
});
|
||||
122
src/pages/api/objekt/[uid]/bilder.ts
Normal file
122
src/pages/api/objekt/[uid]/bilder.ts
Normal file
@@ -0,0 +1,122 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { GebaeudeBilderSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "astro:content";
|
||||
import isBase64 from "is-base64";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
input: GebaeudeBilderSchema.pick({
|
||||
kategorie: true,
|
||||
}).merge(z.object({
|
||||
base64: z.string()
|
||||
})),
|
||||
output: z.object({
|
||||
uid: z.string({ description: "Die UID des Bildes." })
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const base64 = input.base64;
|
||||
|
||||
if (!isBase64(base64, { mimeRequired: true })) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Das Bild ist nicht base64 kodiert.",
|
||||
});
|
||||
}
|
||||
|
||||
let objekt = await prisma.objekt.findUnique({
|
||||
where: {
|
||||
uid: ctx.params.uid,
|
||||
benutzer_id: user.id
|
||||
},
|
||||
});
|
||||
|
||||
if (!objekt) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Objekt nicht gefunden oder gehört einem anderen Benutzer.",
|
||||
});
|
||||
}
|
||||
|
||||
const dataWithoutPrefix = base64.replace(
|
||||
/^data:image\/\w+;base64,/,
|
||||
""
|
||||
);
|
||||
const buffer = Buffer.from(dataWithoutPrefix, "base64");
|
||||
|
||||
const bild = await prisma.gebaeudeBilder.create({
|
||||
data: {
|
||||
kategorie: input.kategorie,
|
||||
objekt: {
|
||||
connect: {
|
||||
id: objekt.id,
|
||||
},
|
||||
},
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
});
|
||||
|
||||
const filePath = `/persistent/images/${bild.uid}.webp`;
|
||||
|
||||
try {
|
||||
// Wir optimieren das Bild und konvertieren es in WebP
|
||||
// TODO: Sharp scheint nicht zu funktionieren, wir müssen das nochmal testen
|
||||
// const optimizedBuffer = await sharp(buffer).webp({ quality: 80 }).toArray();
|
||||
|
||||
await Bun.write(filePath, buffer)
|
||||
} catch(e) {
|
||||
// Bild wurde nicht gespeichert, wir löschen den Eintrag wieder
|
||||
await prisma.gebaeudeBilder.delete({
|
||||
where: {
|
||||
uid: bild.uid
|
||||
}
|
||||
})
|
||||
// Und geben einen Fehler zurück
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Bild konnte nicht gespeichert werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
uid: bild.uid
|
||||
};
|
||||
},
|
||||
})
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
middleware: authorizationMiddleware,
|
||||
output: z.array(GebaeudeBilderSchema.pick({
|
||||
kategorie: true,
|
||||
uid: true
|
||||
})),
|
||||
async fetch(input, ctx, user) {
|
||||
const { uid } = ctx.params;
|
||||
|
||||
const objekt = await prisma.objekt.findUnique({
|
||||
where: {
|
||||
uid
|
||||
},
|
||||
select: {
|
||||
benutzer_id: true,
|
||||
gebaeude_bilder: {
|
||||
select: {
|
||||
kategorie: true,
|
||||
uid: true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt || objekt.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "FORBIDDEN",
|
||||
message: "Objekt existiert nicht oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
return objekt.gebaeude_bilder
|
||||
},
|
||||
})
|
||||
@@ -1,10 +1,44 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { ObjektSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
fetch(input, context) {},
|
||||
});
|
||||
input: ObjektSchema.omit({
|
||||
uid: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}),
|
||||
output: z.void(),
|
||||
headers: {
|
||||
"Authorization": z.string()
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.objekt.findUnique({
|
||||
where: {
|
||||
uid: ctx.params.uid,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Objekt konnte nicht gefunden werden."
|
||||
})
|
||||
}
|
||||
|
||||
await prisma.objekt.update({
|
||||
where: {
|
||||
uid: ctx.params.uid
|
||||
},
|
||||
data: input
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
@@ -24,8 +58,8 @@ export const GET = defineApiRoute({
|
||||
}
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
async fetch(input, ctx, user) {
|
||||
const { uid } = ctx.params;
|
||||
|
||||
const objekt = await prisma.objekt.findUnique({
|
||||
where: {
|
||||
@@ -3,9 +3,31 @@ import { ObjektSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const POST = defineApiRoute({
|
||||
fetch(input, context) {
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
input: ObjektSchema.omit({
|
||||
id: true,
|
||||
uid: true,
|
||||
benutzer_id: true
|
||||
}),
|
||||
output: z.object({
|
||||
uid: z.string().uuid()
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const objekt = await prisma.objekt.create({
|
||||
data: {
|
||||
...input,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
return {
|
||||
uid: objekt.uid
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
49
src/pages/api/postleitzahlen.ts
Normal file
49
src/pages/api/postleitzahlen.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { z } from "zod";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
plz: z.string().min(1).max(5),
|
||||
limit: z.number().int().max(50).min(1).default(10).optional(),
|
||||
}),
|
||||
output: z.array(
|
||||
z.object({
|
||||
plz: z.string().min(4).max(5),
|
||||
stadt: z.string(),
|
||||
bundesland: z.string(),
|
||||
landkreis: z.string(),
|
||||
lat: z.number(),
|
||||
lon: z.number(),
|
||||
})
|
||||
),
|
||||
async fetch(input, context) {
|
||||
const plz = input.plz;
|
||||
|
||||
const postleitzahlen = await prisma.postleitzahlen.findMany({
|
||||
where: {
|
||||
plz: {
|
||||
startsWith: plz,
|
||||
},
|
||||
},
|
||||
take: input.limit,
|
||||
select: {
|
||||
plz: true,
|
||||
stadt: true,
|
||||
bundesland: true,
|
||||
landkreis: true,
|
||||
lat: true,
|
||||
lon: true,
|
||||
},
|
||||
});
|
||||
|
||||
if (postleitzahlen.length === 0) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Postleitzahl nicht gefunden",
|
||||
});
|
||||
}
|
||||
|
||||
return postleitzahlen;
|
||||
},
|
||||
});
|
||||
73
src/pages/api/ticket.ts
Normal file
73
src/pages/api/ticket.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import { z } from "zod";
|
||||
import { TicketsSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { maybeAuthorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
meta: {
|
||||
contentTypes: ["application/json"],
|
||||
description:
|
||||
"Erstellt ein neues Support Ticket und weist den Ersteller diesem zu, falls ein Authorization Header mitgegeben wurde.",
|
||||
summary: "Erstellt ein neues Support Ticket.",
|
||||
tags: ["Tickets"],
|
||||
},
|
||||
input: TicketsSchema.omit({
|
||||
bearbeiter_id: true,
|
||||
benutzer_id: true,
|
||||
created_at: true,
|
||||
deleted_at: true,
|
||||
id: true,
|
||||
prioritaet: true,
|
||||
status: true,
|
||||
uid: true,
|
||||
updated_at: true,
|
||||
}),
|
||||
output: z.object({
|
||||
uid: z.string().uuid(),
|
||||
}),
|
||||
middleware: maybeAuthorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
if (user === null) {
|
||||
// Der Benutzer ist nicht authentifiziert.
|
||||
// Wir erstellen das Ticket anonym.
|
||||
const ticket = await prisma.tickets.create({
|
||||
data: {
|
||||
beschreibung: input.beschreibung,
|
||||
email: input.email,
|
||||
titel: input.titel,
|
||||
metadata: input.metadata,
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
uid: ticket.uid,
|
||||
};
|
||||
}
|
||||
|
||||
// Der Benutzer ist authentifiziert.
|
||||
// Wir verlinken den Benutzer und das Ticket.
|
||||
const ticket = await prisma.tickets.create({
|
||||
data: {
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id,
|
||||
},
|
||||
},
|
||||
beschreibung: input.beschreibung,
|
||||
email: input.email,
|
||||
titel: input.titel,
|
||||
metadata: input.metadata,
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
uid: ticket.uid,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -1,71 +0,0 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
fetch(input, context) {},
|
||||
});
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt ein spezifisches Gebäude des Benutzers zurück.",
|
||||
tags: ["Gebäude"],
|
||||
headers: {
|
||||
"Authorization": {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
where: {
|
||||
uid: input.uid,
|
||||
},
|
||||
include: {
|
||||
benutzer: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
objekt: {
|
||||
include: {
|
||||
gebaeude_bilder: true
|
||||
},
|
||||
},
|
||||
rechnungen: true,
|
||||
events: {
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
}
|
||||
},
|
||||
orderBy: {
|
||||
date: "asc"
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
if (!ausweis || (ausweis.benutzer_id !== null && ausweis.benutzer_id !== user.id)) {
|
||||
// Falls wir den Ausweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return ausweis
|
||||
},
|
||||
});
|
||||
117
src/pages/api/verbrauchsausweis-wohnen/[uid].ts
Normal file
117
src/pages/api/verbrauchsausweis-wohnen/[uid].ts
Normal file
@@ -0,0 +1,117 @@
|
||||
import { exclude } from "#lib/exclude.js";
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma, VerbrauchsausweisWohnenSchema } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
input: VerbrauchsausweisWohnenSchema.omit({
|
||||
uid: true,
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}),
|
||||
output: z.void(),
|
||||
headers: {
|
||||
"Authorization": z.string()
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
where: {
|
||||
uid: ctx.params.uid,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
await prisma.verbrauchsausweisWohnen.update({
|
||||
where: {
|
||||
uid: ctx.params.uid
|
||||
},
|
||||
data: input
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt ein spezifisches Gebäude des Benutzers zurück.",
|
||||
tags: ["Gebäude"],
|
||||
headers: {
|
||||
"Authorization": {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
output: VerbrauchsausweisWohnenSchema.merge(z.object({
|
||||
uid_aufnahme: z.string().uuid(),
|
||||
uid_objekt: z.string().uuid(),
|
||||
uid_benutzer: z.string().uuid().optional()
|
||||
})).omit({
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
console.log(uid);
|
||||
|
||||
|
||||
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
benutzer_id: user.id
|
||||
},
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
},
|
||||
aufnahme: {
|
||||
select: {
|
||||
uid: true,
|
||||
objekt: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!ausweis) {
|
||||
// Falls wir den Ausweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
uid_aufnahme: ausweis.aufnahme.uid,
|
||||
uid_objekt: ausweis.aufnahme.objekt.uid,
|
||||
uid_benutzer: ausweis.benutzer?.uid,
|
||||
...exclude(ausweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"])
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -1,27 +1,101 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { prisma, VerbrauchsausweisWohnenSchema } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
fetch(input, context) {},
|
||||
});
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
meta: {
|
||||
contentTypes: ["application/json"],
|
||||
description:
|
||||
"Erstellt einen neuen Verbrauchsausweis für Wohngebäude nach dem Schema der EnEV von 2016. Als Input wird ein bestehendes Gebäude benötigt. Falls keine UID einer bestehenden Gebäudeaufnahme mitgegeben wird, wird automatisch eine erstellt.",
|
||||
tags: ["Verbrauchsausweis Wohnen"],
|
||||
},
|
||||
input: z.object({
|
||||
ausweis: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
uid: true,
|
||||
aufnahme_id: true
|
||||
}),
|
||||
uid_aufnahme: z.string().uuid()
|
||||
}),
|
||||
output: z.object({
|
||||
uid: z.string().uuid(),
|
||||
objekt_uid: z.string().uuid(),
|
||||
aufnahme_uid: z.string().uuid(),
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
uid: input.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
if (!aufnahme || aufnahme.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "FORBIDDEN",
|
||||
message: "Aufnahme konnte nicht gefunden werden oder gehört nicht zu diesem Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
const createdAusweis = await prisma.verbrauchsausweisWohnen.create({
|
||||
data: {
|
||||
...input.ausweis,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id,
|
||||
},
|
||||
},
|
||||
aufnahme: {
|
||||
connect: {
|
||||
uid: aufnahme.uid,
|
||||
},
|
||||
},
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
aufnahme: {
|
||||
select: {
|
||||
uid: true,
|
||||
objekt: {
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
uid: createdAusweis.uid,
|
||||
objekt_uid: createdAusweis.aufnahme.objekt.uid,
|
||||
aufnahme_uid: createdAusweis.aufnahme.uid,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt ein spezifisches Gebäude des Benutzers zurück.",
|
||||
tags: ["Gebäude"],
|
||||
headers: {
|
||||
"Authorization": {
|
||||
Authorization: {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
@@ -37,7 +111,7 @@ export const GET = defineApiRoute({
|
||||
include: {
|
||||
objekt: {
|
||||
include: {
|
||||
gebaeude_bilder: true
|
||||
gebaeude_bilder: true,
|
||||
},
|
||||
},
|
||||
rechnungen: true,
|
||||
@@ -45,20 +119,23 @@ export const GET = defineApiRoute({
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
}
|
||||
uid: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
date: "asc"
|
||||
}
|
||||
}
|
||||
date: "asc",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (!ausweis || (ausweis.benutzer_id !== null && ausweis.benutzer_id !== user.id)) {
|
||||
if (
|
||||
!ausweis ||
|
||||
(ausweis.benutzer_id !== null && ausweis.benutzer_id !== user.id)
|
||||
) {
|
||||
// Falls wir den Ausweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
@@ -66,6 +143,6 @@ export const GET = defineApiRoute({
|
||||
});
|
||||
}
|
||||
|
||||
return ausweis
|
||||
return ausweis;
|
||||
},
|
||||
});
|
||||
|
||||
@@ -7,7 +7,7 @@ import { createCaller } from "#lib/caller";
|
||||
|
||||
const uid = Astro.url.searchParams.get("uid");
|
||||
let ausweis: Partial<BedarfsausweisWohnenClient> = {
|
||||
gebaeude_aufnahme_allgemein: { gebaeude_stammdaten: {} },
|
||||
aufnahme: { objekt: {} },
|
||||
energiequelle_2_nutzung: []
|
||||
} as Partial<BedarfsausweisWohnenClient>;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import { createCaller } from "#lib/caller";
|
||||
|
||||
const uid = Astro.url.searchParams.get("uid");
|
||||
let ausweis: VerbrauchsausweisGewerbeClient = {
|
||||
gebaeude_aufnahme_allgemein: { gebaeude_stammdaten: {} },
|
||||
aufnahme: { objekt: {} },
|
||||
} as VerbrauchsausweisGewerbeClient;
|
||||
|
||||
const caller = createCaller(Astro);
|
||||
|
||||
@@ -1,27 +1,56 @@
|
||||
---
|
||||
import AusweisLayout from "#layouts/AusweisLayoutDaten.astro";
|
||||
import VerbrauchsausweisWohnenModule from "#modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte";
|
||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
||||
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
||||
import { createCaller } from "../../../astro-typesafe-api-caller.js";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
|
||||
|
||||
const uid = Astro.url.searchParams.get("uid");
|
||||
let ausweis: VerbrauchsausweisWohnenClient = {
|
||||
aufnahme: { objekt: {} },
|
||||
} as VerbrauchsausweisWohnenClient;
|
||||
let ausweis: VerbrauchsausweisWohnenClient = {} as VerbrauchsausweisWohnenClient;
|
||||
let aufnahme: AufnahmeClient = {} as AufnahmeClient;
|
||||
let objekt: ObjektClient = {} as ObjektClient;
|
||||
let bilder: UploadedGebaeudeBild[] = []
|
||||
|
||||
const caller = await createCaller(Astro);
|
||||
const caller = createCaller(Astro);
|
||||
|
||||
if (uid) {
|
||||
try {
|
||||
ausweis = await caller["verbrauchsausweis-wohnen"]._id.GET.fetch(null, {
|
||||
ausweis = await caller["verbrauchsausweis-wohnen"]._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: "Basic "
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
id: "123"
|
||||
uid
|
||||
}
|
||||
});
|
||||
|
||||
aufnahme = await caller.aufnahme._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: ausweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
objekt = await caller.objekt._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: ausweis.uid_objekt
|
||||
}
|
||||
})
|
||||
|
||||
bilder = await caller.objekt._uid.bilder.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: ausweis.uid_objekt
|
||||
}
|
||||
})
|
||||
|
||||
if (!ausweis) {
|
||||
// Der Ausweis scheint nicht zu existieren.
|
||||
// Wir leiten auf die generische Ausweisseite ohne UID weiter.
|
||||
@@ -38,5 +67,5 @@ if (uid) {
|
||||
---
|
||||
|
||||
<AusweisLayout title="Verbrauchsausweis erstellen">
|
||||
<VerbrauchsausweisWohnenModule client:load ausweis={ausweis} />
|
||||
<VerbrauchsausweisWohnenModule client:load {ausweis} {objekt} {aufnahme} {bilder} />
|
||||
</AusweisLayout>
|
||||
|
||||
@@ -17,7 +17,7 @@ describe('Energieverbrauch', async () => {
|
||||
let missingKlimafaktoren: boolean = false;
|
||||
|
||||
test("Klimafaktoren", async () => {
|
||||
console.log("PLZ: " + ausweisNeu.gebaeude_aufnahme_allgemein.plz)
|
||||
console.log("PLZ: " + ausweisNeu.aufnahme.plz)
|
||||
console.log("Startdatum: " + ausweisNeu.startdatum)
|
||||
expect(berechnungen?.klimafaktoren).toHaveLength(3)
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user