diff --git a/.gitignore b/.gitignore index 5271c4c5..75c7d13a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,32 @@ -# build output -dist/ - -# generated types -.astro/ - -# log files -logs/ - -# dependencies -node_modules/ - -# logs -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# lockfile -pnpm-lock.yaml -bun.lockb - -# environment variables -.env -.env.production - -# macOS-specific files -.DS_Store +# build output +dist/ + +# generated types +.astro/ + +# log files +logs/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# lockfile +pnpm-lock.yaml +bun.lockb + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +public/fonts/ + +*.Identifier diff --git a/package.json b/package.json index f9e1674d..f862e9c6 100644 --- a/package.json +++ b/package.json @@ -1,86 +1,86 @@ -{ - "name": "online-energieausweis", - "version": "0.0.1", - "license": "GPL V3.0", - "type": "module", - "scripts": { - "dev": "bun astro dev", - "build": "bun astro build", - "preview": "bun astro preview", - "astro": "astro", - "test:e2e": "cypress run", - "test:unit": "bun test", - "format": "prettier --write .", - "build:production": "astro build && bun --bun server.ts", - "i18n:generate": "bunx astro-i18next generate", - "prisma:studio": "bunx prisma studio --schema=./node_modules/@ibcornelsen/database/prisma/schema.prisma" - }, - "private": true, - "dependencies": { - "@astrojs/mdx": "^3.1.9", - "@astrojs/node": "^8.3.4", - "@astrojs/svelte": "^2.2.0", - "@astrojs/tailwind": "^3.1.3", - "@ibcornelsen/api": "link:@ibcornelsen/api", - "@ibcornelsen/database": "link:@ibcornelsen/database", - "@ibcornelsen/ui": "^0.0.2", - "@mollie/api-client": "^3.7.0", - "@pdfme/common": "^5.1.7", - "@pdfme/generator": "^5.1.7", - "@pdfme/ui": "^5.1.7", - "@trpc/client": "^10.45.2", - "@trpc/server": "^10.45.2", - "astro": "^4.16.10", - "astro-i18next": "1.0.0-beta.21", - "body-scroll-lock": "^4.0.0-beta.0", - "buffer": "^6.0.3", - "bun": "^1.1.34", - "caniuse-lite": "^1.0.30001684", - "csvtojson": "^2.0.10", - "express": "^4.21.1", - "flag-icons": "^6.15.0", - "fontkit": "^2.0.4", - "i18next": "^23.16.5", - "i18next-fs-backend": "^2.3.2", - "i18next-http-backend": "^2.6.2", - "js-cookie": "^3.0.5", - "js-interpolate": "^1.0.1", - "katex": "^0.16.11", - "moment": "^2.30.1", - "moment-timezone": "^0.5.46", - "postcss-nested": "^7.0.2", - "radix-svelte-icons": "^1.0.0", - "sass": "^1.80.6", - "svelte": "^3.59.2", - "svelte-dialogs": "^1.2.2", - "svelte-preprocess": "^5.1.4", - "svelte-ripple-action": "^1.0.6", - "tailwindcss": "^3.4.14", - "trpc-openapi": "^1.2.0", - "uuid": "^9.0.1", - "zod": "^3.23.8" - }, - "devDependencies": { - "@faker-js/faker": "^8.4.1", - "@tailwindcss/typography": "^0.5.15", - "@types/body-scroll-lock": "^3.1.2", - "@types/express": "^5.0.0", - "@types/fontkit": "^2.0.7", - "@types/js-cookie": "^3.0.6", - "@types/uuid": "^9.0.8", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", - "autoprefixer": "^10.4.20", - "bun-types": "^1.1.34", - "cypress": "^13.15.2", - "cypress-file-upload": "^5.0.8", - "daisyui": "^4.12.14", - "eslint": "~8.15.0", - "eslint-config-prettier": "8.1.0", - "postcss": "^8.4.49", - "postcss-import": "^16.1.0", - "postcss-nesting": "^13.0.1", - "prettier": "^2.8.8", - "typescript": "^4.9.5" - } -} +{ + "name": "online-energieausweis", + "version": "0.0.1", + "license": "GPL V3.0", + "type": "module", + "scripts": { + "dev": "bun astro dev", + "build": "bun astro build", + "preview": "bun astro preview", + "astro": "astro", + "test:e2e": "cypress run", + "test:unit": "bun test", + "format": "prettier --write .", + "build:production": "astro build && bun --bun server.ts", + "i18n:generate": "bunx astro-i18next generate", + "prisma:studio": "bunx prisma studio --schema=./node_modules/@ibcornelsen/database/prisma/schema.prisma" + }, + "private": true, + "dependencies": { + "@astrojs/mdx": "^3.1.9", + "@astrojs/node": "^8.3.4", + "@astrojs/svelte": "^2.2.0", + "@astrojs/tailwind": "^3.1.3", + "@ibcornelsen/api": "link:@ibcornelsen/api", + "@ibcornelsen/database": "link:@ibcornelsen/database", + "@ibcornelsen/ui": "^0.0.2", + "@mollie/api-client": "^3.7.0", + "@pdfme/common": "^5.1.7", + "@pdfme/generator": "^5.1.7", + "@pdfme/ui": "^5.1.7", + "@trpc/client": "^10.45.2", + "@trpc/server": "^10.45.2", + "astro": "^4.16.10", + "astro-i18next": "1.0.0-beta.21", + "body-scroll-lock": "^4.0.0-beta.0", + "buffer": "^6.0.3", + "bun": "^1.1.34", + "caniuse-lite": "^1.0.30001684", + "csvtojson": "^2.0.10", + "express": "^4.21.1", + "flag-icons": "^6.15.0", + "fontkit": "^2.0.4", + "i18next": "^23.16.5", + "i18next-fs-backend": "^2.3.2", + "i18next-http-backend": "^2.6.2", + "js-cookie": "^3.0.5", + "js-interpolate": "^1.0.1", + "katex": "^0.16.11", + "moment": "^2.30.1", + "moment-timezone": "^0.5.46", + "postcss-nested": "^7.0.2", + "radix-svelte-icons": "^1.0.0", + "sass": "^1.80.6", + "svelte": "^3.59.2", + "svelte-dialogs": "^1.2.2", + "svelte-preprocess": "^5.1.4", + "svelte-ripple-action": "^1.0.6", + "tailwindcss": "^3.4.14", + "trpc-openapi": "^1.2.0", + "uuid": "^9.0.1", + "zod": "^3.23.8" + }, + "devDependencies": { + "@faker-js/faker": "^8.4.1", + "@tailwindcss/typography": "^0.5.15", + "@types/body-scroll-lock": "^3.1.2", + "@types/express": "^5.0.0", + "@types/fontkit": "^2.0.7", + "@types/js-cookie": "^3.0.6", + "@types/uuid": "^9.0.8", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "autoprefixer": "^10.4.20", + "bun-types": "^1.1.34", + "cypress": "^13.15.2", + "cypress-file-upload": "^5.0.8", + "daisyui": "^4.12.14", + "eslint": "~8.15.0", + "eslint-config-prettier": "8.1.0", + "postcss": "^8.4.49", + "postcss-import": "^16.1.0", + "postcss-nesting": "^13.0.1", + "prettier": "^2.8.8", + "typescript": "^4.9.5" + } +} diff --git a/public/fonts/Antique-Olive-Std-Compact_3864.ttfZone.Identifier b/public/fonts/Antique-Olive-Std-Compact_3864.ttfZone.Identifier deleted file mode 100644 index 23631344..00000000 --- a/public/fonts/Antique-Olive-Std-Compact_3864.ttfZone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\antique-olive-std.zip diff --git a/public/fonts/HeronSans-Light.woff2Zone.Identifier b/public/fonts/HeronSans-Light.woff2Zone.Identifier deleted file mode 100644 index ceb1d4ac..00000000 --- a/public/fonts/HeronSans-Light.woff2Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\font (1).zip diff --git a/public/fonts/HeronSans-Regular.eotZone.Identifier b/public/fonts/HeronSans-Regular.eotZone.Identifier deleted file mode 100644 index ceb1d4ac..00000000 --- a/public/fonts/HeronSans-Regular.eotZone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\font (1).zip diff --git a/public/fonts/HeronSans-Regular.ttfZone.Identifier b/public/fonts/HeronSans-Regular.ttfZone.Identifier deleted file mode 100644 index ceb1d4ac..00000000 --- a/public/fonts/HeronSans-Regular.ttfZone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\font (1).zip diff --git a/public/fonts/HeronSans-Regular.woff2Zone.Identifier b/public/fonts/HeronSans-Regular.woff2Zone.Identifier deleted file mode 100644 index ceb1d4ac..00000000 --- a/public/fonts/HeronSans-Regular.woff2Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\font (1).zip diff --git a/public/fonts/HeronSans-Regular.woffZone.Identifier b/public/fonts/HeronSans-Regular.woffZone.Identifier deleted file mode 100644 index ceb1d4ac..00000000 --- a/public/fonts/HeronSans-Regular.woffZone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\font (1).zip diff --git a/public/fonts/HeronSansCond-SemiBold.woff2Zone.Identifier b/public/fonts/HeronSansCond-SemiBold.woff2Zone.Identifier deleted file mode 100644 index ceb1d4ac..00000000 --- a/public/fonts/HeronSansCond-SemiBold.woff2Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -ReferrerUrl=C:\Users\all\Downloads\font (1).zip diff --git a/src/client/lib/verbrauchsausweisWohnenSpeichern.ts b/src/client/lib/verbrauchsausweisWohnenSpeichern.ts index 5bf4197e..607e166a 100644 --- a/src/client/lib/verbrauchsausweisWohnenSpeichern.ts +++ b/src/client/lib/verbrauchsausweisWohnenSpeichern.ts @@ -1,86 +1,86 @@ -import { - BenutzerClient, - GebaeudeAufnahmeClient, - GebaeudeClient, - UploadedGebaeudeBild, - VerbrauchsausweisWohnenClient, -} from "#components/Ausweis/types.js"; - -import { exclude } from "#lib/exclude.js"; -import { client } from "src/trpc.js"; -import { bilderHochladen } from "./bilderHochladen.js"; -import { addNotification } from "@ibcornelsen/ui"; - -export async function verbrauchsausweisWohnenSpeichern( - ausweis: VerbrauchsausweisWohnenClient, - gebaeude: GebaeudeClient, - gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient, - images: (UploadedGebaeudeBild & { base64?: string })[], - user: BenutzerClient -) { - if (ausweis.uid) { - // Anscheinend wurde der Ausweis bereits erstellt und hat eine UID. - // Jetzt müssen wir ihn nun nur noch abspeichern. - try { - await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ - ...ausweis, - gebaeude_aufnahme_allgemein: { - ...exclude( - gebaeude_aufnahme_allgemein, - ["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"] - ), - gebaeude_stammdaten: { - ...exclude(gebaeude, [ - "gebaeude_bilder", - ]), - }, - }, - }); - - images = await bilderHochladen(images, gebaeude.uid); - - return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid }; - } catch (e) { - // TODO: Ticket mit Fehldermeldung abschicken. - } - } else { - // Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter. - try { - const response = - await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ - ...ausweis, - gebaeude_aufnahme_allgemein: { - ...gebaeude_aufnahme_allgemein, - gebaeude_stammdaten: { - ...gebaeude, - }, - }, - }); - - images = await bilderHochladen(images, response.gebaeude_uid); - - return response; - } catch (e: any) { - await client.v1.tickets.erstellen.mutate({ - titel: "Ausweis konnte nicht gespeichert werden", - beschreibung: e.stack, - email: user.email ?? "", - metadata: JSON.stringify({ - ausweis, - }), - }); - // TODO: Ticket mit Fehldermeldung abschicken. - } - } - - 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; -} +import { + BenutzerClient, + GebaeudeAufnahmeClient, + GebaeudeClient, + UploadedGebaeudeBild, + VerbrauchsausweisWohnenClient, +} from "#components/Ausweis/types.js"; + +import { exclude } from "#lib/exclude.js"; +import { client } from "src/trpc.js"; +import { bilderHochladen } from "./bilderHochladen.js"; +import { addNotification } from "@ibcornelsen/ui"; + +export async function verbrauchsausweisWohnenSpeichern( + ausweis: VerbrauchsausweisWohnenClient, + gebaeude: GebaeudeClient, + gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient, + images: (UploadedGebaeudeBild & { base64?: string })[], + user: BenutzerClient +) { + if (ausweis.uid) { + // Anscheinend wurde der Ausweis bereits erstellt und hat eine UID. + // Jetzt müssen wir ihn nun nur noch abspeichern. + try { + await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ + ...ausweis, + gebaeude_aufnahme_allgemein: { + ...exclude( + gebaeude_aufnahme_allgemein, + ["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"] + ), + gebaeude_stammdaten: { + ...exclude(gebaeude, [ + "gebaeude_bilder", + ]), + }, + }, + }); + + images = await bilderHochladen(images, gebaeude.uid); + + return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid }; + } catch (e) { + // TODO: Ticket mit Fehldermeldung abschicken. + } + } else { + // Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter. + try { + const response = + await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ + ...ausweis, + gebaeude_aufnahme_allgemein: { + ...gebaeude_aufnahme_allgemein, + gebaeude_stammdaten: { + ...gebaeude, + }, + }, + }); + + images = await bilderHochladen(images, response.gebaeude_uid); + + return response; + } catch (e: any) { + await client.v1.tickets.erstellen.mutate({ + titel: "Ausweis konnte nicht gespeichert werden", + beschreibung: e.stack, + email: user.email ?? "", + metadata: JSON.stringify({ + ausweis, + }), + }); + // TODO: Ticket mit Fehldermeldung abschicken. + } + } + + 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; +} diff --git a/src/components/Ausweis/Ausweisart.svelte b/src/components/Ausweis/Ausweisart.svelte index a7b08eac..41b48ef9 100644 --- a/src/components/Ausweis/Ausweisart.svelte +++ b/src/components/Ausweis/Ausweisart.svelte @@ -1,224 +1,224 @@ - - -
- WICHTIG: - Bild Upload - Heizungsanlage bzw. des Wärmeerzeugers (1 bis 4 Bilder) -
- -- Seit Mai 2021 wird das neue Gebäudeenergiegesetz (GEG) in - Deutschland angewendet. Daher werden von nun an Bilder vom Gebäude - zur Einschätzung der Modernisierungsempfehlungen benötigt. Hierfür - müssen laut Gesetzgeber Detailbilder vom Sanierungszustand bzw. der - Gebäudehülle und der Anlagentechnik (Wärmeerzeuger etc.) zur - Verfügung gestellt werden. Diese Bilder erscheinen nicht auf Ihrem - Energieausweis. -
-* erforderliches Bild
-- Idealerweise sollte der Heizungsraum mit Heizkessel bzw. - Heizungsanlage fotografiert werden. Die Warmwasserleitungen bzw. die - Heizungsrohre sollten gut sichtbar sein und vorhandene bzw. nicht - vorhandene Dämmung sollte erkennbar sein. -
-
- Diese Bilder erscheinen nicht auf
- Ihrem Energieausweis!
- Bitte laden Sie hier mind. 1 Bild hoch:
-
+ WICHTIG: + Bild Upload - Heizungsanlage bzw. des Wärmeerzeugers (1 bis 4 Bilder) +
+ ++ Seit Mai 2021 wird das neue Gebäudeenergiegesetz (GEG) in + Deutschland angewendet. Daher werden von nun an Bilder vom Gebäude + zur Einschätzung der Modernisierungsempfehlungen benötigt. Hierfür + müssen laut Gesetzgeber Detailbilder vom Sanierungszustand bzw. der + Gebäudehülle und der Anlagentechnik (Wärmeerzeuger etc.) zur + Verfügung gestellt werden. Diese Bilder erscheinen nicht auf Ihrem + Energieausweis. +
+* erforderliches Bild
++ Idealerweise sollte der Heizungsraum mit Heizkessel bzw. + Heizungsanlage fotografiert werden. Die Warmwasserleitungen bzw. die + Heizungsrohre sollten gut sichtbar sein und vorhandene bzw. nicht + vorhandene Dämmung sollte erkennbar sein. +
+
+ Diese Bilder erscheinen nicht auf
+ Ihrem Energieausweis!
+ Bitte laden Sie hier mind. 1 Bild hoch:
+
ab{PRICES.BedarfsausweisGewerbe[0]}€
+ab{PRICES.BedarfsausweisWohnen[0]}€
+ab{PRICES.VerbrauchsausweisGewerbe[0]}€
+ab{PRICES.VerbrauchsausweisWohnen[0]}€
+