Merge pull request #466 from IBCornelsen/main

get Main
This commit is contained in:
Jens Cornelsen
2025-03-29 12:07:12 +01:00
committed by GitHub
136 changed files with 2242 additions and 1133 deletions

View File

@@ -9,6 +9,7 @@
"@astrojs/svelte": "^2.2.0", "@astrojs/svelte": "^2.2.0",
"@astrojs/tailwind": "^3.1.3", "@astrojs/tailwind": "^3.1.3",
"@aws-sdk/client-s3": "^3.758.0", "@aws-sdk/client-s3": "^3.758.0",
"@highlight-run/node": "^3.12.0",
"@ibcornelsen/ui": "^0.0.2", "@ibcornelsen/ui": "^0.0.2",
"@mollie/api-client": "^4.1.0", "@mollie/api-client": "^4.1.0",
"@pdfme/common": "^5.2.16", "@pdfme/common": "^5.2.16",
@@ -25,6 +26,7 @@
"express": "^4.21.2", "express": "^4.21.2",
"flag-icons": "^6.15.0", "flag-icons": "^6.15.0",
"fontkit": "^2.0.4", "fontkit": "^2.0.4",
"highlight.run": "^9.14.0",
"is-base64": "^1.1.0", "is-base64": "^1.1.0",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"js-interpolate": "^1.3.2", "js-interpolate": "^1.3.2",
@@ -346,6 +348,8 @@
"@hapi/bourne": ["@hapi/bourne@3.0.0", "", {}, "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w=="], "@hapi/bourne": ["@hapi/bourne@3.0.0", "", {}, "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w=="],
"@highlight-run/node": ["@highlight-run/node@3.12.0", "", { "dependencies": { "@prisma/instrumentation": ">=5.0.0", "require-in-the-middle": "^7.4.0" } }, "sha512-wmvj8rf+p/JbUTfgsbhc5srP87sfZNofHTlXlaLI5JT8XpfRgBHXgSHWOw79l8dgncqceUkct1cN+liR5LdnKg=="],
"@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.9.5", "", { "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw=="], "@humanwhocodes/config-array": ["@humanwhocodes/config-array@0.9.5", "", { "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" } }, "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw=="],
"@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=="],
@@ -416,6 +420,10 @@
"@opentelemetry/api": ["@opentelemetry/api@1.4.1", "", {}, "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA=="], "@opentelemetry/api": ["@opentelemetry/api@1.4.1", "", {}, "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA=="],
"@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.57.2", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A=="],
"@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.57.2", "", { "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "semver": "^7.5.2", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg=="],
"@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="], "@oslojs/encoding": ["@oslojs/encoding@1.1.0", "", {}, "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="],
"@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.2.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ggZfdpgUJ/OiWrfcfTgHeSTHcec5HAjkGrZHL9FJ/R60sydRKPYHgAgexdIoJAGfsCVAL+x7y8NSTRIAX8J4Ng=="], "@oven/bun-darwin-aarch64": ["@oven/bun-darwin-aarch64@1.2.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ggZfdpgUJ/OiWrfcfTgHeSTHcec5HAjkGrZHL9FJ/R60sydRKPYHgAgexdIoJAGfsCVAL+x7y8NSTRIAX8J4Ng=="],
@@ -500,6 +508,8 @@
"@prisma/get-platform": ["@prisma/get-platform@6.4.1", "", { "dependencies": { "@prisma/debug": "6.4.1" } }, "sha512-gXqZaDI5scDkBF8oza7fOD3Q3QMD0e0rBynlzDDZdTWbWmzjuW58PRZtj+jkvKje2+ZigCWkH8SsWZAsH6q1Yw=="], "@prisma/get-platform": ["@prisma/get-platform@6.4.1", "", { "dependencies": { "@prisma/debug": "6.4.1" } }, "sha512-gXqZaDI5scDkBF8oza7fOD3Q3QMD0e0rBynlzDDZdTWbWmzjuW58PRZtj+jkvKje2+ZigCWkH8SsWZAsH6q1Yw=="],
"@prisma/instrumentation": ["@prisma/instrumentation@6.5.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-morJDtFRoAp5d/KENEm+K6Y3PQcn5bCvpJ5a9y3V3DNMrNy/ZSn2zulPGj+ld+Xj2UYVoaMJ8DpBX/o6iF6OiA=="],
"@prisma/internals": ["@prisma/internals@5.0.0", "", { "dependencies": { "@antfu/ni": "0.21.4", "@opentelemetry/api": "1.4.1", "@prisma/debug": "5.0.0", "@prisma/engines": "5.0.0", "@prisma/fetch-engine": "5.0.0", "@prisma/generator-helper": "5.0.0", "@prisma/get-platform": "5.0.0", "@prisma/prisma-schema-wasm": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584", "archiver": "5.3.1", "arg": "5.0.2", "checkpoint-client": "1.1.24", "cli-truncate": "2.1.0", "dotenv": "16.0.3", "escape-string-regexp": "4.0.0", "execa": "5.1.1", "find-up": "5.0.0", "fp-ts": "2.16.0", "fs-extra": "11.1.1", "fs-jetpack": "5.1.0", "global-dirs": "3.0.1", "globby": "11.1.0", "indent-string": "4.0.0", "is-windows": "1.0.2", "is-wsl": "2.2.0", "kleur": "4.1.5", "new-github-issue-url": "0.2.1", "node-fetch": "2.6.12", "npm-packlist": "5.1.3", "open": "7.4.2", "p-map": "4.0.0", "prompts": "2.4.2", "read-pkg-up": "7.0.1", "replace-string": "3.1.0", "resolve": "1.22.2", "string-width": "4.2.3", "strip-ansi": "6.0.1", "strip-indent": "3.0.0", "temp-dir": "2.0.0", "temp-write": "4.0.0", "tempy": "1.0.1", "terminal-link": "2.1.1", "tmp": "0.2.1", "ts-pattern": "4.3.0" } }, "sha512-VGWyFk6QlSBXT8z65Alq5F3o9E8IiTtaBoa3rmKkGpZjUk85kJy3jZz4xkRv53TaeghGE5rWfwkfak26KtY5yQ=="], "@prisma/internals": ["@prisma/internals@5.0.0", "", { "dependencies": { "@antfu/ni": "0.21.4", "@opentelemetry/api": "1.4.1", "@prisma/debug": "5.0.0", "@prisma/engines": "5.0.0", "@prisma/fetch-engine": "5.0.0", "@prisma/generator-helper": "5.0.0", "@prisma/get-platform": "5.0.0", "@prisma/prisma-schema-wasm": "4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584", "archiver": "5.3.1", "arg": "5.0.2", "checkpoint-client": "1.1.24", "cli-truncate": "2.1.0", "dotenv": "16.0.3", "escape-string-regexp": "4.0.0", "execa": "5.1.1", "find-up": "5.0.0", "fp-ts": "2.16.0", "fs-extra": "11.1.1", "fs-jetpack": "5.1.0", "global-dirs": "3.0.1", "globby": "11.1.0", "indent-string": "4.0.0", "is-windows": "1.0.2", "is-wsl": "2.2.0", "kleur": "4.1.5", "new-github-issue-url": "0.2.1", "node-fetch": "2.6.12", "npm-packlist": "5.1.3", "open": "7.4.2", "p-map": "4.0.0", "prompts": "2.4.2", "read-pkg-up": "7.0.1", "replace-string": "3.1.0", "resolve": "1.22.2", "string-width": "4.2.3", "strip-ansi": "6.0.1", "strip-indent": "3.0.0", "temp-dir": "2.0.0", "temp-write": "4.0.0", "tempy": "1.0.1", "terminal-link": "2.1.1", "tmp": "0.2.1", "ts-pattern": "4.3.0" } }, "sha512-VGWyFk6QlSBXT8z65Alq5F3o9E8IiTtaBoa3rmKkGpZjUk85kJy3jZz4xkRv53TaeghGE5rWfwkfak26KtY5yQ=="],
"@prisma/prisma-schema-wasm": ["@prisma/prisma-schema-wasm@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584", "", {}, "sha512-JFdsnSgBPN8reDTLOI9Vh/6ccCb2aD1LbY/LWQnkcIgNo6IdpzvuM+qRVbBuA6IZP2SdqQI8Lu6RL2P8EFBQUA=="], "@prisma/prisma-schema-wasm": ["@prisma/prisma-schema-wasm@4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584", "", {}, "sha512-JFdsnSgBPN8reDTLOI9Vh/6ccCb2aD1LbY/LWQnkcIgNo6IdpzvuM+qRVbBuA6IZP2SdqQI8Lu6RL2P8EFBQUA=="],
@@ -792,6 +802,8 @@
"@types/serve-static": ["@types/serve-static@1.15.7", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw=="], "@types/serve-static": ["@types/serve-static@1.15.7", "", { "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw=="],
"@types/shimmer": ["@types/shimmer@1.2.0", "", {}, "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg=="],
"@types/siema": ["@types/siema@1.4.11", "", {}, "sha512-bPazsNVnMryrzZx2HiAeDXEpgaO98ToQk0cYJ/7yomLlVNHsn4IYPrLoQ50tQt11FGvkkNoepRyKcTNUhqjj+g=="], "@types/siema": ["@types/siema@1.4.11", "", {}, "sha512-bPazsNVnMryrzZx2HiAeDXEpgaO98ToQk0cYJ/7yomLlVNHsn4IYPrLoQ50tQt11FGvkkNoepRyKcTNUhqjj+g=="],
"@types/sinonjs__fake-timers": ["@types/sinonjs__fake-timers@8.1.1", "", {}, "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g=="], "@types/sinonjs__fake-timers": ["@types/sinonjs__fake-timers@8.1.1", "", {}, "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g=="],
@@ -834,6 +846,8 @@
"acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="], "acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
"acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="],
"acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
"add-dom-event-listener": ["add-dom-event-listener@1.1.0", "", { "dependencies": { "object-assign": "4.x" } }, "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw=="], "add-dom-event-listener": ["add-dom-event-listener@1.1.0", "", { "dependencies": { "object-assign": "4.x" } }, "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw=="],
@@ -1012,6 +1026,8 @@
"ci-info": ["ci-info@4.1.0", "", {}, "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A=="], "ci-info": ["ci-info@4.1.0", "", {}, "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A=="],
"cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="],
"classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="], "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="],
"clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="],
@@ -1470,6 +1486,8 @@
"hexoid": ["hexoid@2.0.0", "", {}, "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw=="], "hexoid": ["hexoid@2.0.0", "", {}, "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw=="],
"highlight.run": ["highlight.run@9.14.0", "", {}, "sha512-ZR+ZLHlVU8lXqsuto0ZEMAOuvptaTBBf1jradnKDIn9OfAXupcYFbkASDlbsZtyBh2SYJSK50xwrucXujhksRg=="],
"hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="], "hosted-git-info": ["hosted-git-info@2.8.9", "", {}, "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw=="],
"hotkeys-js": ["hotkeys-js@3.13.9", "", {}, "sha512-3TRCj9u9KUH6cKo25w4KIdBfdBfNRjfUwrljCLDC2XhmPDG0SjAZFcFZekpUZFmXzfYoGhFDcdx2gX/vUVtztQ=="], "hotkeys-js": ["hotkeys-js@3.13.9", "", {}, "sha512-3TRCj9u9KUH6cKo25w4KIdBfdBfNRjfUwrljCLDC2XhmPDG0SjAZFcFZekpUZFmXzfYoGhFDcdx2gX/vUVtztQ=="],
@@ -1504,6 +1522,8 @@
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
"import-in-the-middle": ["import-in-the-middle@1.13.1", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA=="],
"import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="], "import-meta-resolve": ["import-meta-resolve@4.1.0", "", {}, "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw=="],
"imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
@@ -1862,6 +1882,8 @@
"mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="],
"module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="],
"moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="], "moment": ["moment@2.30.1", "", {}, "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how=="],
"moment-timezone": ["moment-timezone@0.5.47", "", { "dependencies": { "moment": "^2.29.4" } }, "sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA=="], "moment-timezone": ["moment-timezone@0.5.47", "", { "dependencies": { "moment": "^2.29.4" } }, "sha512-UbNt/JAWS0m/NJOebR0QMRHBk0hu03r5dx9GK8Cs0AS3I81yDcOc9k+DytPItgVvBP7J6Mf6U2n3BPAacAV9oA=="],
@@ -2246,6 +2268,8 @@
"request-progress": ["request-progress@3.0.0", "", { "dependencies": { "throttleit": "^1.0.0" } }, "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg=="], "request-progress": ["request-progress@3.0.0", "", { "dependencies": { "throttleit": "^1.0.0" } }, "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg=="],
"require-in-the-middle": ["require-in-the-middle@7.5.2", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3", "resolve": "^1.22.8" } }, "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ=="],
"resize-observer-polyfill": ["resize-observer-polyfill@1.5.1", "", {}, "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="], "resize-observer-polyfill": ["resize-observer-polyfill@1.5.1", "", {}, "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="],
"resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="],
@@ -2326,6 +2350,8 @@
"shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], "shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="],
"shimmer": ["shimmer@1.2.1", "", {}, "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="],
"side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="],
"side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="],

View File

