Merge remote-tracking branch 'origin/UMBE' into UMBE

This commit is contained in:
Moritz Utcke
2024-12-14 06:36:41 +07:00
48 changed files with 3174 additions and 2937 deletions

60
.gitignore vendored
View File

@@ -1,28 +1,32 @@
# build output # build output
dist/ dist/
# generated types # generated types
.astro/ .astro/
# log files # log files
logs/ logs/
# dependencies # dependencies
node_modules/ node_modules/
# logs # logs
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
pnpm-debug.log* pnpm-debug.log*
# lockfile # lockfile
pnpm-lock.yaml pnpm-lock.yaml
bun.lockb bun.lockb
# environment variables # environment variables
.env .env
.env.production .env.production
# macOS-specific files # macOS-specific files
.DS_Store .DS_Store
public/fonts/
*.Identifier

View File

@@ -1,86 +1,86 @@
{ {
"name": "online-energieausweis", "name": "online-energieausweis",
"version": "0.0.1", "version": "0.0.1",
"license": "GPL V3.0", "license": "GPL V3.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "bun astro dev", "dev": "bun astro dev",
"build": "bun astro build", "build": "bun astro build",
"preview": "bun astro preview", "preview": "bun astro preview",
"astro": "astro", "astro": "astro",
"test:e2e": "cypress run", "test:e2e": "cypress run",
"test:unit": "bun test", "test:unit": "bun test",
"format": "prettier --write .", "format": "prettier --write .",
"build:production": "astro build && bun --bun server.ts", "build:production": "astro build && bun --bun server.ts",
"i18n:generate": "bunx astro-i18next generate", "i18n:generate": "bunx astro-i18next generate",
"prisma:studio": "bunx prisma studio --schema=./node_modules/@ibcornelsen/database/prisma/schema.prisma" "prisma:studio": "bunx prisma studio --schema=./node_modules/@ibcornelsen/database/prisma/schema.prisma"
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@astrojs/mdx": "^3.1.9", "@astrojs/mdx": "^3.1.9",
"@astrojs/node": "^8.3.4", "@astrojs/node": "^8.3.4",
"@astrojs/svelte": "^2.2.0", "@astrojs/svelte": "^2.2.0",
"@astrojs/tailwind": "^3.1.3", "@astrojs/tailwind": "^3.1.3",
"@ibcornelsen/api": "link:@ibcornelsen/api", "@ibcornelsen/api": "link:@ibcornelsen/api",
"@ibcornelsen/database": "link:@ibcornelsen/database", "@ibcornelsen/database": "link:@ibcornelsen/database",
"@ibcornelsen/ui": "^0.0.2", "@ibcornelsen/ui": "^0.0.2",
"@mollie/api-client": "^3.7.0", "@mollie/api-client": "^3.7.0",
"@pdfme/common": "^5.1.7", "@pdfme/common": "^5.1.7",
"@pdfme/generator": "^5.1.7", "@pdfme/generator": "^5.1.7",
"@pdfme/ui": "^5.1.7", "@pdfme/ui": "^5.1.7",
"@trpc/client": "^10.45.2", "@trpc/client": "^10.45.2",
"@trpc/server": "^10.45.2", "@trpc/server": "^10.45.2",
"astro": "^4.16.10", "astro": "^4.16.10",
"astro-i18next": "1.0.0-beta.21", "astro-i18next": "1.0.0-beta.21",
"body-scroll-lock": "^4.0.0-beta.0", "body-scroll-lock": "^4.0.0-beta.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"bun": "^1.1.34", "bun": "^1.1.34",
"caniuse-lite": "^1.0.30001684", "caniuse-lite": "^1.0.30001684",
"csvtojson": "^2.0.10", "csvtojson": "^2.0.10",
"express": "^4.21.1", "express": "^4.21.1",
"flag-icons": "^6.15.0", "flag-icons": "^6.15.0",
"fontkit": "^2.0.4", "fontkit": "^2.0.4",
"i18next": "^23.16.5", "i18next": "^23.16.5",
"i18next-fs-backend": "^2.3.2", "i18next-fs-backend": "^2.3.2",
"i18next-http-backend": "^2.6.2", "i18next-http-backend": "^2.6.2",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"js-interpolate": "^1.0.1", "js-interpolate": "^1.0.1",
"katex": "^0.16.11", "katex": "^0.16.11",
"moment": "^2.30.1", "moment": "^2.30.1",
"moment-timezone": "^0.5.46", "moment-timezone": "^0.5.46",
"postcss-nested": "^7.0.2", "postcss-nested": "^7.0.2",
"radix-svelte-icons": "^1.0.0", "radix-svelte-icons": "^1.0.0",
"sass": "^1.80.6", "sass": "^1.80.6",
"svelte": "^3.59.2", "svelte": "^3.59.2",
"svelte-dialogs": "^1.2.2", "svelte-dialogs": "^1.2.2",
"svelte-preprocess": "^5.1.4", "svelte-preprocess": "^5.1.4",
"svelte-ripple-action": "^1.0.6", "svelte-ripple-action": "^1.0.6",
"tailwindcss": "^3.4.14", "tailwindcss": "^3.4.14",
"trpc-openapi": "^1.2.0", "trpc-openapi": "^1.2.0",
"uuid": "^9.0.1", "uuid": "^9.0.1",
"zod": "^3.23.8" "zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@faker-js/faker": "^8.4.1", "@faker-js/faker": "^8.4.1",
"@tailwindcss/typography": "^0.5.15", "@tailwindcss/typography": "^0.5.15",
"@types/body-scroll-lock": "^3.1.2", "@types/body-scroll-lock": "^3.1.2",
"@types/express": "^5.0.0", "@types/express": "^5.0.0",
"@types/fontkit": "^2.0.7", "@types/fontkit": "^2.0.7",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
"@types/uuid": "^9.0.8", "@types/uuid": "^9.0.8",
"@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0", "@typescript-eslint/parser": "^5.62.0",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"bun-types": "^1.1.34", "bun-types": "^1.1.34",
"cypress": "^13.15.2", "cypress": "^13.15.2",
"cypress-file-upload": "^5.0.8", "cypress-file-upload": "^5.0.8",
"daisyui": "^4.12.14", "daisyui": "^4.12.14",
"eslint": "~8.15.0", "eslint": "~8.15.0",
"eslint-config-prettier": "8.1.0", "eslint-config-prettier": "8.1.0",
"postcss": "^8.4.49", "postcss": "^8.4.49",
"postcss-import": "^16.1.0", "postcss-import": "^16.1.0",
"postcss-nesting": "^13.0.1", "postcss-nesting": "^13.0.1",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"typescript": "^4.9.5" "typescript": "^4.9.5"
} }
} }

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\antique-olive-std.zip

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\font (1).zip

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\font (1).zip

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\font (1).zip

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\font (1).zip

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\font (1).zip

View File

@@ -1,3 +0,0 @@
[ZoneTransfer]
ZoneId=3
ReferrerUrl=C:\Users\all\Downloads\font (1).zip

View File

@@ -1,86 +1,86 @@
import { import {
BenutzerClient, BenutzerClient,
GebaeudeAufnahmeClient, GebaeudeAufnahmeClient,
GebaeudeClient, GebaeudeClient,
UploadedGebaeudeBild, UploadedGebaeudeBild,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "#components/Ausweis/types.js"; } from "#components/Ausweis/types.js";
import { exclude } from "#lib/exclude.js"; import { exclude } from "#lib/exclude.js";
import { client } from "src/trpc.js"; import { client } from "src/trpc.js";
import { bilderHochladen } from "./bilderHochladen.js"; import { bilderHochladen } from "./bilderHochladen.js";
import { addNotification } from "@ibcornelsen/ui"; import { addNotification } from "@ibcornelsen/ui";
export async function verbrauchsausweisWohnenSpeichern( export async function verbrauchsausweisWohnenSpeichern(
ausweis: VerbrauchsausweisWohnenClient, ausweis: VerbrauchsausweisWohnenClient,
gebaeude: GebaeudeClient, gebaeude: GebaeudeClient,
gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient, gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient,
images: (UploadedGebaeudeBild & { base64?: string })[], images: (UploadedGebaeudeBild & { base64?: string })[],
user: BenutzerClient user: BenutzerClient
) { ) {
if (ausweis.uid) { if (ausweis.uid) {
// Anscheinend wurde der Ausweis bereits erstellt und hat eine UID. // Anscheinend wurde der Ausweis bereits erstellt und hat eine UID.
// Jetzt müssen wir ihn nun nur noch abspeichern. // Jetzt müssen wir ihn nun nur noch abspeichern.
try { try {
await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({
...ausweis, ...ausweis,
gebaeude_aufnahme_allgemein: { gebaeude_aufnahme_allgemein: {
...exclude( ...exclude(
gebaeude_aufnahme_allgemein, gebaeude_aufnahme_allgemein,
["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"] ["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"]
), ),
gebaeude_stammdaten: { gebaeude_stammdaten: {
...exclude(gebaeude, [ ...exclude(gebaeude, [
"gebaeude_bilder", "gebaeude_bilder",
]), ]),
}, },
}, },
}); });
images = await bilderHochladen(images, gebaeude.uid); images = await bilderHochladen(images, gebaeude.uid);
return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid }; return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid };
} catch (e) { } catch (e) {
// TODO: Ticket mit Fehldermeldung abschicken. // TODO: Ticket mit Fehldermeldung abschicken.
} }
} else { } else {
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter. // Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
try { try {
const response = const response =
await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({
...ausweis, ...ausweis,
gebaeude_aufnahme_allgemein: { gebaeude_aufnahme_allgemein: {
...gebaeude_aufnahme_allgemein, ...gebaeude_aufnahme_allgemein,
gebaeude_stammdaten: { gebaeude_stammdaten: {
...gebaeude, ...gebaeude,
}, },
}, },
}); });
images = await bilderHochladen(images, response.gebaeude_uid); images = await bilderHochladen(images, response.gebaeude_uid);
return response; return response;
} catch (e: any) { } catch (e: any) {
await client.v1.tickets.erstellen.mutate({ await client.v1.tickets.erstellen.mutate({
titel: "Ausweis konnte nicht gespeichert werden", titel: "Ausweis konnte nicht gespeichert werden",
beschreibung: e.stack, beschreibung: e.stack,
email: user.email ?? "", email: user.email ?? "",
metadata: JSON.stringify({ metadata: JSON.stringify({
ausweis, ausweis,
}), }),
}); });
// TODO: Ticket mit Fehldermeldung abschicken. // TODO: Ticket mit Fehldermeldung abschicken.
} }
} }
addNotification({ addNotification({
dismissable: false, dismissable: false,
message: message:
"Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.", "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
subtext: subtext:
"Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.", "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
timeout: 6000, timeout: 6000,
type: "error", type: "error",
}); });
return null; return null;
} }

