diff --git a/bun.lock b/bun.lock index 940d99d4..1812b32f 100644 --- a/bun.lock +++ b/bun.lock @@ -39,6 +39,7 @@ "radix-svelte-icons": "^1.0.0", "sass": "^1.83.4", "siema": "^1.5.1", + "soap": "^1.1.8", "svelte": "^3.59.2", "svelte-dialogs": "^1.2.2", "svelte-preprocess": "^5.1.4", @@ -599,6 +600,10 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@xmldom/is-dom-node": ["@xmldom/is-dom-node@1.0.1", "", {}, "sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q=="], + + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.10", "", {}, "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw=="], + "abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], "accepts": ["accepts@1.3.8", "", { "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="], @@ -653,6 +658,8 @@ "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + "asap": ["asap@2.0.6", "", {}, "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="], + "asn1": ["asn1@0.2.6", "", { "dependencies": { "safer-buffer": "~2.1.0" } }, "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ=="], "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], @@ -681,6 +688,10 @@ "aws4": ["aws4@1.13.2", "", {}, "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="], + "axios": ["axios@1.7.9", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw=="], + + "axios-ntlm": ["axios-ntlm@1.4.3", "", { "dependencies": { "axios": "^1.7.9", "des.js": "^1.1.0", "dev-null": "^0.1.1", "js-md4": "^0.3.2" } }, "sha512-CS6WE8chZpEDKxv4IFwr5zcG7InMC6Ek0aj2n2tHauBh+8KiYVC4qMn3N2arjR5tnyILQuTGlI0mc83hgWxS4Q=="], + "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], "babel-runtime": ["babel-runtime@6.26.0", "", { "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g=="], @@ -897,6 +908,8 @@ "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "des.js": ["des.js@1.1.0", "", { "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg=="], + "destr": ["destr@2.0.3", "", {}, "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ=="], "destroy": ["destroy@1.2.0", "", {}, "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg=="], @@ -907,10 +920,14 @@ "deterministic-object-hash": ["deterministic-object-hash@2.0.2", "", { "dependencies": { "base-64": "^1.0.0" } }, "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ=="], + "dev-null": ["dev-null@0.1.1", "", {}, "sha512-nMNZG0zfMgmdv8S5O0TM5cpwNbGKRGPCxVsr0SmA3NZZy9CYBbuNLL0PD3Acx9e5LIUgwONXtM9kM6RlawPxEQ=="], + "devalue": ["devalue@5.1.1", "", {}, "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw=="], "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + "dezalgo": ["dezalgo@1.0.4", "", { "dependencies": { "asap": "^2.0.0", "wrappy": "1" } }, "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig=="], + "dfa": ["dfa@1.2.0", "", {}, "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="], "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], @@ -1069,6 +1086,8 @@ "flattie": ["flattie@1.1.1", "", {}, "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="], + "follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="], + "fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="], "foreground-child": ["foreground-child@3.3.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg=="], @@ -1079,6 +1098,8 @@ "form-render": ["form-render@2.5.2", "", { "dependencies": { "@ant-design/icons": "^4.0.2", "ahooks": "^3.7.5", "async-validator": "^3.5.1", "classnames": "^2.3.1", "color": "^3.1.2", "dayjs": "^1.11.7", "lodash-es": "^4.17.21", "rc-color-picker": "^1.2.6", "virtualizedtableforantd4": "^1.1.2", "zustand": "^4.1.5" }, "peerDependencies": { "antd": "4.x || 5.x", "react": ">=16.9.0", "react-dom": ">=16.9.0" } }, "sha512-pkDNK+n2CZt4Mz05Poq5+N9XpS9vmctTCPVHeadhypCbn7g+uTBYLWy7DWR02PyRVwP2YtKxSMj1wMn0SbnjNQ=="], + "formidable": ["formidable@3.5.2", "", { "dependencies": { "dezalgo": "^1.0.4", "hexoid": "^2.0.0", "once": "^1.4.0" } }, "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg=="], + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], "fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="], @@ -1113,7 +1134,7 @@ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], "getopts": ["getopts@2.3.0", "", {}, "sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA=="], @@ -1175,6 +1196,8 @@ "hastscript": ["hastscript@9.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw=="], + "hexoid": ["hexoid@2.0.0", "", {}, "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw=="], + "hotkeys-js": ["hotkeys-js@3.13.9", "", {}, "sha512-3TRCj9u9KUH6cKo25w4KIdBfdBfNRjfUwrljCLDC2XhmPDG0SjAZFcFZekpUZFmXzfYoGhFDcdx2gX/vUVtztQ=="], "html-entities": ["html-entities@2.5.2", "", {}, "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA=="], @@ -1287,6 +1310,8 @@ "js-interpolate": ["js-interpolate@1.3.2", "", { "peerDependencies": { "typescript": "^5.0.0" } }, "sha512-fIwAAEPJ1co7gUTZOozfONT130xVK3prHdghR57lbZvD+pLIEJ7vPlySSEMuhdu0iHqp45GcymWQ48vWAZ7haA=="], + "js-md4": ["js-md4@0.3.2", "", {}, "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA=="], + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "js-yaml": ["js-yaml@4.1.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="], @@ -1529,6 +1554,8 @@ "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], + "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], + "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -1923,6 +1950,8 @@ "sass": ["sass@1.83.4", "", { "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" }, "bin": { "sass": "sass.js" } }, "sha512-B1bozCeNQiOgDcLd33e2Cs2U60wZwjUUXzh900ZyQF5qUasvMdDZYbQ566LJu7cqR+sAHlAfO6RMkaID5s6qpA=="], + "sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="], + "scheduler": ["scheduler@0.19.1", "", { "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA=="], "screenfull": ["screenfull@5.2.0", "", {}, "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA=="], @@ -1979,6 +2008,8 @@ "slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="], + "soap": ["soap@1.1.8", "", { "dependencies": { "axios": "^1.7.9", "axios-ntlm": "^1.4.2", "debug": "^4.4.0", "formidable": "^3.5.2", "get-stream": "^6.0.1", "lodash": "^4.17.21", "sax": "^1.4.1", "strip-bom": "^3.0.0", "whatwg-mimetype": "4.0.0", "xml-crypto": "^6.0.0" } }, "sha512-fDNGyGsPkQP3bZX/366Ud5Kpjo9mCMh7ZKYIc3uipBEPPM2ZqCNkv1Z2/w0qpzpYFLL7do8WWwVUAjAwuUe1AQ=="], + "sorcery": ["sorcery@0.11.1", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.14", "buffer-crc32": "^1.0.0", "minimist": "^1.2.0", "sander": "^0.5.0" }, "bin": { "sorcery": "bin/sorcery" } }, "sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ=="], "source-map": ["source-map@0.7.4", "", {}, "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA=="], @@ -2191,6 +2222,8 @@ "webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + "whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -2211,6 +2244,10 @@ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + "xml-crypto": ["xml-crypto@6.0.0", "", { "dependencies": { "@xmldom/is-dom-node": "^1.0.1", "@xmldom/xmldom": "^0.8.10", "xpath": "^0.0.33" } }, "sha512-L3RgnkaDrHaYcCnoENv4Idzt1ZRj5U1z1BDH98QdDTQfssScx8adgxhd9qwyYo+E3fXbQZjEQH7aiXHLVgxGvw=="], + + "xpath": ["xpath@0.0.33", "", {}, "sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA=="], + "xxhash-wasm": ["xxhash-wasm@1.1.0", "", {}, "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="], "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], @@ -2285,6 +2322,8 @@ "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "axios/proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + "babel-runtime/regenerator-runtime": ["regenerator-runtime@0.11.1", "", {}, "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="], "body-parser/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], @@ -2315,12 +2354,16 @@ "eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@2.1.0", "", {}, "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="], + "execa/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "express/cookie": ["cookie@0.7.1", "", {}, "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="], "express/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], "express/send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], + "extract-zip/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "figures/escape-string-regexp": ["escape-string-regexp@1.0.5", "", {}, "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="], @@ -2421,6 +2464,8 @@ "sharp/color": ["color@4.2.3", "", { "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" } }, "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A=="], + "soap/strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], + "sorcery/buffer-crc32": ["buffer-crc32@1.0.0", "", {}, "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w=="], "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], diff --git a/package.json b/package.json index 97e73ccf..8b10c1fb 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "radix-svelte-icons": "^1.0.0", "sass": "^1.83.4", "siema": "^1.5.1", + "soap": "^1.1.8", "svelte": "^3.59.2", "svelte-dialogs": "^1.2.2", "svelte-preprocess": "^5.1.4", diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index b42731cb..4775fa04 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -4,16 +4,20 @@ export const createCaller = createCallerFactory({ "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), - "bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"), - "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), + "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), + "admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"), + "admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"), + "admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"), + "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid].ts"), - "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), + "bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"), + "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), - "geg-nachweis-verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/[uid].ts"), - "geg-nachweis-verbrauchsausweis-wohnen": await import("../src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/index.ts"), + "aufnahme": await import("../src/pages/api/aufnahme/index.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"), "objekt": await import("../src/pages/api/objekt/index.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"), "ticket": await import("../src/pages/api/ticket/index.ts"), @@ -24,7 +28,8 @@ export const createCaller = createCallerFactory({ "verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"), "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), - "objekt/[uid]/bilder": await import("../src/pages/api/objekt/[uid]/bilder.ts"), + "aufnahme/[uid]/bilder": await import("../src/pages/api/aufnahme/[uid]/bilder.ts"), + "aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid]/index.ts"), "objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"), "objekt/[uid]/unterlagen": await import("../src/pages/api/objekt/[uid]/unterlagen.ts"), }) \ No newline at end of file diff --git a/src/client/lib/ausweisSpeichern.ts b/src/client/lib/ausweisSpeichern.ts index 824e4958..06b192d5 100644 --- a/src/client/lib/ausweisSpeichern.ts +++ b/src/client/lib/ausweisSpeichern.ts @@ -104,12 +104,12 @@ export async function ausweisSpeichern( continue; } - const response = await api.objekt._uid.bilder.PUT.fetch({ + const response = await api.aufnahme._uid.bilder.PUT.fetch({ base64: bild.base64, kategorie: bild.kategorie }, { params: { - uid: objekt.uid + uid: aufnahme.uid }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` diff --git a/src/client/lib/bilderHochladen.ts b/src/client/lib/bilderHochladen.ts index fb9a78c8..0595e167 100644 --- a/src/client/lib/bilderHochladen.ts +++ b/src/client/lib/bilderHochladen.ts @@ -11,7 +11,7 @@ import Cookies from "js-cookie"; export async function bilderHochladen( images: (UploadedGebaeudeBild & { base64?: string, update?: boolean })[], - gebaeude_uid: string + aufnahme_uid: string ) { if (images.length == 0) { return images; @@ -57,12 +57,12 @@ export async function bilderHochladen( } }); } else { - const response = await api.objekt._uid.bilder.PUT.fetch({ + const response = await api.aufnahme._uid.bilder.PUT.fetch({ base64: image.base64, kategorie: image.kategorie as Enums.BilderKategorie }, { params: { - uid: gebaeude_uid + uid: aufnahme_uid }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` diff --git a/src/components/Ausweis/ButtonWeiterHilfe.svelte b/src/components/Ausweis/ButtonWeiterHilfe.svelte index a25123aa..6c6db1dd 100644 --- a/src/components/Ausweis/ButtonWeiterHilfe.svelte +++ b/src/components/Ausweis/ButtonWeiterHilfe.svelte @@ -16,6 +16,7 @@ export let ausweisart: Enums.Ausweisart async function ausweisAbschicken() { + loginAction = ausweisAbschicken if (!await validateAccessTokenClient()) { loginOverlayHidden = false; return @@ -35,7 +36,10 @@ } } + let loginAction: () => any = ausweisAbschicken; + async function spaeterWeitermachen() { + loginAction = spaeterWeitermachen; if (!await validateAccessTokenClient()) { loginOverlayHidden = false; return @@ -51,6 +55,8 @@ "", `${location.pathname}?uid=${ausweis.uid}` ); + + window.location.href = `/speichern-erfolgreich?uid=${ausweis.uid}` } } @@ -71,7 +77,7 @@
- +
diff --git a/src/components/Ausweis/types.ts b/src/components/Ausweis/types.ts index 596ada8c..dbb63294 100644 --- a/src/components/Ausweis/types.ts +++ b/src/components/Ausweis/types.ts @@ -11,6 +11,7 @@ import { Unterlage, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen, + GEGNachweisWohnen, } from "@ibcornelsen/database/client"; import { z, ZodSchema } from "zod"; @@ -145,6 +146,8 @@ export function getAusweisartFromUUID(uid: string): Enums.Ausweisart | null { return Enums.Ausweisart.BedarfsausweisWohnen } else if (uid.startsWith("bag")) { return Enums.Ausweisart.BedarfsausweisGewerbe + } else if (uid.startsWith("gnw")) { + return Enums.Ausweisart.GEGNachweisWohnen } return null; @@ -167,4 +170,6 @@ export type AufnahmeKomplettClient = AufnahmeClient & { bedarfsausweis_wohnen: BedarfsausweisWohnenClient[], verbrauchsausweis_wohnen: VerbrauchsausweisWohnenClient[], verbrauchsausweis_gewerbe: VerbrauchsausweisGewerbeClient[] -} \ No newline at end of file +} + +export type GEGNachweisWohnenClient = Omit \ No newline at end of file diff --git a/src/components/AusweisPruefenBox.svelte b/src/components/AusweisPruefenBox.svelte index 2c0b988b..92580386 100644 --- a/src/components/AusweisPruefenBox.svelte +++ b/src/components/AusweisPruefenBox.svelte @@ -470,6 +470,17 @@ let bilderModal: HTMLDialogElement; let infoVisible = false; + + + async function registriernummerAnfordern(uid: string) { + const result = await api.admin.registriernummer.GET.fetch({ + uid + }, { + headers: { + "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }) + }
@@ -817,9 +828,9 @@ xmlAbschicken(aufnahme.uid) }}>X {/if} - {#if !aufnahme.registriernummer} + {#if !ausweis.registriernummer} {/if} diff --git a/src/components/Dashboard/DashboardObjekt.svelte b/src/components/Dashboard/DashboardObjekt.svelte index 73640640..83815174 100644 --- a/src/components/Dashboard/DashboardObjekt.svelte +++ b/src/components/Dashboard/DashboardObjekt.svelte @@ -6,6 +6,7 @@ export let objekt: ObjektKomplettClient; + // TODO const objektBild = objekt.bilder.find(bild => bild.kategorie === Enums.BilderKategorie.Gebaeude); diff --git a/src/lib/constants.ts b/src/lib/constants.ts index d2c0f60e..ea9dbc70 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -18,6 +18,7 @@ export enum VALID_UUID_PREFIXES { "inv" = "Rechnung", "tkt" = "Ticket", "pln" = "Gebäude Plan", + "gnw" = "GEG Nachweis Wohnen" } /** @@ -29,6 +30,7 @@ export const PRICES: Record = { VerbrauchsausweisWohnen: [65, 95, 180], VerbrauchsausweisGewerbe: [95, 125, 360], BedarfsausweisGewerbe: [500, 700, 1000], + GEGNachweisWohnen: [500, 500, 500] }; export const SERVICES: Record< diff --git a/src/lib/middleware/authorization.ts b/src/lib/middleware/authorization.ts index 2d8cd910..30645b73 100644 --- a/src/lib/middleware/authorization.ts +++ b/src/lib/middleware/authorization.ts @@ -4,10 +4,16 @@ import { prisma } from "@ibcornelsen/database/server"; import { APIError, TypesafeAPIContextWithRequest } from "astro-typesafe-api/server"; import { z } from "zod"; -export async function authorizationMiddleware(input: any, context: TypesafeAPIContextWithRequest) { - const authorization: string | undefined = context.request.headers.get("Authorization"); +export async function checkAuthorizationHeaderNoThrow(authorization: string): Promise | null> { + try { + return await checkAuthorizationHeader(authorization) + } catch(e) { + return null + } +} - if (!context.request.headers.has("Authorization") || !authorization) { +export async function checkAuthorizationHeader(authorization: string) { + if (!authorization) { throw new APIError({ code: "BAD_REQUEST", message: "Request is missing an 'Authorization' header." @@ -81,6 +87,10 @@ export async function authorizationMiddleware(input: any, context: TypesafeAPICo }) } +export async function authorizationMiddleware(input: any, ctx: TypesafeAPIContextWithRequest) { + return await checkAuthorizationHeader(ctx.request.headers.get("Authorization")); +} + export async function maybeAuthorizationMiddleware(input: any, ctx: TypesafeAPIContextWithRequest) { try { return authorizationMiddleware(input, ctx) @@ -93,7 +103,7 @@ export const authorizationHeaders = { Authorization: z.string() } -export async function adminMiddleware(input: any, ctx: TypesafeAPIContextWithRequest) { +export async function adminMiddleware(input: any, ctx: TypesafeAPIContextWithRequest) { try { const user = await authorizationMiddleware(input, ctx) diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 5eb2a0a5..2e62606e 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -67,6 +67,10 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`) } + if (aufnahme.durchlauf_erhitzer && !ausweis.warmwasser_enthalten) { + fillFormField("energietraeger_warmwasser", "Strommix"); + } + toggleCheck("fensterlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung) toggleCheck("schachtlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung) toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) @@ -426,7 +430,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne } } - if (ausweis.wird_gekuehlt) { + if (aufnahme.kuehlung) { /** * Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m² * Primärenergiefaktor Strom diff --git a/src/lib/server/ausweis.ts b/src/lib/server/ausweis.ts new file mode 100644 index 00000000..173a1418 --- /dev/null +++ b/src/lib/server/ausweis.ts @@ -0,0 +1,18 @@ +import { getAusweisartFromUUID } from "#components/Ausweis/types.js"; +import { Enums, prisma } from "@ibcornelsen/database/server"; + +/** + * 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 + */ +export function getPrismaAusweisAdapter(uid: string) { + const ausweisart = getAusweisartFromUUID(uid); + + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + return prisma.verbrauchsausweisWohnen + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + return prisma.verbrauchsausweisGewerbe + } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { + return prisma.bedarfsausweisWohnen + } +} \ No newline at end of file diff --git a/src/lib/server/user.ts b/src/lib/server/user.ts new file mode 100644 index 00000000..1b6070f3 --- /dev/null +++ b/src/lib/server/user.ts @@ -0,0 +1,9 @@ +import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; +import { checkAuthorizationHeader, checkAuthorizationHeaderNoThrow } from "#lib/middleware/authorization.js"; +import { AstroGlobal } from "astro"; + +export function getCurrentUser(Astro: AstroGlobal) { + const accessToken = Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value; + + return checkAuthorizationHeaderNoThrow(`Bearer ${accessToken}`) +} \ No newline at end of file diff --git a/src/modules/Dashboard/DashboardObjektModule.svelte b/src/modules/Dashboard/DashboardObjektModule.svelte index 6e83487d..e11f2b54 100644 --- a/src/modules/Dashboard/DashboardObjektModule.svelte +++ b/src/modules/Dashboard/DashboardObjektModule.svelte @@ -10,14 +10,16 @@

{objekt.adresse}

- - {#each objekt.bilder as bild, i (i)} - {bild.kategorie} - {/each} - - - - +
+ + {#each objekt.bilder as bild, i (i)} + {bild.kategorie} + {/each} + + + + +
{#each objekt.aufnahmen as aufnahme} diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index c80fa19e..35cbd919 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -71,11 +71,7 @@ export let bezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; - let prices: number[] = []; - - if (aufnahme.ausweisart) { - prices = PRICES[aufnahme.ausweisart]; - } + let prices = PRICES[ausweisart]; let basePrice: number = prices[0]; @@ -91,6 +87,7 @@ [Enums.Ausweisart.VerbrauchsausweisGewerbe]: `/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`, [Enums.Ausweisart.BedarfsausweisWohnen]: `/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`, [Enums.Ausweisart.BedarfsausweisGewerbe]: `/energieausweis-erstellen/bedarfsausweis-gewerbe?uid=${ausweis.uid}`, + [Enums.Ausweisart.GEGNachweisWohnen]: `/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`, }[ausweisart] async function speichern(e: SubmitEvent) { @@ -169,6 +166,7 @@ bestellenNichtMoeglich = true } +const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) || (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe)
-{#if !ausweis.geg_anfrage} +{#if !gegAnfrage}

Energiesausweis erstellen

- Verbrauchsausweis Wohnen {PRICES.VerbrauchsausweisWohnen[0]} € + {ausweisart} {prices[0]} €

- {#if ausweis.geg_anfrage} + {#if gegAnfrage} {:else} @@ -218,7 +216,7 @@ - {#if !ausweis.geg_anfrage} + {#if !gegAnfrage} @@ -296,7 +294,7 @@ - {#if ausweis.geg_anfrage} + {#if gegAnfrage} {:else} diff --git a/src/modules/angebot-anfragen/GEGNachweisVerbrauchsausweisWohnenModule.svelte b/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte similarity index 79% rename from src/modules/angebot-anfragen/GEGNachweisVerbrauchsausweisWohnenModule.svelte rename to src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte index aebac205..ab1169f3 100644 --- a/src/modules/angebot-anfragen/GEGNachweisVerbrauchsausweisWohnenModule.svelte +++ b/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte @@ -8,8 +8,7 @@ BenutzerClient, UploadedGebaeudeBild, UnterlageClient, - BedarfsausweisWohnenClient, - VerbrauchsausweisGewerbeClient, + GEGNachweisWohnenClient, } from "#components/Ausweis/types.js"; import Bereich from "#components/labels/Bereich.svelte"; import { Enums } from "@ibcornelsen/database/client"; @@ -26,12 +25,11 @@ import { exclude } from "#lib/exclude.js"; import Cookies from "js-cookie"; - export async function ausweisSpeichern( - ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, + export async function nachweisSpeichern( + nachweis: GEGNachweisWohnenClient, objekt: ObjektClient, aufnahme: AufnahmeClient, - unterlagen: (UnterlageClient & { data?: string })[], - ausweisart: Enums.Ausweisart + unterlagen: (UnterlageClient & { data?: string })[] ) { if (objekt.uid) { await api.objekt._uid.PATCH.fetch({ @@ -82,36 +80,21 @@ aufnahme.uid = uid } - let patchRoute: any; - let putRoute: any; - if (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen) { - patchRoute = api["verbrauchsausweis-wohnen"]._uid.PATCH - putRoute = api["verbrauchsausweis-wohnen"].PUT - } else if (ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe) { - patchRoute = api["verbrauchsausweis-gewerbe"]._uid.PATCH - putRoute = api["verbrauchsausweis-gewerbe"].PUT - } else if (ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) { - patchRoute = api["bedarfsausweis-wohnen"]._uid.PATCH - putRoute = api["bedarfsausweis-wohnen"].PUT - } else if (ausweisart == Enums.Ausweisart.GEGNachweisVerbrauchsausweisWohnen) { - patchRoute = api["geg-nachweis-verbrauchsausweis-wohnen"]._uid.PATCH - putRoute = api["geg-nachweis-verbrauchsausweis-wohnen"].PUT - } + if (nachweis.uid) { + await api["geg-nachweis-wohnen"]._uid.PATCH.fetch({ - if (ausweis.uid) { - await patchRoute.fetch({ - ...exclude(ausweis, ["uid"]) + ...exclude(nachweis, ["uid"]) }, { params: { - uid: ausweis.uid + uid: nachweis.uid }, headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` } }) } else { - const { uid } = await putRoute.fetch({ - ausweis, + const { uid } = await api["geg-nachweis-wohnen"].PUT.fetch({ + nachweis: nachweis, uid_aufnahme: aufnahme.uid }, { headers: { @@ -119,7 +102,7 @@ } }) - ausweis.uid = uid; + nachweis.uid = uid; } for (const unterlage of unterlagen) { @@ -145,20 +128,20 @@ } return { - uid_ausweis: ausweis.uid, + uid_ausweis: nachweis.uid, uid_aufnahme: aufnahme.uid, uid_objekt: objekt.uid } } - async function ausweisAbschicken() { + async function nachweisAbschicken() { if (!(await validateAccessTokenClient())) { loginOverlayHidden = false; return; } - const result = await ausweisSpeichern(ausweis, objekt, aufnahme, unterlagen, Enums.Ausweisart.GEGNachweisVerbrauchsausweisWohnen) + const result = await nachweisSpeichern(nachweis, objekt, aufnahme, unterlagen) if (result !== null) { window.history.pushState( @@ -183,7 +166,7 @@ let loginOverlayHidden = true; - export let ausweis: VerbrauchsausweisWohnenClient; + export let nachweis: GEGNachweisWohnenClient; export let objekt: ObjektClient; export let aufnahme: AufnahmeClient; export let user: BenutzerClient = {} as BenutzerClient; @@ -195,10 +178,10 @@ })[] = []; - if (Object.keys(ausweis).length === 0) { + if (Object.keys(nachweis).length === 0) { const localStorageAusweis = localStorage.getItem("ausweis"); if (localStorageAusweis) { - ausweis = JSON.parse(localStorageAusweis) + nachweis = JSON.parse(localStorageAusweis) } } @@ -218,20 +201,18 @@ $: { - if (ausweis.uid && objekt.uid && aufnahme.uid) { - localStorage.setItem(ausweis.uid, JSON.stringify(ausweis)) + if (nachweis.uid && objekt.uid && aufnahme.uid) { + localStorage.setItem(nachweis.uid, JSON.stringify(nachweis)) localStorage.setItem(objekt.uid, JSON.stringify(objekt)) localStorage.setItem(aufnahme.uid, JSON.stringify(aufnahme)) } else { - localStorage.setItem("ausweis", JSON.stringify(ausweis)) + localStorage.setItem("ausweis", JSON.stringify(nachweis)) localStorage.setItem("aufnahme", JSON.stringify(aufnahme)) localStorage.setItem("objekt", JSON.stringify(objekt)) } } const ausweisart = Enums.Ausweisart.GEGNachweisVerbrauchsausweisWohnen; - - function automatischAusfüllen() {}
@@ -261,7 +242,7 @@ - + @@ -279,7 +260,7 @@ title="Angaben zur Heizung, Lüftung, Energieerezugung, Qualität und Aufbau der Gebäudehülle usw." > - +
@@ -317,7 +298,7 @@ min={1} name={"plaene"} bind:files={plaene} - bind:ausweis + bind:ausweis={nachweis} bind:objekt >
@@ -343,7 +324,7 @@ min={0} name={"unterlagen"} bind:files={unterlagen} - bind:ausweis + bind:ausweis={nachweis} bind:objekt >
@@ -365,13 +346,13 @@
-
- + + diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts index 6223cd51..c487e70e 100644 --- a/src/pages/api/admin/ausstellen.ts +++ b/src/pages/api/admin/ausstellen.ts @@ -88,7 +88,7 @@ export const GET = defineApiRoute({ ausweis, ausweis.aufnahme, ausweis.aufnahme.objekt, - ausweis.aufnahme.objekt.bilder, + ausweis.aufnahme.bilder, ausweis.aufnahme.objekt.benutzer ); const pdfDatenblatt = await pdfDatenblattVerbrauchsausweisWohnen( diff --git a/src/pages/api/admin/bestellbestaetigung.ts b/src/pages/api/admin/bestellbestaetigung.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/api/admin/erinnern.ts b/src/pages/api/admin/erinnern.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/api/admin/nicht-ausstellen.ts b/src/pages/api/admin/nicht-ausstellen.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/api/admin/post-ausstellen.ts b/src/pages/api/admin/post-ausstellen.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/api/admin/registriernummer.ts b/src/pages/api/admin/registriernummer.ts new file mode 100644 index 00000000..f24dde68 --- /dev/null +++ b/src/pages/api/admin/registriernummer.ts @@ -0,0 +1,229 @@ +import { + getAusweisartFromUUID, + UUidWithPrefix, +} from "#components/Ausweis/types.js"; +import { + adminMiddleware, + authorizationHeaders, +} from "#lib/middleware/authorization.js"; +import { + BedarfsausweisWohnen, + Enums, + VerbrauchsausweisGewerbe, + VerbrauchsausweisWohnen, +} from "@ibcornelsen/database/client"; +import { prisma } from "@ibcornelsen/database/server"; +import { APIError, defineApiRoute } from "astro-typesafe-api/server"; +import moment from "moment"; +import { z } from "zod"; +import soap from "soap"; +import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js"; + +export const GET = defineApiRoute({ + input: z.object({ + uid: UUidWithPrefix, + }), + headers: authorizationHeaders, + middleware: adminMiddleware, + async fetch({ uid }, context, user) { + const ausweisart = getAusweisartFromUUID(uid); + const adapter = getPrismaAusweisAdapter( + uid + ) as typeof prisma.verbrauchsausweisWohnen; + + if (!adapter) { + throw new APIError({ + code: "BAD_REQUEST", + message: "UID ist ungültig.", + }); + } + + const ausweis = await adapter.findUnique({ + where: { + uid, + }, + include: { + aufnahme: { + include: { + objekt: true, + }, + }, + }, + }); + + if (!ausweis) { + throw new APIError({ + code: "NOT_FOUND", + message: "Ausweis existiert nicht.", + }); + } + + if (ausweis.registriernummer) { + throw new APIError({ + code: "PRECONDITION_FAILED", + message: `Ausweis hat bereits eine Registriernummer: (${ausweis.registriernummer})`, + }); + } + + if (!ausweis.aufnahme.objekt.plz) { + throw new APIError({ + code: "PRECONDITION_FAILED", + message: "Ausweis Gebäude hat keine Postleitzahl", + }); + } + + const postleitzahl = await prisma.postleitzahlen.findFirst({ + where: { + plz: ausweis.aufnahme.objekt.plz, + }, + }); + + if (!postleitzahl) { + throw new APIError({ + code: "PRECONDITION_FAILED", + message: `Bundesland konnte nicht gefunden werden für PLZ ${ausweis.aufnahme.objekt.plz}`, + }); + } + + /* Authentifizierung */ + const Aussteller_ID_DIBT = "jens.cornelsen@ib-cornelsen.de"; + const Aussteller_PWD_DIBT = "62465E79F6A61F31C4DCA9E2AF788DD3"; + /* EnEV-Nachweis */ + const Ausstellungsdatum = moment( + ausweis.aufnahme.erstellungsdatum + ).format("DD.MM.YYYY"); + const Gesetzesgrundlage = "GEG-2024"; + + /* EnergieausweisDaten */ + let gebaeudeart: string = ""; + if ( + ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe && + ausweis.aufnahme.gebaeudeteil == "Gewerbe" + ) { + gebaeudeart = "Nichtwohnteil gemischt genutztes Gebäude"; + } else if ( + (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen || + ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) && + ausweis.aufnahme.gebaeudeteil == "Wohnen" + ) { + gebaeudeart = "Wohnteil gemischt genutztes Gebäude"; + } else if ( + (ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen || + ausweisart == Enums.Ausweisart.BedarfsausweisWohnen) && + ausweis.aufnahme.gebaeudeteil == "Gesamtgebäude" + ) { + gebaeudeart = "Wohngebäude"; + } else if ( + ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe && + ausweis.aufnahme.gebaeudeteil == "Gesamtgebäude" + ) { + gebaeudeart = "Nichtwohngebäude"; + } + + const art: string = + ausweisart == Enums.Ausweisart.BedarfsausweisWohnen + ? "Energiebedarfsausweis" + : "Energieverbrauchsausweis"; + + const body = ` + + + + ${Aussteller_ID_DIBT} + ${Aussteller_PWD_DIBT} + + + ${Ausstellungsdatum} + ${postleitzahl.bundesland} + ${postleitzahl.plz} + ${Gesetzesgrundlage} + + + ${gebaeudeart} + ${art} + ${ + ausweis.ausstellgrund === + Enums.Ausstellgrund.Neubau + ? "1" + : "0" + } + + + + `; + + return await new Promise(async (resolve, reject) => { + soap.createClient( + "https://energieausweis.dibt.de/published/WebServiceEnergieausweis/DibtEnergieAusweisServiceEx01.wsdl", + {}, + function (err, client) { + if (err !== null) { + throw new APIError({ + code: "INTERNAL_SERVER_ERROR", + message: err, + }); + } + + client.Datenregistratur( + body, + async function ( + err: any, + result: { + DatenregistraturResult: { + WEB_Service_Antwort: { + Rueckgabewert?: null; + Registriernummer: string; + Datendatei: any; + }; + }; + } + ) { + if (err !== null) { + reject({ + code: "INTERNAL_SERVER_ERROR", + message: err, + }); + } + + if ( + result.DatenregistraturResult + .WEB_Service_Antwort.Registriernummer + ) { + await ( + adapter as typeof prisma.verbrauchsausweisWohnen + ).update({ + where: { + uid, + }, + data: { + registriernummer: + result.DatenregistraturResult + .WEB_Service_Antwort + .Registriernummer, + kontrolldatei_angefragt: result + .DatenregistraturResult + .WEB_Service_Antwort.Datendatei + ? true + : false, + }, + }); + + resolve( + result.DatenregistraturResult + .WEB_Service_Antwort.Registriernummer + ); + } else { + reject({ + code: "INTERNAL_SERVER_ERROR", + message: "Unerwarteter Rückgabewert.", + }); + } + } + ); + } + ); + }).catch((reason) => { + throw new APIError(reason); + }); + }, +}); diff --git a/src/pages/api/objekt/[uid]/bilder.ts b/src/pages/api/aufnahme/[uid]/bilder.ts similarity index 89% rename from src/pages/api/objekt/[uid]/bilder.ts rename to src/pages/api/aufnahme/[uid]/bilder.ts index 72acb3fe..5cfa9986 100644 --- a/src/pages/api/objekt/[uid]/bilder.ts +++ b/src/pages/api/aufnahme/[uid]/bilder.ts @@ -26,14 +26,14 @@ export const PUT = defineApiRoute({ }); } - let objekt = await prisma.objekt.findUnique({ + let aufnahme = await prisma.aufnahme.findUnique({ where: { uid: ctx.params.uid, benutzer_id: user.id }, }); - if (!objekt) { + if (!aufnahme) { throw new APIError({ code: "NOT_FOUND", message: "Objekt nicht gefunden oder gehört einem anderen Benutzer.", @@ -46,12 +46,12 @@ export const PUT = defineApiRoute({ ); const buffer = Buffer.from(dataWithoutPrefix, "base64"); - const bild = await prisma.Bild.create({ + const bild = await prisma.bild.create({ data: { kategorie: input.kategorie, - objekt: { + aufnahme: { connect: { - id: objekt.id, + id: aufnahme.id, }, }, }, @@ -69,10 +69,8 @@ export const PUT = defineApiRoute({ writeFileSync(filePath, buffer) } catch(e) { - console.log(e); - // Bild wurde nicht gespeichert, wir löschen den Eintrag wieder - await prisma.Bild.delete({ + await prisma.bild.delete({ where: { uid: bild.uid } @@ -99,7 +97,7 @@ export const GET = defineApiRoute({ async fetch(input, ctx, user) { const { uid } = ctx.params; - const objekt = await prisma.objekt.findUnique({ + const aufnahme = await prisma.aufnahme.findUnique({ where: { uid, benutzer_id: user.id @@ -115,13 +113,13 @@ export const GET = defineApiRoute({ } }) - if (!objekt) { + if (!aufnahme) { throw new APIError({ code: "FORBIDDEN", message: "Objekt existiert nicht oder gehört einem anderen Benutzer." }) } - return objekt.bilder + return aufnahme.bilder }, }) \ No newline at end of file diff --git a/src/pages/api/aufnahme/[uid].ts b/src/pages/api/aufnahme/[uid]/index.ts similarity index 100% rename from src/pages/api/aufnahme/[uid].ts rename to src/pages/api/aufnahme/[uid]/index.ts diff --git a/src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/[uid].ts b/src/pages/api/geg-nachweis-wohnen/[uid].ts similarity index 55% rename from src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/[uid].ts rename to src/pages/api/geg-nachweis-wohnen/[uid].ts index 32f1d29d..f6de0a4a 100644 --- a/src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/[uid].ts +++ b/src/pages/api/geg-nachweis-wohnen/[uid].ts @@ -1,12 +1,12 @@ -import { BedarfsausweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js"; +import { GEGNachweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js"; import { exclude } from "#lib/exclude.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; -import { BedarfsausweisWohnenSchema, prisma } from "@ibcornelsen/database/server"; +import { GEGNachweisWohnenSchema, prisma } from "@ibcornelsen/database/server"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { z } from "zod"; export const PATCH = defineApiRoute({ - input: BedarfsausweisWohnenSchema.omit({ + input: GEGNachweisWohnenSchema.omit({ uid: true, id: true, benutzer_id: true, @@ -18,7 +18,7 @@ export const PATCH = defineApiRoute({ }, middleware: authorizationMiddleware, async fetch(input, ctx, user) { - const objekt = await prisma.bedarfsausweisWohnen.findUnique({ + const objekt = await prisma.gEGNachweisWohnen.findUnique({ where: { uid: ctx.params.uid, benutzer: { @@ -30,11 +30,11 @@ export const PATCH = defineApiRoute({ if (!objekt) { throw new APIError({ code: "NOT_FOUND", - message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer." + message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer." }) } - await prisma.bedarfsausweisWohnen.update({ + await prisma.gEGNachweisWohnen.update({ where: { uid: ctx.params.uid }, @@ -45,7 +45,7 @@ export const PATCH = defineApiRoute({ export const DELETE = defineApiRoute({ meta: { - description: "Storniert einen Ausweis" + description: "Storniert einen Nachweis" }, headers: authorizationHeaders, middleware: authorizationMiddleware, @@ -59,70 +59,63 @@ export const DELETE = defineApiRoute({ }) } - // Wir holen uns den Bedarfsausweis + // Wir holen uns den BedarfsNachweis // Dieser MUSS mit dem Nutzer verknüpft sein. - const ausweis = await prisma.bedarfsausweisWohnen.findUnique({ + const nachweis = await prisma.gEGNachweisWohnen.findUnique({ where: { uid, - }, - include: { - aufnahme: { - select: { - storniert: true - } - } } }); - if (!ausweis) { - // Falls wir den Ausweis nicht finden können, werfen wir einen Fehler + if (!nachweis) { + // Falls wir den Nachweis nicht finden können, werfen wir einen Fehler throw new APIError({ code: "NOT_FOUND", - message: "Ausweis konnte nicht gefunden werden.", + message: "Nachweis konnte nicht gefunden werden.", }); } - // Wir dürfen den Ausweis nur stornieren, wenn er noch nicht ausgestellt wurde - // Außerdem müssen wir schauen, ob wir Admin oder der Besitzer des Ausweises sind. - if ((ausweis.benutzer_id !== user.id) && user.rolle !== "ADMIN") { - // Falls der Ausweis nicht dem Nutzer gehört, werfen wir einen Fehler + // Wir dürfen den Nachweis nur stornieren, wenn er noch nicht ausgestellt wurde + // Außerdem müssen wir schauen, ob wir Admin oder der Besitzer des Nachweises sind. + if ((nachweis.benutzer_id !== user.id) && user.rolle !== "ADMIN") { + // Falls der Nachweis nicht dem Nutzer gehört, werfen wir einen Fehler throw new APIError({ code: "FORBIDDEN", - message: "Ausweis gehört nicht dem Nutzer.", + message: "Nachweis gehört nicht dem Nutzer.", }); } - // if (ausweis.erledigt) { - // // Falls der Ausweis bereits ausgestellt wurde, werfen wir einen Fehler + // if (Nachweis.erledigt) { + // // Falls der Nachweis bereits ausgestellt wurde, werfen wir einen Fehler // throw new TRPCError({ // code: "BAD_REQUEST", - // message: "Ausweis wurde bereits ausgestellt.", + // message: "Nachweis wurde bereits ausgestellt.", // }); // } - if (ausweis.aufnahme.storniert) { - // Falls der Ausweis bereits storniert ist, werfen wir einen Fehler + if (nachweis.storniert) { + // Falls der Nachweis bereits storniert ist, werfen wir einen Fehler throw new APIError({ code: "BAD_REQUEST", - message: "Ausweis wurde bereits storniert.", + message: "Nachweis wurde bereits storniert.", }); } - await prisma.aufnahme.update({ + await prisma.gEGNachweisWohnen.update({ where: { - id: ausweis.aufnahme_id + id: nachweis.id }, data: { storniert: true } }) - // Wir erstellen ein Event, dass der Ausweis storniert wurde + // Wir erstellen ein Event, dass der Nachweis storniert wurde // Dann können wir das in der Historie anzeigen await prisma.event.create({ data: { - title: "Ausweis storniert", - description: ((user.rolle === "ADMIN") && (ausweis.benutzer_id !== user.id)) ? "Ausweis wurde von einem Administrator storniert." : "Ausweis wurde vom Besitzer storniert.", + title: "Nachweis storniert", + description: ((user.rolle === "ADMIN") && (nachweis.benutzer_id !== user.id)) ? "Nachweis wurde von einem Administrator storniert." : "Nachweis wurde vom Besitzer storniert.", benutzer: { connect: { id: user.id @@ -130,7 +123,7 @@ export const DELETE = defineApiRoute({ }, aufnahme: { connect: { - id: ausweis.aufnahme_id + id: nachweis.aufnahme_id } } } @@ -155,7 +148,7 @@ export const GET = defineApiRoute({ } } }, - output: ZodOverlap>(BedarfsausweisWohnenSchema.merge(z.object({ + output: ZodOverlap>(GEGNachweisWohnenSchema.merge(z.object({ uid_aufnahme: UUidWithPrefix, uid_objekt: UUidWithPrefix, uid_benutzer: UUidWithPrefix.optional() @@ -175,7 +168,7 @@ export const GET = defineApiRoute({ }) } - const ausweis = await prisma.bedarfsausweisWohnen.findUnique({ + const Nachweis = await prisma.gEGNachweisWohnen.findUnique({ where: { uid, benutzer_id: user.id @@ -199,19 +192,19 @@ export const GET = defineApiRoute({ } }); - if (!ausweis) { - // Falls wir den Ausweis nicht finden können, werfen wir einen Fehler + if (!Nachweis) { + // Falls wir den Nachweis nicht finden können, werfen wir einen Fehler throw new APIError({ code: "NOT_FOUND", - message: "Ausweis konnte nicht gefunden werden.", + message: "Nachweis konnte nicht gefunden werden.", }); } return { - uid_aufnahme: ausweis.aufnahme.uid, - uid_objekt: ausweis.aufnahme.objekt.uid, - uid_benutzer: ausweis.benutzer?.uid, - ...exclude(ausweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"]) + uid_aufnahme: Nachweis.aufnahme.uid, + uid_objekt: Nachweis.aufnahme.objekt.uid, + uid_benutzer: Nachweis.benutzer?.uid, + ...exclude(Nachweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"]) } }, }); diff --git a/src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/index.ts b/src/pages/api/geg-nachweis-wohnen/index.ts similarity index 76% rename from src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/index.ts rename to src/pages/api/geg-nachweis-wohnen/index.ts index 17c6f491..ab71ca21 100644 --- a/src/pages/api/geg-nachweis-verbrauchsausweis-wohnen/index.ts +++ b/src/pages/api/geg-nachweis-wohnen/index.ts @@ -1,6 +1,6 @@ import { UUidWithPrefix } from "#components/Ausweis/types.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; -import { BedarfsausweisWohnenSchema, prisma, VerbrauchsausweisWohnenSchema } from "@ibcornelsen/database/server"; +import { GEGNachweisWohnenSchema, prisma } from "@ibcornelsen/database/server"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { z } from "zod"; @@ -12,7 +12,7 @@ export const PUT = defineApiRoute({ tags: ["GEG Nachweis", "Verbrauchsausweis Wohnen"], }, input: z.object({ - ausweis: VerbrauchsausweisWohnenSchema.omit({ + nachweis: GEGNachweisWohnenSchema.omit({ id: true, benutzer_id: true, uid: true, @@ -41,40 +41,39 @@ export const PUT = defineApiRoute({ }) } - const createdAusweis = await prisma.verbrauchsausweisWohnen.create({ - data: { - ...input.ausweis, - benutzer: { - connect: { - id: user.id, - }, + const nachweis = await prisma.gEGNachweisWohnen.create({ + data: { + ...input.nachweis, + benutzer: { + connect: { + id: user.id, }, - aufnahme: { - connect: { - uid: aufnahme.uid, - }, - }, - geg_anfrage: true }, - select: { - uid: true, - aufnahme: { - select: { - uid: true, - objekt: { - select: { - uid: true, - }, + aufnahme: { + connect: { + id: aufnahme.id, + }, + } + }, + select: { + uid: true, + aufnahme: { + select: { + uid: true, + objekt: { + select: { + uid: true, }, }, }, }, - }); + }, + }); return { - uid: createdAusweis.uid, - objekt_uid: createdAusweis.aufnahme.objekt.uid, - aufnahme_uid: createdAusweis.aufnahme.uid, + uid: nachweis.uid, + objekt_uid: nachweis.aufnahme.objekt.uid, + aufnahme_uid: nachweis.aufnahme.uid, }; }, }); @@ -108,11 +107,6 @@ export const GET = defineApiRoute({ benutzer: true, aufnahme: { include: { - objekt: { - include: { - bilder: true, - }, - }, rechnungen: true, events: { include: { diff --git a/src/pages/api/objekt/[uid]/unterlagen.ts b/src/pages/api/objekt/[uid]/unterlagen.ts index b751c7dd..f260bf3a 100644 --- a/src/pages/api/objekt/[uid]/unterlagen.ts +++ b/src/pages/api/objekt/[uid]/unterlagen.ts @@ -7,7 +7,7 @@ import { writeFileSync } from "fs"; export const PUT = defineApiRoute({ input: UnterlageSchema.omit({ - objekt_id: true, + aufnahme_id: true, id: true, uid: true }).merge(z.object({ @@ -25,14 +25,14 @@ export const PUT = defineApiRoute({ }) } - let objekt = await prisma.objekt.findUnique({ + let aufnahme = await prisma.aufnahme.findUnique({ where: { uid: ctx.params.uid, benutzer_id: user.id }, }); - if (!objekt) { + if (!aufnahme) { throw new APIError({ code: "NOT_FOUND", message: "Objekt nicht gefunden oder gehört einem anderen Benutzer.", @@ -44,9 +44,9 @@ export const PUT = defineApiRoute({ const unterlage = await prisma.unterlage.create({ data: { kategorie: kategorie, - objekt: { + aufnahme: { connect: { - id: objekt.id, + id: aufnahme.id, }, }, }, @@ -88,7 +88,7 @@ export const GET = defineApiRoute({ async fetch(input, ctx, user) { const { uid } = ctx.params; - const objekt = await prisma.objekt.findUnique({ + const objekt = await prisma.aufnahme.findUnique({ where: { uid, benutzer_id: user.id diff --git a/src/pages/dashboard/admin/ausweise-pruefen.astro b/src/pages/dashboard/admin/ausweise-pruefen.astro index d0baa4f0..4c8d9078 100644 --- a/src/pages/dashboard/admin/ausweise-pruefen.astro +++ b/src/pages/dashboard/admin/ausweise-pruefen.astro @@ -49,7 +49,7 @@ const reformedAusweise = ausweise.map(ausweis => ({ ausweis: omit(ausweis, ["aufnahme"]) as VerbrauchsausweisWohnenClient, aufnahme: omit(omit(ausweis.aufnahme, ["events"]), ["objekt"]) as AufnahmeClient, objekt: omit(ausweis.aufnahme.objekt, ["bilder"]) as ObjektClient, - bilder: ausweis.aufnahme.objekt.bilder as unknown as UploadedGebaeudeBild[], + bilder: ausweis.aufnahme.bilder as unknown as UploadedGebaeudeBild[], events: ausweis.aufnahme.events })) --- diff --git a/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro b/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro index 4795bba4..2c302e10 100644 --- a/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro +++ b/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro @@ -52,12 +52,12 @@ if (uid) { } }) - bilder = await caller.objekt._uid.bilder.GET.fetch(null, { + bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, { headers: { authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` }, params: { - uid: ausweis.uid_objekt + uid: ausweis.uid_aufnahme } }) diff --git a/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro b/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro index 7764146b..303ecf1f 100644 --- a/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro +++ b/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro @@ -54,12 +54,12 @@ if (uid) { } }) - bilder = await caller.objekt._uid.bilder.GET.fetch(null, { + bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, { headers: { authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` }, params: { - uid: uid_objekt + uid: uid_aufnahme } }) diff --git a/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro b/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro index 55e00b7e..a982362e 100644 --- a/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro +++ b/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro @@ -51,12 +51,12 @@ if (uid) { } }) - bilder = await caller.objekt._uid.bilder.GET.fetch(null, { + bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, { headers: { authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` }, params: { - uid: ausweis.uid_objekt + uid: ausweis.uid_aufnahme } }) diff --git a/src/pages/immowelt/index.astro b/src/pages/immowelt/index.astro index ab4a77c8..b0825c89 100644 --- a/src/pages/immowelt/index.astro +++ b/src/pages/immowelt/index.astro @@ -51,12 +51,12 @@ if (uid) { } }) - bilder = await caller.objekt._uid.bilder.GET.fetch(null, { + bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, { headers: { authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` }, params: { - uid: ausweis.uid_objekt + uid: ausweis.uid_aufnahme } }) diff --git a/src/pages/immowelt/verbrauchsausweis-erstellen/index.astro b/src/pages/immowelt/verbrauchsausweis-erstellen/index.astro index 1a511715..3901c850 100644 --- a/src/pages/immowelt/verbrauchsausweis-erstellen/index.astro +++ b/src/pages/immowelt/verbrauchsausweis-erstellen/index.astro @@ -51,12 +51,12 @@ if (uid) { } }) - bilder = await caller.objekt._uid.bilder.GET.fetch(null, { + bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, { headers: { authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` }, params: { - uid: ausweis.uid_objekt + uid: ausweis.uid_aufnahme } }) diff --git a/src/pages/immowelt/verbrauchsausweis-wohngebaeude/index.astro b/src/pages/immowelt/verbrauchsausweis-wohngebaeude/index.astro index 3ed02b65..f341621f 100644 --- a/src/pages/immowelt/verbrauchsausweis-wohngebaeude/index.astro +++ b/src/pages/immowelt/verbrauchsausweis-wohngebaeude/index.astro @@ -51,12 +51,12 @@ if (uid) { } }) - bilder = await caller.objekt._uid.bilder.GET.fetch(null, { + bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, { headers: { authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` }, params: { - uid: ausweis.uid_objekt + uid: ausweis.uid_aufnahme } }) diff --git a/src/pages/kundendaten.astro b/src/pages/kundendaten.astro index 2956c8b6..38b208fa 100644 --- a/src/pages/kundendaten.astro +++ b/src/pages/kundendaten.astro @@ -49,6 +49,15 @@ if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { uid } }) +} else if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) { + ausweis = await caller["geg-nachweis-wohnen"]._uid.GET.fetch(undefined, { + headers: { + Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` + }, + params: { + uid + } + }) } else { return Astro.redirect("/404") } @@ -80,8 +89,6 @@ const user = await caller.user.self.GET.fetch(undefined, { aufnahme.ausweisart = "VerbrauchsausweisWohnen" - - if (!ausweis || !user) { return Astro.redirect("/404"); } diff --git a/src/pages/speichern-erfolgreich.astro b/src/pages/speichern-erfolgreich.astro new file mode 100644 index 00000000..debe17cb --- /dev/null +++ b/src/pages/speichern-erfolgreich.astro @@ -0,0 +1,52 @@ +--- +import Layout from "#layouts/Layout.astro"; +import { BASE_URI } from "#lib/constants"; +import { transport } from "#lib/mail"; +import { getPrismaAusweisAdapter } from "#lib/server/ausweis"; +import { getCurrentUser } from "#lib/server/user"; + +const user = await getCurrentUser(Astro) +const uid = Astro.url.searchParams.get("uid"); +const adapter = getPrismaAusweisAdapter(uid || "") + +console.log(user, uid); + + +if (!user || !uid || !adapter) { + return Astro.redirect("/") +} + +const ausweis = await adapter.findUnique({ + where: { + uid + } +}) + +if (!ausweis) { + return Astro.redirect("/") +} + +transport.sendMail({ + from: `"IBCornelsen" `, + to: user.email, + subject: `Ihr Ausweis wurde gespeichert - IBCornelsen.`, + text: `Sehr geehrte/r ${user.name}, + +Ihr Energieausweis wurde erfolgreich in Ihrem Konto gespeichert. Sie können ihn jederzeit in Ihrem Kundenbereich abrufen. + +Zum Download oder zur Verwaltung Ihrer Ausweise besuchen Sie bitte: +${BASE_URI}/dashboard + +Falls Sie Fragen haben, stehen wir Ihnen gerne zur Verfügung. + +Mit freundlichen Grüßen +Ihr IBCornelsen` +}) +--- + + +

Ihr Energieausweis wurde gespeichert

+

Ihr Energieausweis wurde erfolgreich in Ihrem Konto gespeichert. Sie können ihn jederzeit in Ihrem Kundenbereich abrufen.

+ 👉 Jetzt ansehen +

Falls Sie Fragen haben, steht unser Support-Team Ihnen gerne zur Verfügung.

+
\ No newline at end of file