@@ -1,6 +1,6 @@
import { defineConfig } from "cypress"; import { defineConfig } from "cypress";
import dsv from "@rollup/plugin-dsv" import dsv from "@rollup/plugin-dsv"
import { prisma } from "./src/lib/server/prisma"
import { fileURLToPath } from "url"; import { fileURLToPath } from "url";
import vitePreprocessor from "cypress-vite"; import vitePreprocessor from "cypress-vite";
@@ -9,7 +9,7 @@ export default defineConfig({
baseUrl: "http://localhost:3000", baseUrl: "http://localhost:3000",
viewportHeight: 900, viewportHeight: 900,
viewportWidth: 1660, viewportWidth: 1660,
supportFile: false, supportFile: fileURLToPath(new URL("./src/cypress/support/commands.ts", import.meta.url)),
specPattern: "./src/cypress/e2e/**/*.{ts,js}", specPattern: "./src/cypress/e2e/**/*.{ts,js}",
setupNodeEvents(on, config) { setupNodeEvents(on, config) {
on("file:preprocessor", vitePreprocessor({ on("file:preprocessor", vitePreprocessor({
@@ -18,6 +18,7 @@ export default defineConfig({
}, },
resolve: { resolve: {
alias: { alias: {
".prisma/client/index-browser": fileURLToPath(new URL("./node_modules/.prisma/client/index-browser.js", import.meta.url)),
"#": fileURLToPath(new URL("./src", import.meta.url)), "#": fileURLToPath(new URL("./src", import.meta.url)),
"#components": fileURLToPath(new URL("./src/components", import.meta.url)), "#components": fileURLToPath(new URL("./src/components", import.meta.url)),
"#lib": fileURLToPath(new URL("./src/lib", import.meta.url)) "#lib": fileURLToPath(new URL("./src/lib", import.meta.url))
@@ -31,6 +32,11 @@ export default defineConfig({
}, },
plugins: [dsv()] plugins: [dsv()]
})) }))
on("task", {
async verbrauchsausweisWohnen(query) {
return await prisma.verbrauchsausweisWohnen.findFirst(query)
}
})
}, },
}, },
component: { component: {

View File

@@ -23,6 +23,7 @@
"@astrojs/svelte": "^2.2.0", "@astrojs/svelte": "^2.2.0",
"@astrojs/tailwind": "^3.1.3", "@astrojs/tailwind": "^3.1.3",
"@aws-sdk/client-s3": "^3.758.0", "@aws-sdk/client-s3": "^3.758.0",
"@highlight-run/node": "^3.12.0",
"@ibcornelsen/ui": "^0.0.2", "@ibcornelsen/ui": "^0.0.2",
"@mollie/api-client": "^4.1.0", "@mollie/api-client": "^4.1.0",
"@pdfme/common": "^5.2.16", "@pdfme/common": "^5.2.16",
@@ -39,6 +40,7 @@
"express": "^4.21.2", "express": "^4.21.2",
"flag-icons": "^6.15.0", "flag-icons": "^6.15.0",
"fontkit": "^2.0.4", "fontkit": "^2.0.4",
"highlight.run": "^9.14.0",
"is-base64": "^1.1.0", "is-base64": "^1.1.0",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"js-interpolate": "^1.3.2", "js-interpolate": "^1.3.2",

View File

@@ -0,0 +1,57 @@
/*
Warnings:
- You are about to drop the column `ausweistyp` on the `Rechnung` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "BedarfsausweisWohnen" ADD COLUMN "ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gng-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Rechnung" DROP COLUMN "ausweistyp",
ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "VerbrauchsausweisGewerbe" ADD COLUMN "ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "VerbrauchsausweisWohnen" ADD COLUMN "ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard',
ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();

View File

@@ -0,0 +1,573 @@
/*
Warnings:
- The primary key for the `Anteilshaber` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Anteilshaber` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Anteilshaber` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `ApiRequests` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to alter the column `id` on the `ApiRequests` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Aufnahme` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Aufnahme` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Aufnahme` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `BedarfsausweisGewerbe` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `BedarfsausweisGewerbe` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `BedarfsausweisGewerbe` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `BedarfsausweisWohnen` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `BedarfsausweisWohnen` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `BedarfsausweisWohnen` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Bild` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to alter the column `id` on the `Bild` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Event` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Event` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Event` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `GEGEinpreisung` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `GEGEinpreisung` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `GEGEinpreisung` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `GEGNachweisGewerbe` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `GEGNachweisGewerbe` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `GEGNachweisGewerbe` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `GEGNachweisWohnen` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `GEGNachweisWohnen` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `GEGNachweisWohnen` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Objekt` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Objekt` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Objekt` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Rechnung` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Rechnung` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Rechnung` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Tickets` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Tickets` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Tickets` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `Unterlage` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `Unterlage` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `Unterlage` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `VerbrauchsausweisGewerbe` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `VerbrauchsausweisGewerbe` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `VerbrauchsausweisGewerbe` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `VerbrauchsausweisWohnen` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `VerbrauchsausweisWohnen` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `VerbrauchsausweisWohnen` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- The primary key for the `benutzer` table will be changed. If it partially fails, the table could be left without primary key constraint.
- You are about to drop the column `uid` on the `benutzer` table. All the data in the column will be lost.
- You are about to alter the column `id` on the `benutzer` table. The data in that column could be lost. The data in that column will be cast from `Integer` to `VarChar(8)`.
- A unique constraint covering the columns `[id]` on the table `Anteilshaber` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `ApiRequests` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Aufnahme` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `BedarfsausweisGewerbe` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `BedarfsausweisWohnen` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Bild` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Event` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `GEGEinpreisung` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `GEGNachweisGewerbe` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `GEGNachweisWohnen` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Objekt` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Rechnung` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Tickets` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `Unterlage` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `VerbrauchsausweisGewerbe` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `VerbrauchsausweisWohnen` will be added. If there are existing duplicate values, this will fail.
- A unique constraint covering the columns `[id]` on the table `benutzer` will be added. If there are existing duplicate values, this will fail.
*/
-- DropForeignKey
ALTER TABLE "Anteilshaber" DROP CONSTRAINT "Anteilshaber_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "Anteilshaber" DROP CONSTRAINT "Anteilshaber_objekt_id_fkey";
-- DropForeignKey
ALTER TABLE "ApiRequests" DROP CONSTRAINT "ApiRequests_user_id_fkey";
-- DropForeignKey
ALTER TABLE "Aufnahme" DROP CONSTRAINT "Aufnahme_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "Aufnahme" DROP CONSTRAINT "Aufnahme_objekt_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisGewerbe" DROP CONSTRAINT "BedarfsausweisGewerbe_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisGewerbe" DROP CONSTRAINT "BedarfsausweisGewerbe_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisGewerbe" DROP CONSTRAINT "BedarfsausweisGewerbe_geg_einpreisung_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisGewerbe" DROP CONSTRAINT "BedarfsausweisGewerbe_rechnung_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisWohnen" DROP CONSTRAINT "BedarfsausweisWohnen_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisWohnen" DROP CONSTRAINT "BedarfsausweisWohnen_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "BedarfsausweisWohnen" DROP CONSTRAINT "BedarfsausweisWohnen_rechnung_id_fkey";
-- DropForeignKey
ALTER TABLE "Bild" DROP CONSTRAINT "Bild_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "Event" DROP CONSTRAINT "Event_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "Event" DROP CONSTRAINT "Event_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGEinpreisung" DROP CONSTRAINT "GEGEinpreisung_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisGewerbe" DROP CONSTRAINT "GEGNachweisGewerbe_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisGewerbe" DROP CONSTRAINT "GEGNachweisGewerbe_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisGewerbe" DROP CONSTRAINT "GEGNachweisGewerbe_geg_einpreisung_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisGewerbe" DROP CONSTRAINT "GEGNachweisGewerbe_rechnung_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisWohnen" DROP CONSTRAINT "GEGNachweisWohnen_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisWohnen" DROP CONSTRAINT "GEGNachweisWohnen_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisWohnen" DROP CONSTRAINT "GEGNachweisWohnen_geg_einpreisung_id_fkey";
-- DropForeignKey
ALTER TABLE "GEGNachweisWohnen" DROP CONSTRAINT "GEGNachweisWohnen_rechnung_id_fkey";
-- DropForeignKey
ALTER TABLE "Objekt" DROP CONSTRAINT "Objekt_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "Rechnung" DROP CONSTRAINT "Rechnung_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "RefreshTokens" DROP CONSTRAINT "RefreshTokens_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "Tickets" DROP CONSTRAINT "Tickets_bearbeiter_id_fkey";
-- DropForeignKey
ALTER TABLE "Tickets" DROP CONSTRAINT "Tickets_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "Unterlage" DROP CONSTRAINT "Unterlage_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "VerbrauchsausweisGewerbe" DROP CONSTRAINT "VerbrauchsausweisGewerbe_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "VerbrauchsausweisGewerbe" DROP CONSTRAINT "VerbrauchsausweisGewerbe_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "VerbrauchsausweisGewerbe" DROP CONSTRAINT "VerbrauchsausweisGewerbe_rechnung_id_fkey";
-- DropForeignKey
ALTER TABLE "VerbrauchsausweisWohnen" DROP CONSTRAINT "VerbrauchsausweisWohnen_aufnahme_id_fkey";
-- DropForeignKey
ALTER TABLE "VerbrauchsausweisWohnen" DROP CONSTRAINT "VerbrauchsausweisWohnen_benutzer_id_fkey";
-- DropForeignKey
ALTER TABLE "VerbrauchsausweisWohnen" DROP CONSTRAINT "VerbrauchsausweisWohnen_rechnung_id_fkey";
-- DropForeignKey
ALTER TABLE "documenttemplates" DROP CONSTRAINT "benutzer_fk";
-- DropForeignKey
ALTER TABLE "tokens" DROP CONSTRAINT "fk_benutzer_tokens_user_id";
-- DropIndex
DROP INDEX "Anteilshaber_uid_key";
-- DropIndex
DROP INDEX "Aufnahme_uid_key";
-- DropIndex
DROP INDEX "BedarfsausweisGewerbe_uid_key";
-- DropIndex
DROP INDEX "BedarfsausweisWohnen_uid_key";
-- DropIndex
DROP INDEX "Event_uid_key";
-- DropIndex
DROP INDEX "GEGEinpreisung_uid_key";
-- DropIndex
DROP INDEX "GEGNachweisGewerbe_uid_key";
-- DropIndex
DROP INDEX "GEGNachweisWohnen_uid_key";
-- DropIndex
DROP INDEX "Objekt_uid_key";
-- DropIndex
DROP INDEX "Rechnung_uid_key";
-- DropIndex
DROP INDEX "Tickets_uid_key";
-- DropIndex
DROP INDEX "Unterlage_uid_key";
-- DropIndex
DROP INDEX "VerbrauchsausweisGewerbe_uid_key";
-- DropIndex
DROP INDEX "VerbrauchsausweisWohnen_uid_key";
-- DropIndex
DROP INDEX "benutzer_uid_key";
-- AlterTable
ALTER TABLE "Anteilshaber" DROP CONSTRAINT "Anteilshaber_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "objekt_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Anteilshaber_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Anteilshaber_id_seq";
-- AlterTable
ALTER TABLE "ApiRequests" DROP CONSTRAINT "ApiRequests_pkey",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "user_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "ApiRequests_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "ApiRequests_id_seq";
-- AlterTable
ALTER TABLE "Aufnahme" DROP CONSTRAINT "Aufnahme_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "objekt_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Aufnahme_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Aufnahme_id_seq";
-- AlterTable
ALTER TABLE "BedarfsausweisGewerbe" DROP CONSTRAINT "BedarfsausweisGewerbe_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ALTER COLUMN "rechnung_id" SET DATA TYPE TEXT,
ALTER COLUMN "geg_einpreisung_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "BedarfsausweisGewerbe_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "BedarfsausweisGewerbe_id_seq";
-- AlterTable
ALTER TABLE "BedarfsausweisWohnen" DROP CONSTRAINT "BedarfsausweisWohnen_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "rechnung_id" SET DATA TYPE TEXT,
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "BedarfsausweisWohnen_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "BedarfsausweisWohnen_id_seq";
-- AlterTable
ALTER TABLE "Bild" DROP CONSTRAINT "Bild_pkey",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid(),
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Bild_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Bild_id_seq";
-- AlterTable
ALTER TABLE "Event" DROP CONSTRAINT "Event_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Event_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Event_id_seq";
-- AlterTable
ALTER TABLE "GEGEinpreisung" DROP CONSTRAINT "GEGEinpreisung_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "GEGEinpreisung_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "GEGEinpreisung_id_seq";
-- AlterTable
ALTER TABLE "GEGNachweisGewerbe" DROP CONSTRAINT "GEGNachweisGewerbe_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ALTER COLUMN "rechnung_id" SET DATA TYPE TEXT,
ALTER COLUMN "geg_einpreisung_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "GEGNachweisGewerbe_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "GEGNachweisGewerbe_id_seq";
-- AlterTable
ALTER TABLE "GEGNachweisWohnen" DROP CONSTRAINT "GEGNachweisWohnen_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ALTER COLUMN "rechnung_id" SET DATA TYPE TEXT,
ALTER COLUMN "geg_einpreisung_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "GEGNachweisWohnen_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "GEGNachweisWohnen_id_seq";
-- AlterTable
ALTER TABLE "Objekt" DROP CONSTRAINT "Objekt_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Objekt_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Objekt_id_seq";
-- AlterTable
ALTER TABLE "Rechnung" DROP CONSTRAINT "Rechnung_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Rechnung_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Rechnung_id_seq";
-- AlterTable
ALTER TABLE "RefreshTokens" ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT;
-- AlterTable
ALTER TABLE "Tickets" DROP CONSTRAINT "Tickets_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "bearbeiter_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Tickets_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Tickets_id_seq";
-- AlterTable
ALTER TABLE "Unterlage" DROP CONSTRAINT "Unterlage_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "Unterlage_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "Unterlage_id_seq";
-- AlterTable
ALTER TABLE "VerbrauchsausweisGewerbe" DROP CONSTRAINT "VerbrauchsausweisGewerbe_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "rechnung_id" SET DATA TYPE TEXT,
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "VerbrauchsausweisGewerbe_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "VerbrauchsausweisGewerbe_id_seq";
-- AlterTable
ALTER TABLE "VerbrauchsausweisWohnen" DROP CONSTRAINT "VerbrauchsausweisWohnen_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ALTER COLUMN "benutzer_id" SET DATA TYPE TEXT,
ALTER COLUMN "rechnung_id" SET DATA TYPE TEXT,
ALTER COLUMN "aufnahme_id" SET DATA TYPE TEXT,
ADD CONSTRAINT "VerbrauchsausweisWohnen_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "VerbrauchsausweisWohnen_id_seq";
-- AlterTable
ALTER TABLE "benutzer" DROP CONSTRAINT "benutzer_pkey",
DROP COLUMN "uid",
ALTER COLUMN "id" DROP DEFAULT,
ALTER COLUMN "id" SET DATA TYPE VARCHAR(8),
ADD CONSTRAINT "benutzer_pkey" PRIMARY KEY ("id");
DROP SEQUENCE "benutzer_id_seq";
-- AlterTable
ALTER TABLE "documenttemplates" ALTER COLUMN "user_id" SET DATA TYPE TEXT;
-- AlterTable
ALTER TABLE "tokens" ALTER COLUMN "user_id" SET DATA TYPE TEXT;
-- CreateIndex
CREATE UNIQUE INDEX "Anteilshaber_id_key" ON "Anteilshaber"("id");
-- CreateIndex
CREATE UNIQUE INDEX "ApiRequests_id_key" ON "ApiRequests"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Aufnahme_id_key" ON "Aufnahme"("id");
-- CreateIndex
CREATE UNIQUE INDEX "BedarfsausweisGewerbe_id_key" ON "BedarfsausweisGewerbe"("id");
-- CreateIndex
CREATE UNIQUE INDEX "BedarfsausweisWohnen_id_key" ON "BedarfsausweisWohnen"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Bild_id_key" ON "Bild"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Event_id_key" ON "Event"("id");
-- CreateIndex
CREATE UNIQUE INDEX "GEGEinpreisung_id_key" ON "GEGEinpreisung"("id");
-- CreateIndex
CREATE UNIQUE INDEX "GEGNachweisGewerbe_id_key" ON "GEGNachweisGewerbe"("id");
-- CreateIndex
CREATE UNIQUE INDEX "GEGNachweisWohnen_id_key" ON "GEGNachweisWohnen"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Objekt_id_key" ON "Objekt"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Rechnung_id_key" ON "Rechnung"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Tickets_id_key" ON "Tickets"("id");
-- CreateIndex
CREATE UNIQUE INDEX "Unterlage_id_key" ON "Unterlage"("id");
-- CreateIndex
CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_id_key" ON "VerbrauchsausweisGewerbe"("id");
-- CreateIndex
CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_id_key" ON "VerbrauchsausweisWohnen"("id");
-- CreateIndex
CREATE UNIQUE INDEX "benutzer_id_key" ON "benutzer"("id");
-- AddForeignKey
ALTER TABLE "Anteilshaber" ADD CONSTRAINT "Anteilshaber_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Anteilshaber" ADD CONSTRAINT "Anteilshaber_objekt_id_fkey" FOREIGN KEY ("objekt_id") REFERENCES "Objekt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "ApiRequests" ADD CONSTRAINT "ApiRequests_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Aufnahme" ADD CONSTRAINT "Aufnahme_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Aufnahme" ADD CONSTRAINT "Aufnahme_objekt_id_fkey" FOREIGN KEY ("objekt_id") REFERENCES "Objekt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Bild" ADD CONSTRAINT "Bild_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Event" ADD CONSTRAINT "Event_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Event" ADD CONSTRAINT "Event_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGEinpreisung" ADD CONSTRAINT "GEGEinpreisung_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "Objekt" ADD CONSTRAINT "Objekt_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Rechnung" ADD CONSTRAINT "Rechnung_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "RefreshTokens" ADD CONSTRAINT "RefreshTokens_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Tickets" ADD CONSTRAINT "Tickets_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Tickets" ADD CONSTRAINT "Tickets_bearbeiter_id_fkey" FOREIGN KEY ("bearbeiter_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Unterlage" ADD CONSTRAINT "Unterlage_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;
-- AddForeignKey
ALTER TABLE "documenttemplates" ADD CONSTRAINT "benutzer_fk" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tokens" ADD CONSTRAINT "fk_benutzer_tokens_user_id" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION;

View File

@@ -1,11 +1,11 @@
model Anteilshaber { model Anteilshaber {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
benutzer_id Int
rolle String? @db.VarChar rolle String? @db.VarChar
privilegien BigInt? privilegien BigInt?
uid String @unique @default(dbgenerated("'ant-' || gen_random_uuid()"))
benutzer_id String
benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
objekt_id Int objekt_id String
objekt Objekt @relation(fields: [objekt_id], references: [id], onDelete: NoAction, onUpdate: NoAction) objekt Objekt @relation(fields: [objekt_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,6 +1,6 @@
model ApiRequests { model ApiRequests {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
date DateTime @default(now()) @db.Timestamp(6) date DateTime @default(now()) @db.Timestamp(6)
ip String @db.VarChar(50) ip String @db.VarChar(50)
method String @db.VarChar(10) method String @db.VarChar(10)
@@ -9,6 +9,6 @@ model ApiRequests {
responseTime Float responseTime Float
responseSize Int responseSize Int
userAgent String @db.VarChar(500) userAgent String @db.VarChar(500)
user_id Int? user_id String?
user Benutzer? @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction) user Benutzer? @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -13,10 +13,8 @@ enum Lueftungskonzept {
} }
model Aufnahme { model Aufnahme {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
/// @zod.describe("UID der Gebäude Aufnahme") benutzer_id String?
uid String @unique @default(dbgenerated("'auf-' || gen_random_uuid()"))
benutzer_id Int?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
/// @zod.describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen") /// @zod.describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen")
ausweisart Ausweisart? ausweisart Ausweisart?
@@ -142,7 +140,7 @@ model Aufnahme {
geg_nachweise_gewerbe GEGNachweisGewerbe[] geg_nachweise_gewerbe GEGNachweisGewerbe[]
bedarfsausweise_gewerbe BedarfsausweisGewerbe[] bedarfsausweise_gewerbe BedarfsausweisGewerbe[]
objekt_id Int objekt_id String
objekt Objekt @relation(fields: [objekt_id], references: [id], onDelete: NoAction, onUpdate: NoAction) objekt Objekt @relation(fields: [objekt_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,6 +1,5 @@
model BedarfsausweisGewerbe { model BedarfsausweisGewerbe {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'bag-' || gen_random_uuid()"))
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf") /// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund? ausstellgrund Ausstellgrund?
@@ -27,13 +26,13 @@ model BedarfsausweisGewerbe {
klimatisierung Boolean? @default(false) klimatisierung Boolean? @default(false)
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört") /// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
benutzer_id Int? benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
aufnahme_id Int @unique aufnahme_id String @unique
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique rechnung_id String? @unique
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
geg_einpreisung_id Int? @unique geg_einpreisung_id String? @unique
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,9 +1,8 @@
model BedarfsausweisWohnen { model BedarfsausweisWohnen {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
alte_ausweis_id Int? alte_ausweis_id Int?
uid String @unique @default(dbgenerated("'baw-' || gen_random_uuid()")) benutzer_id String?
benutzer_id Int?
ausstellgrund Ausstellgrund? ausstellgrund Ausstellgrund?
registriernummer String? @db.VarChar registriernummer String? @db.VarChar
@@ -79,13 +78,14 @@ model BedarfsausweisWohnen {
created_at DateTime @default(now()) created_at DateTime @default(now())
updated_at DateTime @updatedAt updated_at DateTime @updatedAt
ausweistyp AusweisTyp @default(Standard)
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique rechnung_id String? @unique
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
/// @zod.describe("ID der korrespondierenden Gebäudeaufnahme") /// @zod.describe("ID der korrespondierenden Gebäudeaufnahme")
aufnahme_id Int @unique aufnahme_id String @unique
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -5,8 +5,7 @@ enum BenutzerRolle {
} }
model Benutzer { model Benutzer {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'usr-' || gen_random_uuid()"))
name String? @db.VarChar(50) name String? @db.VarChar(50)
vorname String? @db.VarChar(50) vorname String? @db.VarChar(50)
email String @unique(map: "benutzer_email_idx") @db.VarChar(255) email String @unique(map: "benutzer_email_idx") @db.VarChar(255)

View File

@@ -8,11 +8,10 @@ enum BilderKategorie {
} }
model Bild { model Bild {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
kategorie BilderKategorie kategorie BilderKategorie
uid String @unique @default(dbgenerated("'img-' || gen_random_uuid()"))
name String name String
aufnahme_id Int? aufnahme_id String?
aufnahme Aufnahme? @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme? @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -3,8 +3,7 @@
// Hier werden beispielsweise Events wie "Nachricht Verschickt" gespeichert. // Hier werden beispielsweise Events wie "Nachricht Verschickt" gespeichert.
// Diese Events werden dann in der Admin-Oberfläche angezeigt. // Diese Events werden dann in der Admin-Oberfläche angezeigt.
model Event { model Event {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'evt-' || gen_random_uuid()"))
date DateTime @default(now()) @db.Timestamp(6) date DateTime @default(now()) @db.Timestamp(6)
title String @db.VarChar(255) title String @db.VarChar(255)
@@ -12,9 +11,9 @@ model Event {
// Verlinkung des Gebäudes // Verlinkung des Gebäudes
aufnahme_id Int aufnahme_id String
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
// Verlinkung des Benutzers // Verlinkung des Benutzers
benutzer_id Int? benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -6,8 +6,7 @@ enum Einpreisungsstatus {
} }
model GEGEinpreisung { model GEGEinpreisung {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'gge-' || gen_random_uuid()"))
empfaenger String? @db.VarChar empfaenger String? @db.VarChar
strasse String? @db.VarChar strasse String? @db.VarChar
@@ -31,6 +30,6 @@ model GEGEinpreisung {
bedarfsausweis_gewerbe BedarfsausweisGewerbe? bedarfsausweis_gewerbe BedarfsausweisGewerbe?
/// @zod.describe("Die ID des Benutzers, der diese Einpreisung bekommt.") /// @zod.describe("Die ID des Benutzers, der diese Einpreisung bekommt.")
benutzer_id Int? benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,6 +1,5 @@
model GEGNachweisGewerbe { model GEGNachweisGewerbe {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'gng-' || gen_random_uuid()"))
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf") /// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund? ausstellgrund Ausstellgrund?
@@ -18,13 +17,13 @@ model GEGNachweisGewerbe {
beschreibung String? @db.Text beschreibung String? @db.Text
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört") /// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
benutzer_id Int? benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
aufnahme_id Int @unique aufnahme_id String @unique
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique rechnung_id String? @unique
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
geg_einpreisung_id Int? @unique geg_einpreisung_id String? @unique
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,6 +1,5 @@
model GEGNachweisWohnen { model GEGNachweisWohnen {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'gnw-' || gen_random_uuid()"))
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf") /// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund? ausstellgrund Ausstellgrund?
@@ -18,13 +17,13 @@ model GEGNachweisWohnen {
beschreibung String? @db.Text beschreibung String? @db.Text
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört") /// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
benutzer_id Int? benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
aufnahme_id Int @unique aufnahme_id String @unique
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique rechnung_id String? @unique
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
geg_einpreisung_id Int? @unique geg_einpreisung_id String? @unique
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,7 +1,5 @@
model Objekt { model Objekt {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'obj-' || gen_random_uuid()"))
benutzer_id Int?
latitude Float? latitude Float?
longitude Float? longitude Float?
@@ -15,6 +13,7 @@ model Objekt {
erstellungsdatum DateTime? @default(now()) erstellungsdatum DateTime? @default(now())
benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id]) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id])
aufnahmen Aufnahme[] aufnahmen Aufnahme[]
anteilshaber Anteilshaber[] anteilshaber Anteilshaber[]

View File

@@ -24,10 +24,8 @@ enum AusweisTyp {
} }
model Rechnung { model Rechnung {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'inv-' || gen_random_uuid()"))
benutzer_id Int
empfaenger String? @db.VarChar empfaenger String? @db.VarChar
strasse String? @db.VarChar strasse String? @db.VarChar
plz String? @db.VarChar plz String? @db.VarChar
@@ -46,13 +44,13 @@ model Rechnung {
bezahlmethode Bezahlmethoden bezahlmethode Bezahlmethoden
status Rechnungsstatus status Rechnungsstatus
services Service[] services Service[]
ausweistyp AusweisTyp @default(Standard)
betrag Float betrag Float
erstellt_am DateTime @default(now()) erstellt_am DateTime @default(now())
bezahlt_am DateTime? bezahlt_am DateTime?
storniert_am DateTime? storniert_am DateTime?
transaktions_referenz String? @unique @db.VarChar transaktions_referenz String? @unique @db.VarChar
benutzer_id String
benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
verbrauchsausweis_wohnen VerbrauchsausweisWohnen? verbrauchsausweis_wohnen VerbrauchsausweisWohnen?

View File

@@ -1,7 +1,6 @@
model RefreshTokens { model RefreshTokens {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
benutzer_id Int
token String @unique token String @unique
// Wir nehmen die IP Adresse des Clients mit auf. // Wir nehmen die IP Adresse des Clients mit auf.
// Falls sich die IP Adresse eines Refresh Token Owners ändert, können wir diesen einfach invalidieren. // Falls sich die IP Adresse eines Refresh Token Owners ändert, können wir diesen einfach invalidieren.
@@ -9,5 +8,6 @@ model RefreshTokens {
expiry DateTime expiry DateTime
// Relationen // Relationen
benutzer_id String
user Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: Cascade) user Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: Cascade)
} }

View File

@@ -8,9 +8,7 @@ enum TicketStatus {
} }
model Tickets { model Tickets {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'tkt-' || gen_random_uuid()"))
benutzer_id Int?
created_at DateTime @default(now()) created_at DateTime @default(now())
updated_at DateTime? @updatedAt updated_at DateTime? @updatedAt
deleted_at DateTime? deleted_at DateTime?
@@ -21,10 +19,11 @@ model Tickets {
metadata Json? metadata Json?
email String email String
bearbeiter_id Int? bearbeiter_id String?
prioritaet Int? @default(0) prioritaet Int? @default(0)
// Relationen // Relationen
benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], name: "ErstellteTickets") benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], name: "ErstellteTickets")
bearbeiter Benutzer? @relation(fields: [bearbeiter_id], references: [id], name: "BearbeiteteTickets") bearbeiter Benutzer? @relation(fields: [bearbeiter_id], references: [id], name: "BearbeiteteTickets")
} }

View File

@@ -5,12 +5,11 @@ enum UnterlagenKategorie {
} }
model Unterlage { model Unterlage {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
uid String @unique @default(dbgenerated("'pln-' || gen_random_uuid()"))
name String? name String?
kategorie String? kategorie String?
mime String? mime String?
aufnahme_id Int? aufnahme_id String?
aufnahme Aufnahme? @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme? @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,9 +1,7 @@
model VerbrauchsausweisGewerbe { model VerbrauchsausweisGewerbe {
id Int @id @default(autoincrement()) id String @id @unique @db.VarChar(8)
alte_ausweis_id Int? alte_ausweis_id Int?
uid String @unique @default(dbgenerated("'vag-' || gen_random_uuid()"))
benutzer_id Int?
ausstellgrund Ausstellgrund? ausstellgrund Ausstellgrund?
registriernummer String? @db.VarChar registriernummer String? @db.VarChar
zusaetzliche_heizquelle Boolean? zusaetzliche_heizquelle Boolean?
@@ -66,13 +64,15 @@ model VerbrauchsausweisGewerbe {
created_at DateTime @default(now()) created_at DateTime @default(now())
updated_at DateTime @updatedAt updated_at DateTime @updatedAt
ausweistyp AusweisTyp @default(Standard)
benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique rechnung_id String? @unique
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
/// @zod.describe("ID der korrespondierenden Gebäudeaufnahme") /// @zod.describe("ID der korrespondierenden Gebäudeaufnahme")
aufnahme_id Int @unique aufnahme_id String @unique
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -1,11 +1,8 @@
model VerbrauchsausweisWohnen { model VerbrauchsausweisWohnen {
id Int @id @default(autoincrement()) /// @zod.describe("ID des Ausweises")
id String @id @unique @db.VarChar(8)
alte_ausweis_id Int? alte_ausweis_id Int?
/// @zod.describe("UID des Ausweises")
uid String @unique @default(dbgenerated("'vaw-' || gen_random_uuid()"))
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
benutzer_id Int?
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf") /// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
ausstellgrund Ausstellgrund? ausstellgrund Ausstellgrund?
/// @zod.describe("Die Registriernummer des Ausweises") /// @zod.describe("Die Registriernummer des Ausweises")
@@ -67,15 +64,19 @@ model VerbrauchsausweisWohnen {
/// @zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde") /// @zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")
kontrolldatei_angefragt Boolean? @default(false) kontrolldatei_angefragt Boolean? @default(false)
ausweistyp AusweisTyp @default(Standard)
created_at DateTime @default(now()) created_at DateTime @default(now())
updated_at DateTime @updatedAt updated_at DateTime @updatedAt
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
benutzer_id String?
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique rechnung_id String? @unique
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction) rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
/// @zod.describe("ID der korrespondierenden Gebäudeaufnahme") /// @zod.describe("ID der korrespondierenden Gebäudeaufnahme")
aufnahme_id Int @unique aufnahme_id String @unique
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction) aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
} }

View File

@@ -4,7 +4,7 @@ model documenttemplates {
name String @db.VarChar(100) name String @db.VarChar(100)
shortdescription String @db.VarChar(100) shortdescription String @db.VarChar(100)
longdescription String @db.VarChar(5000) longdescription String @db.VarChar(5000)
user_id Int user_id String
is_private Boolean @default(true) is_private Boolean @default(true)
documenttype Int documenttype Int
filename String @db.VarChar(100) filename String @db.VarChar(100)

View File

@@ -2,7 +2,7 @@
model tokens { model tokens {
id Int @id(map: "PK_TOKENS") @default(autoincrement()) id Int @id(map: "PK_TOKENS") @default(autoincrement())
token String @db.VarChar(36) token String @db.VarChar(36)
user_id Int user_id String
date_created DateTime @default(now()) @db.Timestamp(6) date_created DateTime @default(now()) @db.Timestamp(6)
last_used DateTime @default(now()) @db.Timestamp(6) last_used DateTime @default(now()) @db.Timestamp(6)
times_used Int @default(0) times_used Int @default(0)

View File

@@ -93,6 +93,7 @@ await prisma.benutzer.create({
vorname: "Admin", vorname: "Admin",
adresse: "Adminstraße 1", adresse: "Adminstraße 1",
plz: "12345", plz: "12345",
id: "USADMIN1"
}, },
}); });
@@ -106,6 +107,7 @@ await prisma.benutzer.create({
vorname: "User", vorname: "User",
adresse: "Userstraße 1", adresse: "Userstraße 1",
plz: "12345", plz: "12345",
id: "USUSER01"
}, },
}); });

View File

@@ -1,7 +1,21 @@
import express from 'express'; import express from 'express';
import { H, Handlers } from '@highlight-run/node'
// @ts-ignore // @ts-ignore
import { handler as ssrHandler } from './dist/server/entry.mjs'; import { handler as ssrHandler } from './dist/server/entry.mjs';
const highlightConfig = {
projectID: '1jdkoe52',
serviceName: "online-energieausweis",
serviceVersion: "git-sha",
environment: "production",
backendUrl: "http://212.227.61.149:3000/public",
networkRecording: {
enabled: true,
recordHeadersAndBody: true,
},
}
H.init(highlightConfig)
const app = express(); const app = express();
const base = '/'; const base = '/';
@@ -9,6 +23,8 @@ app.use(base, express.static('dist/client/'));
app.use(ssrHandler); app.use(ssrHandler);
app.use(express.json({ limit: "50mb" })) app.use(express.json({ limit: "50mb" }))
app.use(express.urlencoded({ limit: "50mb" })) app.use(express.urlencoded({ limit: "50mb" }))
app.use(Handlers.middleware(highlightConfig))
app.use(Handlers.errorHandler(highlightConfig))
app.listen(3000, function() { app.listen(3000, function() {
console.log('Server started on http://localhost:3000'); console.log('Server started on http://localhost:3000');

View File

@@ -5,10 +5,6 @@ export const createCaller = createCallerFactory({
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
"unterlage": await import("../src/pages/api/unterlage.ts"), "unterlage": await import("../src/pages/api/unterlage.ts"),
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
"admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"), "admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
@@ -16,30 +12,34 @@ export const createCaller = createCallerFactory({
"admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"), "admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"),
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
"bedarfsausweis-gewerbe/[uid]": await import("../src/pages/api/bedarfsausweis-gewerbe/[uid].ts"), "bedarfsausweis-gewerbe/[uid]": await import("../src/pages/api/bedarfsausweis-gewerbe/[uid].ts"),
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
"ausweise": await import("../src/pages/api/ausweise/index.ts"), "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"),
"bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"),
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
"bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"),
"geg-nachweis-gewerbe/[uid]": await import("../src/pages/api/geg-nachweis-gewerbe/[uid].ts"), "geg-nachweis-gewerbe/[uid]": await import("../src/pages/api/geg-nachweis-gewerbe/[uid].ts"),
"geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"), "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"),
"geg-nachweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-wohnen/[uid].ts"), "geg-nachweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-wohnen/[uid].ts"),
"geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"), "geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"),
"objekt": await import("../src/pages/api/objekt/index.ts"), "objekt": await import("../src/pages/api/objekt/index.ts"),
"rechnung/[uid]": await import("../src/pages/api/rechnung/[uid].ts"), "rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"),
"rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"), "rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.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"),
"user": await import("../src/pages/api/user/index.ts"), "user": await import("../src/pages/api/user/index.ts"),
"user/self": await import("../src/pages/api/user/self.ts"), "user/self": await import("../src/pages/api/user/self.ts"),
"verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"), "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"),
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
"verbrauchsausweis-gewerbe/[uid]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[uid].ts"),
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
"verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
"aufnahme/[uid]/bilder": await import("../src/pages/api/aufnahme/[uid]/bilder.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"),
"aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid]/index.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"),
"aufnahme/[uid]/unterlagen": await import("../src/pages/api/aufnahme/[uid]/unterlagen.ts"), "aufnahme/[id]/unterlagen": await import("../src/pages/api/aufnahme/[id]/unterlagen.ts"),
"objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"), "objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"),
}) })

View File

@@ -3,7 +3,7 @@ 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, BedarfsausweisWohnenClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js"; import { AufnahmeClient, BedarfsausweisWohnenClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js";
import { Enums } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js";
export async function ausweisSpeichern( export async function ausweisSpeichern(
@@ -13,8 +13,8 @@ export async function ausweisSpeichern(
bilder: BildClient[], bilder: BildClient[],
ausweisart: Enums.Ausweisart ausweisart: Enums.Ausweisart
) { ) {
if (objekt.uid) { if (objekt.id) {
await api.objekt._uid.PATCH.fetch({ await api.objekt._id.PATCH.fetch({
adresse: objekt.adresse, adresse: objekt.adresse,
latitude: 0, latitude: 0,
longitude: 0, longitude: 0,
@@ -22,14 +22,14 @@ export async function ausweisSpeichern(
plz: objekt.plz plz: objekt.plz
}, { }, {
params: { params: {
uid: objekt.uid id: objekt.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
} else { } else {
const { uid } = await api.objekt.PUT.fetch({ const { id } = await api.objekt.PUT.fetch({
adresse: objekt.adresse, adresse: objekt.adresse,
latitude: 0, latitude: 0,
longitude: 0, longitude: 0,
@@ -41,16 +41,16 @@ export async function ausweisSpeichern(
} }
}) })
objekt.uid = uid; objekt.id = id;
} }
if (aufnahme.uid) { if (aufnahme.id) {
await api.aufnahme._uid.PATCH.fetch({ await api.aufnahme._id.PATCH.fetch({
baujahr_gebaeude: aufnahme.baujahr_gebaeude, baujahr_gebaeude: aufnahme.baujahr_gebaeude,
baujahr_heizung: aufnahme.baujahr_heizung, baujahr_heizung: aufnahme.baujahr_heizung,
baujahr_klima: aufnahme.baujahr_klima, baujahr_klima: aufnahme.baujahr_klima || [],
alternative_heizung: aufnahme.alternative_heizung, alternative_heizung: aufnahme.alternative_heizung,
alternative_kuehlung: aufnahme.alternative_kuehlung, alternative_kuehlung: aufnahme.alternative_kuehlung,
alternative_lueftung: aufnahme.alternative_lueftung, alternative_lueftung: aufnahme.alternative_lueftung,
@@ -102,14 +102,14 @@ export async function ausweisSpeichern(
zirkulation: aufnahme.zirkulation zirkulation: aufnahme.zirkulation
}, { }, {
params: { params: {
uid: aufnahme.uid id: aufnahme.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
} else { } else {
const { uid } = await api.aufnahme.PUT.fetch({ const { id } = await api.aufnahme.PUT.fetch({
aufnahme: { aufnahme: {
baujahr_gebaeude: aufnahme.baujahr_gebaeude, baujahr_gebaeude: aufnahme.baujahr_gebaeude,
baujahr_heizung: aufnahme.baujahr_heizung, baujahr_heizung: aufnahme.baujahr_heizung,
@@ -165,56 +165,56 @@ export async function ausweisSpeichern(
zentralheizung: aufnahme.zentralheizung, zentralheizung: aufnahme.zentralheizung,
zirkulation: aufnahme.zirkulation zirkulation: aufnahme.zirkulation
}, },
uid_objekt: objekt.uid objekt_id: objekt.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
aufnahme.uid = uid aufnahme.id = id
} }
let patchRoute: any; let patchRoute: any;
let putRoute: any; let putRoute: any;
if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) { if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) {
patchRoute = api["verbrauchsausweis-wohnen"]._uid.PATCH patchRoute = api["verbrauchsausweis-wohnen"]._id.PATCH
putRoute = api["verbrauchsausweis-wohnen"].PUT putRoute = api["verbrauchsausweis-wohnen"].PUT
} else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) { } else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) {
patchRoute = api["verbrauchsausweis-gewerbe"]._uid.PATCH patchRoute = api["verbrauchsausweis-gewerbe"]._id.PATCH
putRoute = api["verbrauchsausweis-gewerbe"].PUT putRoute = api["verbrauchsausweis-gewerbe"].PUT
} else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) { } else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) {
patchRoute = api["bedarfsausweis-wohnen"]._uid.PATCH patchRoute = api["bedarfsausweis-wohnen"]._id.PATCH
putRoute = api["bedarfsausweis-wohnen"].PUT putRoute = api["bedarfsausweis-wohnen"].PUT
} }
if (ausweis.uid) { if (ausweis.id) {
await patchRoute.fetch({ await patchRoute.fetch({
...exclude(ausweis, ["uid"]) ...exclude(ausweis, ["id"])
}, { }, {
params: { params: {
uid: ausweis.uid id: ausweis.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
} else { } else {
const { uid } = await putRoute.fetch({ const { id } = await putRoute.fetch({
ausweis, ausweis,
uid_aufnahme: aufnahme.uid aufnahme_id: aufnahme.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
ausweis.uid = uid; ausweis.id = id;
} }
await api.aufnahme._uid.bilder.PUT.fetch(bilder.map(bild => bild.uid), { await api.aufnahme._id.bilder.PUT.fetch(bilder.map(bild => bild.id), {
params: { params: {
uid: aufnahme.uid id: aufnahme.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
@@ -222,29 +222,8 @@ export async function ausweisSpeichern(
}) })
return { return {
uid_ausweis: ausweis.uid, ausweis_id: ausweis.id,
uid_aufnahme: aufnahme.uid, aufnahme_id: aufnahme.id,
uid_objekt: objekt.uid objekt_id: objekt.id
} }
// await client.v1.tickets.erstellen.mutate({
// titel: "Ausweis konnte nicht gespeichert werden",
// beschreibung: e.stack,
// email: user.email ?? "",
// metadata: JSON.stringify({
// ausweis,
// }),
// });
// addNotification({
// dismissable: false,
// message:
// "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
// subtext:
// "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
// timeout: 6000,
// type: "error",
// });
return null;
} }

View File

@@ -1,95 +0,0 @@
import {
ObjektClient,
UploadedGebaeudeBild,
VerbrauchsausweisWohnenClient,
} from "#components/Ausweis/types.js";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
import { Enums } from "#lib/client/prisma";
import { addNotification, updateNotification } from "@ibcornelsen/ui";
import { api } from "astro-typesafe-api/client";
import Cookies from "js-cookie";
export async function bilderHochladen(
images: (UploadedGebaeudeBild & { base64?: string, update?: boolean })[],
aufnahme_uid: string
) {
if (images.length == 0) {
return images;
}
// Wenn Bilder hochgeladen werden konvertieren wir sie zu base64, das heißt, dass die base64 Eigenschaft bei diesen Bildern
// existiert. Das müssen wir TypeScript nur wissen lassen, damit es uns in Ruhe lässt.
const imagesToUpload = images.filter(
(image) => !image.uid || image.update
) as unknown as {
data: string;
kategorie: string;
uid?: string;
update: boolean;
}[];
if (imagesToUpload.length == 0) {
return images;
}
// Alle Bilder hochladen
const notification = addNotification({
dismissable: false,
message: "Bilder hochladen.",
subtext: `${imagesToUpload.length} Bilder werden hochgeladen, bitte haben sie Geduld.`,
timeout: 0,
type: "info",
});
for (let i = 0; i < imagesToUpload.length; i++) {
const image = imagesToUpload[i];
try {
if (image.update) {
await api.bilder._uid.PATCH.fetch({
data: image.data,
kategorie: image.kategorie as Enums.BilderKategorie,
}, {
params: {
uid: image.uid as string,
},
headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
}
});
} else {
const response = await api.aufnahme._uid.bilder.PUT.fetch({
data: image.data,
kategorie: image.kategorie as Enums.BilderKategorie
}, {
params: {
uid: aufnahme_uid
},
headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
}
});
image.uid = response.uid;
}
updateNotification(notification, {
dismissable: true,
message: "Bild hochgeladen.",
subtext: `${i + 1}/${
imagesToUpload.length
} Bildern wurden erfolgreich hochgeladen.`,
timeout: 3000,
});
} catch (e) {
updateNotification(notification, {
dismissable: true,
message: "Bild konnte nicht hochgeladen werden.",
subtext: `Eines ihrer Bilder konnte nicht hochgeladen werden. Wir haben bereits ein Ticket erstellt und melden uns so schnell wie möglich bei ihnen.`,
timeout: 15000,
type: "error",
});
}
}
return images;
}

View File

@@ -3,7 +3,7 @@ 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, BedarfsausweisWohnenClient, BildClient, ObjektClient, UnterlageClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js"; import { AufnahmeClient, BedarfsausweisWohnenClient, BildClient, ObjektClient, UnterlageClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js";
import { Enums } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js";
export async function nachweisSpeichern( export async function nachweisSpeichern(
@@ -14,8 +14,8 @@ export async function nachweisSpeichern(
unterlagen: UnterlageClient[], unterlagen: UnterlageClient[],
ausweisart: Enums.Ausweisart ausweisart: Enums.Ausweisart
) { ) {
if (objekt.uid) { if (objekt.id) {
await api.objekt._uid.PATCH.fetch({ await api.objekt._id.PATCH.fetch({
adresse: objekt.adresse, adresse: objekt.adresse,
latitude: 0, latitude: 0,
longitude: 0, longitude: 0,
@@ -23,14 +23,14 @@ export async function nachweisSpeichern(
plz: objekt.plz plz: objekt.plz
}, { }, {
params: { params: {
uid: objekt.uid id: objekt.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
} else { } else {
const { uid } = await api.objekt.PUT.fetch({ const { id } = await api.objekt.PUT.fetch({
adresse: objekt.adresse, adresse: objekt.adresse,
latitude: 0, latitude: 0,
longitude: 0, longitude: 0,
@@ -42,13 +42,13 @@ export async function nachweisSpeichern(
} }
}) })
objekt.uid = uid; objekt.id = id;
} }
if (aufnahme.uid) { if (aufnahme.id) {
await api.aufnahme._uid.PATCH.fetch({ await api.aufnahme._id.PATCH.fetch({
baujahr_gebaeude: aufnahme.baujahr_gebaeude || [], baujahr_gebaeude: aufnahme.baujahr_gebaeude || [],
baujahr_heizung: aufnahme.baujahr_heizung || [], baujahr_heizung: aufnahme.baujahr_heizung || [],
baujahr_klima: aufnahme.baujahr_klima || [], baujahr_klima: aufnahme.baujahr_klima || [],
@@ -103,14 +103,14 @@ export async function nachweisSpeichern(
zirkulation: aufnahme.zirkulation zirkulation: aufnahme.zirkulation
}, { }, {
params: { params: {
uid: aufnahme.uid id: aufnahme.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
} else { } else {
const { uid } = await api.aufnahme.PUT.fetch({ const { id } = await api.aufnahme.PUT.fetch({
aufnahme: { aufnahme: {
baujahr_gebaeude: aufnahme.baujahr_gebaeude, baujahr_gebaeude: aufnahme.baujahr_gebaeude,
baujahr_heizung: aufnahme.baujahr_heizung, baujahr_heizung: aufnahme.baujahr_heizung,
@@ -166,56 +166,56 @@ export async function nachweisSpeichern(
zentralheizung: aufnahme.zentralheizung, zentralheizung: aufnahme.zentralheizung,
zirkulation: aufnahme.zirkulation zirkulation: aufnahme.zirkulation
}, },
uid_objekt: objekt.uid objekt_id: objekt.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
aufnahme.uid = uid aufnahme.id = id
} }
let patchRoute: any; let patchRoute: any;
let putRoute: any; let putRoute: any;
if (ausweisart == Enums.Ausweisart.GEGNachweisWohnen) { if (ausweisart == Enums.Ausweisart.GEGNachweisWohnen) {
patchRoute = api["geg-nachweis-wohnen"]._uid.PATCH patchRoute = api["geg-nachweis-wohnen"]._id.PATCH
putRoute = api["geg-nachweis-wohnen"].PUT putRoute = api["geg-nachweis-wohnen"].PUT
} else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) { } else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) {
patchRoute = api["geg-nachweis-gewerbe"]._uid.PATCH patchRoute = api["geg-nachweis-gewerbe"]._id.PATCH
putRoute = api["geg-nachweis-gewerbe"].PUT putRoute = api["geg-nachweis-gewerbe"].PUT
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { } else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
patchRoute = api["bedarfsausweis-gewerbe"]._uid.PATCH patchRoute = api["bedarfsausweis-gewerbe"]._id.PATCH
putRoute = api["bedarfsausweis-gewerbe"].PUT putRoute = api["bedarfsausweis-gewerbe"].PUT
} }
if (nachweis.uid) { if (nachweis.id) {
await patchRoute.fetch({ await patchRoute.fetch({
...exclude(nachweis, ["uid"]) ...exclude(nachweis, ["id"])
}, { }, {
params: { params: {
uid: nachweis.uid id: nachweis.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
} else { } else {
const { uid } = await putRoute.fetch({ const { id } = await putRoute.fetch({
nachweis, nachweis,
uid_aufnahme: aufnahme.uid uid_aufnahme: aufnahme.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
nachweis.uid = uid; nachweis.id = id;
} }
await api.aufnahme._uid.bilder.PUT.fetch(bilder.map(bild => bild.uid), { await api.aufnahme._id.bilder.PUT.fetch(bilder.map(bild => bild.id), {
params: { params: {
uid: aufnahme.uid id: aufnahme.id
}, },
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
@@ -223,8 +223,8 @@ export async function nachweisSpeichern(
}) })
return { return {
uid_nachweis: nachweis.uid, nachweis_id: nachweis.id,
uid_aufnahme: aufnahme.uid, aufnahme_id: aufnahme.id,
uid_objekt: objekt.uid objekt_id: objekt.id
} }
} }

View File

@@ -1,13 +1,12 @@
<script lang="ts"> <script lang="ts">
import { Buffer } from "buffer"; import { AufnahmeClient, BildClient, ObjektClient, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js"; import { Enums } from "#lib/client/prisma.js";
import { Enums } from "#lib/client/prisma";
import { openWindowWithPost } from "#lib/helpers/window.js"; import { openWindowWithPost } from "#lib/helpers/window.js";
export let ausweis: VerbrauchsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient;
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let bilder: UploadedGebaeudeBild[]; export let bilder: BildClient[];
export let ausweisart: Enums.Ausweisart export let ausweisart: Enums.Ausweisart
</script> </script>

View File

@@ -2,7 +2,7 @@
import { import {
AufnahmeClient, AufnahmeClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
} from "./types.js"; } from "./types.js";
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte"; import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
import AnlagenTechnikImage from "./AnlagenTechnikImage.svelte"; import AnlagenTechnikImage from "./AnlagenTechnikImage.svelte";
@@ -11,7 +11,7 @@
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let ausweis: BedarfsausweisGewerbe; export let ausweis: BedarfsausweisGewerbe;
export let images: UploadedGebaeudeBild[]; export let images: BildClient[];
</script> </script>
<div <div

View File

@@ -6,13 +6,13 @@
import ImageGrid from "#components/ImageGrid.svelte"; import ImageGrid from "#components/ImageGrid.svelte";
import { import {
Enums, Enums,
} from "#lib/client/prisma"; } from "#lib/client/prisma.js";
import { import {
AufnahmeClient, AufnahmeClient,
BedarfsausweisWohnenClient, BedarfsausweisWohnenClient,
BildClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild,
VerbrauchsausweisGewerbeClient, VerbrauchsausweisGewerbeClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./types.js"; } from "./types.js";
@@ -20,7 +20,7 @@
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let images: UploadedGebaeudeBild[] = []; export let images: BildClient[] = [];
export let ausweisart: Enums.Ausweisart; export let ausweisart: Enums.Ausweisart;
</script> </script>

View File

@@ -12,7 +12,7 @@
import { import {
AufnahmeClient, AufnahmeClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./types.js"; } from "./types.js";
import { boolean } from "astro:schema"; import { boolean } from "astro:schema";
@@ -21,7 +21,7 @@
export let gebaeude: ObjektClient; export let gebaeude: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let ausweis: VerbrauchsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient;
export let images: UploadedGebaeudeBild[]; export let images: BildClient[];
</script> </script>
<div <div

View File

@@ -1,7 +1,7 @@
<script lang="ts"> <script lang="ts">
import { ausweisSpeichern } from "#client/lib/ausweisSpeichern.js"; import { ausweisSpeichern } from "#client/lib/ausweisSpeichern.js";
import { validateAccessTokenClient } from "#client/lib/validateAccessToken.js"; import { validateAccessTokenClient } from "#client/lib/validateAccessToken.js";
import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient, BildClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import Overlay from "#components/Overlay.svelte"; import Overlay from "#components/Overlay.svelte";
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte"; import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
@@ -11,9 +11,9 @@
import { nachweisSpeichern } from "#client/lib/nachweisSpeichern.js"; import { nachweisSpeichern } from "#client/lib/nachweisSpeichern.js";
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient | GEGNachweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient | GEGNachweisWohnenClient;
export let bilder: UploadedGebaeudeBild[]; export let bilder: BildClient[];
export let unterlagen: UnterlageClient[] = []; export let unterlagen: UnterlageClient[] = [];
export let user: BenutzerClient; export let user: BenutzerClient | null;
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let ausweisart: Enums.Ausweisart export let ausweisart: Enums.Ausweisart
@@ -48,7 +48,7 @@
openWindowWithPost("/kundendaten", { openWindowWithPost("/kundendaten", {
ausweis, ausweis: { ...ausweis, ausweistyp },
objekt, objekt,
aufnahme, aufnahme,
bilder, bilder,
@@ -71,31 +71,32 @@
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | Awaited<ReturnType<typeof nachweisSpeichern>> | null = null; let result: Awaited<ReturnType<typeof ausweisSpeichern>> | Awaited<ReturnType<typeof nachweisSpeichern>> | null = null;
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart) result = await nachweisSpeichern({ ...ausweis, ausweistyp }, objekt, aufnahme, bilder, unterlagen, ausweisart)
ausweis.id = result.nachweis_id;
} else { } else {
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart) result = await ausweisSpeichern({ ...ausweis, ausweistyp }, objekt, aufnahme, bilder, ausweisart)
ausweis.id = result.ausweis_id;
} }
if (result !== null) { if (result !== null) {
window.history.pushState( window.history.pushState(
{}, {},
"", "",
`${location.pathname}?uid=${ausweis.uid}` `${location.pathname}?id=${ausweis.id}`
); );
localStorage.clear() localStorage.clear()
window.location.href = `/speichern-erfolgreich?uid=${ausweis.uid}` window.location.href = `/speichern-erfolgreich?id=${ausweis.id}`
} }
} }
async function hilfeBestellen() { async function hilfeBestellen() {
openWindowWithPost("/kundendaten", { openWindowWithPost("/kundendaten", {
ausweis, ausweis: { ...ausweis, ausweistyp },
objekt, objekt,
aufnahme, aufnahme,
bilder, bilder,
ausweisart, ausweisart
ausweistyp
}, "") }, "")
} }

View File

@@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { Enums } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js";
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js"; import { BedarfsausweisWohnenClient, ObjektClient, BildClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
export let images: UploadedGebaeudeBild[] = []; export let images: BildClient[] = [];
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
export let objekt: ObjektClient; export let objekt: ObjektClient;
</script> </script>

View File

@@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { Enums } from "#lib/client/prisma"; import { Enums } from "#lib/client/prisma.js";
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js"; import { BedarfsausweisWohnenClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
export let images: UploadedGebaeudeBild[] = []; export let images: BildClient[] = [];
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
export let objekt: ObjektClient; export let objekt: ObjektClient;
</script> </script>

View File

@@ -1,9 +1,9 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { Enums } from "#lib/client/prisma"; import { Enums } from "#lib/client/prisma.js";
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js"; import { BedarfsausweisWohnenClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
export let images: UploadedGebaeudeBild[] = []; export let images: BildClient[] = [];
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
export let gebaeude: ObjektClient; export let gebaeude: ObjektClient;
</script> </script>

View File

@@ -9,7 +9,7 @@
import { import {
AufnahmeClient, AufnahmeClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
VerbrauchsausweisGewerbeClient, VerbrauchsausweisGewerbeClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./types.js"; } from "./types.js";
@@ -19,7 +19,7 @@
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient;
export let images: UploadedGebaeudeBild[]; export let images: BildClient[];
</script> </script>
<div <div

View File

@@ -1,24 +1,21 @@
<script lang="ts"> <script lang="ts">
import HelpLabel from "#components/labels/HelpLabel.svelte"; import { Enums } from "#lib/client/prisma.js";
import Inputlabel from "#components/labels/InputLabel.svelte";
import HeizungImage from "./HeizungImage.svelte"; import HeizungImage from "./HeizungImage.svelte";
import { import {
AufnahmeClient, AufnahmeClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
VerbrauchsausweisGewerbeClient, 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";
import AngabenZurHeizunganlage from "#components/Ausweis/AngabenZurHeizunganlage.svelte"; import AngabenZurHeizunganlage from "#components/Ausweis/AngabenZurHeizunganlage.svelte";
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient;
export let images: UploadedGebaeudeBild[]; export let images: BildClient[];
export let ausweisart: Enums.Ausweisart; export let ausweisart: Enums.Ausweisart;
</script> </script>

View File

@@ -6,7 +6,7 @@
AufnahmeClient, AufnahmeClient,
BedarfsausweisWohnenClient, BedarfsausweisWohnenClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
VerbrauchsausweisGewerbeClient, VerbrauchsausweisGewerbeClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./types.js"; } from "./types.js";
@@ -18,7 +18,7 @@
| VerbrauchsausweisWohnenClient | VerbrauchsausweisWohnenClient
| VerbrauchsausweisGewerbeClient | VerbrauchsausweisGewerbeClient
| BedarfsausweisWohnenClient; | BedarfsausweisWohnenClient;
export let images: UploadedGebaeudeBild[]; export let images: BildClient[];
</script> </script>
<div <div

View File

@@ -31,14 +31,7 @@ export type UploadedGebaeudeBild = OmitKeys<Bild, "id" | "aufnahme_id"> & {
* @export * @export
* @typedef {VerbrauchsausweisWohnenClient} * @typedef {VerbrauchsausweisWohnenClient}
*/ */
export type VerbrauchsausweisWohnenClient = OmitKeys< export type VerbrauchsausweisWohnenClient = VerbrauchsausweisWohnen
VerbrauchsausweisWohnen,
"id" | "aufnahme_id" | "benutzer_id"
> & {
uid_objekt: string,
uid_aufnahme: string,
uid_benutzer?: string
};
/** /**
* Das ist der Typescript Type für den Verbrauchsausweis Gewerbe mit allen Feldern die * Das ist der Typescript Type für den Verbrauchsausweis Gewerbe mit allen Feldern die
@@ -50,14 +43,7 @@ export type VerbrauchsausweisWohnenClient = OmitKeys<
* @export * @export
* @typedef {VerbrauchsausweisWohnenClient} * @typedef {VerbrauchsausweisWohnenClient}
*/ */
export type VerbrauchsausweisGewerbeClient = OmitKeys< export type VerbrauchsausweisGewerbeClient = VerbrauchsausweisGewerbe
VerbrauchsausweisGewerbe,
"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
@@ -69,14 +55,7 @@ export type VerbrauchsausweisGewerbeClient = OmitKeys<
* @export * @export
* @typedef {VerbrauchsausweisWohnenClient} * @typedef {VerbrauchsausweisWohnenClient}
*/ */
export type BedarfsausweisWohnenClient = OmitKeys< export type BedarfsausweisWohnenClient = BedarfsausweisWohnen
BedarfsausweisWohnen,
"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
@@ -88,20 +67,15 @@ export type BedarfsausweisWohnenClient = OmitKeys<
* @export * @export
* @typedef {ObjektClient} * @typedef {ObjektClient}
*/ */
export type ObjektClient = OmitKeys<Objekt, "benutzer_id" | "id">; export type ObjektClient = Objekt;
export type AufnahmeClient = OmitKeys< export type AufnahmeClient = Aufnahme
Aufnahme,
"id" | "objekt_id" | "benutzer_id"
> & {
uid_objekt: string
};
export type TicketClient = OmitKeys<Tickets, "bearbeiter_id" | "benutzer_id" | "id"> export type TicketClient = OmitKeys<Tickets, "bearbeiter_id" | "benutzer_id" | "id">
export type BenutzerClient = OmitKeys<Benutzer, "id" | "passwort">; export type BenutzerClient = OmitKeys<Benutzer, "passwort">;
export type RechnungClient = OmitKeys<Rechnung, "id"> export type RechnungClient = Rechnung
export function ZodOverlap<T, S = z.ZodType<T, z.ZodTypeDef, T>>(arg: S): S { export function ZodOverlap<T, S = z.ZodType<T, z.ZodTypeDef, T>>(arg: S): S {
return arg; return arg;
@@ -122,34 +96,34 @@ export type OptionalNullable<T> = T extends object ? {
} : T; } : T;
export const UUidWithPrefix = z.string().refine((value) => { export const UUidWithPrefix = z.string().refine((value) => {
const prefixedUUidRegex = /^([0-9a-z]+)-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i const prefixedUUidRegex = /^([A-Z]{2})[0-9A-Z]{6}$/i
const match = value.match(prefixedUUidRegex) const match = value.match(prefixedUUidRegex)
if (match && match[1] in VALID_UUID_PREFIXES) { if (match && Object.values(VALID_UUID_PREFIXES).indexOf(match[1] as VALID_UUID_PREFIXES) > -1) {
return true; return true;
} }
return false; return false;
}) })
export function getAusweisartFromUUID(uid: string): Enums.Ausweisart | null { export function getAusweisartFromUUID(id: string): Enums.Ausweisart | null {
if (!UUidWithPrefix.safeParse(uid).success) { if (!UUidWithPrefix.safeParse(id).success) {
return null return null
} }
switch(uid.split("-")[0]) { switch(id.slice(0, 2) as VALID_UUID_PREFIXES) {
case "vaw": case VALID_UUID_PREFIXES.VerbrauchsausweisWohnen:
return Enums.Ausweisart.VerbrauchsausweisWohnen return Enums.Ausweisart.VerbrauchsausweisWohnen
case "vag": case VALID_UUID_PREFIXES.VerbrauchsausweisGewerbe:
return Enums.Ausweisart.VerbrauchsausweisGewerbe return Enums.Ausweisart.VerbrauchsausweisGewerbe
case "baw": case VALID_UUID_PREFIXES.BedarfsausweisWohnen:
return Enums.Ausweisart.BedarfsausweisWohnen return Enums.Ausweisart.BedarfsausweisWohnen
case "bag": case VALID_UUID_PREFIXES.BedarfsausweisGewerbe:
return Enums.Ausweisart.BedarfsausweisGewerbe return Enums.Ausweisart.BedarfsausweisGewerbe
case "gnw": case VALID_UUID_PREFIXES.GEGNachweisWohnen:
return Enums.Ausweisart.GEGNachweisWohnen return Enums.Ausweisart.GEGNachweisWohnen
case "gng": case VALID_UUID_PREFIXES.GEGNachweisGewerbe:
return Enums.Ausweisart.GEGNachweisGewerbe return Enums.Ausweisart.GEGNachweisGewerbe
default: default:
return null return null
@@ -157,7 +131,7 @@ export function getAusweisartFromUUID(uid: string): Enums.Ausweisart | null {
} }
export type UnterlageClient = Omit<Unterlage, "id" | "aufnahme_id"> export type UnterlageClient = Omit<Unterlage, "id" | "aufnahme_id">
export type BildClient = Omit<Bild, "id" | "aufnahme_id" | "name"> export type BildClient = Omit<Bild, "aufnahme_id" | "name">
export type ObjektKomplettClient = ObjektClient & { export type ObjektKomplettClient = ObjektClient & {
aufnahmen: AufnahmeKomplettClient[] aufnahmen: AufnahmeKomplettClient[]
@@ -172,8 +146,4 @@ export type AufnahmeKomplettClient = AufnahmeClient & {
geg_nachweise_wohnen: (GEGNachweisWohnenClient & { rechnung: RechnungClient })[] geg_nachweise_wohnen: (GEGNachweisWohnenClient & { rechnung: RechnungClient })[]
} }
export type GEGNachweisWohnenClient = Omit<GEGNachweisWohnen, "id" | "aufnahme_id" | "benutzer_id"> & { export type GEGNachweisWohnenClient = GEGNachweisWohnen
uid_objekt: string,
uid_aufnahme: string,
uid_benutzer?: string
}

View File

@@ -5,7 +5,7 @@
AufnahmeClient, AufnahmeClient,
getAusweisartFromUUID, getAusweisartFromUUID,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./Ausweis/types.js"; } from "./Ausweis/types.js";
import AusweisPruefenTooltip from "./AusweisPruefenTooltip.svelte"; import AusweisPruefenTooltip from "./AusweisPruefenTooltip.svelte";
@@ -22,7 +22,7 @@
export let ausweis: VerbrauchsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let bilder: UploadedGebaeudeBild[] export let bilder: BildClient[]
export let events: Event[] export let events: Event[]
export let calculations: Awaited< export let calculations: Awaited<
ReturnType<typeof endEnergieVerbrauchVerbrauchsausweis_2016> ReturnType<typeof endEnergieVerbrauchVerbrauchsausweis_2016>
@@ -49,7 +49,7 @@
const ausweisArt = getAusweisartFromUUID(ausweis.uid) const ausweisArt = getAusweisartFromUUID(ausweis.id)
let verbrauchWWGesamt_1 = ""; let verbrauchWWGesamt_1 = "";
let verbrauchWWGesamt_2 = ""; let verbrauchWWGesamt_2 = "";
@@ -458,7 +458,7 @@
async function stornieren(ausweis: VerbrauchsausweisWohnenClient) { async function stornieren(ausweis: VerbrauchsausweisWohnenClient) {
try { try {
const response = await api.admin.stornieren.PUT.fetch({ const response = await api.admin.stornieren.PUT.fetch({
uid_ausweis: ausweis.uid uid_ausweis: ausweis.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
@@ -748,7 +748,7 @@
{#each bilder as image} {#each bilder as image}
<div> <div>
<h2 class="text-lg mb-4 font-bold">{image.kategorie}</h2> <h2 class="text-lg mb-4 font-bold">{image.kategorie}</h2>
<img src="/bilder/{image.uid}.jpg"> <img src="/bilder/{image.id}.jpg">
</div> </div>
{/each} {/each}
{/if} {/if}
@@ -774,7 +774,7 @@
<td title="Ausweis anzeigen" class="w-[50px]" <td title="Ausweis anzeigen" class="w-[50px]"
><a ><a
class="energieausweis-img" class="energieausweis-img"
href="/pdf/ansichtsausweis?uid={ausweis.uid}" href="/pdf/ansichtsausweis?uid={ausweis.id}"
target="_blank" target="_blank"
><img ><img
src="/images/dashboard/ausweis.jpg" src="/images/dashboard/ausweis.jpg"
@@ -786,7 +786,7 @@
<td title="Datenblatt anzeigen" width="50px" <td title="Datenblatt anzeigen" width="50px"
><a ><a
class="energieausweis-img" class="energieausweis-img"
href="/pdf/datenblatt?uid={ausweis.uid}" href="/pdf/datenblatt?uid={ausweis.id}"
target="_blank" target="_blank"
><img ><img
src="/images/dashboard/datenblatt.jpg" src="/images/dashboard/datenblatt.jpg"
@@ -857,7 +857,7 @@
{/if} {/if}
{#if !ausweis.registriernummer} {#if !ausweis.registriernummer}
<td title="Registriernummer vom DiBT anfordern." class="w-4 p-1"><button class="btn btn-xs btn-ghost" on:click={() => { <td title="Registriernummer vom DiBT anfordern." class="w-4 p-1"><button class="btn btn-xs btn-ghost" on:click={() => {
registriernummerAnfordern(ausweis.uid) registriernummerAnfordern(ausweis.id)
}}>R</button></td> }}>R</button></td>
{/if} {/if}
</tr> </tr>
@@ -884,7 +884,7 @@
</tr> </tr>
<tr> <tr>
<td>UID</td> <td>UID</td>
<td><strong><pre>{ausweis.uid}</pre></strong></td> <td><strong><pre>{ausweis.id}</pre></strong></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>

View File

@@ -15,7 +15,6 @@
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
import { Enums, Objekt } from "#lib/client/prisma.js"; import { Enums, Objekt } from "#lib/client/prisma.js";
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
import { shortenUID } from "#server/lib/hash.js";
import { addNotification } from "#components/Notifications/shared.js"; import { addNotification } from "#components/Notifications/shared.js";
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
@@ -25,9 +24,9 @@
export let benutzer: BenutzerClient; export let benutzer: BenutzerClient;
const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33; const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33;
const ausweisart = getAusweisartFromUUID(ausweis.uid); const ausweisart = getAusweisartFromUUID(ausweis.id);
const id = ausweis.alte_ausweis_id || shortenUID(ausweis.uid); const id = ausweis.alte_ausweis_id || ausweis.id;
async function ausweisStornieren() { async function ausweisStornieren() {
const result = await dialogs.confirm({ const result = await dialogs.confirm({
@@ -46,18 +45,18 @@
if (result === true) { if (result === true) {
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
await api["verbrauchsausweis-wohnen"]._uid.DELETE.fetch(undefined, { await api["verbrauchsausweis-wohnen"]._id.DELETE.fetch(undefined, {
params: { params: {
uid: ausweis.uid, id: ausweis.id,
}, },
headers: { headers: {
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`, Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
}, },
}); });
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
await api["verbrauchsausweis-gewerbe"]._uid.DELETE.fetch(undefined, { await api["verbrauchsausweis-gewerbe"]._id.DELETE.fetch(undefined, {
params: { params: {
uid: ausweis.uid, id: ausweis.id,
}, },
headers: { headers: {
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`, Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
@@ -95,7 +94,7 @@
async function registriernummerAnfordern() { async function registriernummerAnfordern() {
try { try {
const result = await api.admin.registriernummer.GET.fetch({ const result = await api.admin.registriernummer.GET.fetch({
uid: ausweis.uid uid: ausweis.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
@@ -115,7 +114,7 @@
async function stornieren() { async function stornieren() {
try { try {
const response = await api.admin.stornieren.PUT.fetch({ const response = await api.admin.stornieren.PUT.fetch({
uid_ausweis: ausweis.uid uid_ausweis: ausweis.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
@@ -145,7 +144,7 @@
async function ausweisAusstellen() { async function ausweisAusstellen() {
try { try {
await api.admin.ausstellen.GET.fetch({ await api.admin.ausstellen.GET.fetch({
uid_ausweis: ausweis.uid uid_ausweis: ausweis.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
@@ -211,9 +210,9 @@
Verbrauchsausweis Gewerbe Verbrauchsausweis Gewerbe
{/if} {/if}
{#if rechnung && rechnung.ausweistyp === Enums.AusweisTyp.Beratung} {#if ausweis.ausweistyp === Enums.AusweisTyp.Beratung}
(Beratung) (Beratung)
{:else if rechnung && rechnung.ausweistyp === Enums.AusweisTyp.Offline} {:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline}
(Offline) (Offline)
{/if} {/if}
</div> </div>
@@ -236,9 +235,9 @@
> >
</div> </div>
{#if ausweis.bestellt} {#if ausweis.bestellt}
{#if rechnung && rechnung.ausweistyp === Enums.AusweisTyp.Beratung} {#if ausweis.ausweistyp === Enums.AusweisTyp.Beratung}
<p class="text-sm font-semibold">Sie haben Hilfe zu diesem Ausweis angefordert. Sie werden innerhalb der nächsten 48 Stunden über die hinterlegte Telefonnummer vom IB Cornelsen kontaktiert.</p> <p class="text-sm font-semibold">Sie haben Hilfe zu diesem Ausweis angefordert. Sie werden innerhalb der nächsten 48 Stunden über die hinterlegte Telefonnummer vom IB Cornelsen kontaktiert.</p>
{:else if rechnung && rechnung.ausweistyp === Enums.AusweisTyp.Offline} {:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline}
<p class="text-sm font-semibold">Sie haben die offline Variant zu diesem Ausweis angefordert. Bitte übermitteln Sie uns die letzten drei Jahre der Energieabrechnungen Ihres Energieversorgers.</p> <p class="text-sm font-semibold">Sie haben die offline Variant zu diesem Ausweis angefordert. Bitte übermitteln Sie uns die letzten drei Jahre der Energieabrechnungen Ihres Energieversorgers.</p>
{:else} {:else}
<p class="text-sm font-semibold">Der Ausweis wurde von Ihnen freigegeben und befindet sich in Prüfung vom IB Cornelsen</p> <p class="text-sm font-semibold">Der Ausweis wurde von Ihnen freigegeben und befindet sich in Prüfung vom IB Cornelsen</p>
@@ -297,27 +296,27 @@
<!-- <!--
<a <a
class="button text-sm" class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.uid}" href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.id}"
>Stornieren</a> >Stornieren</a>
--> -->
{/if} {/if}
{#if ausweis.bestellt && (!rechnung || rechnung.bezahlmethode === Enums.Bezahlmethoden.rechnung)} {#if ausweis.bestellt && (!rechnung || rechnung.bezahlmethode === Enums.Bezahlmethoden.rechnung)}
<!-- <a href="/energieausweis-erstellen/bezahlung?uid={ausweis.uid}" class="button text-sm">Bezahlen</a> --> <!-- <a href="/energieausweis-erstellen/bezahlung?uid={ausweis.id}" class="button text-sm">Bezahlen</a> -->
{/if} {/if}
{#if !ausweis.ausgestellt && (!ausweis.bestellt || (rechnung && rechnung.ausweistyp === Enums.AusweisTyp.Beratung || rechnung && rechnung.ausweistyp === Enums.AusweisTyp.Offline))} {#if !ausweis.ausgestellt && (!ausweis.bestellt || (ausweis.ausweistyp === Enums.AusweisTyp.Beratung || ausweis.ausweistyp === Enums.AusweisTyp.Offline))}
<!-- TODO --> <!-- TODO -->
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen} {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen}
<a <a
class="button text-sm" class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.uid}" href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?id={ausweis.id}"
>Bearbeiten</a> >Bearbeiten</a>
{:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe} {:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
<a <a
class="button text-sm" class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid={ausweis.uid}" href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?id={ausweis.id}"
>Bearbeiten</a> >Bearbeiten</a>
{/if} {/if}
{/if} {/if}
@@ -327,12 +326,12 @@
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen} {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen}
<a <a
class="button text-sm" class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.uid}" href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?id={ausweis.id}"
>Formular</a> >Formular</a>
{:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe} {:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
<a <a
class="button text-sm" class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid={ausweis.uid}" href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?id={ausweis.id}"
>Formular</a> >Formular</a>
{/if} {/if}
{/if} {/if}
@@ -347,7 +346,7 @@
class="p-2 rounded-lg hover:bg-gray-200" class="p-2 rounded-lg hover:bg-gray-200"
title="PDF Herunterladen" title="PDF Herunterladen"
target="_blank" target="_blank"
href="/pdf/ansichtsausweis?uid={ausweis.uid}" href="/pdf/ansichtsausweis?id={ausweis.id}"
> >
<img src="/images/ausweis.webp" width="32" alt="Energieausweis"> <img src="/images/ausweis.webp" width="32" alt="Energieausweis">
</a> </a>
@@ -355,7 +354,7 @@
class="p-2 rounded-lg hover:bg-gray-200" class="p-2 rounded-lg hover:bg-gray-200"
title="PDF Herunterladen" title="PDF Herunterladen"
target="_blank" target="_blank"
href="/pdf/datenblatt?uid={ausweis.uid}" href="/pdf/datenblatt?id={ausweis.id}"
> >
<img src="/images/datenblatt.webp" width="32" alt="Datenblatt"> <img src="/images/datenblatt.webp" width="32" alt="Datenblatt">
</a> </a>

View File

@@ -12,7 +12,7 @@
{@const bild = objekt.aufnahmen[0].bilder.find(bild => bild.kategorie === Enums.BilderKategorie.Gebaeude)} {@const bild = objekt.aufnahmen[0].bilder.find(bild => bild.kategorie === Enums.BilderKategorie.Gebaeude)}
{#if bild} {#if bild}
<img src="/bilder/{bild.uid}.jpg" class="w-full max-h-72 object-cover rounded-t-lg" alt="Gebäude"> <img src="/bilder/{bild.id}.jpg" class="w-full max-h-72 object-cover rounded-t-lg" alt="Gebäude">
{:else} {:else}
<img src="/placeholder.png" class="w-full max-h-72 object-cover rounded-t-lg" alt="Gebäude"> <img src="/placeholder.png" class="w-full max-h-72 object-cover rounded-t-lg" alt="Gebäude">
{/if} {/if}
@@ -29,14 +29,14 @@
<div class="border rounded-lg px-4 py-2"> <div class="border rounded-lg px-4 py-2">
<div class="flex flex-row justify-between items-center"> <div class="flex flex-row justify-between items-center">
<span>Stand vom {moment(aufnahme.erstellungsdatum).format("DD.MM.YYYY")}</span> <span>Stand vom {moment(aufnahme.erstellungsdatum).format("DD.MM.YYYY")}</span>
<a href="/dashboard/aufnahme/{aufnahme.uid}" class="rounded-lg p-2 hover:bg-gray-100 transition-all"><OpenInNewWindow size={20}></OpenInNewWindow></a> <a href="/dashboard/aufnahme/{aufnahme.id}" class="rounded-lg p-2 hover:bg-gray-100 transition-all"><OpenInNewWindow size={20}></OpenInNewWindow></a>
</div> </div>
<div class="flex flex-row gap-2"> <div class="flex flex-row gap-2">
{#if aufnahme.verbrauchsausweise_wohnen.length > 0} {#if aufnahme.verbrauchsausweise_wohnen.length > 0}
<a href="/dashboard/aufnahme/{aufnahme.uid}" class="rounded-lg p-2 hover:bg-gray-100 transition-all"><File size={20}></File></a> <a href="/dashboard/aufnahme/{aufnahme.id}" class="rounded-lg p-2 hover:bg-gray-100 transition-all"><File size={20}></File></a>
{/if} {/if}
{#if aufnahme.verbrauchsausweise_gewerbe.length > 0} {#if aufnahme.verbrauchsausweise_gewerbe.length > 0}
<a href="/dashboard/aufnahme/{aufnahme.uid}" class="rounded-lg p-2 hover:bg-gray-100 transition-all"><File size={20}></File></a> <a href="/dashboard/aufnahme/{aufnahme.id}" class="rounded-lg p-2 hover:bg-gray-100 transition-all"><File size={20}></File></a>
{/if} {/if}
</div> </div>
</div> </div>

View File

@@ -1,13 +1,13 @@
<script lang="ts"> <script lang="ts">
import { Buffer } from "buffer"; import { Buffer } from "buffer";
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js"; import { AufnahmeClient, BildClient, ObjektClient, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
import { Enums } from "#lib/client/prisma"; import { Enums } from "#lib/client/prisma.js";
import { openWindowWithPost } from "#lib/helpers/window.js"; import { openWindowWithPost } from "#lib/helpers/window.js";
export let ausweis: VerbrauchsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient;
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let bilder: UploadedGebaeudeBild[]; export let bilder: BildClient[];
export let ausweisart: Enums.Ausweisart export let ausweisart: Enums.Ausweisart

View File

@@ -2,7 +2,7 @@
import UploadImages from "./UploadImages.svelte"; import UploadImages from "./UploadImages.svelte";
import type { Enums } from "#lib/client/prisma.js"; import type { Enums } from "#lib/client/prisma.js";
import { BedarfsausweisWohnenClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js"; import { BedarfsausweisWohnenClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./Ausweis/types.js";
import { RotateCounterClockwise, Trash, Upload } from "radix-svelte-icons"; import { Trash, Upload } from "radix-svelte-icons";
import { api } from "astro-typesafe-api/client"; import { api } from "astro-typesafe-api/client";
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";
@@ -17,14 +17,14 @@
async function deleteImage(image: BildClient) { async function deleteImage(image: BildClient) {
await api.bild.DELETE.fetch({ await api.bild.DELETE.fetch({
uid: image.uid id: image.id
}, { }, {
headers: { headers: {
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
} }
}) })
images = images.filter((x) => x.uid !== image.uid); images = images.filter((x) => x.id !== image.id);
} }
let upload: () => void; let upload: () => void;
@@ -37,7 +37,7 @@
{#if image.kategorie == kategorie} {#if image.kategorie == kategorie}
<div class="relative group"> <div class="relative group">
<img <img
src="/bilder/{image.uid}.jpg" src="/bilder/{image.id}.jpg"
alt={kategorie} alt={kategorie}
class="h-full max-h-96 w-full rounded-lg border-2 group-hover:contrast-50 object-cover transition-all" class="h-full max-h-96 w-full rounded-lg border-2 group-hover:contrast-50 object-cover transition-all"
/> />

View File

@@ -11,7 +11,6 @@
BedarfsausweisWohnenClient, BedarfsausweisWohnenClient,
BildClient, BildClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild,
VerbrauchsausweisGewerbeClient, VerbrauchsausweisGewerbeClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./Ausweis/types.js"; } from "./Ausweis/types.js";
@@ -80,13 +79,13 @@
// Get the scaled-down data from the canvas in the desired output format and quality // Get the scaled-down data from the canvas in the desired output format and quality
const dataURL = canvas.toDataURL("image/jpeg", 0.8); const dataURL = canvas.toDataURL("image/jpeg", 0.8);
const { uid } = await api.bild.PUT.fetch({ const { id } = await api.bild.PUT.fetch({
data: dataURL, data: dataURL,
kategorie, kategorie,
name: file.name name: file.name
}) })
images.push({ uid, kategorie }); images.push({ id, kategorie });
images = images; images = images;
if (i == Math.min(files.length, max) - 1) { if (i == Math.min(files.length, max) - 1) {

View File

@@ -1,6 +1,6 @@
<script lang="ts"> <script lang="ts">
import { PRICES } from "#lib/constants.js"; import { PRICES } from "#lib/constants.js";
import { Enums } from "#lib/client/prisma"; import { Enums } from "#lib/client/prisma.js";
export let bullets; export let bullets;
export let title; export let title;
export let ref = ""; export let ref = "";
@@ -56,9 +56,9 @@ bullets = [
<div class="zeile grid grid-cols-subgrid col-span-4 py-4 border-b-[0px] justify-items-center items-center"> <div class="zeile grid grid-cols-subgrid col-span-4 py-4 border-b-[0px] justify-items-center items-center">
<div class="justify-self-start pl-2"></div> <div class="justify-self-start pl-2"></div>
<a href="{ref}/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" ><button class="bestellbutton" type="button">sofort<br>bestellen</button></a> <a href="{ref}/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?ausweistyp={Enums.AusweisTyp.Standard}" ><button class="bestellbutton" type="button">sofort<br>bestellen</button></a>
<a href="{ref}/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" ><button class="bestellbutton" type="button">sofort<br>bestellen</button></a> <a href="{ref}/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?ausweistyp={Enums.AusweisTyp.Beratung}" ><button class="bestellbutton" type="button">sofort<br>bestellen</button></a>
<a href="{ref}/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" ><button class="bestellbutton" type="button">sofort<br>bestellen</button></a> <a href="{ref}/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?ausweistyp={Enums.AusweisTyp.Offline}" ><button class="bestellbutton" type="button">sofort<br>bestellen</button></a>
</div> </div>
</div> </div>

View File

@@ -1,6 +1,6 @@
import fuelList from "#components/Ausweis/brennstoffListe.js"; import fuelList from "#components/Ausweis/brennstoffListe.js";
import { faker } from "@faker-js/faker"; import { faker } from "@faker-js/faker";
import { type Enums } from "#lib/client/prisma"; import { type Enums } from "#lib/client/prisma.js";
import "cypress-file-upload" import "cypress-file-upload"
import moment from "moment"; import moment from "moment";
@@ -17,8 +17,8 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
cy.get("select[data-cy='ausstellgrund']") cy.get("select[data-cy='ausstellgrund']")
.select( .select(
faker.number.int({ faker.number.int({
min: 0, min: 1,
max: (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]).length - 1, max: (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]).length,
}) })
) )
@@ -40,10 +40,10 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
{ delay: 50 } { delay: 50 }
); );
// Anzahl Einheiten // // Anzahl Einheiten
cy.get("input[name='einheiten']") // cy.get("input[name='einheiten']")
.should("have.attr", "type", "number") // .should("have.attr", "type", "number")
.type(faker.number.int({ min: 1, max: 5 }).toString()); // .type(faker.number.int({ min: 1, max: 5 }).toString());
// Sanierungsstatus // Sanierungsstatus
cy.get("select[name='saniert']").select( cy.get("select[name='saniert']").select(
@@ -61,11 +61,12 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
); );
// TODO: Ort - Dieser wird aus der Datenbank abgefragt, wir müssen also warten, bis der Dropdown da ist. // TODO: Ort - Dieser wird aus der Datenbank abgefragt, wir müssen also warten, bis der Dropdown da ist.
cy.get("[data-cy='plz-container']").find("button").first().click()
// Flaeche // // Flaeche
cy.get("input[name='flaeche']") // cy.get("input[name='flaeche']")
.should("have.attr", "type", "number") // .should("have.attr", "type", "number")
.type(faker.number.int({ min: 50, max: 1000 }).toString()); // .type(faker.number.int({ min: 50, max: 1000 }).toString());
// Nutzlaeche // Nutzlaeche
cy.get("input[name='nutzflaeche']") cy.get("input[name='nutzflaeche']")
@@ -90,7 +91,7 @@ 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 = []; let availableDates = [];
const startDate = moment() const startDate = moment()
.subtract(4, "years") .subtract(4, "years")
.subtract(6, "months"); .subtract(6, "months");
@@ -104,8 +105,8 @@ let availableDates = [];
} }
// Verbrauchszeitraum // Verbrauchszeitraum
cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString());
cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString()); cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString());
cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.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());
@@ -261,59 +262,47 @@ let availableDates = [];
// Gebäude Bild // Gebäude Bild
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. cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").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. cy.url().should("contain", "/kundendaten");
// Wir klicken auf registrieren und erstellen einen neuen Benutzer, danach loggen wir uns mit diesem ein.
cy.get("[data-cy='registrieren']").click();
const email = faker.internet.email(); const email = faker.internet.email();
const passwort = "test1234"; const passwort = "test1234";
const vorname = faker.person.firstName(); const vorname = faker.person.firstName();
const nachname = faker.person.lastName(); const nachname = faker.person.lastName();
const telefon = faker.phone.number()
cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").type(email); const strasse = faker.location.streetAddress({ useFullAddress: true })
cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort); const plz = faker.location.zipCode("#####")
cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname);
cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname);
cy.get("form[name='signup'] button[type='submit']").click(); cy.get("input[name='vorname']").should("have.attr", "type", "text").type(vorname);
cy.get("input[name='name']").should("have.attr", "type", "text").type(nachname);
cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon);
// Rechnung
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`);
cy.get("input[name='rechnung_strasse']").should("have.attr", "type", "text").type(strasse);
cy.get("input[name='rechnung_plz']").should("have.attr", "type", "text").type(plz);
cy.get("[data-cy='plz-container']").children().first().click()
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email);
cy.get("[data-cy='paypal']").click()
cy.get("button[data-cy='bestellen']").click();
cy.get("a[data-cy='registrieren']").should("be.visible").click();
// Wir sind jetzt registriert und können uns nun einloggen. // Wir sind jetzt registriert und können uns nun einloggen.
// Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben. // Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben.
cy.get("form[name='login'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email); cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname);
cy.get("form[name='login'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort); cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname);
cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email);
cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort);
cy.intercept({ method: "PUT", url: "**/api/user" }).as("signup")
cy.get("form[name='signup'] button[type='submit']").click();
cy.wait("@signup")
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 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', () => { 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
cy.get("input[type='radio'][name='final_state'][value='paid']").check(); cy.get("input[type='radio'][name='final_state'][value='paid']").check();

View File

@@ -0,0 +1,282 @@
import fuelList from "#components/Ausweis/brennstoffListe.js";
import { faker } from "@faker-js/faker";
import "cypress-file-upload"
import moment from "moment";
import { Aufnahme, Enums, Objekt, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
describe("Verbrauchsausweis für Wohngebäude bearbeiten", async () => {
it("bearbeitet einen bereits existierenden Verbrauchsausweis für Wohngebäude", () => {
cy.task("verbrauchsausweisWohnen", {
where: {
ausgestellt: false,
bestellt: false
},
include: {
aufnahme: {
include: {
objekt: true
}
},
benutzer: true
}
}).then((ausweis: VerbrauchsausweisWohnen & { aufnahme: Aufnahme & { objekt: Objekt } }) => {
cy.visit(`/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?id=${ausweis.id}`);
cy.wait(2000);
// Wir überprüfen, ob alle Ausstelgründe vorhanden sind, diese sollten genau so viele sein wie in der Datenbank vorhanden sind.
cy.get("select[data-cy='ausstellgrund']")
.find("option:selected").should("have.value", ausweis.ausstellgrund)
// Jetzt Füllen wir das Baujahr vom Gebäude aus.
cy.get("input[name='baujahr_gebaeude']")
.should("have.value", ausweis.aufnahme.baujahr_gebaeude[0])
// Jetzt Füllen wir das Baujahr der Heizung aus.
cy.get("input[name='baujahr_heizung']")
.should("have.value", ausweis.aufnahme.baujahr_heizung[0])
// Anzahl Einheiten
cy.get("input[name='einheiten']")
.should("have.value", ausweis.aufnahme.einheiten)
// Sanierungsstatus
cy.get("select[name='saniert']").find("option:selected").should("have.value", ausweis.aufnahme.saniert)
// Adresse
cy.get("input[name='adresse']").should("have.value", ausweis.aufnahme.objekt.adresse);
// Postleitzahl
cy.get("input[name='plz']").type(
faker.location.zipCode({
format: "#####",
})
);
// TODO: Ort - Dieser wird aus der Datenbank abgefragt, wir müssen also warten, bis der Dropdown da ist.
cy.get("[data-cy='plz-container']").find("button").first().click()
// Flaeche
cy.get("input[name='flaeche']")
.should("have.attr", "type", "number")
.type(faker.number.int({ min: 50, max: 1000 }).toString());
// Nutzflaeche
cy.get("input[name='nutzflaeche']")
.should("have.attr", "type", "number")
.type(faker.number.int({ min: 50, max: 1000 }).toString());
// Keller
cy.get("select[name='keller']").find("option:not([disabled])").should("have.length", (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length).parent().select(faker.number.int({
max: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length,
min: 1
}));
// Dachgeschoss
cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length).parent().select(faker.number.int({
max: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length,
min: 1
}));
// Brennstoff und Einheit 1
const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })];
cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]);
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
cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString());
cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString());
// Verbrauch
cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
const zusaetzlicheHeizquelle = Math.random() > 0.5;
if (zusaetzlicheHeizquelle) {
cy.get("[data-cy='zusaetzliche_heizquelle']").check();
// Brennstoff und Einheit 2
const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })];
cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true });
cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true });
// Verbrauch
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(), { force: true });
cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true });
}
// Warmwasser enthalten und bekannt
const warmwasserEnthalten = Math.random() > 0.5;
const anteilBekannt = Math.random() > 0.5;
if (warmwasserEnthalten) {
cy.get("input[name='warmwasser_enthalten']").check();
if (anteilBekannt) {
// Der Anteil ist bekannt, wir müssen ihn also angeben.
cy.get("input[name='warmwasser_anteil_bekannt']").check();
cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString());
if (zusaetzlicheHeizquelle) {
// Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben.
cy.get("input[name='anteil_warmwasser_2']").type(faker.number.int({ min: 0, max: 50 }).toString(), {force: true});
}
}
}
// Alternative Energieversorgungssysteme
if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check();
if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check();
if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check();
if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check();
// Gebäudetyp
cy.get("select[name='gebaeudetyp']").then(($dropdown) => {
const options = $dropdown.find('option');
// 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);
});
// Gebäudeteil
cy.get("select[name='gebaeudeteil']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
});
// Lüftung
cy.get("select[name='lueftung']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
});
// Kühlung
cy.get("select[name='kuehlung']").then(($dropdown) => {
const options = $dropdown.find('option');
// Select the option at the random index
cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string, { force: true });
});
// Leerstand
cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString());
// Heizungsanlage Daten
if (Math.random() > 0.5) cy.get("[data-cy='zentralheizung']").check();
if (Math.random() > 0.5) cy.get("[data-cy='einzelofen']").check();
if (Math.random() > 0.5) cy.get("[data-cy='durchlauf_erhitzer']").check();
if (Math.random() > 0.5) cy.get("[data-cy='standard_kessel']").check();
if (Math.random() > 0.5) cy.get("[data-cy='solarsystem_warmwasser']").check();
if (Math.random() > 0.5) cy.get("[data-cy='waermepumpe']").check();
if (Math.random() > 0.5) cy.get("[data-cy='niedertemperatur_kessel']").check();
if (Math.random() > 0.5) cy.get("[data-cy='brennwert_kessel']").check();
if (Math.random() > 0.5) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("[data-cy='heizungsrohre_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("[data-cy='zirkulation']").check();
// if (Math.random() > 0.5) cy.get("[data-cy='raum_temperatur_regler']").check();
// 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/2.jpeg", { subjectType: "input" });
// Fenster Daten
if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check();
if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check();
if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check();
if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check();
if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check();
if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check();
// Fenster Bilder
cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" });
cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" });
// Wärmedämmung Daten
if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check();
if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check();
// Wärmedämmung Bilder
cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" });
cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" });
// Gebäude Bild
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.
cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").click({ force: true });
cy.url().should("contain", "/kundendaten");
const email = faker.internet.email();
const passwort = "test1234";
const vorname = faker.person.firstName();
const nachname = faker.person.lastName();
const telefon = faker.phone.number()
const strasse = faker.location.streetAddress({ useFullAddress: true })
const plz = faker.location.zipCode("#####")
cy.get("input[name='vorname']").should("have.attr", "type", "text").type(vorname);
cy.get("input[name='name']").should("have.attr", "type", "text").type(nachname);
cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon);
// Rechnung
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`);
cy.get("input[name='rechnung_strasse']").should("have.attr", "type", "text").type(strasse);
cy.get("input[name='rechnung_plz']").should("have.attr", "type", "text").type(plz);
cy.get("[data-cy='plz-container']").children().first().click()
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email);
cy.get("[data-cy='paypal']").click()
cy.get("button[data-cy='bestellen']").click();
cy.get("a[data-cy='registrieren']").should("be.visible").click();
// Wir sind jetzt registriert und können uns nun einloggen.
// Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben.
cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname);
cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname);
cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email);
cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort);
cy.intercept({ method: "PUT", url: "**/api/user" }).as("signup")
cy.get("form[name='signup'] button[type='submit']").click();
cy.wait("@signup")
cy.get("form[name='login'] button[type='submit']").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.
})
})
});
});

View File

@@ -1,13 +1,27 @@
import fuelList from "#components/Ausweis/brennstoffListe.js"; import fuelList from "#components/Ausweis/brennstoffListe.js";
import { faker } from "@faker-js/faker"; import { faker } from "@faker-js/faker";
import { Enums } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js";
import "cypress-file-upload" import "cypress-file-upload"
import moment from "moment"; import moment from "moment";
describe("Verbrauchsausweis erstellen Schritt 1", () => { describe("Verbrauchsausweis erstellen Schritt 1", () => {
it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => { it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => {
const email = faker.internet.email();
const passwort = "test1234";
const vorname = faker.person.firstName();
const nachname = faker.person.lastName();
const telefon = faker.phone.number()
const strasse = faker.location.streetAddress({ useFullAddress: true })
const plz = faker.location.zipCode("#####")
const preLogin = Math.random() > 0.5;
if (preLogin) {
cy.signup(email, passwort, vorname, nachname)
cy.login(email, passwort)
}
cy.visit("/energieausweis-erstellen/verbrauchsausweis-wohngebaeude"); cy.visit("/energieausweis-erstellen/verbrauchsausweis-wohngebaeude");
cy.wait(2000); cy.wait(2000);
@@ -241,40 +255,42 @@ describe("Verbrauchsausweis erstellen Schritt 1", () => {
cy.url().should("contain", "/kundendaten"); cy.url().should("contain", "/kundendaten");
const email = faker.internet.email();
const passwort = "test1234";
const vorname = faker.person.firstName();
const nachname = faker.person.lastName();
const telefon = faker.phone.number()
const strasse = faker.location.streetAddress({ useFullAddress: true })
const plz = faker.location.zipCode("#####")
cy.get("input[name='vorname']").should("have.attr", "type", "text").type(vorname);
cy.get("input[name='name']").should("have.attr", "type", "text").type(nachname);
cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon); cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon);
// Rechnung // Rechnung
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`); if (preLogin) {
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").should("contain.value", `${vorname} ${nachname}`);
cy.get("input[name='vorname']").should("have.attr", "type", "text").should("contain.value", vorname);
cy.get("input[name='name']").should("have.attr", "type", "text").should("contain.value", nachname);
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").should("contain.value", email);
} else {
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`);
cy.get("input[name='vorname']").should("have.attr", "type", "text").type(vorname);
cy.get("input[name='name']").should("have.attr", "type", "text").type(nachname);
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email);
}
cy.get("input[name='rechnung_strasse']").should("have.attr", "type", "text").type(strasse); cy.get("input[name='rechnung_strasse']").should("have.attr", "type", "text").type(strasse);
cy.get("input[name='rechnung_plz']").should("have.attr", "type", "text").type(plz); cy.get("input[name='rechnung_plz']").should("have.attr", "type", "text").type(plz);
cy.get("[data-cy='plz-container']").children().first().click() cy.get("[data-cy='plz-container']").children().first().click()
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email);
cy.get("[data-cy='paypal']").click() cy.get("[data-cy='paypal']").click()
cy.get("button[data-cy='bestellen']").click(); cy.get("button[data-cy='bestellen']").click();
cy.get("a[data-cy='registrieren']").should("be.visible").click(); if (!preLogin) {
cy.get("a[data-cy='registrieren']").should("be.visible").click();
// Wir sind jetzt registriert und können uns nun einloggen. // Wir sind jetzt registriert und können uns nun einloggen.
// Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben. // Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben.
cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname); cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname);
cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname); cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname);
cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email); cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email);
cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort); cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort);
cy.get("form[name='signup'] button[type='submit']").click(); cy.intercept({ method: "PUT", url: "**/api/user" }).as("signup")
cy.get("form[name='login'] button[type='submit']").click(); cy.get("form[name='signup'] button[type='submit']").click();
cy.wait("@signup")
cy.get("form[name='login'] button[type='submit']").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

View File

@@ -1,37 +1,40 @@
/// <reference types="cypress" /> /// <reference types="cypress" />
// ***********************************************
// This example commands.ts shows you how to import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "#lib/constants.js"
// create various custom commands and overwrite
// existing commands. Cypress.Commands.add("login", (email, passwort) => {
// cy.visit("/auth/login")
// For more comprehensive examples of custom
// commands please read more here: cy.get('input[name="email"]').type(email)
// https://on.cypress.io/custom-commands cy.get('input[name="passwort"]').type(passwort)
// ***********************************************
// cy.get('button[type="submit"]').click()
//
// -- This is a parent command -- cy.url().should("include", "/dashboard")
// Cypress.Commands.add('login', (email, password) => { ... })
// // Wir sollten nun einen Access Token und Refresh Token in unseren Cookies sehen.
// cy.getCookie(API_ACCESS_TOKEN_COOKIE_NAME).should("exist")
// -- This is a child command -- cy.getCookie(API_REFRESH_TOKEN_COOKIE_NAME).should("exist")
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) })
//
// Cypress.Commands.add("signup", (email, passwort, vorname, name) => {
// -- This is a dual command -- cy.visit("/auth/signup")
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
// cy.get('input[name="email"]').type(email)
// cy.get('input[name="passwort"]').type(passwort)
// -- This will overwrite an existing command -- cy.get('input[name="vorname"]').type(vorname)
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) cy.get('input[name="name"]').type(name)
//
// declare global { cy.get('button[type="submit"]').click()
// namespace Cypress {
// interface Chainable { cy.url().should("include", "/auth/login")
// login(email: string, password: string): Chainable<void> })
// drag(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
// dismiss(subject: string, options?: Partial<TypeOptions>): Chainable<Element> declare global {
// visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element> namespace Cypress {
// } interface Chainable {
// } login(email: string, passwort: string): Chainable<void>
// } signup(email: string, passwort: string, vorname: string, name: string): Chainable<void>
}
}
}

View File

@@ -1,10 +1,9 @@
import * as z from "zod" import * as z from "zod"
export const AnteilshaberSchema = z.object({ export const AnteilshaberSchema = z.object({
id: z.number().int(), id: z.string(),
benutzer_id: z.number().int(),
rolle: z.string().nullish(), rolle: z.string().nullish(),
privilegien: z.bigint().nullish(), privilegien: z.bigint().nullish(),
uid: z.string(), benutzer_id: z.string(),
objekt_id: z.number().int(), objekt_id: z.string(),
}) })

View File

@@ -1,7 +1,7 @@
import * as z from "zod" import * as z from "zod"
export const ApiRequestsSchema = z.object({ export const ApiRequestsSchema = z.object({
id: z.number().int(), id: z.string(),
date: z.date(), date: z.date(),
ip: z.string(), ip: z.string(),
method: z.string(), method: z.string(),
@@ -10,5 +10,5 @@ export const ApiRequestsSchema = z.object({
responseTime: z.number(), responseTime: z.number(),
responseSize: z.number().int(), responseSize: z.number().int(),
userAgent: z.string(), userAgent: z.string(),
user_id: z.number().int().nullish(), user_id: z.string().nullish(),
}) })

View File

@@ -2,9 +2,8 @@ import * as z from "zod"
import { Ausweisart, Heizungsstatus, Heizungsstatus, Lueftungskonzept } from "@prisma/client" import { Ausweisart, Heizungsstatus, Heizungsstatus, Lueftungskonzept } from "@prisma/client"
export const AufnahmeSchema = z.object({ export const AufnahmeSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string().describe("UID der Gebäude Aufnahme"), benutzer_id: z.string().nullish(),
benutzer_id: z.number().int().nullish(),
ausweisart: z.nativeEnum(Ausweisart).describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen").nullish(), ausweisart: z.nativeEnum(Ausweisart).describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen").nullish(),
gebaeudetyp: z.string().describe("Art des Gebäudes und seiner primären Nutzungsart").nullish(), gebaeudetyp: z.string().describe("Art des Gebäudes und seiner primären Nutzungsart").nullish(),
gebaeudeteil: z.string().describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil").nullish(), gebaeudeteil: z.string().describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil").nullish(),
@@ -60,5 +59,5 @@ export const AufnahmeSchema = z.object({
aussenwand_min_12cm_gedaemmt: z.boolean().describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen").nullish(), aussenwand_min_12cm_gedaemmt: z.boolean().describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen").nullish(),
dachgeschoss_min_12cm_gedaemmt: z.boolean().describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen").nullish(), dachgeschoss_min_12cm_gedaemmt: z.boolean().describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen").nullish(),
oberste_geschossdecke_min_12cm_gedaemmt: z.boolean().describe("Falls die oberste Geschossdecke des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen").nullish(), oberste_geschossdecke_min_12cm_gedaemmt: z.boolean().describe("Falls die oberste Geschossdecke des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen").nullish(),
objekt_id: z.number().int(), objekt_id: z.string(),
}) })

View File

@@ -2,8 +2,7 @@ import * as z from "zod"
import { Ausstellgrund } from "@prisma/client" import { Ausstellgrund } from "@prisma/client"
export const BedarfsausweisGewerbeSchema = z.object({ export const BedarfsausweisGewerbeSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(), ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(),
keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(), keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(),
storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(), storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(),
@@ -20,8 +19,8 @@ export const BedarfsausweisGewerbeSchema = z.object({
fussbodenheizung: z.boolean().nullish(), fussbodenheizung: z.boolean().nullish(),
bauteilaktivierung: z.boolean().nullish(), bauteilaktivierung: z.boolean().nullish(),
klimatisierung: z.boolean().nullish(), klimatisierung: z.boolean().nullish(),
benutzer_id: z.number().int().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(),
aufnahme_id: z.number().int(), aufnahme_id: z.string(),
rechnung_id: z.number().int().nullish(), rechnung_id: z.string().nullish(),
geg_einpreisung_id: z.number().int().nullish(), geg_einpreisung_id: z.string().nullish(),
}) })

View File

@@ -1,11 +1,10 @@
import * as z from "zod" import * as z from "zod"
import { Ausstellgrund } from "@prisma/client" import { Ausstellgrund, AusweisTyp } from "@prisma/client"
export const BedarfsausweisWohnenSchema = z.object({ export const BedarfsausweisWohnenSchema = z.object({
id: z.number().int(), id: z.string(),
alte_ausweis_id: z.number().int().nullish(), alte_ausweis_id: z.number().int().nullish(),
uid: z.string(), benutzer_id: z.string().nullish(),
benutzer_id: z.number().int().nullish(),
ausstellgrund: z.nativeEnum(Ausstellgrund).nullish(), ausstellgrund: z.nativeEnum(Ausstellgrund).nullish(),
registriernummer: z.string().nullish(), registriernummer: z.string().nullish(),
alternative_heizung: z.boolean().nullish(), alternative_heizung: z.boolean().nullish(),
@@ -69,6 +68,7 @@ export const BedarfsausweisWohnenSchema = z.object({
kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(), kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(),
created_at: z.date(), created_at: z.date(),
updated_at: z.date(), updated_at: z.date(),
rechnung_id: z.number().int().nullish(), ausweistyp: z.nativeEnum(AusweisTyp),
aufnahme_id: z.number().int().describe("ID der korrespondierenden Gebäudeaufnahme"), rechnung_id: z.string().nullish(),
aufnahme_id: z.string().describe("ID der korrespondierenden Gebäudeaufnahme"),
}) })

View File

@@ -2,8 +2,7 @@ import * as z from "zod"
import { BenutzerRolle } from "@prisma/client" import { BenutzerRolle } from "@prisma/client"
export const BenutzerSchema = z.object({ export const BenutzerSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
name: z.string().nullish(), name: z.string().nullish(),
vorname: z.string().nullish(), vorname: z.string().nullish(),
email: z.string(), email: z.string(),

View File

@@ -2,9 +2,8 @@ import * as z from "zod"
import { BilderKategorie } from "@prisma/client" import { BilderKategorie } from "@prisma/client"
export const BildSchema = z.object({ export const BildSchema = z.object({
id: z.number().int(), id: z.string(),
kategorie: z.nativeEnum(BilderKategorie), kategorie: z.nativeEnum(BilderKategorie),
uid: z.string(),
name: z.string(), name: z.string(),
aufnahme_id: z.number().int().nullish(), aufnahme_id: z.string().nullish(),
}) })

View File

@@ -5,7 +5,7 @@ export const documenttemplatesSchema = z.object({
name: z.string(), name: z.string(),
shortdescription: z.string(), shortdescription: z.string(),
longdescription: z.string(), longdescription: z.string(),
user_id: z.number().int(), user_id: z.string(),
is_private: z.boolean(), is_private: z.boolean(),
documenttype: z.number().int(), documenttype: z.number().int(),
filename: z.string(), filename: z.string(),

View File

@@ -1,11 +1,10 @@
import * as z from "zod" import * as z from "zod"
export const EventSchema = z.object({ export const EventSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
date: z.date(), date: z.date(),
title: z.string(), title: z.string(),
description: z.string().nullish(), description: z.string().nullish(),
aufnahme_id: z.number().int(), aufnahme_id: z.string(),
benutzer_id: z.number().int().nullish(), benutzer_id: z.string().nullish(),
}) })

View File

@@ -2,8 +2,7 @@ import * as z from "zod"
import { Einpreisungsstatus } from "@prisma/client" import { Einpreisungsstatus } from "@prisma/client"
export const GEGEinpreisungSchema = z.object({ export const GEGEinpreisungSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
empfaenger: z.string().nullish(), empfaenger: z.string().nullish(),
strasse: z.string().nullish(), strasse: z.string().nullish(),
plz: z.string().nullish(), plz: z.string().nullish(),
@@ -18,5 +17,5 @@ export const GEGEinpreisungSchema = z.object({
versand_ort: z.string().nullish(), versand_ort: z.string().nullish(),
versand_zusatzzeile: z.string().nullish(), versand_zusatzzeile: z.string().nullish(),
status: z.nativeEnum(Einpreisungsstatus), status: z.nativeEnum(Einpreisungsstatus),
benutzer_id: z.number().int().describe("Die ID des Benutzers, der diese Einpreisung bekommt.").nullish(), benutzer_id: z.string().describe("Die ID des Benutzers, der diese Einpreisung bekommt.").nullish(),
}) })

View File

@@ -2,16 +2,15 @@ import * as z from "zod"
import { Ausstellgrund } from "@prisma/client" import { Ausstellgrund } from "@prisma/client"
export const GEGNachweisGewerbeSchema = z.object({ export const GEGNachweisGewerbeSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(), ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(),
keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(), keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(),
storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(), storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(),
bestellt: z.boolean().describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen").nullish(), bestellt: z.boolean().describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen").nullish(),
zurueckgestellt: z.boolean().describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen").nullish(), zurueckgestellt: z.boolean().describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen").nullish(),
beschreibung: z.string().describe("Beschreibung des Bauvorhabens").nullish(), beschreibung: z.string().describe("Beschreibung des Bauvorhabens").nullish(),
benutzer_id: z.number().int().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(),
aufnahme_id: z.number().int(), aufnahme_id: z.string(),
rechnung_id: z.number().int().nullish(), rechnung_id: z.string().nullish(),
geg_einpreisung_id: z.number().int().nullish(), geg_einpreisung_id: z.string().nullish(),
}) })

View File

@@ -2,16 +2,15 @@ import * as z from "zod"
import { Ausstellgrund } from "@prisma/client" import { Ausstellgrund } from "@prisma/client"
export const GEGNachweisWohnenSchema = z.object({ export const GEGNachweisWohnenSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(), ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(),
keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(), keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(),
storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(), storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(),
bestellt: z.boolean().describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen").nullish(), bestellt: z.boolean().describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen").nullish(),
zurueckgestellt: z.boolean().describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen").nullish(), zurueckgestellt: z.boolean().describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen").nullish(),
beschreibung: z.string().describe("Beschreibung des Bauvorhabens").nullish(), beschreibung: z.string().describe("Beschreibung des Bauvorhabens").nullish(),
benutzer_id: z.number().int().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(),
aufnahme_id: z.number().int(), aufnahme_id: z.string(),
rechnung_id: z.number().int().nullish(), rechnung_id: z.string().nullish(),
geg_einpreisung_id: z.number().int().nullish(), geg_einpreisung_id: z.string().nullish(),
}) })

View File

@@ -1,23 +1,23 @@
export * from "./anteilshaber" export * from "./anteilshaber.js"
export * from "./apirequests" export * from "./apirequests.js"
export * from "./aufnahme" export * from "./aufnahme.js"
export * from "./bedarfsausweisgewerbe" export * from "./bedarfsausweisgewerbe.js"
export * from "./bedarfsausweiswohnen" export * from "./bedarfsausweiswohnen.js"
export * from "./benutzer" export * from "./benutzer.js"
export * from "./bild" export * from "./bild.js"
export * from "./event" export * from "./event.js"
export * from "./gegeinpreisung" export * from "./gegeinpreisung.js"
export * from "./gegnachweisgewerbe" export * from "./gegnachweisgewerbe.js"
export * from "./gegnachweiswohnen" export * from "./gegnachweiswohnen.js"
export * from "./klimafaktoren" export * from "./klimafaktoren.js"
export * from "./objekt" export * from "./objekt.js"
export * from "./postleitzahlen" export * from "./postleitzahlen.js"
export * from "./rechnung" export * from "./rechnung.js"
export * from "./refreshtokens" export * from "./refreshtokens.js"
export * from "./tickets" export * from "./tickets.js"
export * from "./unterlage" export * from "./unterlage.js"
export * from "./verbrauchsausweisgewerbe" export * from "./verbrauchsausweisgewerbe.js"
export * from "./verbrauchsausweiswohnen" export * from "./verbrauchsausweiswohnen.js"
export * from "./documenttemplates" export * from "./documenttemplates.js"
export * from "./documenttypes" export * from "./documenttypes.js"
export * from "./tokens" export * from "./tokens.js"

View File

@@ -1,13 +1,12 @@
import * as z from "zod" import * as z from "zod"
export const ObjektSchema = z.object({ export const ObjektSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
benutzer_id: z.number().int().nullish(),
latitude: z.number().nullish(), latitude: z.number().nullish(),
longitude: z.number().nullish(), longitude: z.number().nullish(),
plz: z.string().describe("Postleitzahl des Gebäudes").nullish(), plz: z.string().describe("Postleitzahl des Gebäudes").nullish(),
ort: z.string().describe("Ort des Gebäudes").nullish(), ort: z.string().describe("Ort des Gebäudes").nullish(),
adresse: z.string().describe("Adresse (Straße und Hausnummer) des Gebäudes").nullish(), adresse: z.string().describe("Adresse (Straße und Hausnummer) des Gebäudes").nullish(),
erstellungsdatum: z.date().nullish(), erstellungsdatum: z.date().nullish(),
benutzer_id: z.string().nullish(),
}) })

View File

@@ -1,10 +1,8 @@
import * as z from "zod" import * as z from "zod"
import { Bezahlmethoden, Rechnungsstatus, Service, AusweisTyp } from "@prisma/client" import { Bezahlmethoden, Rechnungsstatus, Service } from "@prisma/client"
export const RechnungSchema = z.object({ export const RechnungSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
benutzer_id: z.number().int(),
empfaenger: z.string().nullish(), empfaenger: z.string().nullish(),
strasse: z.string().nullish(), strasse: z.string().nullish(),
plz: z.string().nullish(), plz: z.string().nullish(),
@@ -21,10 +19,10 @@ export const RechnungSchema = z.object({
bezahlmethode: z.nativeEnum(Bezahlmethoden), bezahlmethode: z.nativeEnum(Bezahlmethoden),
status: z.nativeEnum(Rechnungsstatus), status: z.nativeEnum(Rechnungsstatus),
services: z.nativeEnum(Service).array(), services: z.nativeEnum(Service).array(),
ausweistyp: z.nativeEnum(AusweisTyp),
betrag: z.number(), betrag: z.number(),
erstellt_am: z.date(), erstellt_am: z.date(),
bezahlt_am: z.date().nullish(), bezahlt_am: z.date().nullish(),
storniert_am: z.date().nullish(), storniert_am: z.date().nullish(),
transaktions_referenz: z.string().nullish(), transaktions_referenz: z.string().nullish(),
benutzer_id: z.string(),
}) })

View File

@@ -2,8 +2,8 @@ import * as z from "zod"
export const RefreshTokensSchema = z.object({ export const RefreshTokensSchema = z.object({
id: z.number().int(), id: z.number().int(),
benutzer_id: z.number().int(),
token: z.string(), token: z.string(),
ip: z.string(), ip: z.string(),
expiry: z.date(), expiry: z.date(),
benutzer_id: z.string(),
}) })

View File

@@ -8,9 +8,7 @@ const literalSchema = z.union([z.string(), z.number(), z.boolean()])
const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)])) const jsonSchema: z.ZodSchema<Json> = z.lazy(() => z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]))
export const TicketsSchema = z.object({ export const TicketsSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
benutzer_id: z.number().int().nullish(),
created_at: z.date(), created_at: z.date(),
updated_at: z.date().nullish(), updated_at: z.date().nullish(),
deleted_at: z.date().nullish(), deleted_at: z.date().nullish(),
@@ -19,6 +17,7 @@ export const TicketsSchema = z.object({
beschreibung: z.string(), beschreibung: z.string(),
metadata: jsonSchema, metadata: jsonSchema,
email: z.string(), email: z.string(),
bearbeiter_id: z.number().int().nullish(), bearbeiter_id: z.string().nullish(),
prioritaet: z.number().int().nullish(), prioritaet: z.number().int().nullish(),
benutzer_id: z.string().nullish(),
}) })

View File

@@ -3,7 +3,7 @@ import * as z from "zod"
export const tokensSchema = z.object({ export const tokensSchema = z.object({
id: z.number().int(), id: z.number().int(),
token: z.string(), token: z.string(),
user_id: z.number().int(), user_id: z.string(),
date_created: z.date(), date_created: z.date(),
last_used: z.date(), last_used: z.date(),
times_used: z.number().int(), times_used: z.number().int(),

View File

@@ -1,10 +1,9 @@
import * as z from "zod" import * as z from "zod"
export const UnterlageSchema = z.object({ export const UnterlageSchema = z.object({
id: z.number().int(), id: z.string(),
uid: z.string(),
name: z.string().nullish(), name: z.string().nullish(),
kategorie: z.string().nullish(), kategorie: z.string().nullish(),
mime: z.string().nullish(), mime: z.string().nullish(),
aufnahme_id: z.number().int().nullish(), aufnahme_id: z.string().nullish(),
}) })

View File

@@ -1,11 +1,9 @@
import * as z from "zod" import * as z from "zod"
import { Ausstellgrund } from "@prisma/client" import { Ausstellgrund, AusweisTyp } from "@prisma/client"
export const VerbrauchsausweisGewerbeSchema = z.object({ export const VerbrauchsausweisGewerbeSchema = z.object({
id: z.number().int(), id: z.string(),
alte_ausweis_id: z.number().int().nullish(), alte_ausweis_id: z.number().int().nullish(),
uid: z.string(),
benutzer_id: z.number().int().nullish(),
ausstellgrund: z.nativeEnum(Ausstellgrund).nullish(), ausstellgrund: z.nativeEnum(Ausstellgrund).nullish(),
registriernummer: z.string().nullish(), registriernummer: z.string().nullish(),
zusaetzliche_heizquelle: z.boolean().nullish(), zusaetzliche_heizquelle: z.boolean().nullish(),
@@ -50,6 +48,8 @@ export const VerbrauchsausweisGewerbeSchema = z.object({
kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(), kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(),
created_at: z.date(), created_at: z.date(),
updated_at: z.date(), updated_at: z.date(),
rechnung_id: z.number().int().nullish(), ausweistyp: z.nativeEnum(AusweisTyp),
aufnahme_id: z.number().int().describe("ID der korrespondierenden Gebäudeaufnahme"), benutzer_id: z.string().nullish(),
rechnung_id: z.string().nullish(),
aufnahme_id: z.string().describe("ID der korrespondierenden Gebäudeaufnahme"),
}) })

View File

@@ -1,11 +1,9 @@
import * as z from "zod" import * as z from "zod"
import { Ausstellgrund } from "@prisma/client" import { Ausstellgrund, AusweisTyp } from "@prisma/client"
export const VerbrauchsausweisWohnenSchema = z.object({ export const VerbrauchsausweisWohnenSchema = z.object({
id: z.number().int(), id: z.string().describe("ID des Ausweises"),
alte_ausweis_id: z.number().int().nullish(), alte_ausweis_id: z.number().int().nullish(),
uid: z.string().describe("UID des Ausweises"),
benutzer_id: z.number().int().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(),
ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(), ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(),
registriernummer: z.string().describe("Die Registriernummer des Ausweises").nullish(), registriernummer: z.string().describe("Die Registriernummer des Ausweises").nullish(),
zusaetzliche_heizquelle: z.boolean().describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen").nullish(), zusaetzliche_heizquelle: z.boolean().describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen").nullish(),
@@ -35,8 +33,10 @@ export const VerbrauchsausweisWohnenSchema = z.object({
prueftext: z.string().describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung").nullish(), prueftext: z.string().describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung").nullish(),
beschreibung: z.string().nullish(), beschreibung: z.string().nullish(),
kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(), kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(),
ausweistyp: z.nativeEnum(AusweisTyp),
created_at: z.date(), created_at: z.date(),
updated_at: z.date(), updated_at: z.date(),
rechnung_id: z.number().int().nullish(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(),
aufnahme_id: z.number().int().describe("ID der korrespondierenden Gebäudeaufnahme"), rechnung_id: z.string().nullish(),
aufnahme_id: z.string().describe("ID der korrespondierenden Gebäudeaufnahme"),
}) })

View File

@@ -18,6 +18,20 @@ const { title } = Astro.props;
--- ---
<script> <script>
import { H } from "highlight.run";
if (import.meta.env.PROD) {
H.init("1jdkoe52", {
serviceName: "online-energieausweis",
backendUrl: "https://highlight-backend.ibcornelsen.de/public",
tracingOrigins: true,
networkRecording: {
enabled: true,
recordHeadersAndBody: true
}
})
}
window.addEventListener("scroll", (event) => { window.addEventListener("scroll", (event) => {
const skala = document.getElementById("skala"); const skala = document.getElementById("skala");

View File

@@ -17,6 +17,22 @@ export interface Props {
const { title } = Astro.props; const { title } = Astro.props;
--- ---
<script>
import { H } from "highlight.run";
if (import.meta.env.PROD) {
H.init("1jdkoe52", {
serviceName: "online-energieausweis",
backendUrl: "https://highlight-backend.ibcornelsen.de/public",
tracingOrigins: true,
networkRecording: {
enabled: true,
recordHeadersAndBody: true
}
})
}
</script>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">

View File

@@ -34,6 +34,22 @@ const schema = JSON.stringify({
}); });
--- ---
<script>
import { H } from "highlight.run";
if (import.meta.env.PROD) {
H.init("1jdkoe52", {
serviceName: "online-energieausweis",
backendUrl: "https://highlight-backend.ibcornelsen.de/public",
tracingOrigins: true,
networkRecording: {
enabled: true,
recordHeadersAndBody: true
}
})
}
</script>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">
<head> <head>

View File

@@ -23,7 +23,7 @@ const { title, user } = Astro.props;
const objekte = await prisma.objekt.findMany({ const objekte = await prisma.objekt.findMany({
where: { where: {
benutzer: { benutzer: {
uid: user.uid id: user.id
} }
}, },
take: 10, take: 10,
@@ -71,6 +71,22 @@ const schema = JSON.stringify({
let lightTheme = Astro.cookies.get("theme")?.value === "light"; let lightTheme = Astro.cookies.get("theme")?.value === "light";
--- ---
<script>
import { H } from "highlight.run";
if (import.meta.env.PROD) {
H.init("1jdkoe52", {
serviceName: "online-energieausweis",
backendUrl: "https://highlight-backend.ibcornelsen.de/public",
tracingOrigins: true,
networkRecording: {
enabled: true,
recordHeadersAndBody: true
}
})
}
</script>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">
<head> <head>

View File

@@ -19,6 +19,20 @@ const { title } = Astro.props;
--- ---
<script> <script>
import { H } from "highlight.run";
if (import.meta.env.PROD) {
H.init("1jdkoe52", {
serviceName: "online-energieausweis",
backendUrl: "https://highlight-backend.ibcornelsen.de/public",
tracingOrigins: true,
networkRecording: {
enabled: true,
recordHeadersAndBody: true
}
})
}
/* /*
window.addEventListener("scroll", (event) => { window.addEventListener("scroll", (event) => {
let scroll = window.scrollY; let scroll = window.scrollY;

View File

@@ -5,4 +5,4 @@ export enum TokenType {
Verify Verify
} }
export type TokenData = { uid: string, typ: TokenType, exp: number } export type TokenData = { id: string, typ: TokenType, exp: number }

View File

@@ -6,22 +6,23 @@ export const API_REFRESH_TOKEN_COOKIE_NAME = "refreshToken";
export const API_UID_COOKIE_NAME = "uid"; export const API_UID_COOKIE_NAME = "uid";
export enum VALID_UUID_PREFIXES { export enum VALID_UUID_PREFIXES {
"auf" = "Aufnahme", Aufnahme = "AU",
"obj" = "Objekt", Objekt = "OB",
"vaw" = "Verbrauchsausweis Wohnen", VerbrauchsausweisWohnen = "VW",
"vag" = "Verbrauchsausweis Gewerbe", VerbrauchsausweisGewerbe = "VG",
"baw" = "Bedarfsausweis Wohnen", BedarfsausweisWohnen = "BW",
"bag" = "Bedarfsausweis Gewerbe", BedarfsausweisGewerbe = "BG",
"usr" = "User", User = "US",
"ant" = "Anteilshaber", Anteilshaber = "AN",
"evt" = "Event", Event = "EV",
"img" = "Bild", Bild = "BI",
"inv" = "Rechnung", Rechnung = "RE",
"tkt" = "Ticket", Ticket = "TK",
"pln" = "Gebäude Plan", GebaeudePlan = "PN",
"gnw" = "GEG Nachweis Wohnen", GEGNachweisWohnen = "GW",
"gng" = "GEG Nachweis Gewerbe", GEGNachweisGewerbe = "GG",
"gge" = "GEG Einpreisung", GEGEinpreisung = "GE",
Unterlage = "UN"
} }
/** /**

37
src/lib/db.ts Normal file
View File

@@ -0,0 +1,37 @@
import * as crypto from "crypto";
/**
* Generiert eine ID bestimmter Länge für die Datenbank, Implementierung kopiert von https://www.npmjs.com/package/crypto-random-string
* @param length Die Länge der generierten ID
* @param prefix Ein Optionales Präfix, welches vor die ID geschrieben wird, damit diese identifizierbar bleibt.
* @returns Die generierte ID
*/
export function generatePrefixedId(length: number, prefix: string = ""): string {
// Generating entropy is faster than complex math operations, so we use the simplest way
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
const characterCount = characters.length;
const maxValidSelector = (Math.floor(0x1_00_00 / characterCount) * characterCount) - 1; // Using values above this will ruin distribution when using modular division
const entropyLength = 2 * Math.ceil(1.1 * length); // Generating a bit more than required so chances we need more than one pass will be really low
let string = '';
let stringLength = 0;
while (stringLength < length) { // In case we had many bad values, which may happen for character sets of size above 0x8000 but close to it
const entropy = crypto.randomBytes(entropyLength);
let entropyPosition = 0;
while (entropyPosition < entropyLength && stringLength < length) {
const entropyValue = readUInt16LE(entropy, entropyPosition);
entropyPosition += 2;
if (entropyValue > maxValidSelector) { // Skip values which will ruin distribution when using modular division
continue;
}
string += characters[entropyValue % characterCount];
stringLength++;
}
}
return prefix + string;
}
const readUInt16LE = (uInt8Array: Buffer<ArrayBufferLike>, offset: number) => uInt8Array[offset] + (uInt8Array[offset + 1] << 8);

View File

@@ -67,7 +67,7 @@ export async function checkAuthorizationHeader(authorization: string) {
const user = await prisma.benutzer.findUnique({ const user = await prisma.benutzer.findUnique({
where: { where: {
uid: payload.uid id: payload.id
} }
}) })

View File

@@ -1,14 +1,11 @@
import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.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, StandardFonts } from "pdf-lib";
import { xml2pdf } from "./elements/xml2pdf.js"; import { xml2pdf } from "./elements/xml2pdf.js";
import moment from "moment"; import moment from "moment";
import { Enums, Heizungsstatus } from "#lib/server/prisma.js"; import { Enums, Heizungsstatus } from "#lib/server/prisma.js";
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
import { fileURLToPath } from "url";
import { copyPage } from "./utils/copyPage.js"; import { copyPage } from "./utils/copyPage.js";
import { PERSISTENT_DIR } from "#lib/server/constants.js";
/* -------------------------------- Pdf Tools ------------------------------- */ /* -------------------------------- Pdf Tools ------------------------------- */
@@ -78,7 +75,7 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
<text size="12" lineHeight="14">${benutzer.plz} ${benutzer.ort}</text> <text size="12" lineHeight="14">${benutzer.plz} ${benutzer.ort}</text>
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}"> <flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
<text size="12" font="bold">Datenblatt Energieausweis</text> <text size="12" font="bold">Datenblatt Energieausweis</text>
<text size="12">Ausweis ID: ${ausweis.uid}</text> <text size="12">Ausweis ID: ${ausweis.id}</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: ${objekt.adresse}, ${objekt.plz} ${objekt.ort}</text> <text size="12" lineHeight="14">Adresse: ${objekt.adresse}, ${objekt.plz} ${objekt.ort}</text>
@@ -363,8 +360,8 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
continue; continue;
} }
if (bild.uid) { if (bild.id) {
image = `<img src="${bild.uid}.jpg" width="${(pages[2].getWidth() - 120) / 3.1}" height="${(pages[2].getHeight() - marginY * 2) / 4}" />` image = `<img src="${bild.id}.jpg" width="${(pages[2].getWidth() - 120) / 3.1}" height="${(pages[2].getHeight() - marginY * 2) / 4}" />`
} }
if (images.length > 0) { if (images.length > 0) {

View File

@@ -1,15 +1,11 @@
import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { AufnahmeClient, BenutzerClient, BildClient, 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, StandardFonts } from "pdf-lib";
import { checkbox, flex, text } from "./elements/index.js";
import { xml2pdf } from "./elements/xml2pdf.js"; import { xml2pdf } from "./elements/xml2pdf.js";
import moment from "moment"; import moment from "moment";
import { BilderKategorie, Enums, Heizungsstatus } from "#lib/server/prisma.js"; import { Enums, Heizungsstatus } from "#lib/server/prisma.js";
import { fileURLToPath } from "url";
import { copyPage } from "./utils/copyPage.js"; import { copyPage } from "./utils/copyPage.js";
import { PERSISTENT_DIR } from "#lib/server/constants.js";
import { shortenUID } from "#server/lib/hash.js";
/* -------------------------------- Pdf Tools ------------------------------- */ /* -------------------------------- Pdf Tools ------------------------------- */
@@ -53,7 +49,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
const innerWidth = pages[0].getWidth() - marginX * 2; const innerWidth = pages[0].getWidth() - marginX * 2;
const id = shortenUID(ausweis.uid); const id = ausweis.id;
const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}"> const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}">
<text size="12" lineHeight="14">${benutzer.vorname} ${benutzer.name}</text> <text size="12" lineHeight="14">${benutzer.vorname} ${benutzer.name}</text>
@@ -309,8 +305,8 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
continue; continue;
} }
if (bild.uid) { if (bild.id) {
image = `<img src="${bild.uid}.jpg" width="${(pages[2].getWidth() - 120) / 3.1}" height="${(pages[2].getHeight() - marginY * 2) / 4}" />` image = `<img src="${bild.id}.jpg" width="${(pages[2].getWidth() - 120) / 3.1}" height="${(pages[2].getHeight() - marginY * 2) / 4}" />`
} }
if (images.length > 0) { if (images.length > 0) {

View File

@@ -1,4 +1,4 @@
import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js"; import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js"; import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
import { Enums } from "#lib/server/prisma.js"; import { Enums } from "#lib/server/prisma.js";
@@ -8,8 +8,6 @@ import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib"
import { addCheckMark } from "./utils/checkbox.js"; import { addCheckMark } from "./utils/checkbox.js";
import { addText } from "./utils/text.js"; import { addText } from "./utils/text.js";
import { addAnsichtsausweisLabel, addDatumGEG } from "./utils/helpers.js"; import { addAnsichtsausweisLabel, addDatumGEG } from "./utils/helpers.js";
import { PERSISTENT_DIR } from "#lib/server/constants.js";
import { fileURLToPath } from "url";
import { getS3File } from "#lib/s3.js"; import { getS3File } from "#lib/s3.js";
@@ -143,7 +141,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
if (bild) { if (bild) {
const file = await getS3File("ibc-images", `${bild.uid}.jpg`); const file = await getS3File("ibc-images", `${bild.id}.jpg`);
if (file) { if (file) {
let image: PDFImage; let image: PDFImage;

View File

@@ -149,7 +149,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude); const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
if (bild) { if (bild) {
const file = await getS3File("ibc-images", `${bild.uid}.jpg`); const file = await getS3File("ibc-images", `${bild.id}.jpg`);
if (file) { if (file) {
let image: PDFImage; let image: PDFImage;

View File

@@ -7,10 +7,10 @@ import { Enums, prisma } from "#lib/server/prisma.js";
/** /**
* Gibt den richtigen Prisma Adapter für die Ausweisart basierend auf der UID zurück, oder null bei einer falschen UID. * Gibt den richtigen Prisma Adapter für die Ausweisart basierend auf der UID zurück, oder null bei einer falschen UID.
* @param uid Die Ausweis UID * @param id Die Ausweis UID
*/ */
export function getPrismaAusweisAdapter(uid: string) { export function getPrismaAusweisAdapter(id: string) {
const ausweisart = getAusweisartFromUUID(uid); const ausweisart = getAusweisartFromUUID(id);
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
return prisma.verbrauchsausweisWohnen return prisma.verbrauchsausweisWohnen

33
src/lib/server/db.ts Normal file
View File

@@ -0,0 +1,33 @@
import { Aufnahme, Bild, Objekt, prisma, VerbrauchsausweisWohnen } from "./prisma.js";
export async function getVerbrauchsausweisWohnen(id: string): Promise<VerbrauchsausweisWohnen | null> {
return await prisma.verbrauchsausweisWohnen.findUnique({
where: {
id
}
})
}
export async function getAufnahme(id: string): Promise<Aufnahme | null> {
return await prisma.aufnahme.findUnique({
where: {
id
}
})
}
export async function getObjekt(id: string): Promise<Objekt | null> {
return await prisma.objekt.findUnique({
where: {
id
}
})
}
export async function getBilder(aufnahme_id: string): Promise<Bild[]> {
return await prisma.bild.findMany({
where: {
aufnahme_id
}
})
}

View File

@@ -1,30 +1,29 @@
import { shortenUID } from "#server/lib/hash.js";
import { BedarfsausweisWohnen, Enums, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "../prisma.js"; import { BedarfsausweisWohnen, Enums, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "../prisma.js";
export function getPaymentSuccessSubject(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) { export function getPaymentSuccessSubject(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) {
const id = shortenUID(ausweis.uid); const id = ausweis.id;
let subject: string = ""; let subject: string = "";
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen (ID: ${id})`; subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen (ID: ${id})`;
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen mit Beratung (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen mit Beratung (ID: ${id})`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen - offline Service (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen - offline Service (ID: ${id})`
} }
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe (ID: ${id})`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe mit Beratung (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe mit Beratung (ID: ${id})`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe - offline Service (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe - offline Service (ID: ${id})`
} }
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen (ID: ${id})`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen mit Beratung (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen mit Beratung (ID: ${id})`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen - offline Service (ID: ${id})` subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen - offline Service (ID: ${id})`
} }
} }
@@ -33,7 +32,7 @@ export function getPaymentSuccessSubject(ausweis: VerbrauchsausweisWohnen | Verb
} }
export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) { export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) {
const id = shortenUID(ausweis.uid); const id = ausweis.id;
let body: string = ""; let body: string = "";
@@ -61,7 +60,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p> Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
@@ -85,7 +84,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p> Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
@@ -134,7 +133,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p> Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
@@ -158,7 +157,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p> Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
@@ -207,7 +206,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p> Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
@@ -231,7 +230,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
Bitte antworten Sie auf diese E-Mail und schicken uns Grundriss- und Ansichtspläne Ihres Gebäudes zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p> Bitte antworten Sie auf diese E-Mail und schicken uns Grundriss- und Ansichtspläne Ihres Gebäudes zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
@@ -262,7 +261,7 @@ export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | Verbrau
} }
export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) { export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) {
const id = shortenUID(ausweis.uid); const id = ausweis.id;
let body: string = ""; let body: string = "";
@@ -290,7 +289,7 @@ export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p> Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
@@ -314,7 +313,7 @@ export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p> Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
@@ -363,7 +362,7 @@ export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p> Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
@@ -387,7 +386,7 @@ export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p> Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
@@ -436,7 +435,7 @@ export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { if (ausweis.ausweistyp === Enums.AusweisTyp.Beratung) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p> Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
@@ -460,7 +459,7 @@ export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | Verbrau
<br> <br>
fax 040 · 209339859 fax 040 · 209339859
</p>` </p>`
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { } else if (ausweis.ausweistyp === Enums.AusweisTyp.Offline) {
body = ` body = `
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br> <p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
Bitte antworten Sie auf diese E-Mail und schicken uns Grundriss- und Ansichtspläne Ihres Gebäudes zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p> Bitte antworten Sie auf diese E-Mail und schicken uns Grundriss- und Ansichtspläne Ihres Gebäudes zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>

View File

@@ -10,7 +10,6 @@ import {
import { prisma } from "#lib/server/prisma.js"; import { prisma } from "#lib/server/prisma.js";
import { getAnsichtsausweis } from "../ausweis.js"; import { getAnsichtsausweis } from "../ausweis.js";
import Mail from "nodemailer/lib/mailer/index.js"; import Mail from "nodemailer/lib/mailer/index.js";
import { shortenUID } from "#server/lib/hash.js";
import { getPaymentSuccessSubject } from "./helpers.js"; import { getPaymentSuccessSubject } from "./helpers.js";
import { getPaymentInvoiceBody } from "./helpers.js"; import { getPaymentInvoiceBody } from "./helpers.js";
@@ -33,7 +32,7 @@ export async function sendInvoiceMail(
return; return;
} }
const ausweisart = getAusweisartFromUUID(ausweis.uid); const ausweisart = getAusweisartFromUUID(ausweis.id);
if (!ausweisart) { if (!ausweisart) {
return return
@@ -41,10 +40,9 @@ export async function sendInvoiceMail(
const attachments: Mail.Attachment[] = []; const attachments: Mail.Attachment[] = [];
const id = shortenUID(ausweis.uid) const id = ausweis.id;
if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen && ausweis.ausweistyp === Enums.AusweisTyp.Standard) {
if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen && rechnung.ausweistyp === Enums.AusweisTyp.Standard) {
const ansichtsausweis = await getAnsichtsausweis( const ansichtsausweis = await getAnsichtsausweis(
ausweis, ausweis,
aufnahme, aufnahme,

View File

@@ -9,7 +9,6 @@ import {
import { prisma } from "#lib/server/prisma.js"; import { prisma } from "#lib/server/prisma.js";
import { getAnsichtsausweis } from "../ausweis.js"; import { getAnsichtsausweis } from "../ausweis.js";
import Mail from "nodemailer/lib/mailer/index.js"; import Mail from "nodemailer/lib/mailer/index.js";
import { shortenUID } from "#server/lib/hash.js";
import { getPaymentSuccessSubject } from "./helpers.js"; import { getPaymentSuccessSubject } from "./helpers.js";
import { getPaymentSuccessBody } from "./helpers.js"; import { getPaymentSuccessBody } from "./helpers.js";
@@ -33,7 +32,7 @@ export async function sendPaymentSuccessMail(
} }
let info: string = ""; let info: string = "";
const ausweisart = getAusweisartFromUUID(ausweis.uid); const ausweisart = getAusweisartFromUUID(ausweis.id);
if (!ausweisart) { if (!ausweisart) {
return; return;
@@ -41,9 +40,9 @@ export async function sendPaymentSuccessMail(
const attachments: Mail.Attachment[] = []; const attachments: Mail.Attachment[] = [];
const id = shortenUID(ausweis.uid) const id = ausweis.id
if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen && rechnung.ausweistyp === Enums.AusweisTyp.Standard) { if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen && ausweis.ausweistyp === Enums.AusweisTyp.Standard) {
const ansichtsausweis = await getAnsichtsausweis( const ansichtsausweis = await getAnsichtsausweis(
ausweis, ausweis,
aufnahme, aufnahme,

18
src/lib/tryCatch.ts Normal file
View File

@@ -0,0 +1,18 @@
// Types for the result object with discriminated union
type Success<T> = [T, null]
type Failure<E> = [null, E];
type Result<T, E = Error> = Success<T> | Failure<E>;
// Main wrapper function
export async function tryCatch<T, E = Error>(
promise: Promise<T>,
): Promise<Result<T, E>> {
try {
const data = await promise;
return [data, null];
} catch (error) {
return [null, error as E];
}
}

View File

@@ -24,7 +24,7 @@
BedarfsausweisWohnenClient, BedarfsausweisWohnenClient,
BenutzerClient, BenutzerClient,
ObjektClient, ObjektClient,
UploadedGebaeudeBild, BildClient,
AufnahmeClient AufnahmeClient
} from "#components/Ausweis/types.js"; } from "#components/Ausweis/types.js";
@@ -35,7 +35,7 @@
export let aufnahme: AufnahmeClient export let aufnahme: AufnahmeClient
export let user: BenutzerClient = {} as BenutzerClient; export let user: BenutzerClient = {} as BenutzerClient;
export let ausweistyp: Enums.AusweisTyp export let ausweistyp: Enums.AusweisTyp
export let bilder: UploadedGebaeudeBild[] = [] export let bilder: BildClient[] = []
export let uid: string; export let uid: string;
if (!uid && (!ausweis.updated_at || moment(localStorage.getItem("bedarfsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) { if (!uid && (!ausweis.updated_at || moment(localStorage.getItem("bedarfsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) {

View File

@@ -50,7 +50,6 @@
const result = await api.objekt.PUT.fetch({ const result = await api.objekt.PUT.fetch({
adresse: objekt.adresse, adresse: objekt.adresse,
erstellungsdatum: new Date(),
latitude: 0, latitude: 0,
longitude: 0, longitude: 0,
ort: objekt.ort, ort: objekt.ort,
@@ -78,7 +77,7 @@
objekte.push({ objekte.push({
...objekt, ...objekt,
aufnahmen: [], aufnahmen: [],
uid: result.uid id: result.id
}) })
objekt = { objekt = {

View File

@@ -40,7 +40,6 @@
export let rechnung: RechnungClient | null = null; export let rechnung: RechnungClient | null = null;
export let ausweisart: Enums.Ausweisart; export let ausweisart: Enums.Ausweisart;
export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal;
export let ausweistyp: Enums.AusweisTyp = Enums.AusweisTyp.Standard;
let email = localStorage.getItem("kundendaten.email") || user.email || ""; let email = localStorage.getItem("kundendaten.email") || user.email || "";
let vorname = localStorage.getItem("kundendaten.vorname") || user.vorname || ""; let vorname = localStorage.getItem("kundendaten.vorname") || user.vorname || "";
@@ -118,7 +117,7 @@
let prices = PRICES[ausweisart]; let prices = PRICES[ausweisart];
let basePrice: number = prices[ausweistyp]; let basePrice: number = prices[ausweis.ausweistyp];
$: price = $: price =
basePrice + basePrice +
@@ -129,17 +128,17 @@
const zurueck = { const zurueck = {
[Enums.Ausweisart.VerbrauchsausweisWohnen]: [Enums.Ausweisart.VerbrauchsausweisWohnen]:
`/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.uid}`, `/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.id}`,
[Enums.Ausweisart.VerbrauchsausweisGewerbe]: [Enums.Ausweisart.VerbrauchsausweisGewerbe]:
`/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`, `/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.id}`,
[Enums.Ausweisart.BedarfsausweisWohnen]: [Enums.Ausweisart.BedarfsausweisWohnen]:
`/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`, `/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.id}`,
[Enums.Ausweisart.GEGNachweisWohnen]: [Enums.Ausweisart.GEGNachweisWohnen]:
`/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`, `/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.id}`,
[Enums.Ausweisart.GEGNachweisGewerbe]: [Enums.Ausweisart.GEGNachweisGewerbe]:
`/angebot-anfragen/geg-nachweis-gewerbe-anfragen?uid=${ausweis.uid}`, `/angebot-anfragen/geg-nachweis-gewerbe-anfragen?uid=${ausweis.id}`,
[Enums.Ausweisart.BedarfsausweisGewerbe]: [Enums.Ausweisart.BedarfsausweisGewerbe]:
`/angebot-anfragen/bedarfsausweis-gewerbe-anfragen?uid=${ausweis.uid}`, `/angebot-anfragen/bedarfsausweis-gewerbe-anfragen?uid=${ausweis.id}`,
}[ausweisart]; }[ausweisart];
async function anfordern() { async function anfordern() {
@@ -238,11 +237,11 @@
window.history.pushState( window.history.pushState(
{}, {},
"", "",
`${location.pathname}?uid=${ausweis.uid}` `${location.pathname}?uid=${ausweis.id}`
); );
localStorage.clear(); localStorage.clear();
window.location.href = `/speichern-erfolgreich?uid=${ausweis.uid}` window.location.href = `/speichern-erfolgreich?id=${ausweis.id}`
} }
} }
@@ -295,10 +294,10 @@
} }
try { try {
let uid: string, checkout_url: string | undefined; let id: string, checkout_url: string | undefined;
if (rechnung) { if (rechnung) {
const result = await api.rechnung._uid.PATCH.fetch({ const result = await api.rechnung._id.PATCH.fetch({
bezahlmethode: aktiveBezahlmethode, bezahlmethode: aktiveBezahlmethode,
abweichende_versand_adresse: abweichende_versand_adresse, abweichende_versand_adresse: abweichende_versand_adresse,
empfaenger: empfaenger, empfaenger: empfaenger,
@@ -313,14 +312,14 @@
versand_zusatzzeile: versand_zusatzzeile versand_zusatzzeile: versand_zusatzzeile
}, { }, {
params: { params: {
uid: rechnung.uid id: rechnung.id
}, },
headers: { headers: {
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`, Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
}, },
}) })
uid = result.uid id = result.id
checkout_url = result.checkout_url checkout_url = result.checkout_url
} else { } else {
const result = await api.rechnung.PUT.fetch( const result = await api.rechnung.PUT.fetch(
@@ -340,8 +339,7 @@
versand_plz: versand_plz, versand_plz: versand_plz,
versand_ort: versand_ort, versand_ort: versand_ort,
telefon: telefon, telefon: telefon,
ausweis_uid: ausweis.uid, ausweis_id: ausweis.id
ausweistyp,
}, },
{ {
headers: { headers: {
@@ -350,7 +348,7 @@
} }
); );
uid = result.uid; id = result.id;
checkout_url = result.checkout_url; checkout_url = result.checkout_url;
} }
@@ -358,7 +356,7 @@
localStorage.clear(); localStorage.clear();
if (aktiveBezahlmethode === Enums.Bezahlmethoden.rechnung) { if (aktiveBezahlmethode === Enums.Bezahlmethoden.rechnung) {
window.location.href = `/payment/success?r=${uid}&a=${ausweis.uid}`; window.location.href = `/payment/success?r=${id}&a=${ausweis.id}`;
} else { } else {
window.location.href = checkout_url as string; window.location.href = checkout_url as string;
} }
@@ -431,10 +429,11 @@
active={1} active={1}
steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]} steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}
{ausweisart} {ausweisart}
ausweistyp={ausweis.ausweistyp}
anliegen={"Angebot anfragen"} anliegen={"Angebot anfragen"}
/> />
{:else} {:else}
<Progressbar active={1} {ausweisart} anliegen={"Energieausweis erstellen"} /> <Progressbar active={1} {ausweisart} ausweistyp={ausweis.ausweistyp} anliegen={"Energieausweis erstellen"} />
{/if} {/if}
</div> </div>
@@ -845,11 +844,11 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
<div class="ProduktKostenTabelle"> <div class="ProduktKostenTabelle">
<div class="zeile betrag"> <div class="zeile betrag">
{#if ausweistyp === Enums.AusweisTyp.Standard} {#if ausweis.ausweistyp === Enums.AusweisTyp.Standard}
<span>Netto-Preis Energieausweis</span> <span>Netto-Preis Energieausweis</span>
{:else if ausweistyp === Enums.AusweisTyp.Beratung} {:else if ausweis.ausweistyp === Enums.AusweisTyp.Beratung}
<span>Energieausweis inkl. Beratung</span> <span>Energieausweis inkl. Beratung</span>
{:else if ausweistyp === Enums.AusweisTyp.Offline} {:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline}
<span>Energieausweis Offline</span> <span>Energieausweis Offline</span>
{/if} {/if}
<span>:</span> <span>:</span>

View File

@@ -14,7 +14,7 @@
import Bereich from "#components/labels/Bereich.svelte"; import Bereich from "#components/labels/Bereich.svelte";
import StromVerbrauch from "#components/Ausweis/StromVerbrauch.svelte"; import StromVerbrauch from "#components/Ausweis/StromVerbrauch.svelte";
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js"; import { AufnahmeClient, ObjektClient, BildClient, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
import { BenutzerClient } from "#components/Ausweis/types.js"; import { BenutzerClient } from "#components/Ausweis/types.js";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte"; import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
import { Enums } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js";
@@ -46,7 +46,7 @@
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let ausweistyp: Enums.AusweisTyp; export let ausweistyp: Enums.AusweisTyp;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let bilder: UploadedGebaeudeBild[]; export let bilder: BildClient[];
const ausweisart = Enums.Ausweisart.VerbrauchsausweisGewerbe const ausweisart = Enums.Ausweisart.VerbrauchsausweisGewerbe
const anliegen = "Energieausweis erstellen"; const anliegen = "Energieausweis erstellen";

View File

@@ -41,29 +41,28 @@
import Overlay from "#components/Overlay.svelte"; import Overlay from "#components/Overlay.svelte";
import AusweisGespeichertModule from "#modules/VerbrauchsausweisWohnen/AusweisGespeichertModule.svelte"; import AusweisGespeichertModule from "#modules/VerbrauchsausweisWohnen/AusweisGespeichertModule.svelte";
import type { import type {
VerbrauchsausweisWohnenClient,
BenutzerClient, BenutzerClient,
UploadedGebaeudeBild, BildClient,
ObjektClient,
AufnahmeClient,
} from "#components/Ausweis/types.js"; } from "#components/Ausweis/types.js";
import { Enums } from "#lib/client/prisma.js"; import { Aufnahme, Enums, Objekt, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
import moment from "moment"; import moment from "moment";
// TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann // TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann
// wenn aufnahme oder objekt nicht existiert... // wenn aufnahme oder objekt nicht existiert...
export let ausweis: VerbrauchsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnen;
export let objekt: ObjektClient export let objekt: Objekt
export let aufnahme: AufnahmeClient export let aufnahme: Aufnahme
export let user: BenutzerClient; export let user: BenutzerClient | null;
export let bilder: UploadedGebaeudeBild[]; export let bilder: BildClient[];
export let ausweistyp: Enums.AusweisTyp; export let ausweistyp: Enums.AusweisTyp;
export let uid: string | null; export let id: string | null;
if (!uid && (!ausweis.updated_at || moment(localStorage.getItem("verbrauchsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) { // Falls die Daten im localStorage neuer sind als der Ausweis den wir von der Datenbank bekommen haben, benutzen wir lieber diese.
if (!id && (!ausweis.updated_at || moment(localStorage.getItem("verbrauchsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) {
const localStorageAusweis = localStorage.getItem("verbrauchsausweis-wohnen.ausweis"); const localStorageAusweis = localStorage.getItem("verbrauchsausweis-wohnen.ausweis");
if (localStorageAusweis) { if (localStorageAusweis) {
ausweis = JSON.parse(localStorageAusweis) ausweis = JSON.parse(localStorageAusweis)
ausweis.ausweistyp = ausweistyp;
} }
const localStorageAufnahme = localStorage.getItem("verbrauchsausweis-wohnen.aufnahme"); const localStorageAufnahme = localStorage.getItem("verbrauchsausweis-wohnen.aufnahme");
@@ -115,7 +114,7 @@ let skala: HTMLDivElement;
<Overlay bind:hidden={speichernOverlayHidden}> <Overlay bind:hidden={speichernOverlayHidden}>
<div class="bg-white w-full max-w-screen-sm py-8 px-8"> <div class="bg-white w-full max-w-screen-sm py-8 px-8">
<AusweisGespeichertModule uid={ausweis.uid}></AusweisGespeichertModule> <AusweisGespeichertModule uid={ausweis.id}></AusweisGespeichertModule>
</div> </div>
</Overlay> </Overlay>

View File

@@ -5,7 +5,7 @@
ObjektClient, ObjektClient,
AufnahmeClient, AufnahmeClient,
BenutzerClient, BenutzerClient,
UploadedGebaeudeBild, BildClient,
UnterlageClient, UnterlageClient,
GEGNachweisWohnenClient, GEGNachweisWohnenClient,
} from "#components/Ausweis/types.js"; } from "#components/Ausweis/types.js";
@@ -21,7 +21,7 @@
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let aufnahme: AufnahmeClient; export let aufnahme: AufnahmeClient;
export let user: BenutzerClient = {} as BenutzerClient; export let user: BenutzerClient = {} as BenutzerClient;
export let bilder: UploadedGebaeudeBild[] = []; export let bilder: BildClient[] = [];
export let plaene: UnterlageClient[] = []; export let plaene: UnterlageClient[] = [];
export let unterlagen: UnterlageClient[] = []; export let unterlagen: UnterlageClient[] = [];

Some files were not shown because too many files have changed in this diff Show More