View File

@@ -1,224 +1,224 @@
<script lang="ts"> <script lang="ts">
console.log("Hallo Welt");
import HelpLabel from "#labels/HelpLabel.svelte"; import HelpLabel from "#labels/HelpLabel.svelte";
import Inputlabel from "#labels/InputLabel.svelte"; import Inputlabel from "#labels/InputLabel.svelte";
//import Label from "#components/Label.svelte"; //import Label from "#components/Label.svelte";
import { auditHeizungGebaeudeBaujahr } from "../Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js"; import { auditHeizungGebaeudeBaujahr } from "../Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js";
import { addNotification, deleteNotification } from "@ibcornelsen/ui"; import { addNotification, deleteNotification } from "@ibcornelsen/ui";
import TagInput from "../TagInput.svelte"; import TagInput from "../TagInput.svelte";
import type { import type {
BedarfsausweisWohnen, BedarfsausweisWohnen,
VerbrauchsausweisGewerbe, VerbrauchsausweisGewerbe,
} from "@ibcornelsen/database/client"; } from "@ibcornelsen/database/client";
import { Enums } from "@ibcornelsen/database/client"; import { Enums } from "@ibcornelsen/database/client";
import { import {
GebaeudeAufnahmeClient, GebaeudeAufnahmeClient,
GebaeudeClient, GebaeudeClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "./types.js"; } from "./types.js";
export let gebaeude: GebaeudeClient; export let gebaeude: GebaeudeClient;
export let ausweis: export let ausweis:
| VerbrauchsausweisWohnenClient | VerbrauchsausweisWohnenClient
| VerbrauchsausweisGewerbe | VerbrauchsausweisGewerbe
| BedarfsausweisWohnen; | BedarfsausweisWohnen;
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient; export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
</script> </script>
<div <div
class="bereich-box grid class="bereich-box grid
grid-cols-1 gap-x-4 gap-y-8 grid-cols-1 gap-x-4 gap-y-8
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8 sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
" "
> >
<!-- Anlass für Energieausweis --> <!-- Anlass für Energieausweis -->
<div class="input-standard order-1 md:order-1 xl:order-1"> <div class="input-standard order-1 md:order-1 xl:order-1">
<Inputlabel title="Anlass *"></Inputlabel> <Inputlabel title="Anlass *"></Inputlabel>
<select <select
id="ausstellgrund" id="ausstellgrund"
class="rounded-e-none" class="rounded-e-none"
name="ausstellgrund" name="ausstellgrund"
placeholder="Anlass" placeholder="Anlass"
required required
> >
{#each Object.entries(Enums.Ausstellgrund) as [name, ausstellgrund]} {#each Object.entries(Enums.Ausstellgrund) as [name, ausstellgrund]}
<option value={ausstellgrund}>{name}</option> <option value={ausstellgrund}>{name}</option>
{/each} {/each}
</select> </select>
<div class="help-label"> <div class="help-label">
<HelpLabel>Bitte wählen Sie den Anlass.</HelpLabel> <HelpLabel>Bitte wählen Sie den Anlass.</HelpLabel>
</div> </div>
</div> </div>
<!-- Gebäudetyp --> <!-- Gebäudetyp -->
<div class="input-standard order-2 md:order-3 xl:order-2"> <div class="input-standard order-2 md:order-3 xl:order-2">
<Inputlabel title="Gebäudetyp *"></Inputlabel> <Inputlabel title="Gebäudetyp *"></Inputlabel>
<select <select
name="gebaeudetyp" name="gebaeudetyp"
data-test="gebaeudetyp" data-test="gebaeudetyp"
required required
bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp} bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp}
> >
<option disabled>Bitte auswählen</option> <option disabled>Bitte auswählen</option>
<option value="Einfamilienhaus">Einfamilienhaus</option> <option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Freistehendes Einfamilienhaus" <option value="Freistehendes Einfamilienhaus"
>Freistehendes Einfamilienhaus</option >Freistehendes Einfamilienhaus</option
> >
<option value="Freistehendes Zweifamilienhaus" <option value="Freistehendes Zweifamilienhaus"
>Freistehendes Zweifamilienhaus</option >Freistehendes Zweifamilienhaus</option
> >
<option value="Doppelhaushälfte">Doppelhaushälfte</option> <option value="Doppelhaushälfte">Doppelhaushälfte</option>
<option value="Reihenendhaus">Reihenendhaus</option> <option value="Reihenendhaus">Reihenendhaus</option>
<option value="Reihenmittelhaus">Reihenmittelhaus</option> <option value="Reihenmittelhaus">Reihenmittelhaus</option>
<option value="Mehrfamilienhaus">Mehrfamilienhaus</option> <option value="Mehrfamilienhaus">Mehrfamilienhaus</option>
<option value="Wohn- und Geschäftshaus" <option value="Wohn- und Geschäftshaus"
>Wohn- und Geschäftshaus</option >Wohn- und Geschäftshaus</option
> >
<option value="Atrium-Bungalow">Atrium-Bungalow</option> <option value="Atrium-Bungalow">Atrium-Bungalow</option>
<option value="Winkelbungalow">Winkelbungalow</option> <option value="Winkelbungalow">Winkelbungalow</option>
</select> </select>
<div class="help-label"> <div class="help-label">
<HelpLabel>Bitte wählen Sie hier den Gebäudetyp aus.</HelpLabel> <HelpLabel>Bitte wählen Sie hier den Gebäudetyp aus.</HelpLabel>
</div> </div>
</div> </div>
<!-- Anzahl der Wohnungen --> <!-- Anzahl der Wohnungen -->
<div class="input-standard order-3 md:order-5 xl:order-3"> <div class="input-standard order-3 md:order-5 xl:order-3">
<Inputlabel title="Anzahl Wohnungen *"></Inputlabel> <Inputlabel title="Anzahl Wohnungen *"></Inputlabel>
<input <input
id="einheiten" id="einheiten"
class="rounded-e-none" class="rounded-e-none"
name="einheiten" name="einheiten"
type="number" type="number"
required required
autocomplete="off" autocomplete="off"
data-msg="Pflichtfeld" data-msg="Pflichtfeld"
maxlength="3" maxlength="3"
bind:value={gebaeude_aufnahme_allgemein.einheiten} bind:value={gebaeude_aufnahme_allgemein.einheiten}
/> />
<div class="help-label"> <div class="help-label">
<HelpLabel> <HelpLabel>
Bitte geben Sie hier die Anzahl der Wohnungen ein, die sich im Bitte geben Sie hier die Anzahl der Wohnungen ein, die sich im
Gebäude befinden. Gebäude befinden.
</HelpLabel> </HelpLabel>
</div> </div>
</div> </div>
<!-- Sanierungsstatus --> <!-- Sanierungsstatus -->
<div class="input-standard order-4 md:order-2 xl:order-4"> <div class="input-standard order-4 md:order-2 xl:order-4">
<Inputlabel title="Sanierungsstatus *"></Inputlabel> <Inputlabel title="Sanierungsstatus *"></Inputlabel>
<select <select
name="saniert" name="saniert"
class="" class=""
required required
bind:value={gebaeude_aufnahme_allgemein.saniert} bind:value={gebaeude_aufnahme_allgemein.saniert}
> >
<option disabled selected value={false}>Bitte auswählen</option> <option disabled selected value={false}>Bitte auswählen</option>
<option value={true}>saniert</option> <option value={true}>saniert</option>
<option value={false}>unsaniert</option> <option value={false}>unsaniert</option>
</select> </select>
<div class="help-label"> <div class="help-label">
<HelpLabel> <HelpLabel>
Bitte geben Sie an ob das Gebäude energetisch saniert oder Bitte geben Sie an ob das Gebäude energetisch saniert oder
unsaniert ist. Wenn das Dach mindestens 12 cm gedämmt und unsaniert ist. Wenn das Dach mindestens 12 cm gedämmt und
Heizung sowie Fenster nicht älter als 30 Jahre sind, können Sie Heizung sowie Fenster nicht älter als 30 Jahre sind, können Sie
saniert auswählen. saniert auswählen.
</HelpLabel> </HelpLabel>
</div> </div>
</div> </div>
<!-- Baujahr --> <!-- Baujahr -->
<div class="input-standard order-5 md:order-4 xl:order-5"> <div class="input-standard order-5 md:order-4 xl:order-5">
<Inputlabel title="Baujahr *"></Inputlabel> <Inputlabel title="Baujahr *"></Inputlabel>
<TagInput <TagInput
name="baujahr_gebaeude" name="baujahr_gebaeude"
type="number" type="number"
onlyUnique={true} onlyUnique={true}
minChars={4} minChars={4}
onFocusIn={() => { onFocusIn={() => {
addNotification({ addNotification({
message: "Info", message: "Info",
subtext: subtext:
"Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrem Gebäude durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.", "Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrem Gebäude durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.",
dismissable: true, dismissable: true,
uid: "GEBAEUDE_BAUJAHR", uid: "GEBAEUDE_BAUJAHR",
timeout: 0, timeout: 0,
type: "info", type: "info",
}); });
}} }}
onFocusOut={() => { onFocusOut={() => {
deleteNotification("GEBAEUDE_BAUJAHR"); deleteNotification("GEBAEUDE_BAUJAHR");
}} }}
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein) className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)
? "linked" ? "linked"
: ""} : ""}
bind:tags={gebaeude_aufnahme_allgemein.baujahr_gebaeude} bind:tags={gebaeude_aufnahme_allgemein.baujahr_gebaeude}
/> />
<div class="help-label"> <div class="help-label">
<HelpLabel> <HelpLabel>
Bitte geben Sie hier das Baujahr des Gebäudes ein. Sollte eine Bitte geben Sie hier das Baujahr des Gebäudes ein. Sollte eine
eine grundlegende Sanierung von Dach, Fenster und Heizung eine grundlegende Sanierung von Dach, Fenster und Heizung
stattgefunden haben, dann berücksichtigen Sie das in dem Sie bei stattgefunden haben, dann berücksichtigen Sie das in dem Sie bei
Sanierungsstatus -saniert- angeben. Sanierungsstatus -saniert- angeben.
</HelpLabel> </HelpLabel>
</div> </div>
</div> </div>
<!-- Baujahr Heizung --> <!-- Baujahr Heizung -->
<div class="input-standard order-6 md:order-6 xl:order-6"> <div class="input-standard order-6 md:order-6 xl:order-6">
<Inputlabel title="Baujahr Heizung *"></Inputlabel> <Inputlabel title="Baujahr Heizung *"></Inputlabel>
<TagInput <TagInput
name="baujahr_heizung" name="baujahr_heizung"
type="number" type="number"
onlyUnique={true} onlyUnique={true}
minChars={4} minChars={4}
onFocusIn={() => { onFocusIn={() => {
addNotification({ addNotification({
message: "Info", message: "Info",
subtext: subtext:
"Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrer Heizung durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.", "Wussten sie, dass sie mehrere Jahre angeben können in denen z.B. Renovierungen an ihrer Heizung durchgeführt wurden. Drücken sie dafür einfach <kbd>Enter</kbd> oder <kbd>Space</kbd> nach jedem Jahr.",
dismissable: true, dismissable: true,
uid: "HEIZUNG_BAUJAHR", uid: "HEIZUNG_BAUJAHR",
timeout: 0, timeout: 0,
type: "info", type: "info",
}); });
}} }}
onFocusOut={() => { onFocusOut={() => {
deleteNotification("HEIZUNG_BAUJAHR"); deleteNotification("HEIZUNG_BAUJAHR");
}} }}
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein) className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)
? "linked" ? "linked"
: ""} : ""}
bind:tags={gebaeude_aufnahme_allgemein.baujahr_heizung} bind:tags={gebaeude_aufnahme_allgemein.baujahr_heizung}
/> />
<div class="help-label"> <div class="help-label">
<HelpLabel> <HelpLabel>
Bitte geben Sie hier das Baujahr der Heizungsanlage ein. Sollten Bitte geben Sie hier das Baujahr der Heizungsanlage ein. Sollten
unterschiedliche Baujahre vorliegen, dann geben Sie einen unterschiedliche Baujahre vorliegen, dann geben Sie einen
Zeitbereich ein <br />z.B. 1994-2001. Zeitbereich ein <br />z.B. 1994-2001.
</HelpLabel> </HelpLabel>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -10,7 +10,7 @@
</script> </script>
<div class="bereich-box grid <div id="B" class="bereich-box grid
grid-cols-1 gap-x-4 gap-y-8 grid-cols-1 gap-x-4 gap-y-8
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8 sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8

