Automatische Tests und Passwort Vergessen
This commit is contained in:
28
bun.lock
28
bun.lock
@@ -18,7 +18,7 @@
|
||||
"@trpc/client": "^10.45.2",
|
||||
"@trpc/server": "^10.45.2",
|
||||
"astro": "^4.16.17",
|
||||
"astro-typesafe-api": "^0.2.0",
|
||||
"astro-typesafe-api": "^0.2.1",
|
||||
"body-scroll-lock": "^4.0.0-beta.0",
|
||||
"buffer": "^6.0.3",
|
||||
"bun": "^1.1.45",
|
||||
@@ -33,6 +33,7 @@
|
||||
"jwt-decode": "^4.0.0",
|
||||
"moment": "^2.30.1",
|
||||
"moment-timezone": "^0.5.46",
|
||||
"nodemailer": "^6.10.0",
|
||||
"pdf-lib": "^1.17.1",
|
||||
"postcss-nested": "^7.0.2",
|
||||
"radix-svelte-icons": "^1.0.0",
|
||||
@@ -56,6 +57,7 @@
|
||||
"@types/is-base64": "^1.1.3",
|
||||
"@types/js-cookie": "^3.0.6",
|
||||
"@types/jsonwebtoken": "^9.0.7",
|
||||
"@types/nodemailer": "^6.4.17",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
"@typescript-eslint/parser": "^5.62.0",
|
||||
@@ -477,6 +479,8 @@
|
||||
|
||||
"@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.1", "", {}, "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg=="],
|
||||
|
||||
"@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@2.3.0", "", {}, "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg=="],
|
||||
|
||||
"@sveltejs/vite-plugin-svelte": ["@sveltejs/vite-plugin-svelte@2.5.3", "", { "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^1.0.4", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", "magic-string": "^0.30.3", "svelte-hmr": "^0.15.3", "vitefu": "^0.2.4" }, "peerDependencies": { "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0-next.0", "vite": "^4.0.0" } }, "sha512-erhNtXxE5/6xGZz/M9eXsmI7Pxa6MS7jyTy06zN3Ck++ldrppOnOlJwHHTsMC7DHDQdgUp4NAc4cDNQ9eGdB/w=="],
|
||||
|
||||
"@sveltejs/vite-plugin-svelte-inspector": ["@sveltejs/vite-plugin-svelte-inspector@1.0.4", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "@sveltejs/vite-plugin-svelte": "^2.2.0", "svelte": "^3.54.0 || ^4.0.0", "vite": "^4.0.0" } }, "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ=="],
|
||||
@@ -545,6 +549,8 @@
|
||||
|
||||
"@types/node": ["@types/node@22.13.0", "", { "dependencies": { "undici-types": "~6.20.0" } }, "sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA=="],
|
||||
|
||||
"@types/nodemailer": ["@types/nodemailer@6.4.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww=="],
|
||||
|
||||
"@types/pug": ["@types/pug@2.0.10", "", {}, "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA=="],
|
||||
|
||||
"@types/qs": ["@types/qs@6.9.18", "", {}, "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA=="],
|
||||
@@ -651,7 +657,7 @@
|
||||
|
||||
"astro": ["astro@4.16.18", "", { "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.1", "@astrojs/markdown-remark": "5.3.0", "@astrojs/telemetry": "3.1.0", "@babel/core": "^7.26.0", "@babel/plugin-transform-react-jsx": "^7.25.9", "@babel/types": "^7.26.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.3", "@types/babel__core": "^7.20.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.1.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^0.7.2", "cssesc": "^3.0.0", "debug": "^4.3.7", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.5.4", "esbuild": "^0.21.5", "estree-walker": "^3.0.3", "fast-glob": "^3.3.2", "flattie": "^1.1.1", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "html-escaper": "^3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.14", "magicast": "^0.3.5", "micromatch": "^4.0.8", "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "ora": "^8.1.1", "p-limit": "^6.1.0", "p-queue": "^8.0.1", "preferred-pm": "^4.0.0", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.6.3", "shiki": "^1.23.1", "tinyexec": "^0.3.1", "tsconfck": "^3.1.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "vite": "^5.4.11", "vitefu": "^1.0.4", "which-pm": "^3.0.0", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-G7zfwJt9BDHEZwlaLNvjbInIw2hPryyD654314KV/XT34pJU6SfN1S+mWa8RAkALcZNJnJXCJmT3JXLQStD3Lw=="],
|
||||
|
||||
"astro-typesafe-api": ["astro-typesafe-api@0.2.0", "", { "peerDependencies": { "astro": "^4.16.17", "typescript": "^5.0.0", "zod": "^3.24.1" }, "bin": { "astro-typesafe-api": "src/cli.ts" } }, "sha512-KCQZyfJ2+Mw7RJS9ThY13MyOTrfUHpfpcKt7qTA0BsvJB2JgxK0x+3YfurBJF+X7tsVVACmo+0QaHS/+xJuIcg=="],
|
||||
"astro-typesafe-api": ["astro-typesafe-api@0.2.1", "", { "dependencies": { "es-codec": "^0.5.0", "globby": "^14.0.2" }, "peerDependencies": { "astro": "^4.16.17", "typescript": "^5.0.0", "zod": "^3.24.1" }, "bin": { "astro-typesafe-api": "src/cli.ts" } }, "sha512-8f0McZj9fWIzT19njJ2z/1zETnbper3ejuba93t72Xvsy6aMTEDXaIGDG3xc9KWUQ9zEcNg+VS52JNWGfYm6CQ=="],
|
||||
|
||||
"async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="],
|
||||
|
||||
@@ -947,6 +953,8 @@
|
||||
|
||||
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
|
||||
|
||||
"es-codec": ["es-codec@0.5.0", "", {}, "sha512-iWbSEF1McYXr++XWCQypRx8hjs887Zlka/x2BVFYp4Li3PJJucTzixoYtY2SNyZRVVPO4aQ10w6wz2rI8noiRg=="],
|
||||
|
||||
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
|
||||
|
||||
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
|
||||
@@ -1129,7 +1137,7 @@
|
||||
|
||||
"globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="],
|
||||
|
||||
"globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="],
|
||||
"globby": ["globby@14.0.2", "", { "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", "ignore": "^5.2.4", "path-type": "^5.0.0", "slash": "^5.1.0", "unicorn-magic": "^0.1.0" } }, "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw=="],
|
||||
|
||||
"gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
|
||||
|
||||
@@ -1575,6 +1583,8 @@
|
||||
|
||||
"node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="],
|
||||
|
||||
"nodemailer": ["nodemailer@6.10.0", "", {}, "sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA=="],
|
||||
|
||||
"nopt": ["nopt@5.0.0", "", { "dependencies": { "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ=="],
|
||||
|
||||
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
|
||||
@@ -1651,7 +1661,7 @@
|
||||
|
||||
"path-to-regexp": ["path-to-regexp@0.1.12", "", {}, "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="],
|
||||
|
||||
"path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="],
|
||||
"path-type": ["path-type@5.0.0", "", {}, "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg=="],
|
||||
|
||||
"path2d": ["path2d@0.1.1", "", {}, "sha512-/+S03c8AGsDYKKBtRDqieTJv2GlkMb0bWjnqOgtF6MkjdUQ9a8ARAtxWf9NgKLGm2+WQr6+/tqJdU8HNGsIDoA=="],
|
||||
|
||||
@@ -1967,7 +1977,7 @@
|
||||
|
||||
"sisteransi": ["sisteransi@1.0.5", "", {}, "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="],
|
||||
|
||||
"slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="],
|
||||
"slash": ["slash@5.1.0", "", {}, "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg=="],
|
||||
|
||||
"slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="],
|
||||
|
||||
@@ -2119,6 +2129,8 @@
|
||||
|
||||
"unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="],
|
||||
|
||||
"unicorn-magic": ["unicorn-magic@0.1.0", "", {}, "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ=="],
|
||||
|
||||
"unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "^3.0.0", "bail": "^2.0.0", "devlop": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^4.0.0", "trough": "^2.0.0", "vfile": "^6.0.0" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="],
|
||||
|
||||
"unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="],
|
||||
@@ -2265,6 +2277,8 @@
|
||||
|
||||
"@swc/helpers/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
||||
|
||||
"@typescript-eslint/typescript-estree/globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="],
|
||||
|
||||
"@typescript-eslint/utils/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="],
|
||||
|
||||
"ahooks/tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
||||
@@ -2299,6 +2313,8 @@
|
||||
|
||||
"d3-dsv/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
|
||||
|
||||
"dir-glob/path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="],
|
||||
|
||||
"eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="],
|
||||
|
||||
"express/cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="],
|
||||
@@ -2435,6 +2451,8 @@
|
||||
|
||||
"@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="],
|
||||
|
||||
"@typescript-eslint/typescript-estree/globby/slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="],
|
||||
|
||||
"@typescript-eslint/utils/eslint-scope/estraverse": ["estraverse@4.3.0", "", {}, "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="],
|
||||
|
||||
"body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"@trpc/client": "^10.45.2",
|
||||
"@trpc/server": "^10.45.2",
|
||||
"astro": "^4.16.17",
|
||||
"astro-typesafe-api": "^0.2.0",
|
||||
"astro-typesafe-api": "^0.2.1",
|
||||
"body-scroll-lock": "^4.0.0-beta.0",
|
||||
"buffer": "^6.0.3",
|
||||
"bun": "^1.1.45",
|
||||
@@ -47,6 +47,7 @@
|
||||
"jwt-decode": "^4.0.0",
|
||||
"moment": "^2.30.1",
|
||||
"moment-timezone": "^0.5.46",
|
||||
"nodemailer": "^6.10.0",
|
||||
"pdf-lib": "^1.17.1",
|
||||
"postcss-nested": "^7.0.2",
|
||||
"radix-svelte-icons": "^1.0.0",
|
||||
@@ -70,6 +71,7 @@
|
||||
"@types/is-base64": "^1.1.3",
|
||||
"@types/js-cookie": "^3.0.6",
|
||||
"@types/jsonwebtoken": "^9.0.7",
|
||||
"@types/nodemailer": "^6.4.17",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
"@typescript-eslint/parser": "^5.62.0",
|
||||
|
||||
@@ -5,9 +5,10 @@ export const createCaller = createCallerFactory({
|
||||
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
||||
"aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid].ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.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/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||
"bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"),
|
||||
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
||||
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<script lang="ts">
|
||||
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
import { BenutzerClient } from "./types.js";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
} from "@ibcornelsen/database/client";
|
||||
|
||||
import {
|
||||
GebaeudeClient,
|
||||
ObjektClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
</script>
|
||||
|
||||
|
||||
@@ -10,18 +10,18 @@
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
import {
|
||||
BedarfsausweisWohnenClient,
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
VerbrauchsausweisGewerbeClient,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
|
||||
export let objekt: GebaeudeClient;
|
||||
export let objekt: ObjektClient;
|
||||
export let ausweis:
|
||||
| VerbrauchsausweisWohnenClient
|
||||
| VerbrauchsausweisGewerbeClient
|
||||
| BedarfsausweisWohnenClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
|
||||
export let ausweisart: Enums.Ausweisart;
|
||||
</script>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<script lang="ts">
|
||||
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
import ZipSearch from "#components/PlzSuche.svelte";
|
||||
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
import { Bezahlmethoden, Enums } from "@ibcornelsen/database/client";
|
||||
import PaymentOption from "#components/PaymentOption.svelte";
|
||||
|
||||
export let selectedPaymentType: Bezahlmethoden =
|
||||
|
||||
@@ -10,16 +10,16 @@
|
||||
//import Label from "../Label.svelte";
|
||||
|
||||
import {
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { boolean } from "astro:schema";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
</script>
|
||||
@@ -35,21 +35,92 @@ md:grid-cols-2 md:gap-x-6 md: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
|
||||
|
||||
">
|
||||
|
||||
<SanierungsOption label="Zentral/Etage" name="zentralheizung" help="Bitte anklicken wenn die Heizwärme <b>zentral erzeugt</b> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu." value="ZH" bind:checked={aufnahme.zentralheizung}></SanierungsOption>
|
||||
<SanierungsOption label="Einzelofen" name="einzelofen" help="Bei <b>dezentraler Erzeugung</b> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu." value="EO" bind:checked={aufnahme.einzelofen}></SanierungsOption>
|
||||
<SanierungsOption label="Durchlauferhitzer (elektrisch)" name="durchlauf_erhitzer" help="Wenn <b>dezentrale</b> elektrische <b>Warmwassererzeugung</b> vorhanden ist" value="DH" bind:checked={aufnahme.durchlauf_erhitzer}></SanierungsOption>
|
||||
<SanierungsOption label="Standardkessel" name="standard_kessel" help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel" value="SK" bind:checked={aufnahme.standard_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Solarsystem für Warmwasser" name="solarsystem_warmwasser" help="Solarpanele auf dem Dach zur <b>alternativen Warmwassererzeugung</b> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik." value="SSWW" bind:checked={aufnahme.solarsystem_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Wärmepumpe" name="waermepumpe" help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <b>Umgebungsluft, dem Erdreich oder Grundwasser</b> nutzbar macht." value="WP" bind:checked={aufnahme.waermepumpe}></SanierungsOption>
|
||||
<SanierungsOption label="Niedertemperaturkessel" name="niedertemperatur_kessel" help="Heizkessel der mit <b>niedrigen Vorlauftemperaturen</b> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt." value="NK" bind:checked={aufnahme.niedertemperatur_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Brennwertkessel" name="brennwert_kessel" help="Hat einen besonders <b>hohen Wirkungsgrad</b> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt." value="BWK" bind:checked={aufnahme.brennwert_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasserrohre gedämmt" name="warmwasser_rohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen." value="BWK" bind:checked={aufnahme.warmwasser_rohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Heizungsrohre gedämmt" name="heizungsrohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen.ext" value="HRGD" bind:checked={aufnahme.heizungsrohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Zirkulation" name="zirkulation" help="Kreislauf von Heizungs- oder Warmwasser <b>innerhalb eines Leitungssystems</b>, um eine gleichmäßige Wärmeverteilung sicherzustellen." value="ZK" bind:checked={aufnahme.zirkulation}></SanierungsOption>
|
||||
<SanierungsOption label="Photovoltaik auf dem Dach" name="photovoltaik" help="Direkte Umwandlung von Sonnenlicht in <b>elektrische Energie</b> mittels Solarzellen, die den photoelektrischen Effekt nutzen." value="PV" bind:checked={aufnahme.photovotaik}></SanierungsOption>
|
||||
|
||||
"
|
||||
>
|
||||
<SanierungsOption
|
||||
label="Zentral/Etage"
|
||||
name="zentralheizung"
|
||||
help="Bitte anklicken wenn die Heizwärme <b>zentral erzeugt</b> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu."
|
||||
value="ZH"
|
||||
bind:checked={aufnahme.zentralheizung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Einzelofen"
|
||||
name="einzelofen"
|
||||
help="Bei <b>dezentraler Erzeugung</b> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu."
|
||||
value="EO"
|
||||
bind:checked={aufnahme.einzelofen}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Durchlauferhitzer (elektrisch)"
|
||||
name="durchlauf_erhitzer"
|
||||
help="Wenn <b>dezentrale</b> elektrische <b>Warmwassererzeugung</b> vorhanden ist"
|
||||
value="DH"
|
||||
bind:checked={aufnahme.durchlauf_erhitzer}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Standardkessel"
|
||||
name="standard_kessel"
|
||||
help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel"
|
||||
value="SK"
|
||||
bind:checked={aufnahme.standard_kessel}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Solarsystem für Warmwasser"
|
||||
name="solarsystem_warmwasser"
|
||||
help="Solarpanele auf dem Dach zur <b>alternativen Warmwassererzeugung</b> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik."
|
||||
value="SSWW"
|
||||
bind:checked={aufnahme.solarsystem_warmwasser}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Wärmepumpe"
|
||||
name="waermepumpe"
|
||||
help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <b>Umgebungsluft, dem Erdreich oder Grundwasser</b> nutzbar macht."
|
||||
value="WP"
|
||||
bind:checked={aufnahme.waermepumpe}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Niedertemperaturkessel"
|
||||
name="niedertemperatur_kessel"
|
||||
help="Heizkessel der mit <b>niedrigen Vorlauftemperaturen</b> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt."
|
||||
value="NK"
|
||||
bind:checked={aufnahme.niedertemperatur_kessel}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Brennwertkessel"
|
||||
name="brennwert_kessel"
|
||||
help="Hat einen besonders <b>hohen Wirkungsgrad</b> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt."
|
||||
value="BWK"
|
||||
bind:checked={aufnahme.brennwert_kessel}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Warmwasserrohre gedämmt"
|
||||
name="warmwasser_rohre_gedaemmt"
|
||||
help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen."
|
||||
value="BWK"
|
||||
bind:checked={aufnahme.warmwasser_rohre_gedaemmt}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Heizungsrohre gedämmt"
|
||||
name="heizungsrohre_gedaemmt"
|
||||
help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <b>dunklen Ummantelungen</b> (Manschetten) zu erkennen.ext"
|
||||
value="HRGD"
|
||||
bind:checked={aufnahme.heizungsrohre_gedaemmt}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Zirkulation"
|
||||
name="zirkulation"
|
||||
help="Kreislauf von Heizungs- oder Warmwasser <b>innerhalb eines Leitungssystems</b>, um eine gleichmäßige Wärmeverteilung sicherzustellen."
|
||||
value="ZK"
|
||||
bind:checked={aufnahme.zirkulation}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Photovoltaik auf dem Dach"
|
||||
name="photovoltaik"
|
||||
help="Direkte Umwandlung von Sonnenlicht in <b>elektrische Energie</b> mittels Solarzellen, die den photoelektrischen Effekt nutzen."
|
||||
value="PV"
|
||||
bind:checked={aufnahme.photovoltaik}
|
||||
></SanierungsOption>
|
||||
</div>
|
||||
|
||||
<HeizungImage bind:images bind:ausweis bind:gebaeude />
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<script lang="ts">
|
||||
import ImageGrid from "../ImageGrid.svelte";;
|
||||
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
||||
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
</script>
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<script lang="ts">
|
||||
import ImageGrid from "../ImageGrid.svelte";;
|
||||
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
||||
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
</script>
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<script lang="ts">
|
||||
import ImageGrid from "../ImageGrid.svelte";;
|
||||
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
||||
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
</script>
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-6 mt-6">
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
import { AufnahmeClient } from "./types.js";
|
||||
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
@@ -3,16 +3,16 @@
|
||||
import ThickArrowDown from "radix-svelte-icons/src/lib/icons/ThickArrowDown.svelte";
|
||||
import {
|
||||
BedarfsausweisWohnenClient,
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
VerbrauchsausweisGewerbeClient,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import ThickArrowUp from "radix-svelte-icons/src/lib/icons/ThickArrowUp.svelte";
|
||||
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let objekt: GebaeudeClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let objekt: ObjektClient;
|
||||
|
||||
let maxPerformance = 250;
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
<script lang="ts">
|
||||
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
import ZipSearch from "#components/PlzSuche.svelte";
|
||||
import { BenutzerClient, RechnungClient } from "./types.js";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
|
||||
let rechnung: inferProcedureInput<
|
||||
AppRouter["v1"]["rechnungen"]["erstellen"]
|
||||
> = {
|
||||
let rechnung: RechnungClient = {
|
||||
email: user.email,
|
||||
empfaenger: user.vorname + " " + user.name,
|
||||
strasse: user.adresse,
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
//import Label from "../Label.svelte";
|
||||
|
||||
import {
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { boolean } from "astro:schema";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
<script lang="ts">
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
|
||||
import HeizungImage from "./HeizungImage.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Inputlabel from "#components/labels/InputLabel.svelte";
|
||||
|
||||
|
||||
//import Label from "../Label.svelte";
|
||||
|
||||
import {
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { boolean } from "astro:schema";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
import HeizungImage from "./HeizungImage.svelte";
|
||||
|
||||
//import Label from "../Label.svelte";
|
||||
|
||||
import {
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { boolean } from "astro:schema";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||
|
||||
export let gebaeude: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
</script>
|
||||
|
||||
<div
|
||||
id="sanierungszustand"
|
||||
class="bereich-box grid
|
||||
grid-cols-1 gap-x-4 gap-y-2
|
||||
|
||||
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
|
||||
@@ -31,29 +31,97 @@
|
||||
|
||||
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
|
||||
">
|
||||
|
||||
<SanierungsOption label="Zentral/Etage" name="zentralheizung" help="Bitte anklicken wenn die Heizwärme <strong>zentral erzeugt</strong> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu." value="ZH" bind:checked={aufnahme.zentralheizung}></SanierungsOption>
|
||||
<SanierungsOption label="Einzelofen" name="einzelofen" help="Bei <strong>dezentraler Erzeugung</strong> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu." value="EO" bind:checked={aufnahme.einzelofen}></SanierungsOption>
|
||||
<SanierungsOption label="Durchlauferhitzer (elektrisch)" name="durchlauf_erhitzer" help="Wenn <strong>dezentrale</strong> elektrische <strong>Warmwassererzeugung</strong> vorhanden ist" value="DH" bind:checked={aufnahme.durchlauf_erhitzer}></SanierungsOption>
|
||||
<SanierungsOption label="Standardkessel" name="standard_kessel" help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel" value="SK" bind:checked={aufnahme.standard_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Solarsystem für Warmwasser" name="solarsystem_warmwasser" help="Solarpanele auf dem Dach zur <strong>alternativen Warmwassererzeugung</strong> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik." value="SSWW" bind:checked={aufnahme.solarsystem_warmwasser}></SanierungsOption>
|
||||
<SanierungsOption label="Wärmepumpe" name="waermepumpe" help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <strong>Umgebungsluft, dem Erdreich oder Grundwasser</strong> nutzbar macht." value="WP" bind:checked={aufnahme.waermepumpe}></SanierungsOption>
|
||||
<SanierungsOption label="Niedertemperaturkessel" name="niedertemperatur_kessel" help="Heizkessel der mit <strong>niedrigen Vorlauftemperaturen</strong> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt." value="NK" bind:checked={aufnahme.niedertemperatur_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Brennwertkessel" name="brennwert_kessel" help="Hat einen besonders <strong>hohen Wirkungsgrad</strong> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt." value="BWK" bind:checked={aufnahme.brennwert_kessel}></SanierungsOption>
|
||||
<SanierungsOption label="Warmwasserrohre gedämmt" name="warmwasser_rohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen." value="BWK" bind:checked={aufnahme.warmwasser_rohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Heizungsrohre gedämmt" name="heizungsrohre_gedaemmt" help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen.ext" value="HRGD" bind:checked={aufnahme.heizungsrohre_gedaemmt}></SanierungsOption>
|
||||
<SanierungsOption label="Zirkulation" name="zirkulation" help="Kreislauf von Heizungs- oder Warmwasser <strong>innerhalb eines Leitungssystems</strong>, um eine gleichmäßige Wärmeverteilung sicherzustellen." value="ZK" bind:checked={aufnahme.zirkulation}></SanierungsOption>
|
||||
<SanierungsOption label="Photovoltaik auf dem Dach" name="photovoltaik" help="Direkte Umwandlung von Sonnenlicht in <strong>elektrische Energie</strong> mittels Solarzellen, die den photoelektrischen Effekt nutzen." value="PV" bind:checked={aufnahme.photovotaik}></SanierungsOption>
|
||||
</div>
|
||||
|
||||
<HeizungImage bind:images bind:ausweis bind:gebaeude />
|
||||
|
||||
<style lang="postcss">
|
||||
|
||||
</style>
|
||||
|
||||
"
|
||||
>
|
||||
<SanierungsOption
|
||||
label="Zentral/Etage"
|
||||
name="zentralheizung"
|
||||
help="Bitte anklicken wenn die Heizwärme <strong>zentral erzeugt</strong> und von dort in die Räume verteilt wird. Gasthermen und Etagenheizungen in der Wohnung gehören auch dazu."
|
||||
value="ZH"
|
||||
bind:checked={aufnahme.zentralheizung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Einzelofen"
|
||||
name="einzelofen"
|
||||
help="Bei <strong>dezentraler Erzeugung</strong> in den Räumen wie z.B. Nachtspeicher, Kami- oder Kachelofen. Dezentrale Klimageräte zur Wärmeerzeugung gehören auch dazu."
|
||||
value="EO"
|
||||
bind:checked={aufnahme.einzelofen}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Durchlauferhitzer (elektrisch)"
|
||||
name="durchlauf_erhitzer"
|
||||
help="Wenn <strong>dezentrale</strong> elektrische <strong>Warmwassererzeugung</strong> vorhanden ist"
|
||||
value="DH"
|
||||
bind:checked={aufnahme.durchlauf_erhitzer}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Standardkessel"
|
||||
name="standard_kessel"
|
||||
help="Gemeint sind Konstanttemperaturkessel und ältere Gebläse- oder Feststoffkessel"
|
||||
value="SK"
|
||||
bind:checked={aufnahme.standard_kessel}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Solarsystem für Warmwasser"
|
||||
name="solarsystem_warmwasser"
|
||||
help="Solarpanele auf dem Dach zur <strong>alternativen Warmwassererzeugung</strong> aus Sonnenenergie. Nicht zu verwechseln mit Photovoltaik."
|
||||
value="SSWW"
|
||||
bind:checked={aufnahme.solarsystem_warmwasser}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Wärmepumpe"
|
||||
name="waermepumpe"
|
||||
help="Elektrisch betriebener Wärmerzeuger der thermische Energie aus natürlichen Wärmequellen wie der <strong>Umgebungsluft, dem Erdreich oder Grundwasser</strong> nutzbar macht."
|
||||
value="WP"
|
||||
bind:checked={aufnahme.waermepumpe}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Niedertemperaturkessel"
|
||||
name="niedertemperatur_kessel"
|
||||
help="Heizkessel der mit <strong>niedrigen Vorlauftemperaturen</strong> (35-75 °C) arbeitet. Im Vergleich zum Brennwertkessel ist er weniger effizient, wird aber noch in älteren Heizsystemen eingesetzt."
|
||||
value="NK"
|
||||
bind:checked={aufnahme.niedertemperatur_kessel}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Brennwertkessel"
|
||||
name="brennwert_kessel"
|
||||
help="Hat einen besonders <strong>hohen Wirkungsgrad</strong> weil er die im Abgas enthaltene Kondensationswärme zurückgewinnt. Auch zu erkennen am doppelwandigem Abgasrohr welches sich nicht erhitzt."
|
||||
value="BWK"
|
||||
bind:checked={aufnahme.brennwert_kessel}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Warmwasserrohre gedämmt"
|
||||
name="warmwasser_rohre_gedaemmt"
|
||||
help="Gemeint sind die sichtbaren Rohre des Verteilsystems Warmwasser. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen."
|
||||
value="BWK"
|
||||
bind:checked={aufnahme.warmwasser_rohre_gedaemmt}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Heizungsrohre gedämmt"
|
||||
name="heizungsrohre_gedaemmt"
|
||||
help="Gemeint sind die sichtbaren Rohre des Verteilsystems Heizung. Gedämmte Rohre sind an den <strong>dunklen Ummantelungen</strong> (Manschetten) zu erkennen.ext"
|
||||
value="HRGD"
|
||||
bind:checked={aufnahme.heizungsrohre_gedaemmt}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Zirkulation"
|
||||
name="zirkulation"
|
||||
help="Kreislauf von Heizungs- oder Warmwasser <strong>innerhalb eines Leitungssystems</strong>, um eine gleichmäßige Wärmeverteilung sicherzustellen."
|
||||
value="ZK"
|
||||
bind:checked={aufnahme.zirkulation}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Photovoltaik auf dem Dach"
|
||||
name="photovoltaik"
|
||||
help="Direkte Umwandlung von Sonnenlicht in <strong>elektrische Energie</strong> mittels Solarzellen, die den photoelektrischen Effekt nutzen."
|
||||
value="PV"
|
||||
bind:checked={aufnahme.photovoltaik}
|
||||
></SanierungsOption>
|
||||
</div>
|
||||
|
||||
<HeizungImage bind:images bind:ausweis bind:gebaeude />
|
||||
|
||||
<!--
|
||||
|
||||
<div class="GRB3">
|
||||
<div class="form-group col-md-12">
|
||||
@@ -151,5 +219,6 @@
|
||||
<AusweisPreviewContainer bind:images bind:ausweis bind:gebaeude />
|
||||
|
||||
-->
|
||||
-->
|
||||
|
||||
|
||||
<style lang="postcss">
|
||||
</style>
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
//import Label from "../Label.svelte";
|
||||
|
||||
import {
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
UploadedGebaeudeBild,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { boolean } from "astro:schema";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
import fuelList from "./brennstoffListe.js";
|
||||
import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung.js";
|
||||
import {
|
||||
GebaeudeAufnahmeClient,
|
||||
GebaeudeClient,
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "./types.js";
|
||||
import { addNotification } from "#components/Notifications/shared.js";
|
||||
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let aufnahme: GebaeudeAufnahmeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
|
||||
// Wir dürfen bis zu 4.5 Jahre alte Klimafaktoren benutzen, also nehmen wir alle Monate seitdem und generieren daraus die Auswahl.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import UploadImages from "./UploadImages.svelte";
|
||||
import type { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
||||
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||
import { RotateCounterClockwise, Trash, Upload } from "radix-svelte-icons";
|
||||
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
@@ -9,7 +9,7 @@
|
||||
export let min: number = 1;
|
||||
export let name: string = "";
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let kategorie: Enums.BilderKategorie
|
||||
|
||||
async function rotateImage(image: UploadedGebaeudeBild): Promise<UploadedGebaeudeBild> {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { notifications } from "./shared"
|
||||
import { notifications } from "./shared.js"
|
||||
|
||||
export let component: ConstructorOfATypedSvelteComponent;
|
||||
</script>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<script lang="ts">
|
||||
import { A6BerechnungWaermeTransferMaxStroemeLueftungGesamt } from "#lib/Berechnungen/BedarfsausweisWohnen/A6BerechnungWaermeTransferMaxStroemeLueftungGesamt.js";
|
||||
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { BedarfsausweisWohnenClient, AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
|
||||
export let ausweis: BedarfsausweisWohnenClient;
|
||||
export let gebaeude_aufnahme: GebaeudeAufnahmeClient;
|
||||
export let gebaeude_aufnahme: AufnahmeClient;
|
||||
|
||||
// Berechnete Werte aus A5
|
||||
$: result = A6BerechnungWaermeTransferMaxStroemeLueftungGesamt();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { BedarfsausweisWohnenClient, AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
|
||||
export let ausweis: BedarfsausweisWohnenClient;
|
||||
export let gebaeude_aufnahme: GebaeudeAufnahmeClient;
|
||||
export let gebaeude_aufnahme: AufnahmeClient;
|
||||
|
||||
import { A9BerechnungNutzenergiebedarfTrinkwarmwasser } from "#lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.js";
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import HelpLabel from "#labels/HelpLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import type { BedarfsausweisWohnen, Enums, VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
|
||||
|
||||
export let max: number = 2;
|
||||
@@ -7,11 +7,11 @@
|
||||
export let name: string = ""
|
||||
|
||||
// Array of base64 encoded images read into the input.
|
||||
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
|
||||
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||
export let gebaeude: GebaeudeClient;
|
||||
export let gebaeude: ObjektClient;
|
||||
export let kategorie: Enums.BilderKategorie;
|
||||
|
||||
function getAllImages(this: HTMLInputElement) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { GebaeudeAufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
|
||||
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||
export function auditBedarfsausweisBenoetigt(ausweis: VerbrauchsausweisWohnenClient, gebaeude: AufnahmeClient): boolean {
|
||||
if (ausweis.ausstellgrund == "Neubau" || ausweis.ausstellgrund == "Modernisierung") {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { ObjektClient, VerbrauchsausweisWohnenClient, AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "./hidden.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||
|
||||
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient, aufnahme: GebaeudeAufnahmeClient): Promise<boolean> {
|
||||
export async function auditEndEnergie(ausweis: VerbrauchsausweisWohnenClient, gebaeude: ObjektClient, aufnahme: AufnahmeClient): Promise<boolean> {
|
||||
if (hidden.has(AuditType.END_ENERGIE)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "../audits/hidden.js";
|
||||
|
||||
export function auditHeizungGebaeudeBaujahr(gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||
export function auditHeizungGebaeudeBaujahr(gebaeude: AufnahmeClient): boolean {
|
||||
if ((gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) && (gebaeude.baujahr_gebaeude && gebaeude.baujahr_gebaeude.length > 0)) {
|
||||
return gebaeude.baujahr_heizung[0] > 1500 &&
|
||||
gebaeude.baujahr_gebaeude[0] > 1500 &&
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "../audits/hidden.js";
|
||||
|
||||
export function auditHeizungJuengerDreiJahre(gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||
export function auditHeizungJuengerDreiJahre(gebaeude: AufnahmeClient): boolean {
|
||||
|
||||
if (gebaeude.baujahr_heizung && gebaeude.baujahr_heizung.length > 0) {
|
||||
if (!hidden.has(AuditType.HEIZUNG_JUENGER_DREI_JAHRE)) {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "./hidden.js";
|
||||
import { getKlimafaktoren } from "#lib/Klimafaktoren.js";
|
||||
|
||||
export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): Promise<boolean> {
|
||||
export async function auditKlimaFaktoren(ausweis: VerbrauchsausweisWohnenClient, gebaeude: ObjektClient): Promise<boolean> {
|
||||
if (hidden.has(AuditType.KLIMA_FAKTOREN)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "./hidden.js";
|
||||
|
||||
export function auditLeerStand(gebaeude: GebaeudeAufnahmeClient): boolean {
|
||||
export function auditLeerStand(gebaeude: AufnahmeClient): boolean {
|
||||
if (gebaeude.leerstand && !hidden.has(AuditType.LEER_STAND)) {
|
||||
return (
|
||||
(gebaeude.leerstand > 30)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { GebaeudeClient } from "#components/Ausweis/types.js";
|
||||
import { ObjektClient } from "#components/Ausweis/types.js";
|
||||
import { memoize } from "src/lib/Memoization.js";
|
||||
import { AuditType, hidden } from "../audits/hidden.js";
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
|
||||
export const auditPlzNichtErkannt = memoize(
|
||||
async (gebaeude: GebaeudeClient) => {
|
||||
async (gebaeude: ObjektClient) => {
|
||||
if (gebaeude.plz) {
|
||||
if (gebaeude.plz.length == 5) {
|
||||
try {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeAufnahmeClient, GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "./hidden.js";
|
||||
|
||||
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeAufnahmeClient): number[] {
|
||||
export function auditVerbrauchAbweichung(ausweis: VerbrauchsausweisWohnenClient, gebaeude: AufnahmeClient): number[] {
|
||||
if (gebaeude.leerstand && (gebaeude.leerstand > 0)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "./hidden.js";
|
||||
|
||||
export function auditWohnFlaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
|
||||
export function auditWohnFlaeche(gebaeude: AufnahmeClient ): boolean {
|
||||
if (gebaeude.einheiten && gebaeude.flaeche ) {
|
||||
if (!hidden.has(AuditType.WOHN_FLAECHE)){
|
||||
return (
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "../audits/hidden.js";
|
||||
|
||||
export function auditWohnflaecheGroesserGesamtflaeche(gebaeude: GebaeudeAufnahmeClient ): boolean {
|
||||
export function auditWohnflaecheGroesserGesamtflaeche(gebaeude: AufnahmeClient ): boolean {
|
||||
if (gebaeude.flaeche && gebaeude.nutzflaeche){
|
||||
return (gebaeude.flaeche > gebaeude.nutzflaeche && !hidden.has(AuditType.WOHNFLAECHE_GROESSER_GESAMTFLAECHE));
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { GebaeudeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AuditType, hidden } from "./hidden.js";
|
||||
|
||||
export function auditZeitraumAktuell(ausweis: VerbrauchsausweisWohnenClient, gebaeude: GebaeudeClient): boolean {
|
||||
export function auditZeitraumAktuell(ausweis: VerbrauchsausweisWohnenClient, gebaeude: ObjektClient): boolean {
|
||||
if (hidden.has(AuditType.ZEITRAUM_AKTUELL)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ import fuelList from "#components/Ausweis/brennstoffListe.js";
|
||||
import { faker } from "@faker-js/faker";
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
|
||||
console.log(Enums);
|
||||
|
||||
|
||||
import "cypress-file-upload"
|
||||
|
||||
describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
||||
it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => {
|
||||
cy.visit("/energieausweis-erstellen/verbrauchsausweis-wohngebaeude");
|
||||
|
||||
console.log(Enums);
|
||||
|
||||
|
||||
// cy.wait(1000);
|
||||
|
||||
|
||||
25
src/cypress/e2e/auth/login.cy.ts
Normal file
25
src/cypress/e2e/auth/login.cy.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import {faker} from "@faker-js/faker";
|
||||
|
||||
describe('Benutzer Login', () => {
|
||||
// Wir generieren uns einen zufälligen Nutzer
|
||||
const email = "user@ib-cornelsen.de"
|
||||
const password = "passwort"
|
||||
|
||||
it("meldet einen Nutzer an und leitet auf die Startseite weiter", () => {
|
||||
cy.visit("/auth/login")
|
||||
|
||||
cy.wait(1000)
|
||||
|
||||
cy.get('input[name="email"]').type(email)
|
||||
cy.get('input[name="passwort"]').type(password)
|
||||
|
||||
cy.get('button[type="submit"]').click()
|
||||
|
||||
cy.url().should("include", "/dashboard")
|
||||
|
||||
// Wir sollten nun einen Access Token und Refresh Token in unseren Cookies sehen.
|
||||
cy.getCookie(API_ACCESS_TOKEN_COOKIE_NAME).should("exist")
|
||||
cy.getCookie(API_REFRESH_TOKEN_COOKIE_NAME).should("exist")
|
||||
})
|
||||
})
|
||||
31
src/cypress/e2e/auth/logout.cy.ts
Normal file
31
src/cypress/e2e/auth/logout.cy.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import {faker} from "@faker-js/faker";
|
||||
|
||||
describe('Benutzer Logout', () => {
|
||||
// Wir generieren uns einen zufälligen Nutzer
|
||||
const email = "user@ib-cornelsen.de"
|
||||
const password = "passwort"
|
||||
|
||||
it("meldet einen Nutzer an und leitet auf die Startseite weiter", () => {
|
||||
cy.visit("/auth/login")
|
||||
|
||||
cy.wait(1000)
|
||||
|
||||
cy.get('input[name="email"]').type(email)
|
||||
cy.get('input[name="passwort"]').type(password)
|
||||
|
||||
cy.get('button[type="submit"]').click()
|
||||
|
||||
cy.url().should("include", "/dashboard")
|
||||
|
||||
// Wir sollten nun einen Access Token und Refresh Token in unseren Cookies sehen.
|
||||
cy.getCookie(API_ACCESS_TOKEN_COOKIE_NAME).should("exist")
|
||||
cy.getCookie(API_REFRESH_TOKEN_COOKIE_NAME).should("exist")
|
||||
})
|
||||
|
||||
it("meldet einen Nutzer ab und leitet auf die Login Seite weiter", () => {
|
||||
cy.visit("/auth/logout")
|
||||
|
||||
cy.url().should("include", "/auth/login")
|
||||
})
|
||||
})
|
||||
24
src/cypress/e2e/auth/passwort-vergessen.cy.ts
Normal file
24
src/cypress/e2e/auth/passwort-vergessen.cy.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import {faker} from "@faker-js/faker";
|
||||
|
||||
describe('Benutzer Passwort Vergessen', () => {
|
||||
// Wir generieren uns einen zufälligen Nutzer
|
||||
const email = "user@ib-cornelsen.de"
|
||||
const password = "passwort"
|
||||
|
||||
it("fordert ein neues Passwort an", () => {
|
||||
cy.visit("/auth/passwort-vergessen")
|
||||
|
||||
cy.wait(1000)
|
||||
|
||||
cy.get('input[name="email"]').type(email)
|
||||
|
||||
cy.get('button[type="submit"]').click()
|
||||
|
||||
cy.url().should("include", "/dashboard")
|
||||
|
||||
// Wir sollten nun einen Access Token und Refresh Token in unseren Cookies sehen.
|
||||
cy.getCookie(API_ACCESS_TOKEN_COOKIE_NAME).should("exist")
|
||||
cy.getCookie(API_REFRESH_TOKEN_COOKIE_NAME).should("exist")
|
||||
})
|
||||
})
|
||||
@@ -1,7 +1,7 @@
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import {faker} from "@faker-js/faker";
|
||||
|
||||
describe('Benutzer Authentifizierung', () => {
|
||||
describe('Benutzer Registrierung', () => {
|
||||
// Wir generieren uns einen zufälligen Nutzer
|
||||
const email = faker.internet.email()
|
||||
const password = faker.internet.password()
|
||||
@@ -1,5 +1,5 @@
|
||||
import { A9BerechnungNutzenergiebedarfTrinkwarmwasser } from "#lib/Berechnungen/BedarfsausweisWohnen/A9BerechnungNutzenergiebedarfTrinkwarmwasser.js";
|
||||
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { BedarfsausweisWohnenClient, AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
|
||||
/**
|
||||
* Implementierung Tabelle A10
|
||||
@@ -7,9 +7,9 @@ import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/
|
||||
* @see 18599-Tabellenverfahren-Wohngebaeude.pdf
|
||||
* @export
|
||||
* @param {BedarfsausweisWohnenClient} ausweis
|
||||
* @param {GebaeudeAufnahmeClient} gebaeude_aufnahme
|
||||
* @param {AufnahmeClient} gebaeude_aufnahme
|
||||
*/
|
||||
export function A10BerechnungWaermequellenAnlagentechnikTrinkwarmwasser(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: GebaeudeAufnahmeClient) {
|
||||
export function A10BerechnungWaermequellenAnlagentechnikTrinkwarmwasser(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: AufnahmeClient) {
|
||||
|
||||
const result = A9BerechnungNutzenergiebedarfTrinkwarmwasser(ausweis, gebaeude_aufnahme);
|
||||
const trinkwasserWaermebedarf = result.trinkwasserWaermebedarf;
|
||||
|
||||
@@ -26,7 +26,7 @@ export function A11BerechnungWaermequellenZusammenstellung() {
|
||||
const result = A8BerechnungWaermequellenAusAnlagentechnikHeizung();
|
||||
|
||||
const ausweis = {}; // Replace with actual BedarfsausweisWohnenClient object
|
||||
const gebaeude_aufnahme = {}; // Replace with actual GebaeudeAufnahmeClient object
|
||||
const gebaeude_aufnahme = {}; // Replace with actual AufnahmeClient object
|
||||
const resultTrinkwarmwasser = A10BerechnungWaermequellenAnlagentechnikTrinkwarmwasser(ausweis, gebaeude_aufnahme);
|
||||
const WaermeQuellenAnlagentechnikTrinkwarmwasser = resultTrinkwarmwasser.WaermeQuellenAnlagentechnikTrinkwarmwasser;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { BedarfsausweisWohnenClient, AufnahmeClient } from "#components/Ausweis/types.js";
|
||||
import { linearInterpolation } from "js-interpolate"
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ import { linearInterpolation } from "js-interpolate"
|
||||
* @see 18599-Tabellenverfahren-Wohngebaeude.pdf
|
||||
* @export
|
||||
* @param {BedarfsausweisWohnenClient} ausweis
|
||||
* @param {GebaeudeAufnahmeClient} gebaeude_aufnahme
|
||||
* @param {AufnahmeClient} gebaeude_aufnahme
|
||||
*/
|
||||
export function A9BerechnungNutzenergiebedarfTrinkwarmwasser(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: GebaeudeAufnahmeClient) {
|
||||
export function A9BerechnungNutzenergiebedarfTrinkwarmwasser(ausweis: BedarfsausweisWohnenClient, gebaeude_aufnahme: AufnahmeClient) {
|
||||
// A_NGF aus Eingabe
|
||||
const bezugsflaeche = 154.2;
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { addNotification } from "@ibcornelsen/ui";
|
||||
import { CrossCircled } from "radix-svelte-icons";
|
||||
import CheckCircled from "radix-svelte-icons/src/lib/icons/CheckCircled.svelte";
|
||||
import {client} from "src/trpc";
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
import { CrossCircled, CheckCircled } from "radix-svelte-icons";
|
||||
import { fade } from "svelte/transition";
|
||||
|
||||
let email: string;
|
||||
@@ -12,7 +11,7 @@
|
||||
async function sendPasswordMail(e: SubmitEvent) {
|
||||
e.preventDefault()
|
||||
try {
|
||||
const response = await client.v1.benutzer.passwortAnfrageSenden.query({
|
||||
const response = await api.auth["forgot-password"].GET.fetch({
|
||||
email
|
||||
})
|
||||
|
||||
@@ -20,7 +19,7 @@
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
message: "Ups...",
|
||||
subtext: "Da ist wohl etwas schiefgelaufen... Diese Email Adresse ist bereits in Benutzung, haben sie vielleicht bereits ein Konto bei uns?",
|
||||
subtext: "Da ist wohl etwas schiefgelaufen... Bitte versuchen sie es erneut, falls das Problem weiterhin bestehen sollte melden sie sich bei unserem Support damit wir ihnen helfen können.",
|
||||
type: "error",
|
||||
timeout: 0,
|
||||
dismissable: true
|
||||
@@ -44,7 +43,7 @@
|
||||
required
|
||||
/>
|
||||
{#if showEmailSuccess}
|
||||
<div role="alert" class="alert alert-success" in:fade>
|
||||
<div role="alert" class="flex bg-green-400 bg-opacity-25 border-green-600 border items-center gap-4 px-4 py-2 rounded-lg" in:fade>
|
||||
<CheckCircled size={24} />
|
||||
<span class="font-semibold">Falls sie ein Konto bei uns haben wurde eine Email an sie verschickt.</span>
|
||||
</div>
|
||||
|
||||
@@ -1,28 +1,37 @@
|
||||
<script lang="ts">
|
||||
import { addNotification } from "@ibcornelsen/ui";
|
||||
import {client} from "src/trpc";
|
||||
import { addNotification } from "#components/Notifications/index.js";
|
||||
import NotificationWrapper from "#components/Notifications/NotificationWrapper.svelte";
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
|
||||
let passwort: string;
|
||||
let passwortWiederholen: string;
|
||||
|
||||
export let token: string;
|
||||
|
||||
let disabled = false;
|
||||
|
||||
async function confirmResetPassword(e: SubmitEvent) {
|
||||
e.preventDefault()
|
||||
try {
|
||||
await client.v1.benutzer.passwortZuruecksetzen.mutate({
|
||||
disabled = true
|
||||
await api.auth["forgot-password"].POST.fetch({
|
||||
passwort,
|
||||
token
|
||||
})
|
||||
|
||||
addNotification({
|
||||
message: "Passwort zurückgesetzt.",
|
||||
subtext: "Ihr Passwort wurde erfolgreich zurückgesetzt, sie können diese Seite nun schließen.",
|
||||
subtext: "Ihr Passwort wurde erfolgreich zurückgesetzt, sie werden in kürze zum Login weitergeleitet.",
|
||||
type: "success",
|
||||
timeout: 0,
|
||||
dismissable: true
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
window.location.href = "/auth/login"
|
||||
}, 5000)
|
||||
} catch (e) {
|
||||
disabled = false
|
||||
addNotification({
|
||||
message: "Ups...",
|
||||
subtext: "Beim zurücksetzen ihres Passworts ist etwas schiefgelaufen, bitte versuchen sie es erneut.",
|
||||
@@ -46,6 +55,7 @@
|
||||
data-test="passwort"
|
||||
class="input input-bordered text-base text-base-content font-medium"
|
||||
bind:value={passwort}
|
||||
{disabled}
|
||||
required
|
||||
/>
|
||||
<h4>Passwort wiederholen</h4>
|
||||
@@ -56,6 +66,7 @@
|
||||
data-test="passwort_wiederholen"
|
||||
class="input input-bordered text-base text-base-content font-medium"
|
||||
bind:value={passwortWiederholen}
|
||||
{disabled}
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
@@ -68,4 +79,6 @@
|
||||
>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<NotificationWrapper></NotificationWrapper>
|
||||
@@ -1,8 +1,8 @@
|
||||
<script lang="ts">
|
||||
import { BenutzerClient, GebaeudeClient } from "#components/Ausweis/types";
|
||||
import { BenutzerClient, ObjektClient } from "#components/Ausweis/types";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let gebaeudeArray: GebaeudeClient[];
|
||||
export let gebaeudeArray: ObjektClient[];
|
||||
</script>
|
||||
|
||||
<h1 class="text-4xl font-medium my-8">Willkommen zurück, {user.vorname}!</h1>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts">
|
||||
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
|
||||
import ProgressBar from "#components/Ausweis/Progressbar.svelte";
|
||||
import Bereich from "#labels/Bereich.svelte";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import Ansprechpartner from "#components/Ausweis/Ansprechpartner.svelte";
|
||||
import Rechnungsadresse from "#components/Ausweis/Rechnungsadresse.svelte";
|
||||
import Bezahlung from "#components/Ausweis/Bezahlung.svelte";
|
||||
@@ -14,12 +14,13 @@
|
||||
import LoginDialog from "#components/LoginDialog.svelte";
|
||||
import { PRICES } from "#lib/constants.js";
|
||||
import {
|
||||
AufnahmeClient,
|
||||
AufnahmeClient,
|
||||
BenutzerClient,
|
||||
ObjektClient,
|
||||
VerbrauchsausweisWohnenClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import { validateAccessTokenClient } from "src/client/lib/validateAccessToken.js";
|
||||
import ButtonZurueckSpeichernKaufabschluss from "#components/Ausweis/ButtonZurueckSpeichernKaufabschluss.svelte";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
@@ -94,300 +95,277 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<div id="skala" class="bg-white grid grid-cols-1 gap-x-8 gap-y-4 p-4
|
||||
<div
|
||||
id="skala"
|
||||
class="bg-white grid grid-cols-1 gap-x-8 gap-y-4 p-4
|
||||
|
||||
2xl:grid-cols-2 2xl:gap-x-8
|
||||
">
|
||||
<div id="performance-box" class="w-full box relative px-4 order-2 2xl:order-1 self-stretch grid grid-cols-1">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
bind:aufnahme
|
||||
bind:objekt
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="progress-box" class="w-full box relative px-4 py-3 text-center order-1 2xl:order-2 self-stretch">
|
||||
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">Verbrauchsausweis Wohnen {PRICES.VerbrauchsausweisWohnen[0]} €</h2>
|
||||
<ProgressBar progress={50}
|
||||
/>
|
||||
</div>
|
||||
"
|
||||
>
|
||||
<div
|
||||
id="performance-box"
|
||||
class="w-full box relative px-4 order-2 2xl:order-1 self-stretch grid grid-cols-1"
|
||||
>
|
||||
<PerformanceScore bind:ausweis bind:aufnahme bind:objekt />
|
||||
</div>
|
||||
|
||||
<div
|
||||
id="progress-box"
|
||||
class="w-full box relative px-4 py-3 text-center order-1 2xl:order-2 self-stretch"
|
||||
>
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">
|
||||
Verbrauchsausweis Wohnen {PRICES.VerbrauchsausweisWohnen[0]} €
|
||||
</h2>
|
||||
<ProgressBar progress={50} />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form id="formInput-2" on:submit={speichern}>
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
|
||||
|
||||
<Bereich
|
||||
bind:user
|
||||
bereich="1"
|
||||
title="Eingabe des Ansprechpartners -> {user.email}"
|
||||
>
|
||||
<Ansprechpartner
|
||||
bind:user
|
||||
/></Bereich
|
||||
>
|
||||
<Ansprechpartner bind:user /></Bereich
|
||||
>
|
||||
|
||||
<Bereich
|
||||
bind:user
|
||||
bereich="2"
|
||||
title="Rechnungsadresse"
|
||||
>
|
||||
<Rechnungsadresse
|
||||
bind:user
|
||||
/></Bereich
|
||||
<Bereich bereich="2" title="Rechnungsadresse">
|
||||
<Rechnungsadresse bind:user /></Bereich
|
||||
>
|
||||
|
||||
<Bereich
|
||||
bind:selectedPaymentType
|
||||
bereich="3"
|
||||
title="Bezahlmethode"
|
||||
>
|
||||
<Bezahlung
|
||||
bind:selectedPaymentType
|
||||
/></Bereich
|
||||
<Bereich bereich="3" title="Bezahlmethode">
|
||||
<Bezahlung bind:selectedPaymentType /></Bereich
|
||||
>
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-6 my-6">
|
||||
<div class="zusaetze bereich-box bg-white">
|
||||
<h3>Zusatzleistungen:</h3>
|
||||
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-6 my-6">
|
||||
|
||||
<div class="zusaetze bereich-box bg-white ">
|
||||
|
||||
<h3>Zusatzleistungen:</h3>
|
||||
|
||||
{#each services as service}
|
||||
|
||||
{#each services as service}
|
||||
<div class="zusatz">
|
||||
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={service.selected}
|
||||
/>
|
||||
<div class="text-right pr-6"><b>{@html service.price} €</b> inkl. Mwst</div>
|
||||
<div>{@html service.name}</div>
|
||||
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={service.selected}
|
||||
/>
|
||||
<div class="text-right pr-6">
|
||||
<b>{@html service.price} €</b> inkl. Mwst
|
||||
</div>
|
||||
<div>{@html service.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class=" bereich-box bg-white ring-primary/50 ring-2" >
|
||||
|
||||
<h3>Kosten:</h3>
|
||||
|
||||
<div class="ProduktKostenTabelle">
|
||||
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>Netto-Preis Energieausweis</div><div>:</div><div class="text-right"><b>{(price * 0.81).toFixed(2) + " €"}</b></div>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>Zusatzleistung (Prüfung Mehraufwand)
|
||||
</div><div>:</div><div class="text-right"><b>0.00 €</b></div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>19% gesetzl. MwSt.
|
||||
</div><div>:</div><div class="text-right"><b>{(price * 0.19).toFixed(2) + " €"}</b></div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4">
|
||||
<div><b>Preis inkl. MwSt.</b>
|
||||
</div><div>:</div><div class="text-right"><b>{price.toFixed(2) + " €"}</b></div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4 items-center">
|
||||
<div><b>Bezahlmethode</b>
|
||||
</div><div>:</div><div class="justify-self-end">
|
||||
<img src="images/{selectedPaymentType}.png" alt="{selectedPaymentType}" />
|
||||
|
||||
<div class=" bereich-box bg-white ring-primary/50 ring-2">
|
||||
<h3>Kosten:</h3>
|
||||
|
||||
<div class="ProduktKostenTabelle">
|
||||
<div class="zeile betrag">
|
||||
<div>Netto-Preis Energieausweis</div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{(price * 0.81).toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>Zusatzleistung (Prüfung Mehraufwand)</div>
|
||||
<div>:</div>
|
||||
<div class="text-right"><b>0.00 €</b></div>
|
||||
</div>
|
||||
|
||||
<div class="zeile betrag">
|
||||
<div>19% gesetzl. MwSt.</div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{(price * 0.19).toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4">
|
||||
<div><b>Preis inkl. MwSt.</b></div>
|
||||
<div>:</div>
|
||||
<div class="text-right">
|
||||
<b>{price.toFixed(2) + " €"}</b>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zeile betrag mt-4 items-center">
|
||||
<div><b>Bezahlmethode</b></div>
|
||||
<div>:</div>
|
||||
<div class="justify-self-end">
|
||||
<img
|
||||
src="images/{selectedPaymentType}.png"
|
||||
alt={selectedPaymentType}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<ButtonZurueckSpeichernKaufabschluss />
|
||||
|
||||
<ButtonZurueckSpeichernKaufabschluss />
|
||||
|
||||
<div class="bereich-box pr-12 mt-6">
|
||||
|
||||
<Pruefung
|
||||
bereich="A"
|
||||
title="Prüfung der Ausweisart"
|
||||
bullets={[
|
||||
["Vermietung, Verkauf oder sonstiges.", false],
|
||||
["Baujahr Heizung nicht kleiner als Baujahr Gebäude.", false],
|
||||
["Baujahr nach 1977 oder saniert oder mehr als 4 Wohneinheiten", false],
|
||||
["Heizung min. 3 Jahre alt.", false],
|
||||
["Verbrauchsausweis zulässig.", false]
|
||||
]}>
|
||||
</Pruefung>
|
||||
<div class="bereich-box pr-12 mt-6">
|
||||
<Pruefung
|
||||
bereich="A"
|
||||
title="Prüfung der Ausweisart"
|
||||
bullets={[
|
||||
["Vermietung, Verkauf oder sonstiges.", false],
|
||||
[
|
||||
"Baujahr Heizung nicht kleiner als Baujahr Gebäude.",
|
||||
false,
|
||||
],
|
||||
[
|
||||
"Baujahr nach 1977 oder saniert oder mehr als 4 Wohneinheiten",
|
||||
false,
|
||||
],
|
||||
["Heizung min. 3 Jahre alt.", false],
|
||||
["Verbrauchsausweis zulässig.", false],
|
||||
]}
|
||||
></Pruefung>
|
||||
|
||||
<Pruefung
|
||||
<Pruefung
|
||||
bereich="B"
|
||||
title="Prüfung der Adresse, Wohnfläche, Keller und Dach"
|
||||
bullets={[
|
||||
["PLZ gültig.", false],
|
||||
["Klimafaktorern.", false],
|
||||
["Wohnfläche passt zu Wohneinheiten", false]
|
||||
]}>
|
||||
</Pruefung>
|
||||
["Wohnfläche passt zu Wohneinheiten", false],
|
||||
]}
|
||||
></Pruefung>
|
||||
|
||||
<Pruefung
|
||||
<Pruefung
|
||||
bereich="C"
|
||||
title="Prüfung der Verbrauchsangaben"
|
||||
bullets={[
|
||||
["Verbrauchsmenge schlüssig.", false],
|
||||
["Verbrauchsabweichung im Rahmen.", false],
|
||||
["Endenergieverbrauch schlüssig", false]
|
||||
]}>
|
||||
</Pruefung>
|
||||
|
||||
<Pruefung
|
||||
["Endenergieverbrauch schlüssig", false],
|
||||
]}
|
||||
></Pruefung>
|
||||
|
||||
<Pruefung
|
||||
bereich="D"
|
||||
title="Prüfung Warmwasser und alternative Energieversorgung"
|
||||
bullets={[
|
||||
["Warmwasseranteil schlüssig.", false],
|
||||
["Verbrauchsabweichung im Rahmen.", false],
|
||||
["Endenergieverbrauch schlüssig", false]
|
||||
]}>
|
||||
</Pruefung>
|
||||
["Endenergieverbrauch schlüssig", false],
|
||||
]}
|
||||
></Pruefung>
|
||||
|
||||
<Pruefung
|
||||
<Pruefung
|
||||
bereich="E"
|
||||
title="Prüfung von Gebäudetyp, Lüftung, Kühlung und Leerstand"
|
||||
bullets={[
|
||||
["Leerstand nicht größer als 30%.", false]
|
||||
]}>
|
||||
</Pruefung>
|
||||
bullets={[["Leerstand nicht größer als 30%.", false]]}
|
||||
></Pruefung>
|
||||
|
||||
<Pruefung
|
||||
<Pruefung
|
||||
bereich="F"
|
||||
title="Prüfung des Sanierungsstandes und der Gebäudebilder"
|
||||
bullets={[
|
||||
["Mindestens ein Bild pro Abschnitt vorhanden.", false],
|
||||
["Angaben zum Sanierungsstand vorhanden.", false],
|
||||
["Bei Baujahr vor 1978 Dach oder Geschossdecke min. 12 cm gedämmt.", false]
|
||||
]}>
|
||||
</Pruefung>
|
||||
|
||||
[
|
||||
"Bei Baujahr vor 1978 Dach oder Geschossdecke min. 12 cm gedämmt.",
|
||||
false,
|
||||
],
|
||||
]}
|
||||
></Pruefung>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="varianten bereich-box bg-white">
|
||||
<h3>Hiermit bestelle ich folgende Version des Energieausweises:</h3>
|
||||
|
||||
<div class="variante">
|
||||
<input
|
||||
type="radio"
|
||||
bind:group={basePrice}
|
||||
value={prices[0]}
|
||||
name="Preis"
|
||||
checked
|
||||
/>
|
||||
<div class="text-right pr-4"><b>{prices[0]} €</b> inkl. MwSt.</div>
|
||||
<div>Verbrauchsausweis online als PDF per E-Mail</div>
|
||||
</div>
|
||||
|
||||
<div class="variante">
|
||||
<input
|
||||
type="radio"
|
||||
bind:group={basePrice}
|
||||
value={prices[1]}
|
||||
name="Preis"
|
||||
/>
|
||||
<div class="text-right pr-4"><b>{prices[1]} €</b> inkl. MwSt.</div>
|
||||
<div>
|
||||
Verbrauchsausweis online inkl. Beratung als PDF per E-Mail
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="varianten bereich-box bg-white">
|
||||
<h3>Hiermit bestelle ich folgende Version des Energieausweises:</h3>
|
||||
|
||||
|
||||
|
||||
<div class="variante">
|
||||
|
||||
<input
|
||||
type="radio"
|
||||
bind:group={basePrice}
|
||||
value={prices[0]}
|
||||
name="Preis"
|
||||
checked
|
||||
/>
|
||||
<div class="text-right pr-4"><b>{prices[0]} €</b> inkl. MwSt.</div>
|
||||
<div>Verbrauchsausweis online als PDF per E-Mail</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="variante">
|
||||
|
||||
<input
|
||||
type="radio"
|
||||
bind:group={basePrice}
|
||||
value={prices[1]}
|
||||
name="Preis"
|
||||
/>
|
||||
<div class="text-right pr-4"><b>{prices[1]} €</b> inkl. MwSt.</div>
|
||||
<div>Verbrauchsausweis online inkl. Beratung als PDF per E-Mail</div>
|
||||
</div>
|
||||
|
||||
<div class="variante">
|
||||
|
||||
<input
|
||||
type="radio"
|
||||
bind:group={basePrice}
|
||||
value={prices[2]}
|
||||
name="Preis"
|
||||
/>
|
||||
<div class="text-right pr-4"><b>{prices[2]} €</b> inkl. MwSt.</div>
|
||||
<div>Verbrauchsausweis offline als PDF per E-Mail (Sie schicken uns 3 Verbrauchsabrechnungen)</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="zusaetze bereich-box bg-white">
|
||||
|
||||
<h3>Zusatzleistungen</h3>
|
||||
|
||||
{#each services as service}
|
||||
|
||||
<div class="zusatz">
|
||||
|
||||
<input
|
||||
type="checkbox"
|
||||
bind:checked={service.selected}
|
||||
/>
|
||||
<div class="text-right pr-6"><b>{@html service.price} €</b> inkl. Mwst</div>
|
||||
<div>{@html service.name}</div>
|
||||
|
||||
</div>
|
||||
{/each}
|
||||
|
||||
|
||||
<div class="variante">
|
||||
<input
|
||||
type="radio"
|
||||
bind:group={basePrice}
|
||||
value={prices[2]}
|
||||
name="Preis"
|
||||
/>
|
||||
<div class="text-right pr-4"><b>{prices[2]} €</b> inkl. MwSt.</div>
|
||||
<div>
|
||||
Verbrauchsausweis offline als PDF per E-Mail (Sie schicken uns 3
|
||||
Verbrauchsabrechnungen)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- <ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
|
||||
|
||||
<div class="zusaetze bereich-box bg-white">
|
||||
<h3>Zusatzleistungen</h3>
|
||||
|
||||
{#each services as service}
|
||||
<div class="zusatz">
|
||||
<input type="checkbox" bind:checked={service.selected} />
|
||||
<div class="text-right pr-6">
|
||||
<b>{@html service.price} €</b> inkl. Mwst
|
||||
</div>
|
||||
<div>{@html service.name}</div>
|
||||
</div>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<!-- <ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
|
||||
</form>
|
||||
|
||||
|
||||
<style lang="postcss">
|
||||
h3{@apply text-[1.25rem] ml-0 font-bold mb-6}
|
||||
|
||||
.ProduktKostenTabelle{@apply block;
|
||||
.zeile{@apply grid grid-cols-[19rem_1rem_5rem_1fr];}
|
||||
.betrag{@apply font-bold text-[1.15rem]}
|
||||
h3 {
|
||||
@apply text-[1.25rem] ml-0 font-bold mb-6;
|
||||
}
|
||||
|
||||
.varianten{@apply block;
|
||||
.variante{@apply grid grid-cols-[40px_8rem_1fr] items-start pb-4;
|
||||
input{@apply mt-[5px]
|
||||
.ProduktKostenTabelle {
|
||||
@apply block;
|
||||
.zeile {
|
||||
@apply grid grid-cols-[19rem_1rem_5rem_1fr];
|
||||
}
|
||||
.betrag {
|
||||
@apply font-bold text-[1.15rem];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.zusaetze{@apply block;
|
||||
.zusatz{@apply grid grid-cols-[40px_8rem_1fr] items-start pb-3;
|
||||
input{@apply mt-[4px]
|
||||
.varianten {
|
||||
@apply block;
|
||||
.variante {
|
||||
@apply grid grid-cols-[40px_8rem_1fr] items-start pb-4;
|
||||
input {
|
||||
@apply mt-[5px];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.zusaetze {
|
||||
@apply block;
|
||||
.zusatz {
|
||||
@apply grid grid-cols-[40px_8rem_1fr] items-start pb-3;
|
||||
input {
|
||||
@apply mt-[4px];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
|
||||
import moment from "moment";
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
|
||||
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
|
||||
import { BenutzerClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
|
||||
export let ausweis: VerbrauchsausweisGewerbeClient;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import Layout from "#layouts/Layout.astro";
|
||||
import { berechnungNutzenergiebedarfHeizen } from "#lib/Berechnungen/BedarfsausweisWohnen/BerechnungNutzenergiebedarfHeizen.js"
|
||||
import A12NutzenergiebedarfHeizung from "#components/Tabellen/A12NutzenergiebedarfHeizung.svelte";
|
||||
import { BedarfsausweisWohnenClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types";
|
||||
import { BedarfsausweisWohnenClient, AufnahmeClient } from "#components/Ausweis/types";
|
||||
import A1AnlagenBeschreibung from "#components/Tabellen/A1AnlagenBeschreibung.svelte";
|
||||
import A1AllgemeineAnlagenbeschreibung from "#components/Tabellen/A1AllgemeineAnlagenbeschreibung.svelte";
|
||||
import A2WaermequellenSolareEinstrahlungWintergarten from "#components/Tabellen/A2WaermequellenSolareEinstrahlungWintergarten.svelte";
|
||||
@@ -20,7 +20,7 @@ import A14AufwandszahlenMittlereBelastung from "#components/Tabellen/A14Aufwands
|
||||
import A15AufwandszahlenGesamtErzeugernutzWaerme from "#components/Tabellen/A15AufwandszahlenGesamtErzeugernutzWaerme.svelte";
|
||||
|
||||
const ausweis: BedarfsausweisWohnenClient = {};
|
||||
const gebaeude_aufnahme: GebaeudeAufnahmeClient = { flaeche: 152 }
|
||||
const gebaeude_aufnahme: AufnahmeClient = { flaeche: 152 }
|
||||
|
||||
---
|
||||
|
||||
|
||||
137
src/pages/api/auth/forgot-password.ts
Normal file
137
src/pages/api/auth/forgot-password.ts
Normal file
@@ -0,0 +1,137 @@
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
import * as nodemailer from "nodemailer"
|
||||
import { prisma } from "@ibcornelsen/database/server";
|
||||
import { decodeToken, encodeToken } from "#lib/auth/token.js";
|
||||
import { TokenType } from "#lib/auth/types.js";
|
||||
import { hashPassword } from "#lib/password.js";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
email: z.string().email()
|
||||
}),
|
||||
output: z.void(),
|
||||
async fetch(input, context, transfer) {
|
||||
const user = await prisma.benutzer.findUnique({
|
||||
where: {
|
||||
email: input.email
|
||||
}
|
||||
})
|
||||
|
||||
if (!user) {
|
||||
// Wir senden einen INTERNAL_SERVER_ERROR zurück, damit man nicht aus dem Fehler schließen kann, ob es den Nutzer gibt.
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Etwas ist schiefgelaufen, bitte versuchen sie es erneut."
|
||||
})
|
||||
}
|
||||
|
||||
// Wir generieren einen Token der für 30 Minuten gültig ist, damit der Nutzer das Passwort zurücksetzen kann.
|
||||
const resetToken = encodeToken({
|
||||
exp: Date.now() + 15 * 60 * 1000,
|
||||
typ: TokenType.Reset,
|
||||
uid: user.uid
|
||||
})
|
||||
|
||||
const transport = nodemailer.createTransport({
|
||||
host: "smtp.ionos.de",
|
||||
port: 465,
|
||||
secure: true,
|
||||
auth: {
|
||||
user: "info@online-energieausweis.org",
|
||||
pass: "Katendeich5a2024!"
|
||||
}
|
||||
})
|
||||
|
||||
const info = await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: input.email,
|
||||
subject: "Zurücksetzen ihres Passworts",
|
||||
text: `Hallo ${user.vorname},
|
||||
|
||||
sie haben eine Anfrage zum Zurücksetzen ihres Passworts gestellt. Klicken sie auf den folgenden Link, um ein neues Passwort festzulegen:
|
||||
|
||||
https://ibcornelsen.de/auth/passwort-zuruecksetzen?t=${resetToken}
|
||||
|
||||
Dieser Link ist für die nächsten 15 Minuten gültig. Falls du diese Anfrage nicht gestellt hast, kannst du diese E-Mail ignorieren - dein Passwort bleibt unverändert.
|
||||
|
||||
Falls du Hilfe benötigst, kontaktiere uns unter info@online-energieausweis.org.
|
||||
|
||||
Viele Grüße,
|
||||
IBCornelsen`
|
||||
})
|
||||
|
||||
if (info.rejected) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Etwas ist schiefgelaufen, bitte versuchen sie es erneut."
|
||||
})
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
export const POST = defineApiRoute({
|
||||
input: z.object({
|
||||
token: z.string(),
|
||||
passwort: z.string()
|
||||
}),
|
||||
output: z.void(),
|
||||
async fetch(input, context, transfer) {
|
||||
const decoded = decodeToken(input.token);
|
||||
|
||||
if (!decoded.exp || decoded.exp < Date.now() || decoded.typ !== TokenType.Reset || !decoded.uid) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Der von ihnen benutzte Token ist nicht mehr gültig."
|
||||
})
|
||||
}
|
||||
|
||||
const user = await prisma.benutzer.findUnique({
|
||||
where: {
|
||||
uid: decoded.uid
|
||||
}
|
||||
})
|
||||
|
||||
if (!user) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Kein Benutzer passt zu dem genutzten Token."
|
||||
})
|
||||
}
|
||||
|
||||
const hashed = hashPassword(input.passwort)
|
||||
|
||||
await prisma.benutzer.update({
|
||||
where: {
|
||||
uid: decoded.uid
|
||||
},
|
||||
data: {
|
||||
passwort: hashed
|
||||
}
|
||||
})
|
||||
|
||||
const transport = nodemailer.createTransport({
|
||||
host: "smtp.ionos.de",
|
||||
port: 465,
|
||||
secure: true,
|
||||
auth: {
|
||||
user: "info@online-energieausweis.org",
|
||||
pass: "Katendeich5a2024!"
|
||||
}
|
||||
})
|
||||
|
||||
const info = await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: "Ihr Passwort wurde erfolgreich zurückgesetzt",
|
||||
text: `Hallo ${user.vorname},
|
||||
|
||||
Ihr Passwort wurde erfolgreich zurückgesetzt. Sie können sich jetzt mit Ihrem neuen Passwort anmelden.
|
||||
|
||||
Falls Sie diese Änderung nicht selbst vorgenommen haben, setzen Sie Ihr Passwort bitte sofort erneut zurück und kontaktieren Sie unseren Support unter info@online-energieausweis.org.
|
||||
|
||||
Viele Grüße,
|
||||
IBCornelsen`
|
||||
})
|
||||
},
|
||||
})
|
||||
@@ -2,6 +2,8 @@
|
||||
import PasswortZuruecksetzenModule from "../../modules/Auth/PasswortZuruecksetzenModule.svelte";
|
||||
import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
|
||||
import MinimalLayout from "#layouts/MinimalLayout.astro";
|
||||
import { decodeToken } from "#lib/auth/token";
|
||||
import { TokenType } from "#lib/auth/types";
|
||||
|
||||
const valid = await validateAccessTokenServer(Astro)
|
||||
|
||||
@@ -9,10 +11,19 @@ if (valid) {
|
||||
return Astro.redirect("/dashboard")
|
||||
}
|
||||
|
||||
const token = Astro.url.searchParams.get("token")
|
||||
const token = Astro.url.searchParams.get("t")
|
||||
|
||||
if (!token) {
|
||||
return Astro.redirect("/login")
|
||||
return Astro.redirect("/")
|
||||
}
|
||||
|
||||
const decoded = decodeToken(token)
|
||||
|
||||
console.log(decoded.exp, Date.now());
|
||||
|
||||
|
||||
if (!decoded.exp || decoded.exp < Date.now() || decoded.typ !== TokenType.Reset) {
|
||||
return Astro.redirect("/")
|
||||
}
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user