Merge branch 'dev-moritz'
28
Makefile
@@ -1,9 +1,9 @@
|
|||||||
.PHONY: dev database api online-energieausweis all prod bun-install-database bun-install-api
|
.PHONY: dev database online-energieausweis all prod bun-install-database # api bun-install-api
|
||||||
|
|
||||||
online-energieausweis:
|
online-energieausweis:
|
||||||
bun run dev --host
|
bun run dev --host
|
||||||
|
|
||||||
dev: online-energieausweis api database
|
dev: database online-energieausweis # api
|
||||||
|
|
||||||
database:
|
database:
|
||||||
$(MAKE) -C ../database dev
|
$(MAKE) -C ../database dev
|
||||||
@@ -13,19 +13,19 @@ bun-install-database:
|
|||||||
bun link
|
bun link
|
||||||
bun install
|
bun install
|
||||||
|
|
||||||
bun-install-api: bun-install-database
|
# bun-install-api: bun-install-database
|
||||||
cd ../api
|
# cd ../api
|
||||||
bun install
|
# bun install
|
||||||
bun link @ibcornelsen/database
|
# bun link @ibcornelsen/database
|
||||||
|
|
||||||
api:
|
# api:
|
||||||
$(MAKE) -C ../api dev
|
# $(MAKE) -C ../api dev
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p ~/logs
|
mkdir -p ~/logs
|
||||||
bun run dev 2>&1 | tee ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log
|
bun run dev 2>&1 | tee ~/logs/`date '+%d-%m-%Y_%H:%M:%S'`.log
|
||||||
|
|
||||||
prod: bun-install-api bun-install-database
|
prod: bun-install-database # bun-install-api
|
||||||
mkdir -p ~/logs
|
mkdir -p ~/logs
|
||||||
mkdir -p ~/persistent/online-energieausweis
|
mkdir -p ~/persistent/online-energieausweis
|
||||||
|
|
||||||
@@ -37,11 +37,11 @@ prod: bun-install-api bun-install-database
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Auch die API sollte bereits laufen
|
# Auch die API sollte bereits laufen
|
||||||
@if [ $$(pm2 pid api) -eq "0" ]; then \
|
# @if [ $$(pm2 pid api) -eq "0" ]; then \
|
||||||
cd ../api; \
|
# cd ../api; \
|
||||||
$(MAKE) prod; \
|
# $(MAKE) prod; \
|
||||||
cd ../online-energieausweis; \
|
# cd ../online-energieausweis; \
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
- rm -f ~/online-energieausweis/.env;
|
- rm -f ~/online-energieausweis/.env;
|
||||||
- touch ~/online-energieausweis/.env;
|
- touch ~/online-energieausweis/.env;
|
||||||
|
|||||||
3
bun.lock
@@ -8,7 +8,6 @@
|
|||||||
"@astrojs/node": "^8.3.4",
|
"@astrojs/node": "^8.3.4",
|
||||||
"@astrojs/svelte": "^2.2.0",
|
"@astrojs/svelte": "^2.2.0",
|
||||||
"@astrojs/tailwind": "^3.1.3",
|
"@astrojs/tailwind": "^3.1.3",
|
||||||
"@ibcornelsen/api": "link:@ibcornelsen/api",
|
|
||||||
"@ibcornelsen/database": "link:@ibcornelsen/database",
|
"@ibcornelsen/database": "link:@ibcornelsen/database",
|
||||||
"@ibcornelsen/ui": "^0.0.2",
|
"@ibcornelsen/ui": "^0.0.2",
|
||||||
"@mollie/api-client": "^4.1.0",
|
"@mollie/api-client": "^4.1.0",
|
||||||
@@ -255,8 +254,6 @@
|
|||||||
|
|
||||||
"@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@1.2.1", "", {}, "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="],
|
"@humanwhocodes/object-schema": ["@humanwhocodes/object-schema@1.2.1", "", {}, "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="],
|
||||||
|
|
||||||
"@ibcornelsen/api": ["@ibcornelsen/api@link:@ibcornelsen/api", {}],
|
|
||||||
|
|
||||||
"@ibcornelsen/database": ["@ibcornelsen/database@link:@ibcornelsen/database", {}],
|
"@ibcornelsen/database": ["@ibcornelsen/database@link:@ibcornelsen/database", {}],
|
||||||
|
|
||||||
"@ibcornelsen/ui": ["@ibcornelsen/ui@0.0.2", "", { "dependencies": { "@astrojs/svelte": "^2.1.1", "cookiejs": "^2.1.2", "knex": "^2.4.2", "moment": "^2.29.4", "svelte": "^3.54.0", "svelte-preprocess": "^5.0.1", "tailwindcss": "^3.0.24", "uuid": "^9.0.0", "zod": "^3.21.4" } }, "sha512-TF29f0uY6MqxQszEySKRI5RJa1FmHCqaY5SjcIJjbI/9MjUL3tB/u9m+o7t/SpzPRNT419/HMdXSo7uOATX2Aw=="],
|
"@ibcornelsen/ui": ["@ibcornelsen/ui@0.0.2", "", { "dependencies": { "@astrojs/svelte": "^2.1.1", "cookiejs": "^2.1.2", "knex": "^2.4.2", "moment": "^2.29.4", "svelte": "^3.54.0", "svelte-preprocess": "^5.0.1", "tailwindcss": "^3.0.24", "uuid": "^9.0.0", "zod": "^3.21.4" } }, "sha512-TF29f0uY6MqxQszEySKRI5RJa1FmHCqaY5SjcIJjbI/9MjUL3tB/u9m+o7t/SpzPRNT419/HMdXSo7uOATX2Aw=="],
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export default defineConfig({
|
|||||||
setupNodeEvents(on, config) {
|
setupNodeEvents(on, config) {
|
||||||
on("file:preprocessor", vitePreprocessor({
|
on("file:preprocessor", vitePreprocessor({
|
||||||
optimizeDeps: {
|
optimizeDeps: {
|
||||||
exclude: ["@ibcornelsen/api", "@ibcornelsen/database"]
|
exclude: ["@ibcornelsen/database"]
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ services:
|
|||||||
- ./:/online-energieausweis
|
- ./:/online-energieausweis
|
||||||
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
|
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
|
||||||
- ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database
|
- ./node_modules/@ibcornelsen/database:/online-energieausweis/node_modules/@ibcornelsen/database
|
||||||
- ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api
|
# - ./node_modules/@ibcornelsen/api:/online-energieausweis/node_modules/@ibcornelsen/api
|
||||||
- ./node_modules/radix-svelte-icons:/online-energieausweis/node_modules/radix-svelte-icons
|
- ./node_modules/radix-svelte-icons:/online-energieausweis/node_modules/radix-svelte-icons
|
||||||
- ../api/persistent:/persistent
|
- ../api/persistent:/persistent
|
||||||
ibcornelsen-api:
|
ibcornelsen-api:
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
"@astrojs/node": "^8.3.4",
|
"@astrojs/node": "^8.3.4",
|
||||||
"@astrojs/svelte": "^2.2.0",
|
"@astrojs/svelte": "^2.2.0",
|
||||||
"@astrojs/tailwind": "^3.1.3",
|
"@astrojs/tailwind": "^3.1.3",
|
||||||
"@ibcornelsen/api": "link:@ibcornelsen/api",
|
|
||||||
"@ibcornelsen/database": "link:@ibcornelsen/database",
|
"@ibcornelsen/database": "link:@ibcornelsen/database",
|
||||||
"@ibcornelsen/ui": "^0.0.2",
|
"@ibcornelsen/ui": "^0.0.2",
|
||||||
"@mollie/api-client": "^4.1.0",
|
"@mollie/api-client": "^4.1.0",
|
||||||
|
|||||||
BIN
persistent/images/img-03e4258e-2fb5-422d-b435-2a7129bcabf3.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-06b354f2-1314-4f66-8c6d-b8e4834a6090.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-12cefef0-5406-4fa5-8b47-cbdf5940b2b3.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-1cb30f8a-d662-47a1-8107-d09c0069a023.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-2944c8e8-6d98-4bed-8392-4f6d0d580aaa.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-29e650e4-c16a-4ad1-b136-967180359809.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-2d2dcc3f-2815-4294-a651-43248ba9585f.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-2d5c83d6-023e-4848-bef1-44fd988098c3.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-2db2d211-3119-4f2a-b6c4-2af1c0a29682.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-2e9e796c-2805-4c3c-b8aa-6fce85a44fc5.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-30288120-6f40-4419-87ba-a0efd59960b8.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-3af4bd33-ae3f-4a62-94f2-c43ffccb2fd1.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-3f384947-1020-41f7-bce0-7f0a496422c7.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-40d15e43-94a3-429c-86be-671f77666094.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-4219127e-38ad-4ef1-bdd7-6aaa1bba15e5.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-4387f4e8-4a93-4fc9-9ba4-e5129bb682cc.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-461f1e91-33b3-45a6-93d6-ca4ce423af34.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-486b00ac-5c3a-4f53-90de-8c0a2f9ad486.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-50622919-3829-4e97-b231-e32a32e5342c.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-54ad8b76-c545-4da3-9beb-2838c6f9b37a.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-5771a1f3-64bc-4ccc-8d8b-fd7eb91ab57b.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-61d719ce-8fca-4569-b094-1f23552078c5.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-69978803-a0f5-4f1e-97fb-05e7335a0212.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-6d6b2565-56a4-4ebd-a41d-3e41d356c9ab.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-6e61e1ec-b531-45fd-be65-70174cc3c7d3.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-6ea9fadd-975c-4189-be05-5b539b1a7321.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-7541c7d6-c2b3-4501-a671-e53d6bf0a6f2.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-790bb080-9041-4095-82a0-e7c7d8b84d84.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-7a27716e-f935-4677-ac38-e2db8f39e4ff.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-7a4aa035-c9b1-4126-b4ec-e7b5e93be812.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-7b84aae5-c90f-46c2-afd9-41c572b116bf.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-7ba05951-aebd-45e6-bcb7-b70a29fef512.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-7edbdd0b-dca8-4db8-8a82-3df2b451669b.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-87064632-ef07-4fb9-b02c-72521db6ac75.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-88d7a851-b49e-413f-aebd-1f4ca386c44a.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-8bae768b-e642-4672-ba74-88e0de619131.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-91a8a9df-de56-41f5-80cd-f60852c240d8.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-93040a69-8b48-4749-8c8d-581d76e74cae.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-9528ab28-6588-4703-bbc8-3509e3c97cd3.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-9b941945-bfbe-4ca9-b57b-240abc7ae6d4.webp
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
persistent/images/img-a5e90e6b-9793-4127-a44c-3129abe91815.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-a6837d4d-87c7-4af5-8956-c2642f652b41.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-ab21f3f6-82c1-44c4-ba01-6d0ea32ba0b9.webp
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
persistent/images/img-ade4310c-ac6c-49e1-9348-57b8ba155cc4.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-ae368fad-72ed-482d-a210-8319f5404b2c.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-b51adbda-0ca2-441e-a40d-b3e6027c23df.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-b5a715ac-38a8-4a2b-86d0-fb1d3b20213f.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-b9e2bf27-2330-45c9-afa1-e97429151eb8.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-bd5d3046-7f93-485b-8b7b-2f4844144736.webp
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
persistent/images/img-c66402e7-1bc5-4d44-82c8-5d682ef9694e.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-d4c272b1-977c-4ce8-9821-ead67bce7cc4.webp
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
persistent/images/img-e1c07d92-2272-45f6-a7c9-1e94022c5814.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-e2b2f430-4cd8-4042-accb-e4bef9eee68c.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-e813ba90-fa2d-4de9-85ee-5d9a4e26dfc6.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
persistent/images/img-f0c5a307-5901-4837-aba7-ab6379fa0163.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/images/formular/skala-verbrauchsausweis-gewerbe.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
@@ -8,8 +8,8 @@ export const createCaller = createCallerFactory({
|
|||||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||||
"auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"),
|
"auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"),
|
||||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
|
||||||
"bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"),
|
"bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"),
|
||||||
|
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||||
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
||||||
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
|
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
|
||||||
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
||||||
@@ -19,6 +19,7 @@ export const createCaller = createCallerFactory({
|
|||||||
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
|
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
|
||||||
"verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"),
|
"verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"),
|
||||||
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
||||||
|
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
|
||||||
"objekt/[uid]/bilder": await import("../src/pages/api/objekt/[uid]/bilder.ts"),
|
"objekt/[uid]/bilder": await import("../src/pages/api/objekt/[uid]/bilder.ts"),
|
||||||
"objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"),
|
"objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"),
|
||||||
})
|
})
|
||||||
@@ -1,16 +1,17 @@
|
|||||||
|
|
||||||
import { api } from "astro-typesafe-api/client"
|
import { api } from "astro-typesafe-api/client"
|
||||||
|
|
||||||
import { exclude } from "#lib/exclude.js";
|
import { exclude } from "#lib/exclude.js";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||||
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js";
|
||||||
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export async function verbrauchsausweisWohnenSpeichern(
|
export async function ausweisSpeichern(
|
||||||
ausweis: VerbrauchsausweisWohnenClient,
|
ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient,
|
||||||
objekt: ObjektClient,
|
objekt: ObjektClient,
|
||||||
aufnahme: AufnahmeClient,
|
aufnahme: AufnahmeClient,
|
||||||
bilder: (UploadedGebaeudeBild & { base64?: string })[]
|
bilder: (UploadedGebaeudeBild & { base64?: string })[],
|
||||||
|
ausweisart: Enums.Ausweisart
|
||||||
) {
|
) {
|
||||||
if (objekt.uid) {
|
if (objekt.uid) {
|
||||||
await api.objekt._uid.PATCH.fetch({
|
await api.objekt._uid.PATCH.fetch({
|
||||||
@@ -61,8 +62,21 @@ export async function verbrauchsausweisWohnenSpeichern(
|
|||||||
aufnahme.uid = uid
|
aufnahme.uid = uid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let patchRoute: any;
|
||||||
|
let putRoute: any;
|
||||||
|
if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||||
|
patchRoute = api["verbrauchsausweis-wohnen"]._uid.PATCH
|
||||||
|
putRoute = api["verbrauchsausweis-wohnen"].PUT
|
||||||
|
} else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||||
|
patchRoute = api["verbrauchsausweis-gewerbe"]._uid.PATCH
|
||||||
|
putRoute = api["verbrauchsausweis-gewerbe"].PUT
|
||||||
|
} else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||||
|
patchRoute = api["bedarfsausweis-wohnen"]._uid.PATCH
|
||||||
|
putRoute = api["bedarfsausweis-wohnen"].PUT
|
||||||
|
}
|
||||||
|
|
||||||
if (ausweis.uid) {
|
if (ausweis.uid) {
|
||||||
await api["verbrauchsausweis-wohnen"]._uid.PATCH.fetch({
|
await patchRoute.fetch({
|
||||||
...exclude(ausweis, ["uid"])
|
...exclude(ausweis, ["uid"])
|
||||||
}, {
|
}, {
|
||||||
params: {
|
params: {
|
||||||
@@ -73,7 +87,7 @@ export async function verbrauchsausweisWohnenSpeichern(
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const { uid } = await api["verbrauchsausweis-wohnen"].PUT.fetch({
|
const { uid } = await putRoute.fetch({
|
||||||
ausweis,
|
ausweis,
|
||||||
uid_aufnahme: aufnahme.uid
|
uid_aufnahme: aufnahme.uid
|
||||||
}, {
|
}, {
|
||||||
@@ -1,13 +1,43 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Buffer } from "buffer";
|
import { Buffer } from "buffer";
|
||||||
import { VerbrauchsausweisWohnenClient } from "./Ausweis/types";
|
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||||
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||||
|
export let objekt: ObjektClient;
|
||||||
|
export let aufnahme: AufnahmeClient;
|
||||||
|
export let bilder: UploadedGebaeudeBild[];
|
||||||
|
export let ausweisart: Enums.Ausweisart
|
||||||
|
|
||||||
$: base64 = Buffer.from(JSON.stringify(ausweis), "utf-8").toString("base64")
|
function openWindowWithPost(url: string, data: Record<string, any>) {
|
||||||
|
var form = document.createElement("form");
|
||||||
|
form.target = "_blank";
|
||||||
|
form.method = "POST";
|
||||||
|
form.action = url;
|
||||||
|
form.style.display = "none";
|
||||||
|
|
||||||
|
for (var key in data) {
|
||||||
|
var input = document.createElement("input");
|
||||||
|
input.type = "hidden";
|
||||||
|
input.name = key;
|
||||||
|
input.value = data[key];
|
||||||
|
form.appendChild(input);
|
||||||
|
}
|
||||||
|
document.body.appendChild(form);
|
||||||
|
form.submit();
|
||||||
|
document.body.removeChild(form);
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<a class="border-2 rounded-lg bg-white text-center hover:shadow-md no-underline p-3 cursor-pointer" target="_blank" href="/pdf/ansichtsausweis?base64={base64}">
|
<button class="border-2 rounded-lg bg-white text-center hover:shadow-md no-underline p-3 cursor-pointer" on:click={() => {
|
||||||
|
openWindowWithPost("/pdf/ansichtsausweis", {
|
||||||
|
ausweis: JSON.stringify(ausweis),
|
||||||
|
aufnahme: JSON.stringify(aufnahme),
|
||||||
|
objekt: JSON.stringify(objekt),
|
||||||
|
bilder: JSON.stringify(bilder),
|
||||||
|
ausweisart
|
||||||
|
})
|
||||||
|
}}>
|
||||||
<img src="/images/ausweis.webp" alt="Ausweis" />
|
<img src="/images/ausweis.webp" alt="Ausweis" />
|
||||||
<span class="text-black font-medium text-lg">Ansichtsausweis</span>
|
<span class="text-black font-medium text-lg">Ansichtsausweis</span>
|
||||||
</a>
|
</button>
|
||||||
|
|||||||
@@ -14,27 +14,17 @@ sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
|
|||||||
xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||||
">
|
">
|
||||||
|
|
||||||
<!-- Anrede *
|
<!-- Anrede * -->
|
||||||
|
<!--
|
||||||
<div class="input-standard order-3 md:order-3 xl:order-3">
|
<div class="input-standard order-3 md:order-3 xl:order-3">
|
||||||
<Inputlabel title="Anrede *"></Inputlabel>
|
<Inputlabel title="Anrede *"></Inputlabel>
|
||||||
|
|
||||||
<select name="anrede" bind:value={user.anrede}>
|
<select name="anrede" bind:value={user.anrede}>
|
||||||
<option>bitte auswählen</option>
|
<option disabled selected>bitte auswählen</option>
|
||||||
<option value="Herr">Herr</option>
|
<option value="Herr">Herr</option>
|
||||||
<option value="Frau">Frau</option>
|
<option value="Frau">Frau</option>
|
||||||
<option value="Frau">Frau</option>
|
|
||||||
</select>
|
</select>
|
||||||
|
</div> -->
|
||||||
<div class="help-label">
|
|
||||||
<HelpLabel>
|
|
||||||
Bitte geben Sie hier die beheizte Wohnfläche in m² ein.
|
|
||||||
Dabei handelt es sich um die Wohnfläche abzüglich
|
|
||||||
vorhandener Flächen die sich außerhalb des Gebäudes
|
|
||||||
befinden. (Balkone, Terassen,etc.).
|
|
||||||
</HelpLabel>
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Vorname * -->
|
<!-- Vorname * -->
|
||||||
|
|||||||
@@ -9,14 +9,19 @@
|
|||||||
} from "@ibcornelsen/database/client";
|
} from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
AufnahmeClient,
|
||||||
|
BedarfsausweisWohnenClient,
|
||||||
ObjektClient,
|
ObjektClient,
|
||||||
UploadedGebaeudeBild,
|
UploadedGebaeudeBild,
|
||||||
|
VerbrauchsausweisGewerbeClient,
|
||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisWohnenClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let gebaeude: ObjektClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
|
export let objekt: ObjektClient;
|
||||||
export let images: UploadedGebaeudeBild[] = [];
|
export let images: UploadedGebaeudeBild[] = [];
|
||||||
|
export let ausweisart: Enums.Ausweisart;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
||||||
@@ -29,7 +34,7 @@
|
|||||||
kategorie={Enums.BilderKategorie.Gebaeude}
|
kategorie={Enums.BilderKategorie.Gebaeude}
|
||||||
max={1}
|
max={1}
|
||||||
min={1}
|
min={1}
|
||||||
bind:gebaeude
|
bind:objekt
|
||||||
bind:images
|
bind:images
|
||||||
bind:ausweis
|
bind:ausweis
|
||||||
>
|
>
|
||||||
@@ -56,8 +61,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-4 mt-4">
|
<div class="grid grid-cols-2 gap-4 mt-4">
|
||||||
<AnsichtsausweisButton {ausweis} />
|
<AnsichtsausweisButton {ausweis} {aufnahme} {objekt} bilder={images} {ausweisart} />
|
||||||
<DatenblattButton {ausweis} />
|
<DatenblattButton {ausweis} {aufnahme} {objekt} bilder={images} {ausweisart} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
required
|
required
|
||||||
bind:value={aufnahme.gebaeudetyp}
|
bind:value={aufnahme.gebaeudetyp}
|
||||||
>
|
>
|
||||||
<option disabled selected value={false}>Bitte auswählen</option>
|
<option disabled selected>Bitte auswählen</option>
|
||||||
|
|
||||||
{#if ausweisart=="VerbrauchsausweisWohnen"}
|
{#if ausweisart=="VerbrauchsausweisWohnen"}
|
||||||
<option value="Einfamilienhaus">Einfamilienhaus</option>
|
<option value="Einfamilienhaus">Einfamilienhaus</option>
|
||||||
|
|||||||
@@ -3,17 +3,21 @@
|
|||||||
import Hilfe from "#components/Ausweis/Hilfe.svelte";
|
import Hilfe from "#components/Ausweis/Hilfe.svelte";
|
||||||
import {
|
import {
|
||||||
AufnahmeClient,
|
AufnahmeClient,
|
||||||
|
BedarfsausweisWohnenClient,
|
||||||
BenutzerClient,
|
BenutzerClient,
|
||||||
ObjektClient,
|
ObjektClient,
|
||||||
UploadedGebaeudeBild,
|
UploadedGebaeudeBild,
|
||||||
|
VerbrauchsausweisGewerbeClient,
|
||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisWohnenClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let bilder: UploadedGebaeudeBild[];
|
export let bilder: UploadedGebaeudeBild[];
|
||||||
export let user: BenutzerClient;
|
export let user: BenutzerClient;
|
||||||
export let objekt: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
|
export let ausweisart: Enums.Ausweisart
|
||||||
|
|
||||||
export let spaeterWeitermachen;
|
export let spaeterWeitermachen;
|
||||||
</script>
|
</script>
|
||||||
@@ -36,6 +40,7 @@
|
|||||||
bind:user
|
bind:user
|
||||||
bind:objekt
|
bind:objekt
|
||||||
bind:aufnahme
|
bind:aufnahme
|
||||||
|
{ausweisart}
|
||||||
></AusweisWeiter>
|
></AusweisWeiter>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div
|
|
||||||
class="w-full grid grid-cols-[min-content_1fr_min-content_min-content] grid-rows-[min_content_1fr] gap-x-2 self-start justify-self-end mt-8"
|
|
||||||
>
|
|
||||||
<button class="button justify-self-start">Zurück</button>
|
|
||||||
|
|
||||||
<div></div>
|
|
||||||
|
|
||||||
<button class="button">Speichern</button>
|
|
||||||
|
|
||||||
<button class="button">kostenpflichtig bestellen</button>
|
|
||||||
</div>
|
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ImageGrid from "../ImageGrid.svelte";;
|
import ImageGrid from "../ImageGrid.svelte";;
|
||||||
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||||
|
|
||||||
export let images: UploadedGebaeudeBild[] = [];
|
export let images: UploadedGebaeudeBild[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
kategorie={Enums.BilderKategorie.Daemmung}
|
kategorie={Enums.BilderKategorie.Daemmung}
|
||||||
bind:images
|
bind:images
|
||||||
bind:ausweis
|
bind:ausweis
|
||||||
bind:gebaeude
|
bind:objekt
|
||||||
>
|
>
|
||||||
TEXT FEHLT
|
TEXT FEHLT
|
||||||
</ImageGrid>
|
</ImageGrid>
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ImageGrid from "../ImageGrid.svelte";;
|
import ImageGrid from "../ImageGrid.svelte";;
|
||||||
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||||
|
|
||||||
export let images: UploadedGebaeudeBild[] = [];
|
export let images: UploadedGebaeudeBild[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
kategorie={Enums.BilderKategorie.Fenster}
|
kategorie={Enums.BilderKategorie.Fenster}
|
||||||
bind:images
|
bind:images
|
||||||
bind:ausweis
|
bind:ausweis
|
||||||
bind:gebaeude
|
bind:objekt
|
||||||
>
|
>
|
||||||
TEXT FEHLT
|
TEXT FEHLT
|
||||||
</ImageGrid>
|
</ImageGrid>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import ImageGrid from "../ImageGrid.svelte";;
|
import ImageGrid from "../ImageGrid.svelte";;
|
||||||
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||||
|
|
||||||
export let images: UploadedGebaeudeBild[] = [];
|
export let images: UploadedGebaeudeBild[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let gebaeude: ObjektClient;
|
export let gebaeude: ObjektClient;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
kategorie={Enums.BilderKategorie.Heizung}
|
kategorie={Enums.BilderKategorie.Heizung}
|
||||||
max={4}
|
max={4}
|
||||||
min={1}
|
min={1}
|
||||||
bind:gebaeude
|
bind:objekt={gebaeude}
|
||||||
bind:images
|
bind:images
|
||||||
bind:ausweis
|
bind:ausweis
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -9,12 +9,20 @@
|
|||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisWohnenClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
import ThickArrowUp from "radix-svelte-icons/src/lib/icons/ThickArrowUp.svelte";
|
import ThickArrowUp from "radix-svelte-icons/src/lib/icons/ThickArrowUp.svelte";
|
||||||
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
|
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let objekt: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
|
export let ausweisart: Enums.Ausweisart;
|
||||||
|
|
||||||
let maxPerformance = 250;
|
let maxPerformance = {
|
||||||
|
[Enums.Ausweisart.VerbrauchsausweisGewerbe]: 1000,
|
||||||
|
[Enums.Ausweisart.VerbrauchsausweisWohnen]: 250,
|
||||||
|
[Enums.Ausweisart.BedarfsausweisWohnen]: 250,
|
||||||
|
[Enums.Ausweisart.BedarfsausweisGewerbe]: 250
|
||||||
|
}[ausweisart];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We use linear interpolation to scale the value between the given boundaries.
|
* We use linear interpolation to scale the value between the given boundaries.
|
||||||
@@ -54,13 +62,12 @@
|
|||||||
let translation_2 = 0;
|
let translation_2 = 0;
|
||||||
$: {
|
$: {
|
||||||
(async () => {
|
(async () => {
|
||||||
const result = await endEnergieVerbrauchVerbrauchsausweis_2016({
|
let result;
|
||||||
...ausweis,
|
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||||
aufnahme: {
|
result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
|
||||||
...aufnahme,
|
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||||
objekt: objekt,
|
result = await endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis, aufnahme, objekt);
|
||||||
},
|
}
|
||||||
});
|
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return;
|
return;
|
||||||
@@ -77,7 +84,11 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<div class="self-center relative">
|
<div class="self-center relative">
|
||||||
<img id="skalaImage" class="w-full" src="/images/formular/SKALA-910.png" alt="Energieeffizienz Skala" />
|
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen}
|
||||||
|
<img id="skalaImage" class="w-full" src="/images/formular/skala-verbrauchsausweis-wohnen.png" alt="Energieeffizienz Skala" />
|
||||||
|
{:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
||||||
|
<img id="skalaImage" class="w-full" src="/images/formular/skala-verbrauchsausweis-gewerbe.png" alt="Energieeffizienz Skala" />
|
||||||
|
{/if}
|
||||||
<ThickArrowDown
|
<ThickArrowDown
|
||||||
size={28}
|
size={28}
|
||||||
class="fill-base-content absolute top-0 transition-left duration-1000 ease-in-out"
|
class="fill-base-content absolute top-0 transition-left duration-1000 ease-in-out"
|
||||||
|
|||||||
@@ -6,19 +6,7 @@
|
|||||||
import { BenutzerClient, RechnungClient } from "./types.js";
|
import { BenutzerClient, RechnungClient } from "./types.js";
|
||||||
|
|
||||||
export let user: BenutzerClient;
|
export let user: BenutzerClient;
|
||||||
|
export let rechnung: Partial<RechnungClient>;
|
||||||
let rechnung: RechnungClient = {
|
|
||||||
email: user.email,
|
|
||||||
empfaenger: user.vorname + " " + user.name,
|
|
||||||
strasse: user.adresse,
|
|
||||||
plz: user.plz,
|
|
||||||
ort: user.ort,
|
|
||||||
versand_empfaenger: user.vorname + " " + user.name,
|
|
||||||
versand_strasse: user.adresse,
|
|
||||||
versand_plz: user.plz,
|
|
||||||
versand_ort: user.ort,
|
|
||||||
telefon: user.telefon,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,19 +10,21 @@
|
|||||||
AufnahmeClient,
|
AufnahmeClient,
|
||||||
ObjektClient,
|
ObjektClient,
|
||||||
UploadedGebaeudeBild,
|
UploadedGebaeudeBild,
|
||||||
|
VerbrauchsausweisGewerbeClient,
|
||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisWohnenClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
import { boolean } from "astro:schema";
|
import { boolean } from "astro:schema";
|
||||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||||
|
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient;
|
||||||
export let images: UploadedGebaeudeBild[];
|
export let images: UploadedGebaeudeBild[];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div
|
||||||
</script>
|
id="sanierungszustand"
|
||||||
|
class="bereich-box grid
|
||||||
grid-cols-1 gap-x-4 gap-y-2
|
grid-cols-1 gap-x-4 gap-y-2
|
||||||
|
|
||||||
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
|
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
|
||||||
@@ -30,25 +32,74 @@
|
|||||||
|
|
||||||
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
||||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
"
|
||||||
|
>
|
||||||
|
<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>
|
||||||
|
|
||||||
|
<FensterImage bind:images bind:ausweis bind:objekt />
|
||||||
<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>
|
|
||||||
|
|
||||||
<FensterImage bind:images bind:ausweis bind:gebaeude />
|
|
||||||
|
|
||||||
<style lang="postcss">
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
Wir benötigen diese Angaben um den allgemeinen Modernisierungsstand
|
Wir benötigen diese Angaben um den allgemeinen Modernisierungsstand
|
||||||
@@ -162,4 +213,5 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<style lang="postcss">
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -10,14 +10,15 @@
|
|||||||
AufnahmeClient,
|
AufnahmeClient,
|
||||||
ObjektClient,
|
ObjektClient,
|
||||||
UploadedGebaeudeBild,
|
UploadedGebaeudeBild,
|
||||||
|
VerbrauchsausweisGewerbeClient,
|
||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisWohnenClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
import { boolean } from "astro:schema";
|
import { boolean } from "astro:schema";
|
||||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||||
|
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient;
|
||||||
export let images: UploadedGebaeudeBild[];
|
export let images: UploadedGebaeudeBild[];
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -119,7 +120,7 @@
|
|||||||
></SanierungsOption>
|
></SanierungsOption>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<HeizungImage bind:images bind:ausweis bind:gebaeude />
|
<HeizungImage bind:images bind:ausweis bind:gebaeude={objekt} />
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
|
|||||||
@@ -1,29 +1,30 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
|
||||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
|
||||||
|
|
||||||
import DaemmungImage from "./DaemmungImage.svelte";
|
import DaemmungImage from "./DaemmungImage.svelte";
|
||||||
|
|
||||||
|
|
||||||
//import Label from "../Label.svelte";
|
//import Label from "../Label.svelte";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
AufnahmeClient,
|
AufnahmeClient,
|
||||||
|
BedarfsausweisWohnenClient,
|
||||||
ObjektClient,
|
ObjektClient,
|
||||||
UploadedGebaeudeBild,
|
UploadedGebaeudeBild,
|
||||||
|
VerbrauchsausweisGewerbeClient,
|
||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisWohnenClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
import { boolean } from "astro:schema";
|
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
|
||||||
|
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient
|
export let ausweis:
|
||||||
|
| VerbrauchsausweisWohnenClient
|
||||||
|
| VerbrauchsausweisGewerbeClient
|
||||||
|
| BedarfsausweisWohnenClient;
|
||||||
export let images: UploadedGebaeudeBild[];
|
export let images: UploadedGebaeudeBild[];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div
|
||||||
</script>
|
id="sanierungszustand"
|
||||||
|
class="bereich-box grid
|
||||||
grid-cols-1 gap-x-4 gap-y-2
|
grid-cols-1 gap-x-4 gap-y-2
|
||||||
|
|
||||||
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
|
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
|
||||||
@@ -31,21 +32,53 @@
|
|||||||
|
|
||||||
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
||||||
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={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>
|
||||||
|
|
||||||
|
<DaemmungImage bind:images bind:ausweis bind:objekt />
|
||||||
<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>
|
|
||||||
|
|
||||||
<DaemmungImage bind:images bind:ausweis bind:gebaeude />
|
|
||||||
|
|
||||||
<style lang="postcss">
|
|
||||||
<!--
|
<!--
|
||||||
<div class="GRB3">
|
<div class="GRB3">
|
||||||
<div class="form-group col-md-12">
|
<div class="form-group col-md-12">
|
||||||
@@ -72,4 +105,5 @@
|
|||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<style lang="postcss">
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
import {
|
import {
|
||||||
AufnahmeClient,
|
AufnahmeClient,
|
||||||
ObjektClient,
|
ObjektClient,
|
||||||
VerbrauchsausweisWohnenClient,
|
VerbrauchsausweisGewerbeClient,
|
||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
import { addNotification } from "#components/Notifications/shared.js";
|
import { addNotification } from "#components/Notifications/shared.js";
|
||||||
|
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisGewerbeClient;
|
||||||
|
|
||||||
// Wir dürfen bis zu 4.5 Jahre alte Klimafaktoren benutzen, also nehmen wir alle Monate seitdem und generieren daraus die Auswahl.
|
// Wir dürfen bis zu 4.5 Jahre alte Klimafaktoren benutzen, also nehmen wir alle Monate seitdem und generieren daraus die Auswahl.
|
||||||
// Allerdings müssen wir auch berücksichtigen, dass wir drei folgende Jahre brauchen, also
|
// Allerdings müssen wir auch berücksichtigen, dass wir drei folgende Jahre brauchen, also
|
||||||
@@ -48,12 +48,12 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
const startDate = moment(
|
const startDate = moment(
|
||||||
ausweis.aufnahme.erstellungsdatum || Date.now()
|
aufnahme.erstellungsdatum || Date.now()
|
||||||
)
|
)
|
||||||
.subtract(4, "years")
|
.subtract(4, "years")
|
||||||
.subtract(6, "months");
|
.subtract(6, "months");
|
||||||
const endDate = moment(
|
const endDate = moment(
|
||||||
ausweis.aufnahme.erstellungsdatum || Date.now()
|
aufnahme.erstellungsdatum || Date.now()
|
||||||
).subtract(3, "years");
|
).subtract(3, "years");
|
||||||
|
|
||||||
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$: abweichung = auditVerbrauchAbweichung(ausweis, gebaeude);
|
$: abweichung = auditVerbrauchAbweichung(ausweis, aufnahme);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -137,14 +137,15 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
>
|
>
|
||||||
{#if !ausweis.zusaetzliche_heizquelle}
|
{#if !ausweis.zusaetzliche_heizquelle}
|
||||||
<input
|
<input
|
||||||
id="zusaetzliche_heizquelle_1"
|
id="zusaetzliche_heizquelle"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="checkbox"
|
class="checkbox"
|
||||||
name="zusaetzliche_heizquelle_1"
|
name="zusaetzliche_heizquelle"
|
||||||
|
data-cy="zusaetzliche_heizquelle"
|
||||||
bind:checked={ausweis.zusaetzliche_heizquelle}
|
bind:checked={ausweis.zusaetzliche_heizquelle}
|
||||||
/>
|
/>
|
||||||
<label
|
<label
|
||||||
for="zusaetzliche_heizquelle_1"
|
for="zusaetzliche_heizquelle"
|
||||||
class="cursor-pointer">zusätzliche Heizquelle</label
|
class="cursor-pointer">zusätzliche Heizquelle</label
|
||||||
>
|
>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -236,6 +237,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
<select
|
<select
|
||||||
class="rounded-e-none"
|
class="rounded-e-none"
|
||||||
name="brennstoff_1"
|
name="brennstoff_1"
|
||||||
|
data-cy="brennstoff_1"
|
||||||
bind:value={aufnahme.brennstoff_1}
|
bind:value={aufnahme.brennstoff_1}
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
@@ -267,6 +269,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
<select
|
<select
|
||||||
class="rounded-s-none"
|
class="rounded-s-none"
|
||||||
name="einheit_1"
|
name="einheit_1"
|
||||||
|
data-cy="einheit_1"
|
||||||
bind:value={ausweis.einheit_1}
|
bind:value={ausweis.einheit_1}
|
||||||
disabled={!aufnahme.brennstoff_1}
|
disabled={!aufnahme.brennstoff_1}
|
||||||
required
|
required
|
||||||
@@ -416,6 +419,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
<select
|
<select
|
||||||
class="rounded-e-none"
|
class="rounded-e-none"
|
||||||
name="brennstoff_2"
|
name="brennstoff_2"
|
||||||
|
data-cy="brennstoff_2"
|
||||||
bind:value={aufnahme.brennstoff_2}
|
bind:value={aufnahme.brennstoff_2}
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
@@ -449,6 +453,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
<select
|
<select
|
||||||
class="rounded-s-none"
|
class="rounded-s-none"
|
||||||
name="einheit_2"
|
name="einheit_2"
|
||||||
|
data-cy="einheit_2"
|
||||||
bind:value={ausweis.einheit_2}
|
bind:value={ausweis.einheit_2}
|
||||||
disabled={!aufnahme.brennstoff_2}
|
disabled={!aufnahme.brennstoff_2}
|
||||||
required
|
required
|
||||||
@@ -655,19 +660,19 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
|
|
||||||
<!-- Enthält Stromverbrauch für: -->
|
<!-- Enthält Stromverbrauch für: -->
|
||||||
|
|
||||||
<SanierungsOption label="Heizung" name="stromverbrauch_enthaelt_heizung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_heizung}></SanierungsOption>
|
<SanierungsOption label="Heizung" name="stromverbrauch_enthaelt_heizung" help="" bind:checked={ausweis.stromverbrauch_enthaelt_heizung}></SanierungsOption>
|
||||||
<SanierungsOption label="Warmwasser " name="stromverbrauch_enthaelt_warmwasser" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_warmwasser}></SanierungsOption>
|
<SanierungsOption label="Warmwasser " name="stromverbrauch_enthaelt_warmwasser" help="" bind:checked={ausweis.stromverbrauch_enthaelt_warmwasser}></SanierungsOption>
|
||||||
<SanierungsOption label="Lüftung " name="stromverbrauch_enthaelt_lueftung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_lueftung}></SanierungsOption>
|
<SanierungsOption label="Lüftung " name="stromverbrauch_enthaelt_lueftung" help="" bind:checked={ausweis.stromverbrauch_enthaelt_lueftung}></SanierungsOption>
|
||||||
<SanierungsOption label="Beleuchtung" name="stromverbrauch_enthaelt_beleuchtung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_beleuchtung}></SanierungsOption>
|
<SanierungsOption label="Beleuchtung" name="stromverbrauch_enthaelt_beleuchtung" help="" bind:checked={ausweis.stromverbrauch_enthaelt_beleuchtung}></SanierungsOption>
|
||||||
<SanierungsOption label="Kühlung" name="stromverbrauch_enthaelt_kuehlung" help="" bind:checked={aufnahme.stromverbrauch_enthaelt_kuehlung}></SanierungsOption>
|
<SanierungsOption label="Kühlung" name="stromverbrauch_enthaelt_kuehlung" help="" bind:checked={ausweis.stromverbrauch_enthaelt_kuehlung}></SanierungsOption>
|
||||||
|
|
||||||
<div class="input-standard">
|
<div class="input-standard">
|
||||||
<Inputlabel title="Sonstige"></Inputlabel>
|
<Inputlabel title="Sonstige"></Inputlabel>
|
||||||
|
|
||||||
<input
|
<input
|
||||||
name="strom_3"
|
name="stromverbrauch_enthaelt_sonstige"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={ausweis.strom_3}
|
bind:value={ausweis.stromverbrauch_enthaelt_sonstige}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,6 @@
|
|||||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||||
import Verbrauchslabel from "#components/labels/VerbrauchsLabel.svelte";
|
import Verbrauchslabel from "#components/labels/VerbrauchsLabel.svelte";
|
||||||
import VerbrauchsHelpLabel from "#components/labels/VerbrauchsHelpLabel.svelte";
|
import VerbrauchsHelpLabel from "#components/labels/VerbrauchsHelpLabel.svelte";
|
||||||
|
|
||||||
import Label from "../Label.svelte";
|
|
||||||
|
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import fuelList from "./brennstoffListe.js";
|
import fuelList from "./brennstoffListe.js";
|
||||||
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung.js";
|
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung.js";
|
||||||
@@ -16,7 +13,7 @@
|
|||||||
} from "./types.js";
|
} from "./types.js";
|
||||||
import { addNotification } from "#components/Notifications/shared.js";
|
import { addNotification } from "#components/Notifications/shared.js";
|
||||||
|
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let aufnahme: AufnahmeClient;
|
export let aufnahme: AufnahmeClient;
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||||
|
|
||||||
@@ -43,14 +40,13 @@
|
|||||||
"Dezember",
|
"Dezember",
|
||||||
];
|
];
|
||||||
|
|
||||||
const startDate = moment(
|
const startDate = moment(aufnahme.erstellungsdatum || Date.now())
|
||||||
aufnahme.erstellungsdatum || Date.now()
|
|
||||||
)
|
|
||||||
.subtract(4, "years")
|
.subtract(4, "years")
|
||||||
.subtract(6, "months");
|
.subtract(6, "months");
|
||||||
const endDate = moment(
|
const endDate = moment(aufnahme.erstellungsdatum || Date.now()).subtract(
|
||||||
aufnahme.erstellungsdatum || Date.now()
|
3,
|
||||||
).subtract(3, "years");
|
"years"
|
||||||
|
);
|
||||||
|
|
||||||
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
||||||
availableDates.push({
|
availableDates.push({
|
||||||
@@ -85,20 +81,27 @@
|
|||||||
$: {
|
$: {
|
||||||
console.log(month, year);
|
console.log(month, year);
|
||||||
|
|
||||||
if ((availableDates.filter(date => date.month === month && date.year === year).length === 0) && typeof month === "number" && typeof year === "number") {
|
if (
|
||||||
|
availableDates.filter(
|
||||||
|
(date) => date.month === month && date.year === year
|
||||||
|
).length === 0 &&
|
||||||
|
typeof month === "number" &&
|
||||||
|
typeof year === "number"
|
||||||
|
) {
|
||||||
addNotification({
|
addNotification({
|
||||||
message: "Monat nicht verfügbar.",
|
message: "Monat nicht verfügbar.",
|
||||||
subtext: "Der ausgewählte Monat ist in diesem Jahr nicht verfügbar, bitte wählen sie einen neuen Start Monat.",
|
subtext:
|
||||||
|
"Der ausgewählte Monat ist in diesem Jahr nicht verfügbar, bitte wählen sie einen neuen Start Monat.",
|
||||||
dismissable: true,
|
dismissable: true,
|
||||||
type: "warning",
|
type: "warning",
|
||||||
timeout: 0,
|
timeout: 0,
|
||||||
uid: "monat_nicht_verfuegbar",
|
uid: "monat_nicht_verfuegbar",
|
||||||
selector: "select[name='energieverbrauch_zeitraum_monat']"
|
selector: "select[name='energieverbrauch_zeitraum_monat']",
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$: abweichung = auditVerbrauchAbweichung(ausweis, gebaeude);
|
$: abweichung = auditVerbrauchAbweichung(ausweis, aufnahme);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
@@ -201,9 +204,12 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>Bitte geben Sie hier den <b>Startmonat der ersten Verbrauchsperiode</b> ein. Es sind nur Monate auswählbar,
|
<HelpLabel
|
||||||
die im zulässigen Zeitraum (Endzeitpunkt von Jahr 3 darf nicht älter als 18 Monate sein) liegen. Wählen Sie ein
|
>Bitte geben Sie hier den <b
|
||||||
aktuellerses Jahr um alle Monate zu sehen.
|
>Startmonat der ersten Verbrauchsperiode</b
|
||||||
|
> ein. Es sind nur Monate auswählbar, die im zulässigen Zeitraum
|
||||||
|
(Endzeitpunkt von Jahr 3 darf nicht älter als 18 Monate sein)
|
||||||
|
liegen. Wählen Sie ein aktuellerses Jahr um alle Monate zu sehen.
|
||||||
</HelpLabel>
|
</HelpLabel>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -230,8 +236,12 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>Bitte geben Sie das <b>Startjahr der ersten Verbrauchsperiode</b> ein. Weitere Zeitangaben müssen nichht
|
<HelpLabel
|
||||||
gemacht werden, da alle 3 Verbrauchsjahre zusammenhängend sein sollen.</HelpLabel>
|
>Bitte geben Sie das <b
|
||||||
|
>Startjahr der ersten Verbrauchsperiode</b
|
||||||
|
> ein. Weitere Zeitangaben müssen nichht gemacht werden, da alle
|
||||||
|
3 Verbrauchsjahre zusammenhängend sein sollen.</HelpLabel
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -256,16 +266,24 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>
|
<HelpLabel>
|
||||||
<b>Heizöl:</b> Flüssiger fossiler Brennstoff.<br/>
|
<b>Heizöl:</b> Flüssiger fossiler Brennstoff.<br />
|
||||||
<b>Erdgas:</b> Gasförmiger fossiler Brennstoff.<br/>
|
<b>Erdgas:</b> Gasförmiger fossiler Brennstoff.<br />
|
||||||
<b>Flüssiggas:</b> Wie Erdgas fossiler Brennstoff - im Flüssiggastank gelagert<br/>
|
<b>Flüssiggas:</b> Wie Erdgas fossiler Brennstoff - im
|
||||||
<b>Braunkohle:</b> Fester fossiler Brennstoff<br/>
|
Flüssiggastank gelagert<br />
|
||||||
<b>Holz-Pellets:</b> Stäbchenförmige Pellets - erneuerbarer (nachwachsender) Brennstoff<br/>
|
<b>Braunkohle:</b> Fester fossiler Brennstoff<br />
|
||||||
<b>Holzhackschnitzel:</b>Wie Holz-Pellets<br/>
|
<b>Holz-Pellets:</b> Stäbchenförmige Pellets - erneuerbarer
|
||||||
<b>Fernwärme, Nahwärme:</b> kommunales Wärmenetz - <strong>erfragen Sie
|
(nachwachsender) Brennstoff<br />
|
||||||
den Primärenergiefaktor bei Ihrem Energieversorger</strong> (meistens mit regenartivem Anteil)<br/>
|
<b>Holzhackschnitzel:</b>Wie Holz-Pellets<br />
|
||||||
<b>Strommix:</b> Meist bei Wärmepumpe oder Nachtspeicher.<br/>
|
<b>Fernwärme, Nahwärme:</b> kommunales Wärmenetz -
|
||||||
<b>Koks:</b> stark kohlenstoffhaltiger fossiler Brennstoff.<br/>
|
<strong
|
||||||
|
>erfragen Sie den Primärenergiefaktor bei Ihrem
|
||||||
|
Energieversorger</strong
|
||||||
|
>
|
||||||
|
(meistens mit regenartivem Anteil)<br />
|
||||||
|
<b>Strommix:</b> Meist bei Wärmepumpe oder Nachtspeicher.<br
|
||||||
|
/>
|
||||||
|
<b>Koks:</b> stark kohlenstoffhaltiger fossiler Brennstoff.<br
|
||||||
|
/>
|
||||||
</HelpLabel>
|
</HelpLabel>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -288,9 +306,10 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>
|
<HelpLabel>
|
||||||
Bitte geben Sie die Einheit ein. Die Liste passt sich entsprechend des ausgeählten Brennstoffes an.
|
Bitte geben Sie die Einheit ein. Die Liste passt sich
|
||||||
Erdgas wird meist auf der Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in
|
entsprechend des ausgeählten Brennstoffes an. Erdgas wird
|
||||||
Litern vor. Pellets oder Brennholz in kg.
|
meist auf der Abrechnung in kWh ausgewiesen. Heizöl liegt
|
||||||
|
meistens in Litern vor. Pellets oder Brennholz in kg.
|
||||||
</HelpLabel>
|
</HelpLabel>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -409,8 +428,13 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>Hier sind die <b>Verbräuche einer zusätzlichen Heizquelle</b>
|
<HelpLabel
|
||||||
(z.B. Einzelöfen, Kamin, Nachtspeicher, Wärmepumpe, zweiter Heizkessel etc.) einzugeben</HelpLabel>
|
>Hier sind die <b
|
||||||
|
>Verbräuche einer zusätzlichen Heizquelle</b
|
||||||
|
>
|
||||||
|
(z.B. Einzelöfen, Kamin, Nachtspeicher, Wärmepumpe, zweiter Heizkessel
|
||||||
|
etc.) einzugeben</HelpLabel
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -439,16 +463,24 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>
|
<HelpLabel>
|
||||||
<b>Heizöl:</b> Flüssiger fossiler Brennstoff.<br/>
|
<b>Heizöl:</b> Flüssiger fossiler Brennstoff.<br />
|
||||||
<b>Erdgas:</b> Gasförmiger fossiler Brennstoff.<br/>
|
<b>Erdgas:</b> Gasförmiger fossiler Brennstoff.<br />
|
||||||
<b>Flüssiggas:</b> Wie Erdgas fossiler Brennstoff - im Flüssiggastank gelagert<br/>
|
<b>Flüssiggas:</b> Wie Erdgas fossiler Brennstoff - im
|
||||||
<b>Braunkohle:</b> Fester fossiler Brennstoff<br/>
|
Flüssiggastank gelagert<br />
|
||||||
<b>Holz-Pellets:</b> Stäbchenförmige Pellets - erneuerbarer (nachwachsender) Brennstoff<br/>
|
<b>Braunkohle:</b> Fester fossiler Brennstoff<br />
|
||||||
<b>Holzhackschnitzel:</b>Wie Holz-Pellets<br/>
|
<b>Holz-Pellets:</b> Stäbchenförmige Pellets -
|
||||||
<b>Fernwärme, Nahwärme:</b> kommunales Wärmenetz - <strong>erfragen Sie
|
erneuerbarer (nachwachsender) Brennstoff<br />
|
||||||
den Primärenergiefaktor bei Ihrem Energieversorger</strong> (meistens mit regenartivem Anteil)<br/>
|
<b>Holzhackschnitzel:</b>Wie Holz-Pellets<br />
|
||||||
<b>Strommix:</b> Meist bei Wärmepumpe oder Nachtspeicher.<br/>
|
<b>Fernwärme, Nahwärme:</b> kommunales Wärmenetz -
|
||||||
<b>Koks:</b> stark kohlenstoffhaltiger fossiler Brennstoff.<br/>
|
<strong
|
||||||
|
>erfragen Sie den Primärenergiefaktor bei Ihrem
|
||||||
|
Energieversorger</strong
|
||||||
|
>
|
||||||
|
(meistens mit regenartivem Anteil)<br />
|
||||||
|
<b>Strommix:</b> Meist bei Wärmepumpe oder
|
||||||
|
Nachtspeicher.<br />
|
||||||
|
<b>Koks:</b> stark kohlenstoffhaltiger fossiler
|
||||||
|
Brennstoff.<br />
|
||||||
</HelpLabel>
|
</HelpLabel>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -474,9 +506,11 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
|||||||
|
|
||||||
<div class="help-label">
|
<div class="help-label">
|
||||||
<HelpLabel>
|
<HelpLabel>
|
||||||
Bitte geben Sie die Einheit ein. Die Liste passt sich entsprechend des ausgeählten Brennstoffes an.
|
Bitte geben Sie die Einheit ein. Die Liste passt sich
|
||||||
Erdgas wird meist auf der Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in
|
entsprechend des ausgeählten Brennstoffes an. Erdgas
|
||||||
Litern vor. Pellets oder Brennholz in kg.
|
wird meist auf der Abrechnung in kWh ausgewiesen. Heizöl
|
||||||
|
liegt meistens in Litern vor. Pellets oder Brennholz in
|
||||||
|
kg.
|
||||||
</HelpLabel>
|
</HelpLabel>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -51,7 +51,11 @@ export type VerbrauchsausweisWohnenClient = OmitKeys<
|
|||||||
export type VerbrauchsausweisGewerbeClient = OmitKeys<
|
export type VerbrauchsausweisGewerbeClient = OmitKeys<
|
||||||
VerbrauchsausweisGewerbe,
|
VerbrauchsausweisGewerbe,
|
||||||
"id" | "aufnahme_id" | "benutzer_id"
|
"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
|
* Das ist der Typescript Type für den Verbrauchsausweis Gewerbe mit allen Feldern die
|
||||||
@@ -66,7 +70,11 @@ export type VerbrauchsausweisGewerbeClient = OmitKeys<
|
|||||||
export type BedarfsausweisWohnenClient = OmitKeys<
|
export type BedarfsausweisWohnenClient = OmitKeys<
|
||||||
BedarfsausweisWohnen,
|
BedarfsausweisWohnen,
|
||||||
"id" | "aufnahme_id" | "benutzer_id"
|
"id" | "aufnahme_id" | "benutzer_id"
|
||||||
>;
|
> & {
|
||||||
|
uid_objekt: string,
|
||||||
|
uid_aufnahme: string,
|
||||||
|
uid_benutzer?: string
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Das ist der Typescript Type für die Gebäude Stammdaten mit allen Feldern die
|
* Das ist der Typescript Type für die Gebäude Stammdaten mit allen Feldern die
|
||||||
|
|||||||
@@ -132,7 +132,7 @@
|
|||||||
<!-- TODO: Metrics für den Fortschritt festlegen -->
|
<!-- TODO: Metrics für den Fortschritt festlegen -->
|
||||||
<span class="text-sm font-semibold text-base-content">{progress}%</span>
|
<span class="text-sm font-semibold text-base-content">{progress}%</span>
|
||||||
</div>
|
</div>
|
||||||
{#await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis)}
|
{#await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt)}
|
||||||
|
|
||||||
{:then calculations}
|
{:then calculations}
|
||||||
<div class="flex flex-col gap-2">
|
<div class="flex flex-col gap-2">
|
||||||
|
|||||||
@@ -1,13 +1,19 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Buffer } from "buffer";
|
import { Buffer } from "buffer";
|
||||||
import { VerbrauchsausweisWohnenClient } from "./Ausweis/types";
|
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||||
|
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||||
|
export let objekt: ObjektClient;
|
||||||
|
export let aufnahme: AufnahmeClient;
|
||||||
|
export let bilder: UploadedGebaeudeBild[];
|
||||||
|
|
||||||
$: base64 = Buffer.from(JSON.stringify(ausweis), "utf-8").toString("base64");
|
$: base64Ausweis = Buffer.from(JSON.stringify(ausweis), "utf-8").toString("base64")
|
||||||
|
$: base64Aufnahme = Buffer.from(JSON.stringify(aufnahme), "utf-8").toString("base64")
|
||||||
|
$: base64Objekt = Buffer.from(JSON.stringify(objekt), "utf-8").toString("base64")
|
||||||
|
$: base64Bilder = Buffer.from(JSON.stringify(bilder), "utf-8").toString("base64")
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<a class="border-2 rounded-lg bg-white text-center hover:shadow-md no-underline p-3 cursor-pointer" target="_blank" href="/pdf/datenblatt?base64={base64}">
|
<a class="border-2 rounded-lg bg-white text-center hover:shadow-md no-underline p-3 cursor-pointer" target="_blank" href="/pdf/datenblatt?ausweis={base64Ausweis}&objekt=${base64Objekt}&aufnahme={base64Aufnahme}&bilder={base64Bilder}">
|
||||||
<img src="/images/datenblatt.webp" alt="Datenblatt" />
|
<img src="/images/datenblatt.webp" alt="Datenblatt" />
|
||||||
<span class="text-black font-medium text-lg">Datenblatt</span>
|
<span class="text-black font-medium text-lg">Datenblatt</span>
|
||||||
</a>
|
</a>
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import UploadImages from "./UploadImages.svelte";
|
import UploadImages from "./UploadImages.svelte";
|
||||||
import type { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
import type { Enums } from "@ibcornelsen/database/client";
|
||||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||||
import { RotateCounterClockwise, Trash, Upload } from "radix-svelte-icons";
|
import { RotateCounterClockwise, Trash, Upload } from "radix-svelte-icons";
|
||||||
|
|
||||||
export let images: UploadedGebaeudeBild[] = [];
|
export let images: UploadedGebaeudeBild[] = [];
|
||||||
export let max: number = 4;
|
export let max: number = 4;
|
||||||
export let min: number = 1;
|
export let min: number = 1;
|
||||||
export let name: string = "";
|
export let name: string = "";
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let kategorie: Enums.BilderKategorie
|
export let kategorie: Enums.BilderKategorie
|
||||||
|
|
||||||
async function rotateImage(image: UploadedGebaeudeBild): Promise<UploadedGebaeudeBild> {
|
async function rotateImage(image: UploadedGebaeudeBild): Promise<UploadedGebaeudeBild> {
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex flex-col gap-4">
|
<div class="flex flex-col gap-4">
|
||||||
<UploadImages {name} {kategorie} {max} {min} bind:upload bind:gebaeude bind:images bind:ausweis><slot /></UploadImages>
|
<UploadImages {name} {kategorie} {max} {min} bind:upload bind:objekt bind:images bind:ausweis><slot /></UploadImages>
|
||||||
<div class="grid grid-cols-2 gap-2">
|
<div class="grid grid-cols-2 gap-2">
|
||||||
{#each images as image, i}
|
{#each images as image, i}
|
||||||
{#if image.kategorie == kategorie}
|
{#if image.kategorie == kategorie}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
<input type="radio" data-test={paymentType} id={paymentType} name="paymentType" on:change={() => selectedPaymentType = paymentType} />
|
<input type="radio" data-cy={paymentType} id={paymentType} name="paymentType" on:change={() => selectedPaymentType = paymentType} />
|
||||||
|
|
||||||
<label for={paymentType}>
|
<label for={paymentType}>
|
||||||
<div class="grid grid-rows-[1fr_20px] justify-items-center items-center cursor-pointer">
|
<div class="grid grid-rows-[1fr_20px] justify-items-center items-center cursor-pointer">
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||||
import type { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
import type { Enums } from "@ibcornelsen/database/client";
|
||||||
|
|
||||||
export let max: number = 2;
|
export let max: number = 2;
|
||||||
export let min: number = 1;
|
export let min: number = 1;
|
||||||
export let name: string = ""
|
export let name: string = ""
|
||||||
|
|
||||||
// Array of base64 encoded images read into the input.
|
// Array of base64 encoded images read into the input.
|
||||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||||
|
|
||||||
export let images: UploadedGebaeudeBild[] = [];
|
export let images: UploadedGebaeudeBild[] = [];
|
||||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||||
export let gebaeude: ObjektClient;
|
export let objekt: ObjektClient;
|
||||||
export let kategorie: Enums.BilderKategorie;
|
export let kategorie: Enums.BilderKategorie;
|
||||||
|
|
||||||
function getAllImages(this: HTMLInputElement) {
|
function getAllImages(this: HTMLInputElement) {
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
|
|
||||||
reader.onload = (ev) => {
|
reader.onload = () => {
|
||||||
if (reader.readyState != reader.DONE) {
|
if (reader.readyState != reader.DONE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { AuditType, hidden } from "./hidden.js";
|
|||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||||
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||||
|
|
||||||
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: ObjektClient, aufnahme: AufnahmeClient): Promise<boolean> {
|
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, objekt: ObjektClient, aufnahme: AufnahmeClient): Promise<boolean> {
|
||||||
if (hidden.has(AuditType.END_ENERGIE)) {
|
if (hidden.has(AuditType.END_ENERGIE)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -11,9 +11,9 @@ export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, ge
|
|||||||
if (aufnahme){
|
if (aufnahme){
|
||||||
if (aufnahme.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) {
|
if (aufnahme.flaeche && ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) {
|
||||||
try {
|
try {
|
||||||
const response = await getKlimafaktoren(ausweis.startdatum, gebaeude.plz);
|
const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz);
|
||||||
// Alle Klimfaktoren konnten abgefragt werden.
|
// Alle Klimfaktoren konnten abgefragt werden.
|
||||||
const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016({...ausweis, aufnahme: {...aufnahme, objekt: gebaeude}});
|
const eevva = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
|
||||||
if (eevva){
|
if (eevva){
|
||||||
if (eevva?.endEnergieVerbrauchGesamt <= 45 || eevva?.endEnergieVerbrauchGesamt >= 500) {
|
if (eevva?.endEnergieVerbrauchGesamt <= 45 || eevva?.endEnergieVerbrauchGesamt >= 500) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { AuditType, hidden } from "./hidden.js";
|
import { AuditType, hidden } from "./hidden.js";
|
||||||
|
|
||||||
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, gebaeude: AufnahmeClient): number[] {
|
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient): number[] {
|
||||||
if (gebaeude.leerstand && (gebaeude.leerstand > 0)) {
|
if (aufnahme.leerstand && (aufnahme.leerstand > 0)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +1,26 @@
|
|||||||
import fuelList from "#components/Ausweis/brennstoffListe";
|
import fuelList from "#components/Ausweis/brennstoffListe.js";
|
||||||
import { faker } from "@faker-js/faker";
|
import { faker } from "@faker-js/faker";
|
||||||
import { Enums } from "@ibcornelsen/database/client";
|
import { type Enums } from "@ibcornelsen/database/client";
|
||||||
import "cypress-file-upload"
|
import "cypress-file-upload"
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
||||||
|
const ausstellgrund = (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]);
|
||||||
|
const heizungsstatus = (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]);
|
||||||
|
|
||||||
it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => {
|
it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => {
|
||||||
cy.visit("/energieausweis-erstellen/verbrauchsausweis-gewerbe");
|
cy.visit("/energieausweis-erstellen/verbrauchsausweis-gewerbe");
|
||||||
|
|
||||||
cy.wait(1000);
|
cy.wait(1000);
|
||||||
|
|
||||||
// Wir überprüfen, ob alle Ausstelgründe vorhanden sind, diese sollten genau so viele sein wie in der Datenbank vorhanden sind.
|
// Wir überprüfen, ob alle Ausstelgründe vorhanden sind, diese sollten genau so viele sein wie in der Datenbank vorhanden sind.
|
||||||
cy.get("input[name='ausstellgrund']")
|
cy.get("select[data-cy='ausstellgrund']")
|
||||||
.should("have.length", Object.values(Enums.Ausstellgrund).length)
|
.select(
|
||||||
.eq(
|
|
||||||
faker.number.int({
|
faker.number.int({
|
||||||
min: 0,
|
min: 0,
|
||||||
max: Object.values(Enums.Ausstellgrund).length - 1,
|
max: (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]).length - 1,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
.check();
|
|
||||||
|
|
||||||
// Jetzt Füllen wir das Baujahr vom Gebäude aus.
|
// Jetzt Füllen wir das Baujahr vom Gebäude aus.
|
||||||
cy.get("input[name='baujahr_gebaeude']")
|
cy.get("input[name='baujahr_gebaeude']")
|
||||||
@@ -71,14 +73,14 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
.type(faker.number.int({ min: 50, max: 1000 }).toString());
|
.type(faker.number.int({ min: 50, max: 1000 }).toString());
|
||||||
|
|
||||||
// Keller
|
// Keller
|
||||||
cy.get("select[name='keller']").find("option:not([disabled])").should("have.length", Object.values(Enums.Heizungsstatus).length).parent().select(faker.number.int({
|
cy.get("select[name='keller']").find("option:not([disabled])").should("have.length", heizungsstatus.length).parent().select(faker.number.int({
|
||||||
max: Object.values(Enums.Heizungsstatus).length,
|
max: heizungsstatus.length,
|
||||||
min: 1
|
min: 1
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Dachgeschoss
|
// Dachgeschoss
|
||||||
cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", Object.values(Enums.Heizungsstatus).length).parent().select(faker.number.int({
|
cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", heizungsstatus.length).parent().select(faker.number.int({
|
||||||
max: Object.values(Enums.Heizungsstatus).length,
|
max: heizungsstatus.length,
|
||||||
min: 1
|
min: 1
|
||||||
}));
|
}));
|
||||||
|
|
||||||
@@ -88,9 +90,22 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]);
|
cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]);
|
||||||
cy.get("select[name='einheit_1']").select(brennstoffKombo[1]);
|
cy.get("select[name='einheit_1']").select(brennstoffKombo[1]);
|
||||||
|
|
||||||
|
let availableDates = [];
|
||||||
|
const startDate = moment()
|
||||||
|
.subtract(4, "years")
|
||||||
|
.subtract(6, "months");
|
||||||
|
const endDate = moment().subtract(3, "years");
|
||||||
|
|
||||||
|
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
||||||
|
availableDates.push({
|
||||||
|
year: m.year(),
|
||||||
|
month: m.month(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Verbrauchszeitraum
|
// Verbrauchszeitraum
|
||||||
cy.get("select[name='energieverbrauch_zeitraum_monat']").select(faker.number.int({ min: 1, max: 12 }).toString());
|
cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString());
|
||||||
cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(faker.number.int({ min: 2018, max: 2019 }).toString());
|
cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString());
|
||||||
|
|
||||||
// Verbrauch
|
// Verbrauch
|
||||||
cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString());
|
cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString());
|
||||||
@@ -101,18 +116,18 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
const zusaetzlicheHeizquelle = Math.random() > 0.5;
|
const zusaetzlicheHeizquelle = Math.random() > 0.5;
|
||||||
|
|
||||||
if (zusaetzlicheHeizquelle) {
|
if (zusaetzlicheHeizquelle) {
|
||||||
cy.get("input[name='zusaetzliche_heizquelle']").check();
|
cy.get("[data-cy='zusaetzliche_heizquelle']").check();
|
||||||
|
|
||||||
// Brennstoff und Einheit 2
|
// Brennstoff und Einheit 2
|
||||||
const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })];
|
const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })];
|
||||||
|
|
||||||
cy.get("select[name='brennstoff_2']").select(brennstoffKombo2[0]);
|
cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true });
|
||||||
cy.get("select[name='einheit_2']").select(brennstoffKombo2[1]);
|
cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true });
|
||||||
|
|
||||||
// Verbrauch
|
// Verbrauch
|
||||||
cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString());
|
cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
|
||||||
cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString());
|
cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
|
||||||
cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString());
|
cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gebäudestrom
|
// Gebäudestrom
|
||||||
@@ -169,7 +184,7 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
|
|
||||||
// Gebäudetyp
|
// Gebäudetyp
|
||||||
cy.get("select[name='gebaeudetyp']").then(($dropdown) => {
|
cy.get("select[name='gebaeudetyp']").then(($dropdown) => {
|
||||||
const options = $dropdown.find('option');
|
const options = $dropdown.find('option:not([disabled])');
|
||||||
// Select the option at the random index
|
// Select the option at the random index
|
||||||
cy.get("select[name='gebaeudetyp']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
|
cy.get("select[name='gebaeudetyp']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
|
||||||
});
|
});
|
||||||
@@ -210,7 +225,7 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
if (Math.random() > 0.5) cy.get("input[name='warmwasser_rohre_gedaemmt']").check();
|
if (Math.random() > 0.5) cy.get("input[name='warmwasser_rohre_gedaemmt']").check();
|
||||||
if (Math.random() > 0.5) cy.get("input[name='heizungsrohre_gedaemmt']").check();
|
if (Math.random() > 0.5) cy.get("input[name='heizungsrohre_gedaemmt']").check();
|
||||||
if (Math.random() > 0.5) cy.get("input[name='zirkulation']").check();
|
if (Math.random() > 0.5) cy.get("input[name='zirkulation']").check();
|
||||||
if (Math.random() > 0.5) cy.get("input[name='raum_temperatur_regler']").check();
|
// if (Math.random() > 0.5) cy.get("input[name='raum_temperatur_regler']").check();
|
||||||
|
|
||||||
// Heizungsanlage Bilder
|
// Heizungsanlage Bilder
|
||||||
cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" });
|
cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" });
|
||||||
@@ -247,14 +262,14 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" });
|
cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" });
|
||||||
|
|
||||||
// Jetzt können wir den Verbrauchsausweis erstellen.
|
// Jetzt können wir den Verbrauchsausweis erstellen.
|
||||||
cy.get("form[name='ausweis'] button[type='submit']").click({ force: true });
|
cy.get("form[name='ausweis'] button[data-cy='weiter']").click({ force: true });
|
||||||
|
|
||||||
// Wir sind nicht eingeloggt also sollte jetzt ein Login Screen erscheinen.
|
// Wir sind nicht eingeloggt also sollte jetzt ein Login Screen erscheinen.
|
||||||
// Wir klicken auf registrieren und erstellen einen neuen Benutzer, danach loggen wir uns mit diesem ein.
|
// Wir klicken auf registrieren und erstellen einen neuen Benutzer, danach loggen wir uns mit diesem ein.
|
||||||
cy.get("button[name='registrieren']").click();
|
cy.get("[data-cy='registrieren']").click();
|
||||||
|
|
||||||
const email = faker.internet.email();
|
const email = faker.internet.email();
|
||||||
const passwort = faker.internet.password();
|
const passwort = "test1234";
|
||||||
const vorname = faker.person.firstName();
|
const vorname = faker.person.firstName();
|
||||||
const nachname = faker.person.lastName();
|
const nachname = faker.person.lastName();
|
||||||
|
|
||||||
@@ -272,6 +287,37 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
|
|
||||||
cy.get("form[name='login'] button[type='submit']").click();
|
cy.get("form[name='login'] button[type='submit']").click();
|
||||||
|
|
||||||
// Der Ausweis sollte jetzt schon erstellt worden sein.
|
// Der Ausweis sollte jetzt schon erstellt worden sein und wir sollten auf die kundendaten seite weitergeleitet worden sein.
|
||||||
|
cy.url().should("contain", "/kundendaten");
|
||||||
|
|
||||||
|
cy.wait(1000)
|
||||||
|
|
||||||
|
// Wir füllen jetzt die Kundendaten aus.
|
||||||
|
// cy.get("select[name='anrede']").select(Math.random() > 0.5 ? "Herr" : "Frau");
|
||||||
|
cy.get("input[name='vorname']").should("contain.value", vorname);
|
||||||
|
cy.get("input[name='name']").should("contain.value", nachname);
|
||||||
|
// cy.get("input[name='email']").should("contain.value", email);
|
||||||
|
// cy.get("input[name='telefon']").type(faker.phone.number());
|
||||||
|
|
||||||
|
cy.get("input[name='rechnung_empfaenger']").type(`${vorname} ${nachname}`);
|
||||||
|
cy.get("input[name='rechnung_strasse']").type(faker.location.streetAddress());
|
||||||
|
// TODO: Random Plz generieren, allerdings muss die auch in der Datenbank vorhanden sein...
|
||||||
|
cy.get("input[name='rechnung_plz']").type("2103");
|
||||||
|
// Jetzt sollte der PLZ Container erscheinen, dort klicken wir einfach das erste Element an.
|
||||||
|
cy.get("div[data-test='plz-container']").children().first().click();
|
||||||
|
// cy.get("input[name='rechnung_telefon']").type(faker.phone.number());
|
||||||
|
cy.get("input[name='rechnung_email']").should("contain.value", email);
|
||||||
|
cy.get("input[data-cy='paypal']").click();
|
||||||
|
|
||||||
|
// Datenschutz und AGB akzeptieren, dann schicken wir das Formular ab.
|
||||||
|
// cy.get("input[name='agb-akzeptieren']").check()
|
||||||
|
// cy.get("input[name='datenschutz-akzeptieren']").check()
|
||||||
|
cy.get("button[data-cy='bestellen']").click();
|
||||||
|
|
||||||
|
cy.origin('https://www.mollie.com', () => {
|
||||||
|
// Jetzt sind wir auf der Mollie Seite, dort wählen wir den "paid" status aus
|
||||||
|
cy.get("input[type='radio'][name='final_state'][value='paid']").check();
|
||||||
|
// Da wird unser Test fehlschlagen, da die localhost domain von Mollie aus nicht erreichbar ist.
|
||||||
|
})
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -266,11 +266,11 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
cy.wait(1000)
|
cy.wait(1000)
|
||||||
|
|
||||||
// Wir füllen jetzt die Kundendaten aus.
|
// Wir füllen jetzt die Kundendaten aus.
|
||||||
cy.get("select[name='anrede']").select(Math.random() > 0.5 ? "Herr" : "Frau");
|
// cy.get("select[name='anrede']").select(Math.random() > 0.5 ? "Herr" : "Frau");
|
||||||
cy.get("input[name='vorname']").should("contain.value", vorname);
|
cy.get("input[name='vorname']").should("contain.value", vorname);
|
||||||
cy.get("input[name='name']").should("contain.value", nachname);
|
cy.get("input[name='name']").should("contain.value", nachname);
|
||||||
cy.get("input[name='email']").should("contain.value", email);
|
// cy.get("input[name='email']").should("contain.value", email);
|
||||||
cy.get("input[name='telefon']").type(faker.phone.number());
|
// cy.get("input[name='telefon']").type(faker.phone.number());
|
||||||
|
|
||||||
cy.get("input[name='rechnung_empfaenger']").type(`${vorname} ${nachname}`);
|
cy.get("input[name='rechnung_empfaenger']").type(`${vorname} ${nachname}`);
|
||||||
cy.get("input[name='rechnung_strasse']").type(faker.location.streetAddress());
|
cy.get("input[name='rechnung_strasse']").type(faker.location.streetAddress());
|
||||||
@@ -278,14 +278,14 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
|||||||
cy.get("input[name='rechnung_plz']").type("2103");
|
cy.get("input[name='rechnung_plz']").type("2103");
|
||||||
// Jetzt sollte der PLZ Container erscheinen, dort klicken wir einfach das erste Element an.
|
// Jetzt sollte der PLZ Container erscheinen, dort klicken wir einfach das erste Element an.
|
||||||
cy.get("div[data-test='plz-container']").children().first().click();
|
cy.get("div[data-test='plz-container']").children().first().click();
|
||||||
cy.get("input[name='rechnung_telefon']").type(faker.phone.number());
|
// cy.get("input[name='rechnung_telefon']").type(faker.phone.number());
|
||||||
cy.get("input[name='rechnung_email']").type(faker.internet.email());
|
cy.get("input[name='rechnung_email']").should("contain.value", email);
|
||||||
cy.get("button[data-test='paypal']").click();
|
cy.get("input[data-cy='paypal']").click();
|
||||||
|
|
||||||
// Datenschutz und AGB akzeptieren, dann schicken wir das Formular ab.
|
// Datenschutz und AGB akzeptieren, dann schicken wir das Formular ab.
|
||||||
cy.get("input[name='agb-akzeptieren']").check()
|
// cy.get("input[name='agb-akzeptieren']").check()
|
||||||
cy.get("input[name='datenschutz-akzeptieren']").check()
|
// cy.get("input[name='datenschutz-akzeptieren']").check()
|
||||||
cy.get("button[type='submit']").click();
|
cy.get("button[data-cy='bestellen']").click();
|
||||||
|
|
||||||
cy.origin('https://www.mollie.com', () => {
|
cy.origin('https://www.mollie.com', () => {
|
||||||
// Jetzt sind wir auf der Mollie Seite, dort wählen wir den "paid" status aus
|
// Jetzt sind wir auf der Mollie Seite, dort wählen wir den "paid" status aus
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import "../../svelte-dialogs.config"
|
|||||||
import "svelte-ripple-action/ripple.css"
|
import "svelte-ripple-action/ripple.css"
|
||||||
import DashboardSidebar from "../components/Dashboard/DashboardSidebar.svelte"
|
import DashboardSidebar from "../components/Dashboard/DashboardSidebar.svelte"
|
||||||
import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
|
import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
|
||||||
import { createCaller } from "#lib/caller";
|
import { createCaller } from "src/astro-typesafe-api-caller";
|
||||||
|
|
||||||
const valid = validateAccessTokenServer(Astro)
|
const valid = validateAccessTokenServer(Astro)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,281 @@
|
|||||||
|
import { AufnahmeClient, ObjektClient, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
|
||||||
|
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||||
|
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js";
|
||||||
|
import moment from "moment";
|
||||||
|
import bauwerkskatalog from "./bauwerkskatalog.json" assert { type: "json" }
|
||||||
|
|
||||||
|
function vergleichsWertNichtWohngebaeude(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient) {
|
||||||
|
let tekWerte = new Array(8).fill(0);
|
||||||
|
|
||||||
|
if (aufnahme.gebaeudetyp && aufnahme.gebaeudetyp in bauwerkskatalog){
|
||||||
|
tekWerte = bauwerkskatalog[aufnahme.gebaeudetyp as keyof typeof bauwerkskatalog];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!tekWerte) {
|
||||||
|
return [0,0];
|
||||||
|
}
|
||||||
|
|
||||||
|
let faktorWarmwasser = 1;
|
||||||
|
if (ausweis.stromverbrauch_enthaelt_warmwasser) {
|
||||||
|
faktorWarmwasser = 0.9;
|
||||||
|
}
|
||||||
|
|
||||||
|
let faktorHeizung = 0;
|
||||||
|
if (aufnahme.nutzflaeche && aufnahme.nutzflaeche <= 500) {
|
||||||
|
faktorHeizung = 1.46;
|
||||||
|
} else if (aufnahme.nutzflaeche && aufnahme.nutzflaeche > 500 && aufnahme.nutzflaeche <= 50000) {
|
||||||
|
faktorHeizung = 4.53 * (aufnahme.nutzflaeche ** -0.215) + 0.27;
|
||||||
|
} else {
|
||||||
|
faktorHeizung = 0.71;
|
||||||
|
}
|
||||||
|
|
||||||
|
let tekHeizung = tekWerte[0] * faktorHeizung;
|
||||||
|
let tekWarmwasser = tekWerte[1] * faktorWarmwasser;
|
||||||
|
let tekLueftung = ausweis.stromverbrauch_enthaelt_lueftung ? tekWerte[2] : 0;
|
||||||
|
|
||||||
|
let tekEingebauteBeleuchtung = ausweis.stromverbrauch_enthaelt_beleuchtung ? tekWerte[3] : 0;
|
||||||
|
let tekKaelte = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[4] : 0;
|
||||||
|
|
||||||
|
let tekHilfsenergieKuehlung = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[5] : 0;
|
||||||
|
let tekBeEntfeuchtung = ausweis.stromverbrauch_enthaelt_kuehlung ? tekWerte[6] : 0;
|
||||||
|
|
||||||
|
// TODO: let tekAufzug = ausweis.nwaufzug ? 2 : 0;
|
||||||
|
let tekAufzug = 0;
|
||||||
|
|
||||||
|
let tekSonstiges = (ausweis.stromverbrauch_enthaelt_sonstige != null && ausweis.stromverbrauch_enthaelt_sonstige.length > 0) ? tekWerte[7] : 0;
|
||||||
|
|
||||||
|
let vergleichsWertWaerme = tekHeizung + tekKaelte + tekBeEntfeuchtung;
|
||||||
|
let vergleichsWertStrom = tekWarmwasser + tekLueftung + tekEingebauteBeleuchtung + tekHilfsenergieKuehlung + tekAufzug + tekSonstiges;
|
||||||
|
|
||||||
|
return [vergleichsWertWaerme, vergleichsWertStrom];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gibt einen array bestehend aus
|
||||||
|
* [0]: Endenergieverbrauch
|
||||||
|
* [1]: Primärenergiebedarf
|
||||||
|
* zurück.
|
||||||
|
*
|
||||||
|
* @param Ausweis ausweis Ein Ausweis dessen Energiebedarf berechnet werden soll
|
||||||
|
* @return VerbrauchsausweisGewerbeCalculationResult
|
||||||
|
*/
|
||||||
|
export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient) {
|
||||||
|
if (!aufnahme || !objekt || !ausweis) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nutzflaeche = aufnahme.nutzflaeche || 0;
|
||||||
|
|
||||||
|
let startdatum = moment(ausweis.startdatum);
|
||||||
|
|
||||||
|
let klimafaktoren: Awaited<ReturnType<typeof getKlimafaktoren>> = [{
|
||||||
|
month: startdatum.month(),
|
||||||
|
year: startdatum.year(),
|
||||||
|
klimafaktor: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
month: startdatum.month(),
|
||||||
|
year: startdatum.year() + 1,
|
||||||
|
klimafaktor: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
month: startdatum.month(),
|
||||||
|
year: startdatum.year() + 2,
|
||||||
|
klimafaktor: 1
|
||||||
|
}];
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz)
|
||||||
|
|
||||||
|
if (response) {
|
||||||
|
klimafaktoren = response
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
// TODO: Entweder setzen wir hier mit falschen Klimafaktoren fort, oder wir geben null zurück.
|
||||||
|
// Im Moment setzen wir einfach fort, aber das ist nicht unbedingt die beste Lösung.
|
||||||
|
// return null
|
||||||
|
}
|
||||||
|
|
||||||
|
// Endenergieverbrauch
|
||||||
|
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||||
|
let umrechnungsfaktor = 1, primaerfaktor = 1, coe = 1;
|
||||||
|
let umrechnungsfaktor_1 = 1, primaerfaktor_1 = 1, coe_1 = 1;
|
||||||
|
if (ausweis.brennstoff_1 && ausweis.einheit_1) {
|
||||||
|
let result = getHeizwertfaktor(ausweis.brennstoff_1, ausweis.einheit_1);
|
||||||
|
umrechnungsfaktor = result.umrechnungsfaktor
|
||||||
|
primaerfaktor = result.primaerenergiefaktor
|
||||||
|
coe = result.coe
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ausweis.brennstoff_2 && ausweis.einheit_2) {
|
||||||
|
let result = getHeizwertfaktor(ausweis.brennstoff_2, ausweis.einheit_2);
|
||||||
|
umrechnungsfaktor_1 = result.umrechnungsfaktor
|
||||||
|
primaerfaktor_1 = result.primaerenergiefaktor
|
||||||
|
coe_1 = result.coe
|
||||||
|
}
|
||||||
|
|
||||||
|
let energieVerbrauchGesamt_1 = ((ausweis.verbrauch_1 || 0) + (ausweis.verbrauch_2 || 0) + (ausweis.verbrauch_3 || 0)) * umrechnungsfaktor;
|
||||||
|
let energieVerbrauchGesamt_2 = ((ausweis.verbrauch_4 || 0) + (ausweis.verbrauch_5 || 0) + (ausweis.verbrauch_6 || 0)) * umrechnungsfaktor_1;
|
||||||
|
|
||||||
|
let energieVerbrauchWarmwasser_1 = 0;
|
||||||
|
let energieVerbrauchWarmwasser_2 = 0;
|
||||||
|
|
||||||
|
if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 != 0) {
|
||||||
|
|
||||||
|
// Wenn Warmwasser enthalten und Anteil bekannt
|
||||||
|
energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_warmwasser_1 || 0) / 100);
|
||||||
|
energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
|
||||||
|
|
||||||
|
} else if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 == 0){
|
||||||
|
if (aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre)" || aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung" || aufnahme.gebaeudetyp == "Schwimmhallen") {
|
||||||
|
energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.5;
|
||||||
|
energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.05;
|
||||||
|
energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
|
||||||
|
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
energieVerbrauchWarmwasser_1 = 0;
|
||||||
|
energieVerbrauchWarmwasser_2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let kuehlungsZuschlag_1: number;
|
||||||
|
let kuehlungsZuschlag_2: number;
|
||||||
|
if (ausweis.wird_gekuehlt) {
|
||||||
|
kuehlungsZuschlag_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_kuehlung_1 || 0) / 100);
|
||||||
|
kuehlungsZuschlag_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_kuehlung_2 || 0) / 100);
|
||||||
|
} else {
|
||||||
|
kuehlungsZuschlag_1 = kuehlungsZuschlag_2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
|
||||||
|
let leerstand = (aufnahme.leerstand || 0) / 100;
|
||||||
|
|
||||||
|
let energieVerbrauchHeizung_1 = energieVerbrauchGesamt_1 - energieVerbrauchWarmwasser_1 - kuehlungsZuschlag_1;
|
||||||
|
let energieVerbrauchHeizung_2 = energieVerbrauchGesamt_2 - energieVerbrauchWarmwasser_2 - kuehlungsZuschlag_2;
|
||||||
|
|
||||||
|
let durchschnittsKlimafaktor = klimafaktoren.reduce((acc, c) => acc + c.klimafaktor, 0) / klimafaktoren.length;
|
||||||
|
|
||||||
|
let energieVerbrauchHeizungBereinigt_1 = energieVerbrauchHeizung_1 * durchschnittsKlimafaktor;
|
||||||
|
let energieVerbrauchHeizungBereinigt_2 = energieVerbrauchHeizung_2 * durchschnittsKlimafaktor;
|
||||||
|
|
||||||
|
let durchschnittsEnergieVerbrauchHeizungBereingt = (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchHeizungBereinigt_2) / (3 * nutzflaeche);
|
||||||
|
|
||||||
|
let faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = -0.0028 * durchschnittsEnergieVerbrauchHeizungBereingt + 0.9147;
|
||||||
|
|
||||||
|
if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt <= 0.25) {
|
||||||
|
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 0.25;
|
||||||
|
} else if (faktorDurchschnittsEnergieVerbrauchHeizungBereinigt >= 1.0) {
|
||||||
|
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt = 1.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let leerstandsZuschlagHeizung = faktorDurchschnittsEnergieVerbrauchHeizungBereinigt * leerstand * (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchHeizungBereinigt_2);
|
||||||
|
let leerstandsZuschlagWarmwasser = leerstand * (energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
|
||||||
|
let leerstandsZuschlagKuehlung = leerstand * (kuehlungsZuschlag_1 + kuehlungsZuschlag_2);
|
||||||
|
|
||||||
|
|
||||||
|
let endEnergieVerbrauch_1 = (energieVerbrauchHeizungBereinigt_1 + energieVerbrauchWarmwasser_1 + kuehlungsZuschlag_1) / (3 * nutzflaeche);
|
||||||
|
let endEnergieVerbrauch_2 = (energieVerbrauchHeizungBereinigt_2 + energieVerbrauchWarmwasser_2 + kuehlungsZuschlag_2) / (3 * nutzflaeche);
|
||||||
|
|
||||||
|
let energieVerbrauchStrom = ausweis.strom_1 + ausweis.strom_2 + ausweis.strom_3;
|
||||||
|
let leerstandsZuschlagStrom = leerstand * energieVerbrauchStrom;
|
||||||
|
|
||||||
|
let endEnergieVerbrauchStrom = (energieVerbrauchStrom + leerstandsZuschlagStrom) / (3 * nutzflaeche);
|
||||||
|
let primaerEnergieVerbrauchStrom = endEnergieVerbrauchStrom * 1.8;
|
||||||
|
|
||||||
|
let co2EmissionenStrom = endEnergieVerbrauchStrom * 0.560;
|
||||||
|
|
||||||
|
let endEnergieVerbrauchLeerstandsZuschlag = (leerstandsZuschlagHeizung + leerstandsZuschlagWarmwasser + leerstandsZuschlagKuehlung) / (3 * nutzflaeche);
|
||||||
|
let endEnergieVerbrauchKuehlungsZuschlag_1 = kuehlungsZuschlag_1 / (3 * nutzflaeche);
|
||||||
|
let endEnergieVerbrauchKuehlungsZuschlag_2 = kuehlungsZuschlag_2 / (3 * nutzflaeche);
|
||||||
|
|
||||||
|
let primaerEnergieVerbrauch_1 = endEnergieVerbrauch_1 * primaerfaktor;
|
||||||
|
let primaerEnergieVerbrauch_2 = endEnergieVerbrauch_2 * primaerfaktor_1;
|
||||||
|
|
||||||
|
let primaerEnergieVerbrauchLeerstandsZuschlag = endEnergieVerbrauchLeerstandsZuschlag * primaerfaktor;
|
||||||
|
let primaerEnergieVerbrauchKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * primaerfaktor;
|
||||||
|
let primaerEnergieVerbrauchKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * primaerfaktor_1;
|
||||||
|
|
||||||
|
let co2Emissionen_1 = endEnergieVerbrauch_1 * coe;
|
||||||
|
let co2Emissionen_2 = endEnergieVerbrauch_2 * coe_1;
|
||||||
|
|
||||||
|
let co2EmissionenLeerstandsZuschlag = endEnergieVerbrauchLeerstandsZuschlag * coe;
|
||||||
|
let co2EmissionenKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * coe;
|
||||||
|
let co2EmissionenKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * coe_1;
|
||||||
|
|
||||||
|
let endEnergieVerbrauchGesamt = endEnergieVerbrauch_1 + endEnergieVerbrauch_2 + endEnergieVerbrauchLeerstandsZuschlag;
|
||||||
|
let primaerEnergieVerbrauchGesamt = primaerEnergieVerbrauch_1 + primaerEnergieVerbrauch_2 + primaerEnergieVerbrauchLeerstandsZuschlag + primaerEnergieVerbrauchStrom;
|
||||||
|
let co2EmissionenGesamt = co2Emissionen_1 + co2Emissionen_2 + co2EmissionenLeerstandsZuschlag + co2EmissionenStrom;
|
||||||
|
|
||||||
|
let [vergleichsWertWaerme, vergleichsWertStrom] = vergleichsWertNichtWohngebaeude(ausweis, aufnahme);
|
||||||
|
|
||||||
|
// Return all the steps that this function includes for debugging as a json object
|
||||||
|
return {
|
||||||
|
umrechnungsfaktor : umrechnungsfaktor,
|
||||||
|
primaerfaktor : primaerfaktor,
|
||||||
|
coe : coe,
|
||||||
|
umrechnungsfaktor_1 : umrechnungsfaktor_1,
|
||||||
|
primaerfaktor_1 : primaerfaktor_1,
|
||||||
|
coe_1 : coe_1,
|
||||||
|
kuehlungsZuschlag_1 : Math.round(kuehlungsZuschlag_1),
|
||||||
|
kuehlungsZuschlag_2: Math.round(kuehlungsZuschlag_2),
|
||||||
|
durchschnittsKlimafaktor : Math.round(durchschnittsKlimafaktor,2),
|
||||||
|
Klimafaktor_1 : klimafaktoren[0],
|
||||||
|
Klimafaktor_2 : klimafaktoren[1],
|
||||||
|
Klimafaktor_3 : klimafaktoren[2],
|
||||||
|
anteil_heizung_1: 1 - ((ausweis.anteil_warmwasser_1 || 0) / 100),
|
||||||
|
anteil_heizung_2: 1 - ((ausweis.anteil_warmwasser_2 || 0) / 100),
|
||||||
|
verbrauch_1_kwh: ausweis.verbrauch_1 * umrechnungsfaktor,
|
||||||
|
verbrauch_2_kwh: ausweis.verbrauch_2 * umrechnungsfaktor,
|
||||||
|
verbrauch_3_kwh: ausweis.verbrauch_3 * umrechnungsfaktor,
|
||||||
|
verbrauch_4_kwh: ausweis.verbrauch_4 * umrechnungsfaktor_1,
|
||||||
|
verbrauch_5_kwh: ausweis.verbrauch_5 * umrechnungsfaktor_1,
|
||||||
|
verbrauch_6_kwh: ausweis.verbrauch_6 * umrechnungsfaktor_1,
|
||||||
|
klimafaktoren : klimafaktoren,
|
||||||
|
nutzflaeche : Math.round(nutzflaeche),
|
||||||
|
leerstand : leerstand,
|
||||||
|
leerstandsZuschlagHeizung: Math.round(leerstandsZuschlagHeizung),
|
||||||
|
leerstandsZuschlagWarmwasser: Math.round(leerstandsZuschlagWarmwasser),
|
||||||
|
leerstandsZuschlagKuehlung: Math.round(leerstandsZuschlagKuehlung),
|
||||||
|
endEnergieVerbrauchLeerstandsZuschlag: Math.round(endEnergieVerbrauchLeerstandsZuschlag),
|
||||||
|
endEnergieVerbrauchKuehlungsZuschlag_1: Math.round(endEnergieVerbrauchKuehlungsZuschlag_1),
|
||||||
|
endEnergieVerbrauchKuehlungsZuschlag_2: Math.round(endEnergieVerbrauchKuehlungsZuschlag_2),
|
||||||
|
coeeffkg : co2EmissionenGesamt,
|
||||||
|
energieVerbrauchGesamt_1: Math.round(energieVerbrauchGesamt_1),
|
||||||
|
energieVerbrauchGesamt_2: Math.round(energieVerbrauchGesamt_2),
|
||||||
|
energieVerbrauchWarmwasser_1: Math.round(energieVerbrauchWarmwasser_1),
|
||||||
|
energieVerbrauchWarmwasser_2: Math.round(energieVerbrauchWarmwasser_2),
|
||||||
|
energieVerbrauchHeizung_1: energieVerbrauchHeizung_1,
|
||||||
|
energieVerbrauchHeizung_2: energieVerbrauchHeizung_2,
|
||||||
|
anteil_warmwasser_1: ausweis.anteil_warmwasser_1 / 100,
|
||||||
|
anteil_warmwasser_2: ausweis.anteil_warmwasser_2 / 100,
|
||||||
|
energieVerbrauchHeizungBereinigt_1: Math.round(energieVerbrauchHeizungBereinigt_1),
|
||||||
|
energieVerbrauchHeizungBereinigt_2: Math.round(energieVerbrauchHeizungBereinigt_2),
|
||||||
|
durchschnittsEnergieVerbrauchHeizungBereingt: Math.round(durchschnittsEnergieVerbrauchHeizungBereingt),
|
||||||
|
faktorDurchschnittsEnergieVerbrauchHeizungBereinigt: Math.round(faktorDurchschnittsEnergieVerbrauchHeizungBereinigt,3),
|
||||||
|
endEnergieVerbrauch_1: Math.round(endEnergieVerbrauch_1),
|
||||||
|
endEnergieVerbrauch_2: Math.round(endEnergieVerbrauch_2),
|
||||||
|
energieVerbrauchStrom: energieVerbrauchStrom,
|
||||||
|
leerstandsZuschlagStrom: leerstandsZuschlagStrom,
|
||||||
|
endEnergieVerbrauchStrom: Math.round(endEnergieVerbrauchStrom),
|
||||||
|
primaerEnergieVerbrauchStrom: Math.round(primaerEnergieVerbrauchStrom),
|
||||||
|
primaerEnergieVerbrauch_1: Math.round(primaerEnergieVerbrauch_1),
|
||||||
|
primaerEnergieVerbrauch_2: Math.round(primaerEnergieVerbrauch_2),
|
||||||
|
primaerEnergieVerbrauchLeerstandsZuschlag: Math.round(primaerEnergieVerbrauchLeerstandsZuschlag),
|
||||||
|
primaerEnergieVerbrauchKuehlungsZuschlag_1: Math.round(primaerEnergieVerbrauchKuehlungsZuschlag_1),
|
||||||
|
primaerEnergieVerbrauchKuehlungsZuschlag_2: Math.round(primaerEnergieVerbrauchKuehlungsZuschlag_2),
|
||||||
|
co2Emissionen_1: co2Emissionen_1,
|
||||||
|
co2Emissionen_2: co2Emissionen_2,
|
||||||
|
co2EmissionenLeerstandsZuschlag: co2EmissionenLeerstandsZuschlag,
|
||||||
|
co2EmissionenKuehlungsZuschlag_1: co2EmissionenKuehlungsZuschlag_1,
|
||||||
|
co2EmissionenKuehlungsZuschlag_2: co2EmissionenKuehlungsZuschlag_2,
|
||||||
|
co2EmissionenGesamt: Math.round(co2EmissionenGesamt),
|
||||||
|
endEnergieVerbrauchGesamt: Math.round(endEnergieVerbrauchGesamt),
|
||||||
|
primaerEnergieVerbrauchGesamt: Math.round(primaerEnergieVerbrauchGesamt),
|
||||||
|
vergleichsWertWaerme: vergleichsWertWaerme,
|
||||||
|
vergleichsWertStrom: vergleichsWertStrom,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"Verwaltungsgebäude (allgemein)": [48.5, 6.9, 3.2, 10.7, 2.6, 3.1, 0.1, 2.8],
|
||||||
|
"Parlaments- und Gerichtsgebäude": [49.9, 6.8, 3, 9.5, 1.2, 0.9, 1.7, 0.6],
|
||||||
|
"Ministerien u. Ämter u. Behörden": [48.3, 7.4, 3.7, 10.8, 1.5, 1.2, 1, 0.7],
|
||||||
|
"Polizeidienstgebäude": [52.4, 7.4, 2.5, 10.4, 0.5, 0.4, 0, 0.7],
|
||||||
|
"Gebäude für öffentliche Bereitschaftsdienste": [51.6, 10.2, 3, 7.8, 0.3, 0.2, 0, 4],
|
||||||
|
"Feuerwehrdienstgebäude": [50.8, 7.1, 3.2, 6.7, 0.3, 0.2, 0, 3.7],
|
||||||
|
"Bürogebäude": [49, 8.1, 4.7, 12.9, 2.9, 2.2, 0, 2.8],
|
||||||
|
"Bürogebäude - überwiegend Großraumbüros": [47.4, 12.8, 7.3, 16.6, 6, 4.3, 0, 0.9],
|
||||||
|
"Bankgebäude": [48, 6.4, 1.6, 10.7, 1.5, 1.1, 0, 0.6],
|
||||||
|
"Hochschule und Forschung (allgemein)": [66.5, 6.7, 13.3, 11, 3.4, 2.2, 3.8, 1.2],
|
||||||
|
"Gebäude für Lehre": [57.2, 5.6, 8.7, 8.5, 2.5, 1.5, 0.4, 1.1],
|
||||||
|
"Institute für Lehre und Forschung": [65, 7.6, 13.8, 11.7, 3.5, 2.4, 14.7, 2.1],
|
||||||
|
"Gebäude für Forschung ohne Lehre": [87.8, 7.4, 14.9, 14.8, 3.5, 2.4, 0, 1.2],
|
||||||
|
"Laborgebäude": [82.8, 8, 20.3, 13.5, 4.2, 2.9, 1.7, 1.3],
|
||||||
|
"Gesundheitswesen (allgemein)": [55.7, 15.3, 4.9, 17.4, 1.6, 1.3, 0, 1.1],
|
||||||
|
"Krankenhäuser (ohne Forschung und Lehre)": [64.1, 40.8, 10.4, 15.8, 1.7, 1.6, 0, 1.2],
|
||||||
|
"Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung": [61.7, 33.6, 9.2, 15.9, 1.7, 1.6, 0, 0.9],
|
||||||
|
"Medizinische Einrichtungen für nicht stationäre Versorgung": [51.2, 8.6, 2.2, 18.3, 1.4, 1, 0, 1.3],
|
||||||
|
"Gebäude für Reha": [null, 59.4, 22.1, 6, 14.6, 0.9, 0.7, 0, 3.5],
|
||||||
|
"Bildungseinrichtungen (allgemein)": [49.7, 19.5, 4.1, 5.5, 0.2, 0.2, 0, 0.6],
|
||||||
|
"Schulen": [49.3, 22.4, 3.9, 5.5, 0.3, 0.2, 0, 0.6],
|
||||||
|
"Kinderbetreuungseinrichtungen": [50.4, 17.3, 4.2, 5.5, 0.1, 0.1, 0, 0.6],
|
||||||
|
"Kultureinrichtungen (allgemein)": [55.9, 7.5, 6.7, 9, 1.6, 1.2, 0.1, 0.3],
|
||||||
|
"Bibliotheken/Archive": [49, 5, 2.1, 14.3, 0.5, 0.4, 0, 0.3],
|
||||||
|
"Ausstellungsgebäude": [57.6, 7.7, 6.3, 7.8, 1.7, 1.3, 0.3, 0.2],
|
||||||
|
"Veranstaltungsgebäude": [58.4, 9.1, 7, 8.9, 1.3, 0.9, 0.1, 0.3],
|
||||||
|
"Gemeinschafts-/Gemeindehäuser": [63.6, 10, 5.6, 10.8, 0.8, 0.6, 0.1, 6],
|
||||||
|
"Opern/Theater": [58.8, 7.6, 9.1, 8.6, 2, 1.3, 0, 0.9],
|
||||||
|
"Sporteinrichtungen (allgemein)": [65.5, 27.3, 6.4, 14.5, 0.6, 0.6, 0, 1.9],
|
||||||
|
"Sporthallen": [68.6, 22, 4.6, 14.3, 0.2, 0.2, 0, 0.1],
|
||||||
|
"Fitnessstudios": [60.6, 62.2, 11.9, 24.5, 4, 4.2, 0, 8.9],
|
||||||
|
"Schwimmhallen": [63.8, 24.7, 8.3, 13.4, 1.1, 1.1, 30, 7.3],
|
||||||
|
"Gebäude für Sportaußenanlagen": [75.2, 22.5, 5.7, 10.2, 0, 0, 0, 5.5],
|
||||||
|
"Verpflegungseinrichtungen (allgemein)": [75.9, 77.7, 16.6, 18.1, 3.5, 3, 0, 24.8],
|
||||||
|
"Beherbergungsstätten (allgemein)": [52.1, 86, 9.1, 9.1, 3.3, 2.7, 0, 7],
|
||||||
|
"Hotels/Pensionen": [51.2, 89.1, 9.1, 8.6, 3.5, 2.9, 0, 6.8],
|
||||||
|
"Jugendherbergen u. Ferienhäuser": [63.4, 50.9, 1.9, 12.6, 0, 0, 0, 8.8],
|
||||||
|
"Gaststätten": [77.8, 79, 13.7, 19.7, 3.8, 3.3, 0, 25.2],
|
||||||
|
"Mensen u. Kantinen": [67, 67.3, 21, 11.4, 0.7, 0.5, 0, 22.7],
|
||||||
|
"Gewerbliche und industrielle Gebäude (allgemein)": [38.7, 12.6, 2.1, 9.6, 0.8, 0.5, 0, 12.2],
|
||||||
|
"Gewerbliche und industrielle Gebäude - schwere Arbeit": [null, 37.8, 20, 3.1, 11.8, 1, 0.6, 0, 22.6],
|
||||||
|
"Gewerbliche und industrielle Gebäude - Mischung aus leichter u. schwerer Arbeit": [36, 24.2, 3.8, 13, 2.1, 1.2, 0, 24.9],
|
||||||
|
"Gewerbliche und industrielle Gebäude - leichte Arbeit": [null, 38.1, 19.8, 3.3, 15.2, 1.9, 1.1, 0, 22.3],
|
||||||
|
"Gebäude für Lagerung": [38.1, 19.3, 3.3, 13.2, 1.7, 1, 0, 21.6],
|
||||||
|
"Verkaufsstätten (allgemein)": [47.9, 7.6, 5.6, 16.3, 2.6, 2, 0, 6.9],
|
||||||
|
"Kaufhäuser": [45.9, 6.4, 6, 16.6, 1.1, 0.9, 0, 2.7],
|
||||||
|
"Kaufhauszentren/Einkaufszentren": [47.3, 11.1, 7.4, 16.6, 4.6, 3.5, 0.1, 5.5],
|
||||||
|
"Märkte": [48.7, 6.2, 7.3, 17.3, 2.8, 2.1, 0, 10.5],
|
||||||
|
"Märkte mit sehr hohem Anteil von Kühlung für Lebensmittel": [48.7, 6.2, 7.3, 17.3, 2.8, 2.1, 0, 72.5],
|
||||||
|
"Läden": [46.8, 6.4, 1.9, 15.8, 0.9, 0.7, 0, 2.1],
|
||||||
|
"Läden mit sehr hohem Anteil von Kühlung für Lebensmittel": [46.8, 6.4, 1.9, 15.8, 0.9, 0.7, 0, 54.1],
|
||||||
|
"Fernmeldetechnik": [38.4, 4, 3.4, 16, 0, 0, 0, 53.7]
|
||||||
|
}
|
||||||
@@ -1,33 +1,32 @@
|
|||||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||||
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js";
|
import { getHeizwertfaktor } from "#lib/server/Heizwertfaktor.js";
|
||||||
import { Enums } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
|
||||||
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
|
export function energetischeNutzflaecheVerbrauchsausweisWohnen_2016(
|
||||||
ausweis: VerbrauchsausweisWohnenClient
|
ausweis: VerbrauchsausweisWohnenClient,
|
||||||
|
aufnahme: AufnahmeClient
|
||||||
): number {
|
): number {
|
||||||
if (!ausweis.aufnahme.objekt) {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
let faktorKeller = 1.2;
|
let faktorKeller = 1.2;
|
||||||
// Falls das Gebäude einen Keller besitzt der Beheizt ist erhöhen wir die Nutzfläche um 15%
|
// Falls das Gebäude einen Keller besitzt der Beheizt ist erhöhen wir die Nutzfläche um 15%
|
||||||
if (ausweis.aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (ausweis.aufnahme.einheiten || 1) <= 2) {
|
if (aufnahme.keller == Enums.Heizungsstatus.BEHEIZT && (aufnahme.einheiten || 1) <= 2) {
|
||||||
faktorKeller = 1.35;
|
faktorKeller = 1.35;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ausweis.aufnahme.nutzflaeche || 0) > 0) {
|
if ((aufnahme.nutzflaeche || 0) > 0) {
|
||||||
return ausweis.aufnahme.nutzflaeche || 0;
|
return aufnahme.nutzflaeche || 0;
|
||||||
} else {
|
} else {
|
||||||
return (ausweis.aufnahme.flaeche || 0) * faktorKeller;
|
return (aufnahme.flaeche || 0) * faktorKeller;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||||
ausweis: VerbrauchsausweisWohnenClient
|
ausweis: VerbrauchsausweisWohnenClient,
|
||||||
|
aufnahme: AufnahmeClient,
|
||||||
|
objekt: ObjektClient
|
||||||
) {
|
) {
|
||||||
if (!ausweis.aufnahme || !ausweis.aufnahme.objekt) {
|
if (!aufnahme || !objekt || !ausweis) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +49,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
|||||||
}];
|
}];
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await getKlimafaktoren(ausweis.startdatum, ausweis.aufnahme.objekt.plz)
|
const response = await getKlimafaktoren(ausweis.startdatum, objekt.plz)
|
||||||
|
|
||||||
if (response) {
|
if (response) {
|
||||||
klimafaktoren = response
|
klimafaktoren = response
|
||||||
@@ -65,16 +64,16 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
|||||||
// Endenergieverbrauch
|
// Endenergieverbrauch
|
||||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||||
let brennstoff_1 = getHeizwertfaktor(
|
let brennstoff_1 = getHeizwertfaktor(
|
||||||
ausweis.aufnahme.brennstoff_1 as string,
|
aufnahme.brennstoff_1 as string,
|
||||||
ausweis.einheit_1 as string
|
ausweis.einheit_1 as string
|
||||||
);
|
);
|
||||||
let brennstoff_2 = getHeizwertfaktor(
|
let brennstoff_2 = getHeizwertfaktor(
|
||||||
ausweis.aufnahme.brennstoff_2 as string,
|
aufnahme.brennstoff_2 as string,
|
||||||
ausweis.einheit_2 as string
|
ausweis.einheit_2 as string
|
||||||
);
|
);
|
||||||
|
|
||||||
const energetischeNutzflaeche =
|
const energetischeNutzflaeche =
|
||||||
energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis);
|
energetischeNutzflaecheVerbrauchsausweisWohnen_2016(ausweis, aufnahme);
|
||||||
|
|
||||||
let energieVerbrauchGesamt_1 =
|
let energieVerbrauchGesamt_1 =
|
||||||
((ausweis.verbrauch_1 || 0) +
|
((ausweis.verbrauch_1 || 0) +
|
||||||
@@ -91,10 +90,10 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
|||||||
let energieVerbrauchWarmwasser_2 = 0;
|
let energieVerbrauchWarmwasser_2 = 0;
|
||||||
let leerstandsZuschlagWarmwasser = 0;
|
let leerstandsZuschlagWarmwasser = 0;
|
||||||
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
|
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
|
||||||
let leerstand = (ausweis.aufnahme.leerstand || 0) / 100;
|
let leerstand = (aufnahme.leerstand || 0) / 100;
|
||||||
|
|
||||||
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
|
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
|
||||||
if (ausweis.aufnahme.solarsystem_warmwasser) {
|
if (aufnahme.solarsystem_warmwasser) {
|
||||||
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
|
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
|
||||||
energieVerbrauchWarmwasser_1 =
|
energieVerbrauchWarmwasser_1 =
|
||||||
energieVerbrauchGesamt_1 *
|
energieVerbrauchGesamt_1 *
|
||||||
@@ -117,7 +116,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
|||||||
leerstand *
|
leerstand *
|
||||||
(energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
|
(energieVerbrauchWarmwasser_1 + energieVerbrauchWarmwasser_2);
|
||||||
} else {
|
} else {
|
||||||
if (ausweis.aufnahme.solarsystem_warmwasser) {
|
if (aufnahme.solarsystem_warmwasser) {
|
||||||
// Wenn Warmwasser Anteil unbekannt und Solarsystem
|
// Wenn Warmwasser Anteil unbekannt und Solarsystem
|
||||||
energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 12 * 3;
|
energieVerbrauchWarmwasser_1 = energetischeNutzflaeche * 12 * 3;
|
||||||
energieVerbrauchWarmwasser_2 = 0;
|
energieVerbrauchWarmwasser_2 = 0;
|
||||||
@@ -189,7 +188,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
|||||||
let primaerfaktorww = 0;
|
let primaerfaktorww = 0;
|
||||||
let primaerfaktorww_1 = 0;
|
let primaerfaktorww_1 = 0;
|
||||||
|
|
||||||
if (!ausweis.warmwasser_enthalten && ausweis.aufnahme.durchlauf_erhitzer) {
|
if (!ausweis.warmwasser_enthalten && aufnahme.durchlauf_erhitzer) {
|
||||||
primaerfaktorww = 1.8;
|
primaerfaktorww = 1.8;
|
||||||
primaerfaktorww_1 = 1.8;
|
primaerfaktorww_1 = 1.8;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import type { GebaeudeStammdaten, VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
import type { VerbrauchsausweisWohnen } from "@ibcornelsen/database/client";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "./VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||||
|
import { AufnahmeClient, ObjektClient } from "#components/Ausweis/types.js";
|
||||||
|
|
||||||
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen & { objekt: GebaeudeStammdaten }): Promise<number> {
|
export async function endEnergieVerbrauch(ausweis: VerbrauchsausweisWohnen, aufnahme: AufnahmeClient, objekt: ObjektClient): Promise<number> {
|
||||||
const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
|
const result = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -1,34 +1,36 @@
|
|||||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { Enums } from "@ibcornelsen/database/client";
|
import { Enums } from "@ibcornelsen/database/client";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
|
|
||||||
export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): {
|
export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient): {
|
||||||
title: string,
|
title: string,
|
||||||
description: string,
|
description: string,
|
||||||
anlagenteil: string
|
anlagenteil: string,
|
||||||
|
amortisationszeit: string,
|
||||||
|
kosten: string
|
||||||
}[] {
|
}[] {
|
||||||
let Warmwasserrohre_gedaemmt = ausweis.aufnahme.warmwasser_rohre_gedaemmt;
|
let Warmwasserrohre_gedaemmt = aufnahme.warmwasser_rohre_gedaemmt;
|
||||||
let Heizungsrohre_gedaemmt = ausweis.aufnahme.heizungsrohre_gedaemmt;
|
let Heizungsrohre_gedaemmt = aufnahme.heizungsrohre_gedaemmt;
|
||||||
let Waermepumpe = ausweis.aufnahme.waermepumpe;
|
let Waermepumpe = aufnahme.waermepumpe;
|
||||||
let Kellerwand_gedaemmt = ausweis.aufnahme.keller_wand_gedaemmt;
|
let Kellerwand_gedaemmt = aufnahme.keller_wand_gedaemmt;
|
||||||
let Keller = ausweis.aufnahme.keller;
|
let Keller = aufnahme.keller;
|
||||||
let Kellerdecke_Kalraeume_gedaemmt = ausweis.aufnahme.keller_decke_gedaemmt;
|
let Kellerdecke_Kalraeume_gedaemmt = aufnahme.keller_decke_gedaemmt;
|
||||||
let Brennwertkessel = ausweis.aufnahme.brennwert_kessel;
|
let Brennwertkessel = aufnahme.brennwert_kessel;
|
||||||
let baujahr_anlagesanlage = ausweis.aufnahme.baujahr_heizung[0];
|
let baujahr_anlagesanlage = aufnahme.baujahr_heizung[0];
|
||||||
let Zentralheizung = ausweis.aufnahme.zentralheizung;
|
let Zentralheizung = aufnahme.zentralheizung;
|
||||||
let photovoltaik = ausweis.aufnahme.photovoltaik;
|
let photovoltaik = aufnahme.photovoltaik;
|
||||||
let Brennstoff = ausweis.aufnahme.brennstoff_1;
|
let Brennstoff = aufnahme.brennstoff_1;
|
||||||
let Aussenwand_gedaemmt = ausweis.aufnahme.aussenwand_gedaemmt;
|
let Aussenwand_gedaemmt = aufnahme.aussenwand_gedaemmt;
|
||||||
let Dachgeschoss = ausweis.aufnahme.dachgeschoss;
|
let Dachgeschoss = aufnahme.dachgeschoss;
|
||||||
let Dachgeschoss_gedaemmt = ausweis.aufnahme.dachgeschoss_gedaemmt;
|
let Dachgeschoss_gedaemmt = aufnahme.dachgeschoss_gedaemmt;
|
||||||
let Oberste_Geschossdecke_gedaemmt = ausweis.aufnahme.oberste_geschossdecke_gedaemmt;
|
let Oberste_Geschossdecke_gedaemmt = aufnahme.oberste_geschossdecke_gedaemmt;
|
||||||
let Einfachglas = ausweis.aufnahme.einfach_verglasung;
|
let Einfachglas = aufnahme.einfach_verglasung;
|
||||||
let Doppelfenster = ausweis.aufnahme.doppel_verglasung;
|
let Doppelfenster = aufnahme.doppel_verglasung;
|
||||||
let Fenster_teilw_undicht = ausweis.aufnahme.fenster_teilweise_undicht;
|
let Fenster_teilw_undicht = aufnahme.fenster_teilweise_undicht;
|
||||||
|
|
||||||
let empfehlungen = [];
|
let empfehlungen = [];
|
||||||
|
|
||||||
if (ausweis.aufnahme.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
|
if (aufnahme.einfach_verglasung || (Doppelfenster && Fenster_teilw_undicht)) {
|
||||||
empfehlungen.push({
|
empfehlungen.push({
|
||||||
"title" : "Erneuerung der Fenster",
|
"title" : "Erneuerung der Fenster",
|
||||||
"description" : "Alte und undichte Fenster mit Wärmeschutzfenstern auswechseln.",
|
"description" : "Alte und undichte Fenster mit Wärmeschutzfenstern auswechseln.",
|
||||||
@@ -38,7 +40,7 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient): {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ausweis.aufnahme.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) {
|
if (aufnahme.dachgeschoss == Enums.Heizungsstatus.UNBEHEIZT && !Oberste_Geschossdecke_gedaemmt) {
|
||||||
empfehlungen.push({
|
empfehlungen.push({
|
||||||
"title" : "Zusätzliche Dämmung des Fußbodens des kalten Dachraumes",
|
"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.",
|
"description" : "Beim Einbringen sollten mindestens 16cm Dämmstoff verarbeitet werden. Das Einsparpotenzial ist für jeden zusätzlichen cm Dämmung sehr hoch.",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, BenutzerClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||||
import * as fs from "fs"
|
import * as fs from "fs"
|
||||||
import { PDFDocument, rgb, StandardFonts, TextAlignment } from "pdf-lib";
|
import { PDFDocument, rgb, StandardFonts, TextAlignment } from "pdf-lib";
|
||||||
@@ -9,14 +9,14 @@ import { Heizungsstatus } from "@ibcornelsen/database/server";
|
|||||||
|
|
||||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||||
|
|
||||||
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient) {
|
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient) {
|
||||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||||
const pages = pdf.getPages()
|
const pages = pdf.getPages()
|
||||||
|
|
||||||
// const template = VerbrauchsausweisWohnen2016Template as Template;
|
// const template = VerbrauchsausweisWohnen2016Template as Template;
|
||||||
|
|
||||||
const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
|
const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
|
||||||
|
|
||||||
const height = pages[0].getHeight()
|
const height = pages[0].getHeight()
|
||||||
const width = pages[0].getWidth()
|
const width = pages[0].getWidth()
|
||||||
@@ -30,7 +30,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
|||||||
const marginX = 60;
|
const marginX = 60;
|
||||||
const marginY = 150;
|
const marginY = 150;
|
||||||
|
|
||||||
const benutzer: typeof ausweis.benutzer = ausweis.benutzer || {
|
benutzer = benutzer || {
|
||||||
vorname: "Max",
|
vorname: "Max",
|
||||||
name: "Mustermann",
|
name: "Mustermann",
|
||||||
adresse: "Musterstraße 123",
|
adresse: "Musterstraße 123",
|
||||||
@@ -55,7 +55,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
|||||||
<text size="12">Ausweis ID: ${ausweis.uid}</text>
|
<text size="12">Ausweis ID: ${ausweis.uid}</text>
|
||||||
</flex>
|
</flex>
|
||||||
<text size="12" lineHeight="14" font="bold" marginTop="10">Gebäudedaten</text>
|
<text size="12" lineHeight="14" font="bold" marginTop="10">Gebäudedaten</text>
|
||||||
<text size="12" lineHeight="14">Adresse: ${ausweis.aufnahme.objekt.adresse}, ${ausweis.aufnahme.objekt.plz} ${ausweis.aufnahme.objekt.ort}</text>
|
<text size="12" lineHeight="14">Adresse: ${objekt.adresse}, ${objekt.plz} ${objekt.ort}</text>
|
||||||
|
|
||||||
<flex direction="row" justify="space-between" width="${innerWidth}" marginTop="25">
|
<flex direction="row" justify="space-between" width="${innerWidth}" marginTop="25">
|
||||||
<flex direction="row" gap="5" align="center">
|
<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="column" width="${(innerWidth) / 2 - 7.5}">
|
||||||
<flex direction="row" align="center" justify="space-between" 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">Gebäudetyp:</text>
|
||||||
<text size="12" lineHeight="14">${ausweis.aufnahme.gebaeudetyp}</text>
|
<text size="12" lineHeight="14">${aufnahme.gebaeudetyp}</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
<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">Wohnfläche:</text>
|
||||||
<text size="12" lineHeight="14">DIN Wohnfläche innen ${ausweis.aufnahme.flaeche} m²</text>
|
<text size="12" lineHeight="14">DIN Wohnfläche innen ${aufnahme.flaeche} m²</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
<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">Leerstand:</text>
|
||||||
<text size="12" lineHeight="14">${ausweis.aufnahme.leerstand || 0}%</text>
|
<text size="12" lineHeight="14">${aufnahme.leerstand || 0}%</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
<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">Wohnungen:</text>
|
||||||
<text size="12" lineHeight="14">${ausweis.aufnahme.einheiten}</text>
|
<text size="12" lineHeight="14">${aufnahme.einheiten}</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" width="${(innerWidth) / 2 - 7.5}">
|
<flex direction="column" width="${(innerWidth) / 2 - 7.5}">
|
||||||
<flex direction="row" align="center" justify="space-between" 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">Dachgeschoss:</text>
|
||||||
<text size="12" lineHeight="14">${translateHeizungsstatus[ausweis.aufnahme.dachgeschoss || "NICHT_VORHANDEN"]}</text>
|
<text size="12" lineHeight="14">${translateHeizungsstatus[aufnahme.dachgeschoss || "NICHT_VORHANDEN"]}</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" align="center" justify="space-between" width="${(innerWidth) / 2 - 7.5}">
|
<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">Keller:</text>
|
||||||
<text size="12" lineHeight="14">${translateHeizungsstatus[ausweis.aufnahme.keller || "NICHT_VORHANDEN"]}</text>
|
<text size="12" lineHeight="14">${translateHeizungsstatus[aufnahme.keller || "NICHT_VORHANDEN"]}</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
@@ -126,14 +126,14 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
|||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<text></text>
|
<text></text>
|
||||||
<text size="12" font="bold">${ausweis.aufnahme.brennstoff_1}</text>
|
<text size="12" font="bold">${aufnahme.brennstoff_1}</text>
|
||||||
<text size="12">${ausweis.verbrauch_1} ${ausweis.einheit_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_2} ${ausweis.einheit_1}</text>
|
||||||
<text size="12">${ausweis.verbrauch_3} ${ausweis.einheit_1}</text>
|
<text size="12">${ausweis.verbrauch_3} ${ausweis.einheit_1}</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<text size="12">zusätzliche Heizquelle</text>
|
<text size="12">zusätzliche Heizquelle</text>
|
||||||
<text size="12" font="bold">${ausweis.aufnahme.brennstoff_2 || ""}</text>
|
<text size="12" font="bold">${aufnahme.brennstoff_2 || ""}</text>
|
||||||
<text size="12">${ausweis.verbrauch_4 || ""} ${ausweis.einheit_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_5 || ""} ${ausweis.einheit_2 || ""}</text>
|
||||||
<text size="12">${ausweis.verbrauch_6 || ""} ${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="row" justify="space-between" width="${pages[1].getWidth() - 120}" marginTop="15">
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.zentralheizung || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.zentralheizung || false}"></checkbox>
|
||||||
<text size="12">Zentralheizung</text>
|
<text size="12">Zentralheizung</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.einzelofen || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.einzelofen || false}"></checkbox>
|
||||||
<text size="12">Einzelöfen</text>
|
<text size="12">Einzelöfen</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.durchlauf_erhitzer || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.durchlauf_erhitzer || false}"></checkbox>
|
||||||
<text size="12">Durchlauferhitzer</text>
|
<text size="12">Durchlauferhitzer</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.standard_kessel || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.standard_kessel || false}"></checkbox>
|
||||||
<text size="12">Standardkessel</text>
|
<text size="12">Standardkessel</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.solarsystem_warmwasser || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.solarsystem_warmwasser || false}"></checkbox>
|
||||||
<text size="12">Solarsystem für Warmwasser</text>
|
<text size="12">Solarsystem für Warmwasser</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.waermepumpe || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.waermepumpe || false}"></checkbox>
|
||||||
<text size="12">Wärmepumpe</text>
|
<text size="12">Wärmepumpe</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.niedertemperatur_kessel || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.niedertemperatur_kessel || false}"></checkbox>
|
||||||
<text size="12">Niedertemperaturkessel</text>
|
<text size="12">Niedertemperaturkessel</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.brennwert_kessel || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.brennwert_kessel || false}"></checkbox>
|
||||||
<text size="12">Brennwertkessel</text>
|
<text size="12">Brennwertkessel</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.warmwasser_rohre_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.warmwasser_rohre_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Warmwasserrohre gedämmt</text>
|
<text size="12">Warmwasserrohre gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.heizungsrohre_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.heizungsrohre_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Heizungsrohre gedämmt</text>
|
<text size="12">Heizungsrohre gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.zirkulation || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.zirkulation || false}"></checkbox>
|
||||||
<text size="12">Zirkulation</text>
|
<text size="12">Zirkulation</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.raum_temperatur_regler || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.raum_temperatur_regler || false}"></checkbox>
|
||||||
<text size="12">Raumtemperaturregelung</text>
|
<text size="12">Raumtemperaturregelung</text>
|
||||||
</flex>
|
</flex>
|
||||||
</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="row" justify="space-between" width="${pages[1].getWidth() - 120}" marginTop="15">
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.einfach_verglasung || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.einfach_verglasung || false}"></checkbox>
|
||||||
<text size="12">Einfachglas</text>
|
<text size="12">Einfachglas</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.doppel_verglasung || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.doppel_verglasung || false}"></checkbox>
|
||||||
<text size="12">Doppelverglasung</text>
|
<text size="12">Doppelverglasung</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.isolier_verglasung || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.isolier_verglasung || false}"></checkbox>
|
||||||
<text size="12">Isolierverglasung</text>
|
<text size="12">Isolierverglasung</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
@@ -227,25 +227,25 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
|||||||
<text size="12">Passivhausfenster</text>
|
<text size="12">Passivhausfenster</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.fenster_dicht || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.fenster_dicht || false}"></checkbox>
|
||||||
<text size="12">Alle Fenster dicht</text>
|
<text size="12">Alle Fenster dicht</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.fenster_teilweise_undicht || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.fenster_teilweise_undicht || false}"></checkbox>
|
||||||
<text size="12">Fenster teilweise undicht</text>
|
<text size="12">Fenster teilweise undicht</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.tueren_undicht || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.tueren_undicht || false}"></checkbox>
|
||||||
<text size="12">Türen teilweise undicht</text>
|
<text size="12">Türen teilweise undicht</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.tueren_dicht || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.tueren_dicht || false}"></checkbox>
|
||||||
<text size="12">Alle Türen dicht</text>
|
<text size="12">Alle Türen dicht</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.rolllaeden_kaesten_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.rolllaeden_kaesten_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Rollladenkästen gedämmt</text>
|
<text size="12">Rollladenkästen gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
</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="row" justify="space-between" width="${pages[1].getWidth() - 120}" marginTop="15">
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.keller_wand_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.keller_wand_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Kelleraußenwand gedämmt</text>
|
<text size="12">Kelleraußenwand gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.keller_decke_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.keller_decke_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Kellerdecke gedämmt</text>
|
<text size="12">Kellerdecke gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.aussenwand_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.aussenwand_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Außenwand gedämmt</text>
|
<text size="12">Außenwand gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="column" gap="4">
|
<flex direction="column" gap="4">
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.dachgeschoss_min_12cm_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.dachgeschoss_min_12cm_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Dachgeschoss min. 12cm gedämmt</text>
|
<text size="12">Dachgeschoss min. 12cm gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.dachgeschoss_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.dachgeschoss_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Dachgeschoss gedämmt</text>
|
<text size="12">Dachgeschoss gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.oberste_geschossdecke_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.oberste_geschossdecke_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Oberste Geschossdecke gedämmt</text>
|
<text size="12">Oberste Geschossdecke gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
<flex direction="row" gap="4" align="center">
|
<flex direction="row" gap="4" align="center">
|
||||||
<checkbox width="8" height="8" checked="${ausweis.aufnahme.oberste_geschossdecke_min_12cm_gedaemmt || false}"></checkbox>
|
<checkbox width="8" height="8" checked="${aufnahme.oberste_geschossdecke_min_12cm_gedaemmt || false}"></checkbox>
|
||||||
<text size="12">Oberste Geschossdecke min. 12cm gedämmt</text>
|
<text size="12">Oberste Geschossdecke min. 12cm gedämmt</text>
|
||||||
</flex>
|
</flex>
|
||||||
</flex>
|
</flex>
|
||||||
|
|||||||
@@ -1,5 +1,375 @@
|
|||||||
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
|
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
|
||||||
|
import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
|
||||||
|
import { Enums } from "@ibcornelsen/database/server";
|
||||||
|
import * as fs from "fs"
|
||||||
|
import moment from "moment";
|
||||||
|
import { PDFDocument, PDFFont, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib";
|
||||||
|
|
||||||
export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) {
|
|
||||||
|
|
||||||
|
export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) {
|
||||||
|
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("./templates/GEG24_Nichtwohngebaeude.pdf", import.meta.url), "base64");
|
||||||
|
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||||
|
const pages = pdf.getPages()
|
||||||
|
|
||||||
|
// const template = VerbrauchsausweisWohnen2016Template as Template;
|
||||||
|
|
||||||
|
const berechnungen = await endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis, aufnahme, objekt);
|
||||||
|
console.log(berechnungen);
|
||||||
|
|
||||||
|
const empfehlungen = getEmpfehlungen(ausweis, aufnahme, objekt)
|
||||||
|
|
||||||
|
const height = pages[0].getHeight()
|
||||||
|
|
||||||
|
const font = await pdf.embedFont(StandardFonts.Helvetica)
|
||||||
|
const bold = await pdf.embedFont(StandardFonts.HelveticaBold)
|
||||||
|
|
||||||
|
const form = pdf.getForm()
|
||||||
|
form.updateFieldAppearances(font)
|
||||||
|
|
||||||
|
const fillFormField = (name: string, value: string, fontSize: number = 8, alignment: TextAlignment = TextAlignment.Left) => {
|
||||||
|
const field = form.getTextField(name)
|
||||||
|
field.setFontSize(fontSize)
|
||||||
|
field.setText(value)
|
||||||
|
field.setAlignment(alignment)
|
||||||
|
}
|
||||||
|
|
||||||
|
const toggleCheck = (name: string, checked: boolean = true) => {
|
||||||
|
const field = form.getCheckBox(name)
|
||||||
|
|
||||||
|
if (checked) {
|
||||||
|
field.check()
|
||||||
|
} else {
|
||||||
|
field.uncheck()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
|
||||||
|
|
||||||
|
// const adresse = fillFormField("adresse", objekt.adresse)
|
||||||
|
|
||||||
|
|
||||||
|
// const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
|
||||||
|
|
||||||
|
// const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString())
|
||||||
|
|
||||||
|
// const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
|
||||||
|
|
||||||
|
// const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString())
|
||||||
|
|
||||||
|
// const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`)
|
||||||
|
|
||||||
|
// fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
|
||||||
|
|
||||||
|
// if (ausweis.warmwasser_enthalten) {
|
||||||
|
// fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// toggleCheck("fensterlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung)
|
||||||
|
// toggleCheck("schachtlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung)
|
||||||
|
// toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung)
|
||||||
|
// toggleCheck("lueftungsanlage_waermerueckgewinnung", 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 = bilder.find(image => image.kategorie === "Gebaeude");
|
||||||
|
|
||||||
|
|
||||||
|
// /* -------------------------------- Seite 2 -------------------------------- */
|
||||||
|
|
||||||
|
// const co2Emissionen = fillFormField("co2emissionen", berechnungen?.co2EmissionenGesamt.toString(), 8, TextAlignment.Center)
|
||||||
|
|
||||||
|
const addEnergieverbrauchSkalaPfeile = async (page: PDFPage) => {
|
||||||
|
const pfeilNachUnten = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-unten.png", import.meta.url), "base64"))
|
||||||
|
const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64"))
|
||||||
|
|
||||||
|
// Wir müssen den berechneten Wert zwischen 0 und 1000 als Wert zwischen 0 und 1 festlegen
|
||||||
|
const endenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 1000
|
||||||
|
const primaerenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt || 0)) / 1000
|
||||||
|
|
||||||
|
const minTranslation = 120
|
||||||
|
const maxTranslation = 457
|
||||||
|
const endenergieverbrauchTranslationX = minTranslation + (maxTranslation - minTranslation) * endenergieverbrauchTranslationPercentage;
|
||||||
|
const primaerenergieverbrauchTranslationX = minTranslation + (maxTranslation - minTranslation) * primaerenergieverbrauchTranslationPercentage;
|
||||||
|
|
||||||
|
const pfeilWidth = 20
|
||||||
|
const margin = 5;
|
||||||
|
|
||||||
|
page.drawImage(pfeilNachUnten, {
|
||||||
|
x: endenergieverbrauchTranslationX,
|
||||||
|
y: height - 215,
|
||||||
|
width: pfeilWidth,
|
||||||
|
height: 30
|
||||||
|
})
|
||||||
|
|
||||||
|
const endEnergieVerbrauchGesamtText = `${berechnungen?.endEnergieVerbrauchGesamt.toString()}kWh/(m²a)`;
|
||||||
|
const primaerEnergieVerbrauchGesamtText = `${berechnungen?.primaerEnergieVerbrauchGesamt.toString()}kWh/(m²a)`;
|
||||||
|
|
||||||
|
if (endenergieverbrauchTranslationPercentage > 0.5) {
|
||||||
|
page.drawText("Endenergieverbrauch", {
|
||||||
|
x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch", 10),
|
||||||
|
y: height - 193,
|
||||||
|
size: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
page.drawText(endEnergieVerbrauchGesamtText, {
|
||||||
|
x: endenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(endEnergieVerbrauchGesamtText, 10),
|
||||||
|
y: height - 207,
|
||||||
|
size: 10,
|
||||||
|
font: bold
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
page.drawText("Endenergieverbrauch", {
|
||||||
|
x: endenergieverbrauchTranslationX + pfeilWidth + margin,
|
||||||
|
y: height - 193,
|
||||||
|
size: 10
|
||||||
|
})
|
||||||
|
page.drawText(endEnergieVerbrauchGesamtText, {
|
||||||
|
x: endenergieverbrauchTranslationX + pfeilWidth + margin,
|
||||||
|
y: height - 207,
|
||||||
|
size: 10,
|
||||||
|
font: bold
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
page.drawImage(pfeilNachOben, {
|
||||||
|
x: primaerenergieverbrauchTranslationX,
|
||||||
|
y: height - 298,
|
||||||
|
width: pfeilWidth,
|
||||||
|
height: 30
|
||||||
|
})
|
||||||
|
|
||||||
|
if (endenergieverbrauchTranslationPercentage > 0.5) {
|
||||||
|
page.drawText("Primärenergieverbrauch", {
|
||||||
|
x: primaerenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Primärenergieverbrauch", 10),
|
||||||
|
y: height - 280,
|
||||||
|
size: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
page.drawText(primaerEnergieVerbrauchGesamtText, {
|
||||||
|
x: primaerenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(primaerEnergieVerbrauchGesamtText, 10),
|
||||||
|
y: height - 294,
|
||||||
|
size: 10,
|
||||||
|
font: bold
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
page.drawText("Primärenergieverbrauch", {
|
||||||
|
x: primaerenergieverbrauchTranslationX + pfeilWidth + margin,
|
||||||
|
y: height - 280,
|
||||||
|
size: 10
|
||||||
|
})
|
||||||
|
page.drawText(primaerEnergieVerbrauchGesamtText, {
|
||||||
|
x: primaerenergieverbrauchTranslationX + pfeilWidth + margin,
|
||||||
|
y: height - 294,
|
||||||
|
size: 10,
|
||||||
|
font: bold
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
addEnergieverbrauchSkalaPfeile(pages[1])
|
||||||
|
addEnergieverbrauchSkalaPfeile(pages[2])
|
||||||
|
|
||||||
|
// const primaerenergiebedarfIst = fillFormField("primaerenergiebedarf_ist", berechnungen?.primaerEnergieVerbrauchGesamt.toString())
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------- Seite 3 -------------------------------- */
|
||||||
|
|
||||||
|
// Verbräuche
|
||||||
|
|
||||||
|
const addVerbrauchGenerator = () => {
|
||||||
|
let i = 0;
|
||||||
|
let yOffset = 14.6;
|
||||||
|
const initialHeight = 435
|
||||||
|
const initialXOffset = 36;
|
||||||
|
return (zeitraum_von?: string, zeitraum_bis?: string, energietraeger?: string, primaerfaktor?: string, energieverbrauch?: string, anteil_warmwasser?: string, anteil_heizung?: string, klimafaktor?: string) => {
|
||||||
|
pages[2].drawText(zeitraum_von || "", {
|
||||||
|
x: initialXOffset,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(zeitraum_bis || "", {
|
||||||
|
x: initialXOffset + 47,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(energietraeger || "", {
|
||||||
|
x: initialXOffset + 94,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(primaerfaktor || "", {
|
||||||
|
x: initialXOffset + 317,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(energieverbrauch || "", {
|
||||||
|
x: initialXOffset + 351,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(anteil_warmwasser || "", {
|
||||||
|
x: initialXOffset + 402,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(anteil_heizung || "", {
|
||||||
|
x: initialXOffset + 453,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[2].drawText(klimafaktor || "", {
|
||||||
|
x: initialXOffset + 504,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const addVerbrauch = addVerbrauchGenerator();
|
||||||
|
|
||||||
|
addVerbrauch(
|
||||||
|
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||||
|
moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"),
|
||||||
|
aufnahme.brennstoff_1,
|
||||||
|
berechnungen?.primaerfaktor.toString(),
|
||||||
|
Math.round(berechnungen?.verbrauch_1_kwh).toString(),
|
||||||
|
Math.round(
|
||||||
|
berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_1_kwh
|
||||||
|
).toString(),
|
||||||
|
Math.round(
|
||||||
|
berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_1_kwh
|
||||||
|
).toString(),
|
||||||
|
berechnungen?.klimafaktoren[0].klimafaktor.toString()
|
||||||
|
);
|
||||||
|
|
||||||
|
addVerbrauch(
|
||||||
|
moment(ausweis.startdatum).add(1, "year").format("MM.YYYY"),
|
||||||
|
moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"),
|
||||||
|
aufnahme.brennstoff_1,
|
||||||
|
berechnungen?.primaerfaktor.toString(),
|
||||||
|
Math.round(berechnungen?.verbrauch_2_kwh).toString(),
|
||||||
|
Math.round(
|
||||||
|
berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_2_kwh
|
||||||
|
).toString(),
|
||||||
|
Math.round(
|
||||||
|
berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_2_kwh
|
||||||
|
).toString(),
|
||||||
|
berechnungen?.klimafaktoren[0].klimafaktor.toString()
|
||||||
|
);
|
||||||
|
|
||||||
|
addVerbrauch(
|
||||||
|
moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"),
|
||||||
|
moment(ausweis.startdatum).add(3, "year").format("MM.YYYY"),
|
||||||
|
aufnahme.brennstoff_1,
|
||||||
|
berechnungen?.primaerfaktor.toString(),
|
||||||
|
Math.round(berechnungen?.verbrauch_3_kwh).toString(),
|
||||||
|
Math.round(
|
||||||
|
berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_3_kwh
|
||||||
|
).toString(),
|
||||||
|
Math.round(
|
||||||
|
berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_3_kwh
|
||||||
|
).toString(),
|
||||||
|
berechnungen?.klimafaktoren[0].klimafaktor.toString()
|
||||||
|
);
|
||||||
|
|
||||||
|
/* -------------------------------- Seite 4 -------------------------------- */
|
||||||
|
|
||||||
|
const splitToSize = (text: string, size: number, font: PDFFont, fontSize: number) => {
|
||||||
|
const lines = []
|
||||||
|
|
||||||
|
let currentLine = ""
|
||||||
|
for (const char of text) {
|
||||||
|
if (font.widthOfTextAtSize(currentLine + char, fontSize) <= size) {
|
||||||
|
currentLine += char;
|
||||||
|
} else {
|
||||||
|
lines.push(currentLine)
|
||||||
|
currentLine = char;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lines.push(currentLine)
|
||||||
|
|
||||||
|
return lines.join("\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
const addEmpfehlungenGenerator = () => {
|
||||||
|
let i = 0;
|
||||||
|
let yOffset = 43;
|
||||||
|
const initialHeight = 568
|
||||||
|
const initialXOffset = 36;
|
||||||
|
return (bauteil?: string, beschreibung?: string, alsEinzelmassnahme?: boolean, amortisationszeit?: string, kosten?: string) => {
|
||||||
|
pages[3].drawText((i + 1).toString(), {
|
||||||
|
x: initialXOffset,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[3].drawText(splitToSize(bauteil || "", 70, font, 8), {
|
||||||
|
x: initialXOffset + 25,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font,
|
||||||
|
lineHeight: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[3].drawText(splitToSize(beschreibung || "", 230, font, 8), {
|
||||||
|
x: initialXOffset + 98,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font,
|
||||||
|
lineHeight: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pages[3].drawText(amortisationszeit || "", {
|
||||||
|
x: initialXOffset + 403,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[3].drawText(kosten || "", {
|
||||||
|
x: initialXOffset + 451,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const addEmpfehlung = addEmpfehlungenGenerator()
|
||||||
|
|
||||||
|
for (const empfehlung of empfehlungen) {
|
||||||
|
addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// pdf.getForm().flatten()
|
||||||
|
|
||||||
|
return pdf.save();
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||||
|
import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
|
||||||
import { Enums } from "@ibcornelsen/database/server";
|
import { Enums } from "@ibcornelsen/database/server";
|
||||||
import * as fs from "fs"
|
import * as fs from "fs"
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { PDFDocument, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib";
|
import { PDFDocument, PDFFont, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib";
|
||||||
|
|
||||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||||
|
|
||||||
@@ -14,7 +15,8 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
|||||||
|
|
||||||
// const template = VerbrauchsausweisWohnen2016Template as Template;
|
// const template = VerbrauchsausweisWohnen2016Template as Template;
|
||||||
|
|
||||||
const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis);
|
const berechnungen = await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt);
|
||||||
|
const empfehlungen = getEmpfehlungen(ausweis, aufnahme, objekt)
|
||||||
|
|
||||||
const height = pages[0].getHeight()
|
const height = pages[0].getHeight()
|
||||||
|
|
||||||
@@ -41,20 +43,20 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp)
|
const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
|
||||||
|
|
||||||
const adresse = fillFormField("adresse", objekt.adresse)
|
const adresse = fillFormField("adresse", objekt.adresse)
|
||||||
|
|
||||||
|
|
||||||
const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil)
|
const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
|
||||||
|
|
||||||
const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude.toString())
|
const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString())
|
||||||
|
|
||||||
const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung.toString())
|
const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
|
||||||
|
|
||||||
const einheiten = fillFormField("einheiten", aufnahme.einheiten.toString())
|
const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString())
|
||||||
|
|
||||||
const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche.toString()}m²`)
|
const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`)
|
||||||
|
|
||||||
fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
|
fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
|
||||||
|
|
||||||
@@ -72,20 +74,23 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
|||||||
toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
|
toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
|
||||||
toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
|
toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
|
||||||
|
|
||||||
|
console.log(bilder);
|
||||||
|
|
||||||
|
|
||||||
const gebaeudeBild = bilder.find(image => image.kategorie === "Gebaeude");
|
const gebaeudeBild = bilder.find(image => image.kategorie === "Gebaeude");
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------- Seite 2 -------------------------------- */
|
/* -------------------------------- Seite 2 -------------------------------- */
|
||||||
|
|
||||||
const co2Emissionen = fillFormField("co2emissionen", berechnungen.co2EmissionenGesamt.toString(), 8, TextAlignment.Center)
|
const co2Emissionen = fillFormField("co2emissionen", berechnungen?.co2EmissionenGesamt.toString(), 8, TextAlignment.Center)
|
||||||
|
|
||||||
const addEnergieverbrauchSkalaPfeile = async (page: PDFPage) => {
|
const addEnergieverbrauchSkalaPfeile = async (page: PDFPage) => {
|
||||||
const pfeilNachUnten = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-unten.png", import.meta.url), "base64"))
|
const pfeilNachUnten = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-unten.png", import.meta.url), "base64"))
|
||||||
const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64"))
|
const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64"))
|
||||||
|
|
||||||
// Wir müssen den berechneten Wert zwischen 0 und 250 als Wert zwischen 0 und 1 festlegen
|
// Wir müssen den berechneten Wert zwischen 0 und 250 als Wert zwischen 0 und 1 festlegen
|
||||||
const endenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt)) / 250
|
const endenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 250
|
||||||
const primaerenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt)) / 250
|
const primaerenergieverbrauchTranslationPercentage = Math.min(250, Math.max(0, berechnungen?.primaerEnergieVerbrauchGesamt || 0)) / 250
|
||||||
|
|
||||||
const minTranslation = 68
|
const minTranslation = 68
|
||||||
const maxTranslation = 504
|
const maxTranslation = 504
|
||||||
@@ -182,57 +187,57 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
|||||||
let yOffset = 14.6;
|
let yOffset = 14.6;
|
||||||
const initialHeight = 435
|
const initialHeight = 435
|
||||||
const initialXOffset = 36;
|
const initialXOffset = 36;
|
||||||
return (zeitraum_von: string, zeitraum_bis: string, energietraeger: string, primaerfaktor: string, energieverbrauch: string, anteil_warmwasser: string, anteil_heizung: string, klimafaktor: string) => {
|
return (zeitraum_von?: string, zeitraum_bis?: string, energietraeger?: string, primaerfaktor?: string, energieverbrauch?: string, anteil_warmwasser?: string, anteil_heizung?: string, klimafaktor?: string) => {
|
||||||
pages[2].drawText(zeitraum_von, {
|
pages[2].drawText(zeitraum_von || "", {
|
||||||
x: initialXOffset,
|
x: initialXOffset,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(zeitraum_bis, {
|
pages[2].drawText(zeitraum_bis || "", {
|
||||||
x: initialXOffset + 47,
|
x: initialXOffset + 47,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(energietraeger, {
|
pages[2].drawText(energietraeger || "", {
|
||||||
x: initialXOffset + 94,
|
x: initialXOffset + 94,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(primaerfaktor, {
|
pages[2].drawText(primaerfaktor || "", {
|
||||||
x: initialXOffset + 317,
|
x: initialXOffset + 317,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(energieverbrauch, {
|
pages[2].drawText(energieverbrauch || "", {
|
||||||
x: initialXOffset + 351,
|
x: initialXOffset + 351,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(anteil_warmwasser, {
|
pages[2].drawText(anteil_warmwasser || "", {
|
||||||
x: initialXOffset + 402,
|
x: initialXOffset + 402,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(anteil_heizung, {
|
pages[2].drawText(anteil_heizung || "", {
|
||||||
x: initialXOffset + 453,
|
x: initialXOffset + 453,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
font
|
font
|
||||||
})
|
})
|
||||||
|
|
||||||
pages[2].drawText(klimafaktor, {
|
pages[2].drawText(klimafaktor || "", {
|
||||||
x: initialXOffset + 504,
|
x: initialXOffset + 504,
|
||||||
y: initialHeight - (i * yOffset),
|
y: initialHeight - (i * yOffset),
|
||||||
size: 8,
|
size: 8,
|
||||||
@@ -289,6 +294,82 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
|||||||
berechnungen?.klimafaktoren[0].klimafaktor.toString()
|
berechnungen?.klimafaktoren[0].klimafaktor.toString()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* -------------------------------- Seite 4 -------------------------------- */
|
||||||
|
|
||||||
|
const splitToSize = (text: string, size: number, font: PDFFont, fontSize: number) => {
|
||||||
|
const lines = []
|
||||||
|
|
||||||
|
let currentLine = ""
|
||||||
|
for (const char of text) {
|
||||||
|
if (font.widthOfTextAtSize(currentLine + char, fontSize) <= size) {
|
||||||
|
currentLine += char;
|
||||||
|
} else {
|
||||||
|
lines.push(currentLine)
|
||||||
|
currentLine = char;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lines.push(currentLine)
|
||||||
|
|
||||||
|
return lines.join("\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
const addEmpfehlungenGenerator = () => {
|
||||||
|
let i = 0;
|
||||||
|
let yOffset = 43;
|
||||||
|
const initialHeight = 568
|
||||||
|
const initialXOffset = 36;
|
||||||
|
return (bauteil?: string, beschreibung?: string, alsEinzelmassnahme?: boolean, amortisationszeit?: string, kosten?: string) => {
|
||||||
|
pages[3].drawText((i + 1).toString(), {
|
||||||
|
x: initialXOffset,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[3].drawText(splitToSize(bauteil || "", 70, font, 8), {
|
||||||
|
x: initialXOffset + 25,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font,
|
||||||
|
lineHeight: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[3].drawText(splitToSize(beschreibung || "", 230, font, 8), {
|
||||||
|
x: initialXOffset + 98,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font,
|
||||||
|
lineHeight: 10
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pages[3].drawText(amortisationszeit || "", {
|
||||||
|
x: initialXOffset + 403,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
|
||||||
|
pages[3].drawText(kosten || "", {
|
||||||
|
x: initialXOffset + 451,
|
||||||
|
y: initialHeight - (i * yOffset),
|
||||||
|
size: 8,
|
||||||
|
font
|
||||||
|
})
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const addEmpfehlung = addEmpfehlungenGenerator()
|
||||||
|
|
||||||
|
for (const empfehlung of empfehlungen) {
|
||||||
|
addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// pdf.getForm().flatten()
|
// pdf.getForm().flatten()
|
||||||
|
|
||||||
return pdf.save();
|
return pdf.save();
|
||||||
|
|||||||