View File

@@ -1,67 +1,67 @@
<script lang="ts"> <script lang="ts">
import ImageGrid from "../ImageGrid.svelte";; import ImageGrid from "../ImageGrid.svelte";;
import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client"; import { Enums, type BedarfsausweisWohnen, type VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client";
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js"; import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "./types.js";
export let images: UploadedGebaeudeBild[] = []; export let images: UploadedGebaeudeBild[] = [];
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
export let gebaeude: GebaeudeClient; export let gebaeude: GebaeudeClient;
</script> </script>
<div class="grid grid-cols-2 gap-4"> <div class="grid grid-cols-2 gap-4">
<div class="rounded-lg border-4 p-4 bg-white"> <div class="rounded-lg border-4 p-4 bg-white">
<input type="file" class="image_upload" multiple /> <input type="file" class="image_upload" multiple />
<p class="font-bold mb-2"> <p class="font-bold mb-2">
<span class="text-red-500">WICHTIG:</span> <span class="text-red-500">WICHTIG:</span>
Bild Upload - Heizungsanlage bzw. des Wärmeerzeugers (1 bis 4 Bilder) Bild Upload - Heizungsanlage bzw. des Wärmeerzeugers (1 bis 4 Bilder)
</p> </p>
<p> <p>
Seit Mai 2021 wird das neue Gebäudeenergiegesetz (GEG) in Seit Mai 2021 wird das neue Gebäudeenergiegesetz (GEG) in
Deutschland angewendet. Daher werden von nun an Bilder vom Gebäude Deutschland angewendet. Daher werden von nun an Bilder vom Gebäude
zur Einschätzung der Modernisierungsempfehlungen benötigt. Hierfür zur Einschätzung der Modernisierungsempfehlungen benötigt. Hierfür
müssen laut Gesetzgeber Detailbilder vom Sanierungszustand bzw. der müssen laut Gesetzgeber Detailbilder vom Sanierungszustand bzw. der
Gebäudehülle und der Anlagentechnik (Wärmeerzeuger etc.) zur Gebäudehülle und der Anlagentechnik (Wärmeerzeuger etc.) zur
Verfügung gestellt werden. Diese Bilder erscheinen nicht auf Ihrem Verfügung gestellt werden. Diese Bilder erscheinen nicht auf Ihrem
Energieausweis. Energieausweis.
</p> </p>
<br /> <br />
<ol> <ol>
<li>1.Bild : Heizungsraum mit Heizkessel bzw. Heizungsanlage*</li> <li>1.Bild : Heizungsraum mit Heizkessel bzw. Heizungsanlage*</li>
<li> <li>
2.Bild : <em 2.Bild : <em
>(wenn möglich, Warmwasserleitungen bzw. die Heizungsrohre)</em >(wenn möglich, Warmwasserleitungen bzw. die Heizungsrohre)</em
> >
</li> </li>
<li> <li>
3.Bild : <em 3.Bild : <em
>(wenn möglich, Detailbild des Wärmeerzeugers bzw. >(wenn möglich, Detailbild des Wärmeerzeugers bzw.
Heizkessel)</em Heizkessel)</em
> >
</li> </li>
<li> <li>
4.Bild : <em 4.Bild : <em
>(wenn möglich, Bild des Typenschildes der Heizung)</em >(wenn möglich, Bild des Typenschildes der Heizung)</em
> >
</li> </li>
</ol> </ol>
<p>* erforderliches Bild</p> <p>* erforderliches Bild</p>
<br /> <br />
<p> <p>
Idealerweise sollte der Heizungsraum mit Heizkessel bzw. Idealerweise sollte der Heizungsraum mit Heizkessel bzw.
Heizungsanlage fotografiert werden. Die Warmwasserleitungen bzw. die Heizungsanlage fotografiert werden. Die Warmwasserleitungen bzw. die
Heizungsrohre sollten gut sichtbar sein und vorhandene bzw. nicht Heizungsrohre sollten gut sichtbar sein und vorhandene bzw. nicht
vorhandene Dämmung sollte erkennbar sein. vorhandene Dämmung sollte erkennbar sein.
</p> </p>
</div> </div>
<div class="rounded-lg border-4 p-4 bg-white"> <div class="rounded-lg border-4 p-4 bg-white">
<p> <p>
Diese Bilder erscheinen <span class="text-red-500">nicht</span> auf Diese Bilder erscheinen <span class="text-red-500">nicht</span> auf
Ihrem Energieausweis!<br /> Ihrem Energieausweis!<br />
<strong>Bitte laden Sie hier mind. 1 Bild hoch:</strong> <strong>Bitte laden Sie hier mind. 1 Bild hoch:</strong>
</p> </p>
<ImageGrid name={"heizung_image"} kategorie={Enums.BilderKategorie.Heizung} max={4} bind:gebaeude bind:images bind:ausweis /> <ImageGrid name={"heizung_image"} kategorie={Enums.BilderKategorie.Heizung} max={4} bind:gebaeude bind:images bind:ausweis />
</div> </div>
</div> </div>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,56 @@
<script>
import { PRICES } from "#lib/constants";
</script>
<div id ="card-BAG-promo" class="box card">
<div class="">
<h2>Bedarfsausweis Gewerbe</h2>
<hr class="mb-2">
<div class="flex flex-row mb-2 mt-2 w-full items-end">
<div>
<img class="w-[100%] !min-w-[100px]" src="/images/right-sidebar/UMBE_gewerbegebaeude.svg" alt="Gewerbe Bedarfsausweis"/>
</div>
<div>
<p class="promo tracking-tighter text-2xl text-gray-700 pl-3">ab<span class="promo pl-2">{PRICES.BedarfsausweisGewerbe[0]}</span></p>
</div>
</div>
<div class="white">
<div class="variante">fundiert (empfohlen)</div>
<div class="services"><div>Mehrzonenmodell nach DIN 18599.</div><div class="check"></div></div>
<div class="services"><div>Zulässig bei Vermietung oder Verkauf.</div><div class="check"></div></div>
<div class="services"><div>Grundlage für Sanierungsvarianten.</div><div class="check-no"></div></div>
<div class="services"><div>Objektiveres, besser vergleichbares Ergebnis.</div><div class="check-no"></div></div>
</div>
<a href="./energieausweis-erstellen/bedarfsausweis-gewerbe/" id="link-VA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-secondary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >jetzt online erstellen</a>
<a href="./energieausweis-erstellen/bedarfsausweis-gewerbe/" id="link-VA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-primary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >zur Produktübersicht</a>
</div>
</div>
<style lang="scss">
#card-BAG-promo{
.white{@apply text-center text-black p-2 grid grid-rows-subgrid row-span-6}
.variante{@apply w-fit text-black justify-self-end mr-3}
.variante{@apply text-2xl}
.services{@apply text-start py-2 grid grid-cols-[1fr_minmax(10px,50px)]}
.services:not(:last-child){@apply border-b-[1px] border-gray-200}
.check{@apply justify-self-end font-bold text-green-700}
.check-no{@apply justify-self-end font-bold text-red-700}
}
</style>

View File

@@ -0,0 +1,56 @@
<script>
import { PRICES } from "#lib/constants";
</script>
<div id ="card-BA-promo" class="box card">
<div class="">
<h2>Bedarfssausweis Wohngebäude</h2>
<hr class="mb-2">
<div class="flex flex-row mb-2 mt-2 w-full items-end">
<div>
<img class="w-[100%] !min-w-[100px]" src="/images/right-sidebar/UMBE_wohngebaeude.svg" alt="Wohnhaus Bedarfsausweis"/>
</div>
<div>
<p class="promo tracking-tighter text-2xl text-gray-700 pl-3">ab<span class="promo pl-2">{PRICES.BedarfsausweisWohnen[0]}</span></p>
</div>
</div>
<div class="white">
<div class="variante">fundiert (empfohlen)</div>
<div class="services"><div>Erfassung der Gebäudegeometrie.</div><div class="check"></div></div>
<div class="services"><div>Für Vermietung, Verkauf und Finanzierung.</div><div class="check"></div></div>
<div class="services"><div>Zulässig auch für unsanierte Objekte.</div><div class="check"></div></div>
<div class="services"><div>Kann als Grundlage für den ISFP dienen.</div><div class="check"></div></div>
<div class="services"><div>Objektivere Berechnungsmethode nach DIN 18599.</div><div class="check"></div></div>
</div>
<a href="./energieausweis-erstellen/bedarfsausweis-wohngebaeude/" id="link-BA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-secondary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >jetzt online erstellen</a>
<a href="./energieausweis-erstellen/bedarfsausweis-wohngebaeude/" id="link-BA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-primary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >zur Produktübersicht</a>
</div>
</div>
<style lang="scss">
#card-BA-promo{
.white{@apply text-center text-black p-2 grid grid-rows-subgrid row-span-6}
.variante{@apply w-fit text-black justify-self-end mr-3}
.variante{@apply text-2xl}
.services{@apply text-start py-2 grid grid-cols-[1fr_minmax(10px,50px)]}
.services:not(:last-child){@apply border-b-[1px] border-gray-200}
.check{@apply justify-self-end font-bold text-green-700}
}
</style>

View File

@@ -0,0 +1,56 @@
<script>
import { PRICES } from "#lib/constants";
</script>
<div id ="card-VAG-promo" class="box card ">
<div class="">
<h2>Verbrauchsausweis Gewerbe</h2>
<hr class="mb-2">
<div class="flex flex-row mb-2 mt-2 w-full items-end">
<div>
<img class="w-[100%] !min-w-[100px]" src="/images/right-sidebar/UMBE_gewerbegebaeude.svg" alt="Gewerbe Verbrauchsausweis"/>
</div>
<div>
<p class="promo tracking-tighter text-2xl text-gray-700 pl-3">ab<span class="promo pl-2">{PRICES.VerbrauchsausweisGewerbe[0]}</span></p>
</div>
</div>
<div class="white">
<div class="variante">einfach</div>
<div class="services"><div>3 Jahresverbräuche von Heizung Gebäudestrom nötig.</div><div class="check"></div></div>
<div class="services"><div>Zulässig bei Vermietung oder Verkauf.</div><div class="check"></div></div>
<div class="services"><div>Für bauliche und energetische Maßnahmen ungeeignet.</div><div class="check-no"></div></div>
<div class="services"><div>Wird nicht immer bei den Banken akzeptiert.</div><div class="check-no"></div></div>
</div>
<a href="./energieausweis-erstellen/verbrauchsausweis-gewerbe/" id="link-VA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-secondary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >jetzt online erstellen</a>
<a href="./energieausweis-erstellen/verbrauchsausweis-gewerbe/" id="link-VA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-primary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >zur Produktübersicht</a>
</div>
</div>
<style lang="scss">
#card-VAG-promo{
.white{@apply text-center text-black p-2 grid grid-rows-subgrid row-span-6}
.variante{@apply w-fit text-black justify-self-end mr-3}
.variante{@apply text-2xl}
.services{@apply text-start py-2 grid grid-cols-[1fr_minmax(10px,50px)]}
.services:not(:last-child){@apply border-b-[1px] border-gray-200}
.check{@apply justify-self-end font-bold text-green-700}
.check-no{@apply justify-self-end font-bold text-red-700}
}
</style>

View File

@@ -0,0 +1,57 @@
<script>
import { PRICES } from "#lib/constants";
</script>
<div id ="card-VA-promo" class="box card">
<div class="">
<h2>Verbrauchsausweis Wohngebäude</h2>
<hr class="mb-2">
<div class="flex flex-row mb-2 mt-2 w-full items-end">
<div>
<img class="w-[100%] !min-w-[100px]" src="/images/right-sidebar/UMBE_wohngebaeude.svg" alt="Wohnhaus Verbrauchsausweis"/>
</div>
<div>
<p class="promo tracking-tighter text-2xl text-gray-700 pl-3">ab<span class="promo pl-2">{PRICES.VerbrauchsausweisWohnen[0]}</span></p>
</div>
</div>
<div class="white">
<div class="variante">einfach</div>
<div class="services"><div>3 Jahresverbräuche der Heizung benötigt.</div><div class="check"></div></div>
<div class="services"><div>Zulässig bei Vermietung oder Verkauf.</div><div class="check"></div></div>
<div class="services"><div>Unzulässig bei unsanierten Gebäuden vor 1978.</div><div class="check-no"></div></div>
<div class="services"><div>Ungenau durch individuelles Heizverhalten.</div><div class="check-no"></div></div>
<div class="services"><div>Wird nicht immer bei den Banken akzeptiert.</div><div class="check-no"></div></div>
</div>
<a href="./energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" id="link-VA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-secondary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >jetzt online erstellen</a>
<a href="./energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" id="link-VA-promo"
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-primary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
hover:bg-primary
" >zur Produktübersicht</a>
</div>
</div>
<style lang="scss">
#card-VA-promo{
.white{@apply text-center text-black p-2 grid grid-rows-subgrid row-span-6}
.variante{@apply w-fit text-black justify-self-end mr-3}
.variante{@apply text-2xl}
.services{@apply text-start py-2 grid grid-cols-[1fr_minmax(10px,50px)]}
.services:not(:last-child){@apply border-b-[1px] border-gray-200}
.check{@apply justify-self-end font-bold text-green-700}
.check-no{@apply justify-self-end font-bold text-red-700}
}
</style>

View File

@@ -1,5 +1,5 @@
--- ---
import Login from "#sidebarCards/card-login.svelte"; import HeaderLogin from "#header/headerLogin.svelte";
--- ---
<header> <header>
@@ -56,7 +56,7 @@ lg:px-0 lg:gap-x-4">
</div> </div>
<div class="w-full justify-self-center"> <div class="w-full justify-self-center">
<Login client:load /> <HeaderLogin />
</div> </div>
</div> </div>

View File

@@ -2,9 +2,8 @@
import { PRICES } from "#lib/constants"; import { PRICES } from "#lib/constants";
</script> </script>
<div id ="card-BA-G-promo" <div id ="cardBAGpromo"
class=" box card hidden bg-white px-6 py-4 mb-5 class=" box card">
lg:block">
<div class="grid"> <div class="grid">

View File

@@ -2,8 +2,8 @@
import { PRICES } from "#lib/constants"; import { PRICES } from "#lib/constants";
</script> </script>
<div id ="card-BA-promo" <div id ="cardBApromo"
class=" box card bg-white px-6 py-4 mb-5"> class=" box card">
<div class="grid"> <div class="grid">

View File

@@ -1,4 +1,4 @@
<div id ="card-contact" class="box card bg-white px-6 py-4 mb-5"> <div id ="cardContact" class="box card">
<div class="grid grid-cols-[max-content,1fr]"> <div class="grid grid-cols-[max-content,1fr]">
<div class=""> <div class="">

View File

@@ -23,9 +23,8 @@
</script> </script>
<div <div
id="card-login" id="cardLogin"
class="box card hidden bg-white px-6 py-4 mb-5 class="box card"
lg:block lg:ring-2 lg:ring-secondary/50"
> >
<div class="grid"> <div class="grid">
<div class="grid grid-cols-[2rem,1fr,1fr]"> <div class="grid grid-cols-[2rem,1fr,1fr]">

View File

@@ -91,14 +91,14 @@ if(innerWidth>1024){
<nav id="card-navigation" class="card-navigation hidden box ring-0 md:ring-2 ring-primary/50 rounded-tr-none lg:block"> <nav id="cardNavigation" class="cardNavigation box hidden ring-0 md:ring-2 ring-primary/50 rounded-tr-none lg:block mb-0 lg:mb-5">
<!-- svelte-ignore a11y-mouse-events-have-key-events --> <!-- svelte-ignore a11y-mouse-events-have-key-events -->
<div class="nav-element dropdown lg:dropdown-right" on:click={dropdown} on:keydown={dropdown} on:mouseover={hover} on:mouseleave={hoverout}> <div class="nav-element dropdown lg:dropdown-right" on:click={dropdown} on:keydown={dropdown} on:mouseover={hover} on:mouseleave={hoverout}>
{#if innerWidth > 1023} {#if innerWidth > 1023}
<a href={undefined} class="nav-element-child lg:rounded-t-lg xl:rounded-t-xl " >Energieausweis erstellen<span class="dd-symbol-clone"></span><span class="dd-symbol"></span></a> <a href={undefined} class="nav-element-child lg:rounded-t-lg xl:rounded-t-xl" >Energieausweis erstellen<span class="dd-symbol-clone"></span><span class="dd-symbol"></span></a>
{:else} {:else}
<a href={undefined} class="nav-element-child xl:rounded-t-[.75rem]">Energieausweis erstellen<span class="dd-symbol-clone"></span><span class="dd-symbol"></span></a> <a href={undefined} class="nav-element-child lg:rounded-t-lg xl:rounded-t-xl">Energieausweis erstellen<span class="dd-symbol-clone"></span><span class="dd-symbol"></span></a>
{/if} {/if}
<ul class="dropdown-content energieasusweis-erstellen"> <ul class="dropdown-content energieasusweis-erstellen">
@@ -201,8 +201,6 @@ if(innerWidth>1024){
<style lang="scss"> <style lang="scss">
.dd-symbol::before{ .dd-symbol::before{
content:''; content:'';
font-size:0.95rem; font-size:0.95rem;

View File

@@ -2,12 +2,8 @@
import { PRICES } from "#lib/constants"; import { PRICES } from "#lib/constants";
</script> </script>
<div id ="card-price-info" <div id ="cardPreisinfo" class="box card hidden lg:block">
class=" box card hidden bg-white px-4 py-2 mt-5
lg:block">
<div class="">
<h2>Was wird der Energieausweis kosten?</h2> <h2>Was wird der Energieausweis kosten?</h2>
<hr class="mb-4 bg-primary h-[2px]"> <hr class="mb-4 bg-primary h-[2px]">
<p>Verbrauchsausweis Wohngebäude</p> <p>Verbrauchsausweis Wohngebäude</p>
@@ -29,13 +25,8 @@
<p>ab&nbsp;450€ inkl.&nbsp;MwSt.</p> <p>ab&nbsp;450€ inkl.&nbsp;MwSt.</p>
<hr class="mt-2"> <hr class="mt-2">
</div>
</div> </div>
<style lang="scss"> <style lang="scss">
</style> </style>

View File

@@ -2,8 +2,8 @@
import { PRICES } from "#lib/constants"; import { PRICES } from "#lib/constants";
</script> </script>
<div id ="card-VA-G-promo" <div id ="cardVAGpromo"
class=" box card bg-white px-6 py-4 mb-5"> class=" box card">
<div class="grid"> <div class="grid">

View File

@@ -1,29 +1,33 @@
<script> <script>
import { PRICES } from "#lib/constants"; import { PRICES } from "#lib/constants";
</script> </script>
<div id="card-VA-promo" class=" box card bg-white px-6 py-4 mb-5"> <div id ="cardVApromo" class=" box card">
<div class="grid">
<h2>Verbrauchsausweis Wohngebäude</h2> <div id="card-VA-promo" class=" box card bg-white px-6 py-4 mb-5">
<hr class="mb-4" /> <div class="grid">
<img <h2>Verbrauchsausweis Wohngebäude</h2>
class="w-[70%] justify-self-center !min-w-[100px] mb-[1rem]" <hr class="mb-4" />
src="/images/right-sidebar/UMBE_wohngebaeude.svg" <img
alt="Wohnhaus Verbrauchsausweis" class="w-[70%] justify-self-center !min-w-[100px] mb-[1rem]"
/> src="/images/right-sidebar/UMBE_wohngebaeude.svg"
<p class="promo tracking-tighter text-[2rem] text-gray-700 pl-6"> alt="Wohnhaus Verbrauchsausweis"
ab<span class="promo pl-2">{PRICES.VerbrauchsausweisWohnen[0]}</span />
>€ <p class="promo tracking-tighter text-[2rem] text-gray-700 pl-6">
</p> ab<span class="promo pl-2">{PRICES.VerbrauchsausweisWohnen[0]}</span
<a >€
href="./energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" </p>
id="link-VA-promo" <a
class=" w-[90%] justify-self-center text-center text-white font-[700] bg-secondary rounded-md px-3 py-1 mt-2 no-underline text-[1rem] href="./energieausweis-erstellen/verbrauchsausweis-wohngebaeude/"
hover:bg-primary id="link-VA-promo"
">jetzt Verbrauchsausweis erstellen</a class=" w-[90%] justify-self-center text-center text-white font-[700] bg-secondary rounded-md px-3 py-1 mt-2 no-underline text-[1rem]
> hover:bg-primary
</div> ">jetzt Verbrauchsausweis erstellen</a
</div> >
</div>
<style lang="scss"> </div>
</style>
</div>
<style lang="scss">
</style>

View File

@@ -1,96 +0,0 @@
<script>
</script>
<div class="">
<details class="dropdown block xl:dropdown-right">
<summary class="btn rounded-none w-full justify-start">Energieausweis erstellen<span class="absolute right-[20px]"></span></summary>
<ul class="dd-cont p-2 shadow menu dropdown-content z-[1] w-full bg-base-100">
<li class=""><a>Verbrauchsausweis erstellen</a></li>
<li class=""><a>Bedarfsausweis erstellen</a></li>
<li class=""><a>Verbrauchsausweis Gewerbe erstellen</a></li>
<li class=""><a>Bedarfsausweis Gewerbe erstellen</a></li>
</ul>
</details>
<details class="dropdown block">
<summary class="btn rounded-none w-full justify-start">Welcher Energieausweis?</summary>
</details>
<details class="dropdown block xl:dropdown-hover xl:dropdown-right">
<summary class="btn rounded-none w-full justify-start">Verbrauchsausweis<span class="absolute right-[20px]"></span></summary>
<ul class="dd-cont p-2 shadow menu dropdown-content z-[1] w-full bg-base-100">
<li class=""><a>Verbrauchsausweis Wohngebäude</a></li>
<li class=""><a>Verbrauchsausweis online erstellen</a></li>
<li class=""><a>Häufige Fragen zum Verbrauchsausweis</a></li>
<li class=""><a>Statistiken zum Verbrauchsausweis Wohngebäude</a></li>
<li class=""><a>Verbrauchsausweis Gewerbe</a></li>
<li class=""><a>Verbrauchsausweis Gewerbe online erstellen</a></li>
<li class=""><a>Häufige Fragen zum Verbrauchsausweis Gewerbe</a></li>
<li class=""><a>Statistiken zum Verbrauchsausweis Gewerbe</a></li>
</ul>
</details>
<details class="dropdown block xl:dropdown-hover xl:dropdown-right">
<summary class="btn rounded-none w-full justify-start">Bedarfsausweis<span class="absolute right-[20px]"></span></summary>
<ul class="dd-cont p-2 shadow menu dropdown-content z-[1] w-full bg-base-100">
<li class=""><a>Bedarfsausweis Wohngebäude</a></li>
<li class=""><a>Bedarfsausweis online erstellen</a></li>
<li class=""><a>Häufige Fragen zum Bedarfsausweis</a></li>
<li class=""><a>Statistiken zum Bedarfsausweis Wohngebäude</a></li>
<li class=""><a>Bedarfsausweis Gewerbe</a></li>
<li class=""><a>Bedarfsausweis Gewerbe online erstellen</a></li>
<li class=""><a>Häufige Fragen zum Bedarfsausweis Gewerbe</a></li>
<li class=""><a>Statistiken zum Bedarfsausweis Gewerbe</a></li>
</ul>
</details>
<details class="dropdown block xl:dropdown-hover xl:dropdown-right">
<summary class="btn rounded-none w-full justify-start">Energieausweis<span class="absolute right-[20px]"></span></summary>
<ul class="dd-cont p-2 shadow menu dropdown-content z-[1] w-full bg-base-100">
<li class=""><a>Energieausweis Pflicht</a></li>
<li class=""><a>Energieausweis Kosten</a></li>
<li class=""><a>Energieausweis Haus</a></li>
</ul>
</details>
<details class="dropdown block">
<summary class="btn rounded-none w-full justify-start">EnEV Zusammenfassung - Archiv</summary>
</details>
<details class="dropdown block">
<summary class="btn rounded-none w-full justify-start">Energieausweis Aussteller</summary>
</details>
<details class="dropdown block">
<summary class="btn rounded-none w-full justify-start">Kundenbewertungen</summary>
</details>
</div>
<style>
.dd-cont{
@apply !relative lg:!absolute;
li{
@apply w-max
}
}
summary{
@apply text-black !text-[1.1rem] !font-normal
}
details:hover > summary {
@apply !bg-primary !text-white
}
details:hover > details.dd-cont {
@apply !visible
}
</style>

View File

@@ -1,12 +1,12 @@
--- ---
import Navigation from "#sidebarCards/card-navigation.svelte"; import CardNavigation from "#sidebarCards/cardNavigation.svelte";
import Preistabelle from "#sidebarCards/card-price-info.svelte"; import CardPriceiInfo from "#sidebarCards/cardPriceiInfo.svelte";
---
---
<div class=""> <div class="">
<CardNavigation client:load/>
<CardPriceiInfo />
<Navigation client:load />
<Preistabelle client:load />
</div> </div>

View File

@@ -1,22 +1,20 @@
--- ---
import Contact from "#sidebarCards/card-contact.svelte"; import CardContact from "#sidebarCards/cardContact.svelte";
import Review from "#sidebarCards/card-review.svelte"; import CardReview from "#sidebarCards/cardReview.svelte";
import VApromo from "#sidebarCards/card-VA-promo.svelte"; import CardVApromo from "#sidebarCards/cardVApromo.svelte";
import VAGpromo from "#sidebarCards/card-VA-G-promo.svelte"; import CardVAGpromo from "#sidebarCards/cardVAGpromo.svelte";
import BApromo from "#sidebarCards/card-BA-promo.svelte"; import CardBApromo from "#sidebarCards/cardBApromo.svelte";
import BAGpromo from "#sidebarCards/card-BA-G-promo.svelte"; import CardBAGpromo from "#sidebarCards/cardBAGpromo.svelte";
--- ---
<div class="hidden <div class="hidden 2xl:block">
xl:flex xl:flex-col xl:grow
">
<Contact client:load /> <CardContact />
<Review client:load /> <CardReview />
<VAGpromo client:load /> <CardVAGpromo />
<BAGpromo client:load /> <CardBAGpromo />
<VApromo client:load /> <CardVApromo />
<BApromo client:load /> <CardBApromo />
</div> </div>

View File

@@ -1,11 +1,11 @@
--- ---
import Login from "#sidebarCards/card-login_1.svelte"; import Login from "#sidebarCards/cardlogin_1.svelte";
import Contact from "#sidebarCards/card-contact.svelte"; import Contact from "#sidebarCards/cardcontact.svelte";
import Review from "#sidebarCards/card-review.svelte"; import Review from "#sidebarCards/cardreview.svelte";
import VApromo from "#sidebarCards/card-VA-promo.svelte"; import VApromo from "#sidebarCards/cardVApromo.svelte";
import VAGpromo from "#sidebarCards/card-VA-G-promo.svelte"; import VAGpromo from "#sidebarCards/cardVAGpromo.svelte";
import BApromo from "#sidebarCards/card-BA-promo.svelte"; import BApromo from "#sidebarCards/cardBApromo.svelte";
import BAGpromo from "#sidebarCards/card-BA-G-promo.svelte"; import BAGpromo from "#sidebarCards/cardBAGpromo.svelte";
--- ---
<div class="hidden <div class="hidden

View File

@@ -1,5 +1,30 @@
<script lang="ts"> <script lang="ts">
export let bereich: string; export let bereich: string;
function toggleBereich(event){
var x = event.target.parentNode.parentNode.parentNode;
var y = x.nextElementSibling;
var z = event.target.innerHTML;
console.log(y);
if(z=='-'){
//y.classList.remove('hidden');
y.style.maxHeight = '0px';
event.target.innerHTML = "+";
}else{
//y.classList.add('hidden');
y.style.maxHeight = '500px';
event.target.innerHTML = "-";
}
}
</script> </script>
@@ -7,10 +32,10 @@
<div class="bereichs-label"> <div class="bereichs-label">
<div> <div>
<div class="grid grid-cols-[max-content_1fr] items-center justify-items-start gap-2"> <div class="grid grid-cols-[max-content_1fr_40px] items-center justify-items-start gap-2">
<div class="formular-abschnitt1">{bereich}</div> <div class="formular-abschnitt1">{bereich}</div>
<div class="formular-abschnitt2"><slot></slot></div> <div class="formular-abschnitt2"><slot></slot></div>
<!--<div class="justify-self-end"><img src="/images/icons/toggle-icon.svg" alt="toggle-icon" class="w-[25px] rotate-[90deg]"/></div>--> <div id="BereichToggle" class="justify-self-center self-center cursor-pointer text-[2rem] ring-1 ring-secondary px-4 rounded-sm" on:click={() => toggleBereich(event)}>-</div>
</div> </div>
</div> </div>

View File

@@ -3,11 +3,19 @@
import WidgetCardTemplate from "./design/content/WidgetCardTemplate.svelte"; import WidgetCardTemplate from "./design/content/WidgetCardTemplate.svelte";
import { PRICES } from "#lib/constants.js"; import { PRICES } from "#lib/constants.js";
<<<<<<< HEAD:src/components/widgets/welcherAusweisWidget.svelte
import cardVAwidget from "#content/cardVAwidget.svelte";
import cardVAGwidget from "#content/cardVAGwidget.svelte";
import cardBAwidget from "#content/cardBAwidget.svelte";
import cardBAGwidget from "#content/cardBAGwidget.svelte";
import { fade } from 'svelte/transition';
=======
let gebaeudetyp: string; let gebaeudetyp: string;
let anlass: string; let anlass: string;
let einheiten: string; let einheiten: string;
let sanierungsstatus: string; let sanierungsstatus: string;
let baujahr: string; let baujahr: string;
>>>>>>> origin/UMBE:src/components/Widget.svelte
const allowedTypes = [ const allowedTypes = [
"Einfamilienhaus", "Einfamilienhaus",
@@ -35,6 +43,94 @@
} }
</script> </script>
<<<<<<< HEAD:src/components/widgets/welcherAusweisWidget.svelte
<div id="OEA_widget">
<input id="recode" type="hidden" value="widgetvorlage">
<div id="OEA_input">
<div class="OEA_zeile1">
<div class="OEA_item1">
<div class="OEA_title1">Gebäudetyp</div>
<select class="OEA_auswahl1" id="OEA_changeTyp" on:change={handleTypeChange}>
<option value="" selected disabled>bitte auswählen</option>
<option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Zweifamilienhaus">Zweifamilienhaus</option>
<option value="Mehrfamilienhaus">Mehrfamilienhaus</option>
<option value="Gewerbegebäude">Gewerbegebäude</option>
<option value="Mischgebäude">Mischgebäude</option>
</select>
</div>
<div class="OEA_item2">
<div class="OEA_title1">Anlass</div>
<select class="OEA_auswahl1" id="OEA_changeAnlass" on:change={handleReasonChange}>
<option value="" selected disabled>bitte auswählen</option>
<option value="Vermietung/Verkauf">Vermietung/Verkauf</option>
<option value="Modernisierung">Modernisierung</option>
<option value="Neubau">Neubau</option>
<option value="Erweiterung">Erweiterung</option>
<option value="Aushangpflicht">Aushangpflicht</option>
<option value="sonstiges">sonstiges z.B. Bank</option>
</select>
</div>
</div>
<div class="OEA_zeile2">
<div class="OEA_item3">
<div class="OEA_title2">Baujahr</div>
<select class="OEA_auswahl2" id="changeBaujahr" on:change={handleYearChange}>
<option value="" selected disabled>bitte auswählen</option>
<option value="vor 1978">vor 1978</option>
<option value="nach 1977">nach 1977</option>
</select>
</div>
<div class="OEA_item4">
<div class="OEA_title2">Wohneinheiten</div>
<select class="OEA_auswahl2" id="changeEinheiten" on:change={handleUnitsChange}>
<option value="" selected disabled>bitte auswählen</option>
<option value="bis 4 Wohneinheiten">bis 4 Wohneinheiten</option>
<option value="mehr als 4 Wohneinheiten">mehr als 4 Wohneinheiten</option>
</select>
</div>
<div class="OEA_item5">
<div class="OEA_title2">Sanierungsstatus</div>
<select class="OEA_auswahl2" id="changeStatus" on:change={handleStatusChange}>
<option value="" selected disabled>bitte auswählen</option>
<option value="saniert">saniert</option>
<option value="unsaniert">unsaniert</option>
</select>
</div>
</div>
<div class="OEA_zeile3">
{#if showVA}
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<cardVAwidget client:load />
</div>
{/if}
{#if showBA}
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<cardBAwidget client:load />
</div>
{/if}
{#if showVAG}
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<cardVAGwidget client:load />
</div>
{/if}
{#if showBAG}
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<cardBAGwidget client:load />
</div>
{/if}
</div>
=======
<div id="OEA_widget"> <div id="OEA_widget">
<input id="recode" type="hidden" value="widgetvorlage" /> <input id="recode" type="hidden" value="widgetvorlage" />
@@ -86,6 +182,7 @@
<option value="nach 1977">nach 1977</option> <option value="nach 1977">nach 1977</option>
</select> </select>
</div> </div>
>>>>>>> origin/UMBE:src/components/Widget.svelte
<div class="OEA_item4"> <div class="OEA_item4">
<div class="OEA_title2">Wohneinheiten</div> <div class="OEA_title2">Wohneinheiten</div>

View File

@@ -44,7 +44,7 @@ const { title } = Astro.props;
2xl:grid-cols-[minmax(350px,350px)1fr_minmax(350px,350px)] 2xl:gap-5 2xl:p-6 2xl:grid-cols-[minmax(350px,350px)1fr_minmax(350px,350px)] 2xl:gap-5 2xl:p-6
"> ">
<SidebarLeft /> <SidebarLeft client:load/>
<article class="box rounded-tl-none p-6"> <article class="box rounded-tl-none p-6">
<slot /> <slot />

View File

@@ -1,212 +1,214 @@
<script lang="ts"> <script lang="ts">
//import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte"; //import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
//import Progressbar from "#components/Ausweis/Progressbar.svelte"; //import Progressbar from "#components/Ausweis/Progressbar.svelte";
import Hilfe from "#components/Ausweis/Hilfe.svelte"; import Hilfe from "#components/Ausweis/Hilfe.svelte";
import BereichLabel from "#labels/BereichLabel.svelte"; import BereichLabel from "#labels/BereichLabel.svelte";
import HelpLabel from "#labels/HelpLabel.svelte"; import HelpLabel from "#labels/HelpLabel.svelte";
import Inputlabel from "#labels/InputLabel.svelte"; import Inputlabel from "#labels/InputLabel.svelte";
import Label from "#components/Label.svelte"; import Label from "#components/Label.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte"; import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte"; import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
import Verbrauch from "#components/Ausweis/Verbrauch.svelte"; import Verbrauch from "#components/Ausweis/Verbrauch.svelte";
//import ZipSearch from "#components/PlzSuche.svelte"; //import ZipSearch from "#components/PlzSuche.svelte";
import moment from "moment"; import moment from "moment";
import BilderZusatzsysteme from "#components/Ausweis/BilderZusatzsysteme.svelte"; import BilderZusatzsysteme from "#components/Ausweis/BilderZusatzsysteme.svelte";
import { import {
RawNotificationWrapper, RawNotificationWrapper,
RawNotification, RawNotification,
notifications, notifications,
} from "#components/Notifications/index.js"; } from "#components/Notifications/index.js";
import { auditHeizungGebaeudeBaujahr } from "#components/Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js"; import { auditHeizungGebaeudeBaujahr } from "#components/Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js";
import { auditHeizungJuengerDreiJahre } from "#components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.js"; import { auditHeizungJuengerDreiJahre } from "#components/Verbrauchsausweis/audits/HeizungJuengerDreiJahre.js";
import { auditZeitraumAktuell } from "#components/Verbrauchsausweis/audits/ZeitraumAktuell.js"; import { auditZeitraumAktuell } from "#components/Verbrauchsausweis/audits/ZeitraumAktuell.js";
import { auditKlimaFaktoren } from "#components/Verbrauchsausweis/audits/KlimaFaktoren.js"; import { auditKlimaFaktoren } from "#components/Verbrauchsausweis/audits/KlimaFaktoren.js";
import { auditWohnFlaeche } from "#components/Verbrauchsausweis/audits/WohnFlaeche.js"; import { auditWohnFlaeche } from "#components/Verbrauchsausweis/audits/WohnFlaeche.js";
import { auditWarmWasser } from "#components/Verbrauchsausweis/audits/WarmWasser.js"; import { auditWarmWasser } from "#components/Verbrauchsausweis/audits/WarmWasser.js";
import { auditLeerStand } from "#components/Verbrauchsausweis/audits/LeerStand.js"; import { auditLeerStand } from "#components/Verbrauchsausweis/audits/LeerStand.js";
import { auditPlzNichtErkannt } from "#components/Verbrauchsausweis/audits/PlzNichtErkannt.js"; import { auditPlzNichtErkannt } from "#components/Verbrauchsausweis/audits/PlzNichtErkannt.js";
import { import {
AuditType, AuditType,
hidden, hidden,
} from "#components/Verbrauchsausweis/audits/hidden.js"; } from "#components/Verbrauchsausweis/audits/hidden.js";
import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.js"; import { auditBedarfsausweisBenoetigt } from "#components/Verbrauchsausweis/audits/BedarfsausweisBenoetigt.js";
import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung.js"; import { auditVerbrauchAbweichung } from "#components/Verbrauchsausweis/audits/VerbrauchAbweichung.js";
import { auditEndEnergie } from "#components/Verbrauchsausweis/audits/EndEnergie.js"; import { auditEndEnergie } from "#components/Verbrauchsausweis/audits/EndEnergie.js";
import { auditWohnflaecheGroesserGesamtflaeche } from "#components/Verbrauchsausweis/audits/WohnflaecheGroesserGesamtflaeche.js"; import { auditWohnflaecheGroesserGesamtflaeche } from "#components/Verbrauchsausweis/audits/WohnflaecheGroesserGesamtflaeche.js";
//import { Enums } from "@ibcornelsen/database/client" //import { Enums } from "@ibcornelsen/database/client"
import Overlay from "#components/Overlay.svelte"; import Overlay from "#components/Overlay.svelte";
import AusweisGespeichertModule from "#modules/Ausweise/AusweisGespeichertModule.svelte"; import AusweisGespeichertModule from "#modules/Ausweise/AusweisGespeichertModule.svelte";
import { import {
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
BenutzerClient, BenutzerClient,
UploadedGebaeudeBild, UploadedGebaeudeBild,
} from "#components/Ausweis/types.js"; } from "#components/Ausweis/types.js";
import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js"; import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js";
// 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 gebaeude_aufnahme_allgemein oder gebaeude_stammdaten nicht existiert... // wenn gebaeude_aufnahme_allgemein oder gebaeude_stammdaten nicht existiert...
export let ausweis: VerbrauchsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient;
export let user: BenutzerClient = {} as BenutzerClient; export let user: BenutzerClient = {} as BenutzerClient;
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {}; let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
let gebaeude = let gebaeude =
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {}; ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] = let images: (UploadedGebaeudeBild & { base64?: string })[] =
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten
?.gebaeude_bilder || []; ?.gebaeude_bilder || [];
async function spaeterWeitermachen() { async function spaeterWeitermachen() {
const result = await verbrauchsausweisWohnenSpeichern( const result = await verbrauchsausweisWohnenSpeichern(
ausweis, ausweis,
gebaeude, gebaeude,
gebaeude_aufnahme_allgemein, gebaeude_aufnahme_allgemein,
images, images,
user user
); );
if (result !== null) { if (result !== null) {
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen. // Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// Sonst müsste er alles neu eingeben... // Sonst müsste er alles neu eingeben...
ausweis.uid = result.uid; ausweis.uid = result.uid;
gebaeude.uid = result.gebaeude_uid; gebaeude.uid = result.gebaeude_uid;
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid; gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid;
window.history.pushState( window.history.pushState(
{}, {},
"", "",
`${location.pathname}?uid=${result.uid}` `${location.pathname}?uid=${result.uid}`
); );
speichernOverlayHidden = false; speichernOverlayHidden = false;
} }
} }
function automatischAusfüllen() { function automatischAusfüllen() {
gebaeude_aufnahme_allgemein.baujahr_gebaeude = [1962]; gebaeude_aufnahme_allgemein.baujahr_gebaeude = [1962];
gebaeude_aufnahme_allgemein.baujahr_heizung = [1952]; gebaeude_aufnahme_allgemein.baujahr_heizung = [1952];
gebaeude_aufnahme_allgemein.saniert = true; gebaeude_aufnahme_allgemein.saniert = true;
gebaeude_aufnahme_allgemein.einheiten = 1; gebaeude_aufnahme_allgemein.einheiten = 1;
ausweis.ausstellgrund = "Vermietung"; ausweis.ausstellgrund = "Vermietung";
ausweis.verbrauch_1 = 15000; ausweis.verbrauch_1 = 15000;
ausweis.verbrauch_2 = 14000; ausweis.verbrauch_2 = 14000;
ausweis.verbrauch_3 = 16000; ausweis.verbrauch_3 = 16000;
gebaeude_aufnahme_allgemein.flaeche = 152; gebaeude_aufnahme_allgemein.flaeche = 152;
gebaeude_aufnahme_allgemein.nutzflaeche = 172; gebaeude_aufnahme_allgemein.nutzflaeche = 172;
ausweis.keller_beheizt = true; ausweis.keller_beheizt = true;
gebaeude_aufnahme_allgemein.brennstoff_1 = "Erdgas H"; gebaeude_aufnahme_allgemein.brennstoff_1 = "Erdgas H";
ausweis.einheit_1 = "kWh"; ausweis.einheit_1 = "kWh";
ausweis.anteil_warmwasser_1 = 18; ausweis.anteil_warmwasser_1 = 18;
ausweis.startdatum = moment("01.01.2019").toDate(); ausweis.startdatum = moment("01.01.2019").toDate();
gebaeude_aufnahme_allgemein.plz = "21039"; gebaeude_aufnahme_allgemein.plz = "21039";
gebaeude_aufnahme_allgemein.ort = "Hamburg"; gebaeude_aufnahme_allgemein.ort = "Hamburg";
gebaeude_aufnahme_allgemein.adresse = "Curslacker Deich 170"; gebaeude_aufnahme_allgemein.adresse = "Curslacker Deich 170";
gebaeude_aufnahme_allgemein.gebaeudeteil = "Gesamtgebäude"; gebaeude_aufnahme_allgemein.gebaeudeteil = "Gesamtgebäude";
gebaeude = gebaeude; gebaeude = gebaeude;
ausweis = ausweis; ausweis = ausweis;
} }
async function ausweisAbschicken(e: SubmitEvent) { async function ausweisAbschicken(e: SubmitEvent) {
if (e && e.preventDefault) e.preventDefault(); if (e && e.preventDefault) e.preventDefault();
const result = await verbrauchsausweisWohnenSpeichern( const result = await verbrauchsausweisWohnenSpeichern(
ausweis, ausweis,
gebaeude, gebaeude,
gebaeude_aufnahme_allgemein, gebaeude_aufnahme_allgemein,
images, images,
user user
); );
if (result !== null) { if (result !== null) {
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen. // Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// Sonst müsste er alles neu eingeben... // Sonst müsste er alles neu eingeben...
ausweis.uid = result.uid; ausweis.uid = result.uid;
gebaeude.uid = result.gebaeude_uid; gebaeude.uid = result.gebaeude_uid;
gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid; gebaeude_aufnahme_allgemein.uid = result.gebaeude_aufnahme_uid;
window.history.pushState( window.history.pushState(
{}, {},
"", "",
`${location.pathname}?uid=${result.uid}` `${location.pathname}?uid=${result.uid}`
); );
window.location.href = `/kundendaten?uid=${result.uid}`; window.location.href = `/kundendaten?uid=${result.uid}`;
} }
} }
let waitOverlayHidden = true; let waitOverlayHidden = true;
let speichernOverlayHidden = true; let speichernOverlayHidden = true;
$: { $: {
if ( if (
gebaeude_aufnahme_allgemein.saniert && gebaeude_aufnahme_allgemein.saniert &&
gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt === gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt ===
undefined && undefined &&
gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt === undefined gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt === undefined
) { ) {
gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt = true; gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt = true;
gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt = true; gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt = true;
} }
} }
</script> </script>
<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.uid}></AusweisGespeichertModule>
</div> </div>
</Overlay> </Overlay>
<Overlay bind:hidden={waitOverlayHidden}> <Overlay bind:hidden={waitOverlayHidden}>
<p class="text-white font-semibold text-4xl"> <p class="text-white font-semibold text-4xl">
Bitte warten sie, ihr Ausweis wird nun erstellt. Bitte warten sie, ihr Ausweis wird nun erstellt.
</p> </p>
</Overlay> </Overlay>
<form on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis"> <form on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">
<div id="formular-box" class="formular-boxen ring-0"> <div id="formular-box" class="formular-boxen ring-0">
<!-- Später weitermachen / Hilfe anfordern --> <!-- Später weitermachen / Hilfe anfordern -->
<div <div
class="w-full grid gap-x-4 gap-y-2 class="w-full grid gap-x-4 gap-y-2
grid-cols-1 grid-cols-1
xs:grid-cols-2 xs:grid-cols-2
" "
> >
<div class="md:justify-self-start"> <div class="md:justify-self-start">
<button <button
class="button" class="button"
type="button" type="button"
on:click={spaeterWeitermachen}>Später Weitermachen</button on:click={spaeterWeitermachen}>Später Weitermachen</button
> >
</div> </div>
<div class="md:justify-self-end"><Hilfe /></div> <div class="md:justify-self-end"><Hilfe /></div>
</div> </div>
<div class="mt-2"> <div class="mt-2">
<button <button
class="button hidden" class="button hidden"
on:click={automatischAusfüllen} on:click={automatischAusfüllen}
type="button">Automatisch Ausfüllen</button type="button">Automatisch Ausfüllen</button
> >
</div> </div>
<!-- A Prüfung der Ausweisart --> <!-- A Prüfung der Ausweisart -->
<BereichLabel bereich="A">Prüfung der Ausweisart</BereichLabel>
<BereichLabel bereich="A">Prüfung der Ausweisart</BereichLabel> <div class="collapseBereich">
<Ausweisart <Ausweisart
bind:gebaeude bind:gebaeude
bind:gebaeude_aufnahme_allgemein bind:gebaeude_aufnahme_allgemein
bind:ausweis bind:ausweis
/> />
</div>
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<BereichLabel bereich="B"
>Eingabe&nbsp;der&nbsp;Gebäudeadresse - <BereichLabel bereich="B">Eingabe&nbsp;der&nbsp;Gebäudeadresse - Angaben&nbsp;zu&nbsp;Wohnfläche, Keller&nbsp;und&nbsp;Dachgeschoss</BereichLabel>
Angaben&nbsp;zu&nbsp;Wohnfläche, Keller&nbsp;und&nbsp;Dachgeschoss</BereichLabel <div class="collapseBereich">
> <GebaeudeDaten
bind:gebaeude_aufnahme_allgemein
<GebaeudeDaten bind:gebaeude_aufnahme_allgemein /> />
</div> </div>
</form>
<style lang="scss"> </form>
</style>
<style lang="scss">
</style>

View File

@@ -1,35 +1,35 @@
--- ---
import AusweisLayout from "#layouts/AusweisLayout.astro"; import AusweisLayout from "#layouts/AusweisLayout.astro";
import BedarfsausweisContent from "#components/Bedarfsausweis/BedarfsausweisContent.svelte"; import BedarfsausweisContent from "#components/Bedarfsausweis/BedarfsausweisContent.svelte";
import { BedarfsausweisWohnenClient } from "#components/Ausweis/types"; import { BedarfsausweisWohnenClient } from "#components/Ausweis/types";
import { createCaller } from "#lib/caller"; import { createCaller } from "#lib/caller";
const uid = Astro.url.searchParams.get("uid"); const uid = Astro.url.searchParams.get("uid");
let ausweis: Partial<BedarfsausweisWohnenClient> = { let ausweis: Partial<BedarfsausweisWohnenClient> = {
gebaeude_aufnahme_allgemein: { gebaeude_stammdaten: {} }, gebaeude_aufnahme_allgemein: { gebaeude_stammdaten: {} },
energiequelle_2_nutzung: [] energiequelle_2_nutzung: []
} as Partial<BedarfsausweisWohnenClient>; } as Partial<BedarfsausweisWohnenClient>;
const caller = createCaller(Astro); const caller = createCaller(Astro);
if (uid) { if (uid) {
ausweis = await caller.v1.bedarfsausweisWohen.get({ ausweis = await caller.v1.bedarfsausweisWohen.get({
uid: uid, uid: uid,
}); });
if (!ausweis) { if (!ausweis) {
// Der Ausweis scheint nicht zu existieren. // Der Ausweis scheint nicht zu existieren.
// Wir leiten auf die generische Ausweisseite ohne UID weiter. // Wir leiten auf die generische Ausweisseite ohne UID weiter.
return Astro.redirect( return Astro.redirect(
"/energieausweis-erstellen/bedarfsausweis-wohnen" "/energieausweis-erstellen/bedarfsausweis-wohnen"
); );
} }
} }
--- ---
<AusweisLayout title="Bedarfsausweis erstellen | IBCornelsen"> <AusweisLayout title="Bedarfsausweis erstellen | IBCornelsen">
<BedarfsausweisContent client:load ausweis={ausweis}></BedarfsausweisContent> <BedarfsausweisContent client:load ausweis={ausweis}></BedarfsausweisContent>
</AusweisLayout> </AusweisLayout>

View File

@@ -1,33 +1,33 @@
--- ---
import AusweisLayout from "#layouts/AusweisLayout.astro"; import AusweisLayout from "#layouts/AusweisLayout.astro";
import VerbrauchsausweisGewerbeModule from "#modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte"; import VerbrauchsausweisGewerbeModule from "#modules/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbeModule.svelte";
import { VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; import { VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
import { createCaller } from "#lib/caller"; import { createCaller } from "#lib/caller";
const uid = Astro.url.searchParams.get("uid"); const uid = Astro.url.searchParams.get("uid");
let ausweis: VerbrauchsausweisGewerbeClient = { let ausweis: VerbrauchsausweisGewerbeClient = {
gebaeude_aufnahme_allgemein: { gebaeude_stammdaten: {} }, gebaeude_aufnahme_allgemein: { gebaeude_stammdaten: {} },
} as VerbrauchsausweisGewerbeClient; } as VerbrauchsausweisGewerbeClient;
const caller = createCaller(Astro); const caller = createCaller(Astro);
if (uid) { if (uid) {
ausweis = await caller.v1.verbrauchsausweisGewerbe.get({ ausweis = await caller.v1.verbrauchsausweisGewerbe.get({
uid: uid, uid: uid,
}); });
if (!ausweis) { if (!ausweis) {
// Der Ausweis scheint nicht zu existieren. // Der Ausweis scheint nicht zu existieren.
// Wir leiten auf die generische Ausweisseite ohne UID weiter. // Wir leiten auf die generische Ausweisseite ohne UID weiter.
return Astro.redirect( return Astro.redirect(
"/energieausweis-erstellen/verbrauchsausweis-wohnen" "/energieausweis-erstellen/verbrauchsausweis-wohnen"
); );
} }
} }
--- ---
<AusweisLayout title="Verbrauchsausweis Gewerbe erstellen | IBCornelsen"> <AusweisLayout title="Verbrauchsausweis Gewerbe erstellen | IBCornelsen">
<VerbrauchsausweisGewerbeModule client:load ausweis={ausweis}></VerbrauchsausweisGewerbeModule> <VerbrauchsausweisGewerbeModule client:load ausweis={ausweis}></VerbrauchsausweisGewerbeModule>
</AusweisLayout> </AusweisLayout>

View File

@@ -1,16 +1,16 @@
--- ---
import Layout from "#layouts/Layout.astro"; import Layout from "#layouts/Layout.astro";
import BannerSaeule from "#content/BannerSaeule.svelte"; import ProduktVergleich from "#content/produktVergleich.svelte";
--- ---
<Layout title="Energieausweis online erstellen - Online Energieausweis"> <Layout title="Energieausweis online erstellen - Online Energieausweis">
<h1>Unsere Ausweise im Detail:</h1> <h1>Unsere Ausweise im Detail:</h1>
<BannerSaeule client:load /> <!-- <ProduktVergleich /> -->
</Layout> </Layout>

View File

@@ -1,13 +1,13 @@
--- ---
import Layout from "#layouts/Layout_1.astro"; import Layout from "#layouts/Layout_1.astro";
--- ---
<Layout title="Energieausweis online erstellen - Online Energieausweis"> <Layout title="Energieausweis online erstellen - Online Energieausweis">
<h1>Energieausweis online erstellen</h1> <h1>Energieausweis online erstellen</h1>
<!-- <BannerPrice client:load /> --> <!-- <BannerPrice client:load /> -->
</Layout> </Layout>

View File

@@ -4,7 +4,7 @@ title: "Welcher Energieausweis?"
--- ---
import { BoxWithHeading } from "@ibcornelsen/ui"; import { BoxWithHeading } from "@ibcornelsen/ui";
import Widget from "#components/Widget.svelte"; import WelcherAusweisWidget from "#widgets/welcherAusweisWidget.svelte";
# Welcher Energieausweis ist der richtige? # Welcher Energieausweis ist der richtige?
@@ -14,7 +14,7 @@ Falls Sie nicht wissen sollten welchen Energieausweis Sie benötigen, können Si
hier ganz einfach den Gebäudetyp und die entsprechende Maßnahme angeben und hier ganz einfach den Gebäudetyp und die entsprechende Maßnahme angeben und
bekommen als Ergebnis, den für Sie pasenden Energieausweis angezeigt. bekommen als Ergebnis, den für Sie pasenden Energieausweis angezeigt.
<Widget client:load /> <WelcherAusweisWidget />
## Bei Vermietung und Verkauf Ihres Wohnhauses ist der Verbrauchsausweis Wohngebäude ausreichend ## Bei Vermietung und Verkauf Ihres Wohnhauses ist der Verbrauchsausweis Wohngebäude ausreichend

View File

@@ -5,12 +5,20 @@
.formular-abschnitt1{@apply text-[1.25rem] py-[1px] px-[10px] text-secondary/80 bg-black/15 ring-2 ring-black/30 rounded-sm font-bold;} .formular-abschnitt1{@apply text-[1.25rem] py-[1px] px-[10px] text-secondary/80 bg-black/15 ring-2 ring-black/30 rounded-sm font-bold;}
.formular-abschnitt2{@apply [font-size:_clamp(16px,1vw,28px)] md:[font-size:_clamp(20px,1.25vw,36px)] pl-1;} .formular-abschnitt2{@apply [font-size:_clamp(16px,1vw,28px)] pl-1 justify-self-start
md:[font-size:_clamp(20px,1.25vw,36px)]
}
.bereichs-label{@apply px-4 sm:px-0 mt-6 mb-3} .bereichs-label{@apply px-4 sm:px-0 mt-6 mb-3}
.collapseBereich{@apply overflow-hidden transition-all ease-in-out duration-200 h-[auto]}
.bereich-box {@apply w-full bg-gray-500/10 ring-1 rounded-sm ring-gray-500/35 pt-6 pb-8 px-4; .bereich-box {@apply w-full bg-gray-500/10 ring-1 rounded-sm ring-gray-500/35 pt-6 pb-8 px-4;
transform-origin: top center;
/*background: linear-gradient( /*background: linear-gradient(
135deg, 135deg,
rgba(252, 234, 187, 1) 0%, rgba(252, 234, 187, 1) 0%,
@@ -20,6 +28,8 @@
); */ ); */
} }
.input-standard{@apply w-full grid grid-cols-[1fr_25px] items-center relative mt-2} .input-standard{@apply w-full grid grid-cols-[1fr_25px] items-center relative mt-2}
.help-label{@apply rounded-e-sm ring-1 ring-black/15} .help-label{@apply rounded-e-sm ring-1 ring-black/15}

View File

@@ -66,7 +66,7 @@ radio {
/*ARTICLE*/ /*ARTICLE*/
article { article {
@apply w-full relative bg-white min-h-screen px-0 py-0; @apply w-full relative bg-white px-0 py-0;
hr { hr {
@apply mb-4 mt-4; @apply mb-4 mt-4;
@@ -112,6 +112,7 @@ article {
} }
} }
/*SIDEBAR-LEFT*/ /*SIDEBAR-LEFT*/
/*NAVIGATION*/ /*NAVIGATION*/

View File

@@ -37,7 +37,8 @@
"#sidebarRight/*": ["./src/components/design/sidebars/right/*"], "#sidebarRight/*": ["./src/components/design/sidebars/right/*"],
"#ausweise/*": ["./src/pages/energieausweis-erstellen/*"], "#ausweise/*": ["./src/pages/energieausweis-erstellen/*"],
"#labels/*": ["./src/components/labels/*"] "#labels/*": ["./src/components/labels/*"],
"#widgets/*": ["./src/components/widgets/*"]
}, },
"types": ["cypress", "cypress-file-upload", "bun-types", "svelte"] "types": ["cypress", "cypress-file-upload", "bun-types", "svelte"]
} }