Merge pull request #211 from IBCornelsen/UMBE

Update
This commit is contained in:
UMBENOMENA
2024-12-12 18:48:43 +01:00
committed by GitHub
18 changed files with 3386 additions and 2926 deletions

64
.gitignore vendored
View File

@@ -1,32 +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/ public/fonts/
*.Identifier *.Identifier

View File

@@ -1,87 +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",
"jsonwebtoken": "^9.0.2", "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,86 +1,86 @@
import { import {
BenutzerClient, BenutzerClient,
GebaeudeAufnahmeClient, GebaeudeAufnahmeClient,
GebaeudeClient, GebaeudeClient,
UploadedGebaeudeBild, UploadedGebaeudeBild,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "#components/Ausweis/types"; } from "#components/Ausweis/types.js";
import { exclude } from "#lib/exclude"; import { exclude } from "#lib/exclude.js";
import { client } from "src/trpc"; import { client } from "src/trpc.js";
import { bilderHochladen } from "./bilderHochladen"; 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,234 +1,232 @@
<script lang="ts"> <script lang="ts">
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"; 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, GebaeudeClient, VerbrauchsausweisWohnenClient } from "./types"; GebaeudeAufnahmeClient,
GebaeudeClient,
export let gebaeude: GebaeudeClient; VerbrauchsausweisWohnenClient,
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; } from "./types.js";
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
export let gebaeude: GebaeudeClient;
</script> export let ausweis:
| VerbrauchsausweisWohnenClient
| VerbrauchsausweisGewerbe
| BedarfsausweisWohnen;
export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient;
</script>
<div class="bereich-box relative grid
grid-cols-1 gap-x-4 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
">
<div class="bereich-box relative grid
grid-cols-1 gap-x-4 gap-y-8
sm:grid-cols-2 sm:gap-x-6 sm:gap-y-8
<!-- Anlass für Energieausweis --> xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
"
<div class="input-standard order-1 md:order-1 xl:order-1"> >
<Inputlabel title="Anlass *"></Inputlabel> <!-- Anlass für Energieausweis -->
<select id="ausstellgrund" <<<<<<< HEAD
class="rounded-e-none"
name="ausstellgrund"
placeholder="Anlass" <!-- Anlass für Energieausweis -->
required> =======
<div class="input-standard order-1 md:order-1 xl:order-1">
{#each Object.entries(Enums.Ausstellgrund) as [name, ausstellgrund]} <Inputlabel title="Anlass *"></Inputlabel>
<option value={ausstellgrund}>{name}</option> >>>>>>> origin/UMBE
{/each}
<select
</select> id="ausstellgrund"
class="rounded-e-none"
<div class="help-label"> name="ausstellgrund"
<HelpLabel>Bitte wählen Sie den Anlass.</HelpLabel> placeholder="Anlass"
</div> required
</div> >
{#each Object.entries(Enums.Ausstellgrund) as [name, ausstellgrund]}
<option value={ausstellgrund}>{name}</option>
<!-- Gebäudetyp --> {/each}
</select>
<div class="input-standard order-2 md:order-3 xl:order-2">
<Inputlabel title="Gebäudetyp *"></Inputlabel> <div class="help-label">
<HelpLabel>Bitte wählen Sie den Anlass.</HelpLabel>
<select </div>
name="gebaeudetyp" </div>
data-test="gebaeudetyp"
required <!-- Gebäudetyp -->
bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp}
<div class="input-standard order-2 md:order-3 xl:order-2">
> <Inputlabel title="Gebäudetyp *"></Inputlabel>
<option disabled>Bitte auswählen</option> <select
<option value="Einfamilienhaus">Einfamilienhaus</option> name="gebaeudetyp"
<option value="Freistehendes Einfamilienhaus">Freistehendes Einfamilienhaus</option> data-test="gebaeudetyp"
<option value="Freistehendes Zweifamilienhaus">Freistehendes Zweifamilienhaus</option> required
<option value="Doppelhaushälfte">Doppelhaushälfte</option> bind:value={gebaeude_aufnahme_allgemein.gebaeudetyp}
<option value="Reihenendhaus">Reihenendhaus</option> >
<option value="Reihenmittelhaus">Reihenmittelhaus</option> <option disabled>Bitte auswählen</option>
<option value="Mehrfamilienhaus">Mehrfamilienhaus</option> <option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Wohn- und Geschäftshaus">Wohn- und Geschäftshaus</option> <option value="Freistehendes Einfamilienhaus"
<option value="Atrium-Bungalow">Atrium-Bungalow</option> >Freistehendes Einfamilienhaus</option
<option value="Winkelbungalow">Winkelbungalow</option> >
<option value="Freistehendes Zweifamilienhaus"
</select> >Freistehendes Zweifamilienhaus</option
>
<div class="help-label"> <option value="Doppelhaushälfte">Doppelhaushälfte</option>
<HelpLabel> <option value="Reihenendhaus">Reihenendhaus</option>
Bitte wählen Sie hier den Gebäudetyp aus. <option value="Reihenmittelhaus">Reihenmittelhaus</option>
</HelpLabel> <option value="Mehrfamilienhaus">Mehrfamilienhaus</option>
</div> <option value="Wohn- und Geschäftshaus"
</div> >Wohn- und Geschäftshaus</option
>
<option value="Atrium-Bungalow">Atrium-Bungalow</option>
<!-- Anzahl der Wohnungen --> <option value="Winkelbungalow">Winkelbungalow</option>
</select>
<div class="input-standard order-3 md:order-5 xl:order-3">
<Inputlabel title="Anzahl Wohnungen *"></Inputlabel> <div class="help-label">
<HelpLabel>Bitte wählen Sie hier den Gebäudetyp aus.</HelpLabel>
<input id="einheiten" </div>
class="rounded-e-none" </div>
name="einheiten"
type="number" <!-- Anzahl der Wohnungen -->
required
autocomplete="off" <div class="input-standard order-3 md:order-5 xl:order-3">
data-msg="Pflichtfeld" <Inputlabel title="Anzahl Wohnungen *"></Inputlabel>
maxlength="3"
bind:value={gebaeude_aufnahme_allgemein.einheiten} <input
id="einheiten"
> class="rounded-e-none"
name="einheiten"
<div class="help-label"> type="number"
<HelpLabel> required
Bitte geben Sie hier die Anzahl der Wohnungen ein, die sich im autocomplete="off"
Gebäude befinden. data-msg="Pflichtfeld"
</HelpLabel> maxlength="3"
</div> bind:value={gebaeude_aufnahme_allgemein.einheiten}
</div> />
<div class="help-label">
<!-- Sanierungsstatus --> <HelpLabel>
Bitte geben Sie hier die Anzahl der Wohnungen ein, die sich im
<div class="input-standard order-4 md:order-2 xl:order-4"> Gebäude befinden.
<Inputlabel title="Sanierungsstatus *"></Inputlabel> </HelpLabel>
</div>
<select </div>
name="saniert"
class="" <!-- Sanierungsstatus -->
required
bind:value={gebaeude_aufnahme_allgemein.saniert} <div class="input-standard order-4 md:order-2 xl:order-4">
> <Inputlabel title="Sanierungsstatus *"></Inputlabel>
<option disabled selected value={false}>Bitte auswählen</option> <select
<option value={true}>saniert</option> name="saniert"
<option value={false}>unsaniert</option> class=""
required
</select> bind:value={gebaeude_aufnahme_allgemein.saniert}
>
<div class="help-label"> <option disabled selected value={false}>Bitte auswählen</option>
<HelpLabel> <option value={true}>saniert</option>
Bitte geben Sie an ob das Gebäude energetisch saniert oder unsaniert <option value={false}>unsaniert</option>
ist. Wenn das Dach mindestens 12 cm gedämmt und Heizung sowie </select>
Fenster nicht älter als 30 Jahre sind, können Sie saniert auswählen.
</HelpLabel> <div class="help-label">
</div> <HelpLabel>
</div> Bitte geben Sie an ob das Gebäude energetisch saniert oder
unsaniert ist. Wenn das Dach mindestens 12 cm gedämmt und
Heizung sowie Fenster nicht älter als 30 Jahre sind, können Sie
<!-- Baujahr --> saniert auswählen.
</HelpLabel>
<div class="input-standard order-5 md:order-4 xl:order-5"> </div>
<Inputlabel title="Baujahr *"></Inputlabel> </div>
<TagInput <!-- Baujahr -->
name="baujahr_gebaeude"
type="number" <div class="input-standard order-5 md:order-4 xl:order-5">
onlyUnique={true} <Inputlabel title="Baujahr *"></Inputlabel>
minChars={4}
onFocusIn={() => { <TagInput
addNotification({ name="baujahr_gebaeude"
message: "Info", type="number"
subtext: onlyUnique={true}
"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.", minChars={4}
dismissable: true, onFocusIn={() => {
uid: "GEBAEUDE_BAUJAHR", addNotification({
timeout: 0, message: "Info",
type: "info", 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.",
}} dismissable: true,
onFocusOut={() => { uid: "GEBAEUDE_BAUJAHR",
deleteNotification("GEBAEUDE_BAUJAHR"); timeout: 0,
}} type: "info",
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein) });
? "linked" }}
: ""} onFocusOut={() => {
bind:tags={gebaeude_aufnahme_allgemein.baujahr_gebaeude} deleteNotification("GEBAEUDE_BAUJAHR");
/> }}
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)
<div class="help-label"> ? "linked"
<HelpLabel> : ""}
Bitte geben Sie hier das Baujahr des Gebäudes ein. Sollte eine eine bind:tags={gebaeude_aufnahme_allgemein.baujahr_gebaeude}
grundlegende Sanierung von Dach, Fenster und Heizung stattgefunden />
haben, dann berücksichtigen Sie das in dem Sie bei Sanierungsstatus
-saniert- angeben. <div class="help-label">
</HelpLabel> <HelpLabel>
</div> Bitte geben Sie hier das Baujahr des Gebäudes ein. Sollte eine
</div> eine grundlegende Sanierung von Dach, Fenster und Heizung
stattgefunden haben, dann berücksichtigen Sie das in dem Sie bei
Sanierungsstatus -saniert- angeben.
<!-- Baujahr Heizung --> </HelpLabel>
</div>
<div class="input-standard order-6 md:order-6 xl:order-6"> </div>
<Inputlabel title="Baujahr Heizung *"></Inputlabel>
<!-- Baujahr Heizung -->
<TagInput
name="baujahr_heizung" <div class="input-standard order-6 md:order-6 xl:order-6">
type="number" <Inputlabel title="Baujahr Heizung *"></Inputlabel>
onlyUnique={true}
minChars={4} <TagInput
onFocusIn={() => { name="baujahr_heizung"
addNotification({ type="number"
message: "Info", onlyUnique={true}
subtext: minChars={4}
"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.", onFocusIn={() => {
dismissable: true, addNotification({
uid: "HEIZUNG_BAUJAHR", message: "Info",
timeout: 0, subtext:
type: "info", "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,
}} uid: "HEIZUNG_BAUJAHR",
onFocusOut={() => { timeout: 0,
deleteNotification("HEIZUNG_BAUJAHR"); type: "info",
}} });
className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein) }}
? "linked" onFocusOut={() => {
: ""} deleteNotification("HEIZUNG_BAUJAHR");
bind:tags={gebaeude_aufnahme_allgemein.baujahr_heizung} }}
/> className={auditHeizungGebaeudeBaujahr(gebaeude_aufnahme_allgemein)
? "linked"
<div class="help-label"> : ""}
<HelpLabel> bind:tags={gebaeude_aufnahme_allgemein.baujahr_heizung}
Bitte geben Sie hier das Baujahr der Heizungsanlage ein. Sollten />
unterschiedliche Baujahre vorliegen, dann geben Sie einen
Zeitbereich ein <br />z.B. 1994-2001. <div class="help-label">
</HelpLabel> <HelpLabel>
</div> Bitte geben Sie hier das Baujahr der Heizungsanlage ein. Sollten
</div> unterschiedliche Baujahre vorliegen, dann geben Sie einen
Zeitbereich ein <br />z.B. 1994-2001.
</HelpLabel>
</div> </div>
</div>
</div>

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"; 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,96 @@
<script>
import { PRICES } from "#lib/constants";
</script>
<div id="card-VA-promo" class="box card bg-white px-6 py-4 mb-5">
<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>
<div class="flex flex-row flex-wrap justify-center">
<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>
</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,25 +1,35 @@
<script> <script>
import { PRICES } from "#lib/constants"; import { PRICES } from "#lib/constants";
</script> </script>
<<<<<<< HEAD:src/components/design/sidebars/cards/cardVApromo.svelte
<div id ="cardVApromo"
class=" box card"> <div id ="cardVApromo"
class=" box card">
<div class="grid"> =======
>>>>>>> origin/UMBE:src/components/design/sidebars/cards/card-VA-promo.svelte
<h2>Verbrauchsausweis Wohngebäude</h2>
<hr class="mb-4"> <div id="card-VA-promo" class=" box card bg-white px-6 py-4 mb-5">
<img class="w-[70%] justify-self-center !min-w-[100px] mb-[1rem]" src="/images/right-sidebar/UMBE_wohngebaeude.svg" alt="Wohnhaus Verbrauchsausweis"/> <div class="grid">
<p class="promo tracking-tighter text-[2rem] text-gray-700 pl-6">ab<span class="promo pl-2">{PRICES.VerbrauchsausweisWohnen[0]}</span></p> <h2>Verbrauchsausweis Wohngebäude</h2>
<a href="./energieausweis-erstellen/verbrauchsausweis-wohngebaeude/" id="link-VA-promo" <hr class="mb-4" />
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] <img
hover:bg-primary class="w-[70%] justify-self-center !min-w-[100px] mb-[1rem]"
" >jetzt Verbrauchsausweis erstellen</a> src="/images/right-sidebar/UMBE_wohngebaeude.svg"
</div> alt="Wohnhaus Verbrauchsausweis"
</div> />
<p class="promo tracking-tighter text-[2rem] text-gray-700 pl-6">
ab<span class="promo pl-2">{PRICES.VerbrauchsausweisWohnen[0]}</span
<style lang="scss"> >
</p>
<a
</style> 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 Verbrauchsausweis erstellen</a
>
</div>
</div>
<style lang="scss">
</style>

View File

@@ -1,222 +1,315 @@
<script lang="ts">
<script lang="ts"> import CardVerbrauchsausweisWidget from "#content/CardVerbrauchsausweisWidget.svelte";
import CardVerbrauchsausweisGewerbeWidget from "#content/CardVerbrauchsausweisGewerbeWidget.svelte";
import cardVAwidget from "#content/cardVAwidget.svelte"; import CardBedarfsausweisWidget from "#content/CardBedarfsausweisWidget.svelte";
import cardVAGwidget from "#content/cardVAGwidget.svelte"; import CardBedarfsausweisGewerbeWidget from "#content/CardBedarfsausweisGewerbeWidget.svelte";
import cardBAwidget from "#content/cardBAwidget.svelte"; import { fade } from "svelte/transition";
import cardBAGwidget from "#content/cardBAGwidget.svelte";
import { fade } from 'svelte/transition'; <<<<<<< HEAD:src/components/widgets/welcherAusweisWidget.svelte
import cardVAwidget from "#content/cardVAwidget.svelte";
let selectedType: string = ""; import cardVAGwidget from "#content/cardVAGwidget.svelte";
let selectedReason: string = ""; import cardBAwidget from "#content/cardBAwidget.svelte";
let selectedUnits: string = ""; import cardBAGwidget from "#content/cardBAGwidget.svelte";
let selectedStatus: string = ""; import { fade } from 'svelte/transition';
let selectedYear: string = ""; =======
let gebaeudetyp: string;
let showBA: boolean = false; let anlass: string;
let showVAG: boolean = false; let einheiten: string;
let showBAG: boolean = false; let sanierungsstatus: string;
let showVA: boolean = false; let baujahr: string;
>>>>>>> origin/UMBE:src/components/Widget.svelte
function handleTypeChange(event: Event) {
selectedType = (event.target as HTMLSelectElement).value; const allowedTypes = [
updateResultVisibility(); "Einfamilienhaus",
} "Zweifamilienhaus",
"Mehrfamilienhaus",
function handleReasonChange(event: Event) { "Mischgebäude",
selectedReason = (event.target as HTMLSelectElement).value; ];
updateResultVisibility(); const allowedTypesGewerbe = ["Gewerbegebäude", "Mischgebäude"];
} const allowedReason = ["Vermietung/Verkauf", "sonstiges", "Aushangpflicht"];
function handleUnitsChange(event: Event) { let showVerbrauchsausweis: boolean = false
selectedUnits = (event.target as HTMLSelectElement).value;
updateResultVisibility(); $: {
} if (baujahr === "vor 1978") {
showVerbrauchsausweis =
function handleStatusChange(event: Event) { allowedReason.includes(anlass) &&
selectedStatus = (event.target as HTMLSelectElement).value; allowedTypes.includes(gebaeudetyp) &&
updateResultVisibility(); (einheiten === "mehr als 4 Wohneinheiten" ||
} sanierungsstatus === "saniert");
} else {
function handleYearChange(event: Event) { showVerbrauchsausweis =
selectedYear = (event.target as HTMLSelectElement).value; allowedReason.includes(anlass) &&
updateResultVisibility(); allowedTypes.includes(gebaeudetyp);
} }
}
const allowedTypes = ["Einfamilienhaus", "Zweifamilienhaus", "Mehrfamilienhaus", "Mischgebäude"]; </script>
const allowedTypesGewerbe = ["Gewerbegebäude", "Mischgebäude"];
const allowedReason = ["Vermietung/Verkauf", "sonstiges", "Aushangpflicht"]; <<<<<<< HEAD:src/components/widgets/welcherAusweisWidget.svelte
// const allowedReasonBau = ["Modernisierung", "Neubau", "Erweiterung"]; <div id="OEA_widget">
<input id="recode" type="hidden" value="widgetvorlage">
function updateResultVisibility() {
// Die Bedingung, um das Ergebnis anzuzeigen <div id="OEA_input">
// Zusätzliche Bedingung: Wenn "vor 1978" ausgewählt wurde <div class="OEA_zeile1">
if (selectedYear === "vor 1978") { <div class="OEA_item1">
showVA = (allowedReason.includes(selectedReason) && allowedTypes.includes(selectedType)) && (selectedUnits === "mehr als 4 Wohneinheiten" || selectedStatus === "saniert"); <div class="OEA_title1">Gebäudetyp</div>
} <select class="OEA_auswahl1" id="OEA_changeTyp" on:change={handleTypeChange}>
else <option value="" selected disabled>bitte auswählen</option>
{ <option value="Einfamilienhaus">Einfamilienhaus</option>
showVA = allowedReason.includes(selectedReason) && allowedTypes.includes(selectedType); <option value="Zweifamilienhaus">Zweifamilienhaus</option>
} <option value="Mehrfamilienhaus">Mehrfamilienhaus</option>
<option value="Gewerbegebäude">Gewerbegebäude</option>
showBA = allowedReason.includes(selectedReason) && allowedTypes.includes(selectedType); <option value="Mischgebäude">Mischgebäude</option>
showVAG = allowedReason.includes(selectedReason) && allowedTypesGewerbe.includes(selectedType); </select>
showBAG = allowedReason.includes(selectedReason) && allowedTypesGewerbe.includes(selectedType); </div>
}
<div class="OEA_item2">
</script> <div class="OEA_title1">Anlass</div>
<select class="OEA_auswahl1" id="OEA_changeAnlass" on:change={handleReasonChange}>
<div id="OEA_widget"> <option value="" selected disabled>bitte auswählen</option>
<input id="recode" type="hidden" value="widgetvorlage"> <option value="Vermietung/Verkauf">Vermietung/Verkauf</option>
<option value="Modernisierung">Modernisierung</option>
<div id="OEA_input"> <option value="Neubau">Neubau</option>
<option value="Erweiterung">Erweiterung</option>
<div class="OEA_zeile1"> <option value="Aushangpflicht">Aushangpflicht</option>
<div class="OEA_item1"> <option value="sonstiges">sonstiges z.B. Bank</option>
<div class="OEA_title1">Gebäudetyp</div> </select>
<select class="OEA_auswahl1" id="OEA_changeTyp" on:change={handleTypeChange}> </div>
<option value="" selected disabled>bitte auswählen</option> </div>
<option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Zweifamilienhaus">Zweifamilienhaus</option> <div class="OEA_zeile2">
<option value="Mehrfamilienhaus">Mehrfamilienhaus</option> <div class="OEA_item3">
<option value="Gewerbegebäude">Gewerbegebäude</option> <div class="OEA_title2">Baujahr</div>
<option value="Mischgebäude">Mischgebäude</option> <select class="OEA_auswahl2" id="changeBaujahr" on:change={handleYearChange}>
</select> <option value="" selected disabled>bitte auswählen</option>
</div> <option value="vor 1978">vor 1978</option>
<option value="nach 1977">nach 1977</option>
<div class="OEA_item2"> </select>
<div class="OEA_title1">Anlass</div> </div>
<select class="OEA_auswahl1" id="OEA_changeAnlass" on:change={handleReasonChange}>
<option value="" selected disabled>bitte auswählen</option> <div class="OEA_item4">
<option value="Vermietung/Verkauf">Vermietung/Verkauf</option> <div class="OEA_title2">Wohneinheiten</div>
<option value="Modernisierung">Modernisierung</option> <select class="OEA_auswahl2" id="changeEinheiten" on:change={handleUnitsChange}>
<option value="Neubau">Neubau</option> <option value="" selected disabled>bitte auswählen</option>
<option value="Erweiterung">Erweiterung</option> <option value="bis 4 Wohneinheiten">bis 4 Wohneinheiten</option>
<option value="Aushangpflicht">Aushangpflicht</option> <option value="mehr als 4 Wohneinheiten">mehr als 4 Wohneinheiten</option>
<option value="sonstiges">sonstiges z.B. Bank</option> </select>
</select> </div>
</div>
</div> <div class="OEA_item5">
<div class="OEA_title2">Sanierungsstatus</div>
<div class="OEA_zeile2"> <select class="OEA_auswahl2" id="changeStatus" on:change={handleStatusChange}>
<div class="OEA_item3"> <option value="" selected disabled>bitte auswählen</option>
<div class="OEA_title2">Baujahr</div> <option value="saniert">saniert</option>
<select class="OEA_auswahl2" id="changeBaujahr" on:change={handleYearChange}> <option value="unsaniert">unsaniert</option>
<option value="" selected disabled>bitte auswählen</option> </select>
<option value="vor 1978">vor 1978</option> </div>
<option value="nach 1977">nach 1977</option> </div>
</select>
</div> <div class="OEA_zeile3">
{#if showVA}
<div class="OEA_item4"> <div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<div class="OEA_title2">Wohneinheiten</div> <cardVAwidget client:load />
<select class="OEA_auswahl2" id="changeEinheiten" on:change={handleUnitsChange}> </div>
<option value="" selected disabled>bitte auswählen</option> {/if}
<option value="bis 4 Wohneinheiten">bis 4 Wohneinheiten</option>
<option value="mehr als 4 Wohneinheiten">mehr als 4 Wohneinheiten</option> {#if showBA}
</select> <div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
</div> <cardBAwidget client:load />
</div>
<div class="OEA_item5"> {/if}
<div class="OEA_title2">Sanierungsstatus</div>
<select class="OEA_auswahl2" id="changeStatus" on:change={handleStatusChange}> {#if showVAG}
<option value="" selected disabled>bitte auswählen</option> <div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<option value="saniert">saniert</option> <cardVAGwidget client:load />
<option value="unsaniert">unsaniert</option> </div>
</select> {/if}
</div>
</div> {#if showBAG}
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}>
<div class="OEA_zeile3"> <cardBAGwidget client:load />
{#if showVA} </div>
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}> {/if}
<cardVAwidget client:load /> </div>
</div> =======
{/if} <div id="OEA_widget">
<input id="recode" type="hidden" value="widgetvorlage" />
{#if showBA}
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}> <div id="OEA_input">
<cardBAwidget client:load /> <div class="OEA_zeile1">
</div> <div class="OEA_item1">
{/if} <div class="OEA_title1">Gebäudetyp</div>
<select
{#if showVAG} class="OEA_auswahl1"
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}> bind:value={gebaeudetyp}
<cardVAGwidget client:load /> >
</div> <option value="" selected disabled>bitte auswählen</option>
{/if} <option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Zweifamilienhaus">Zweifamilienhaus</option>
{#if showBAG} <option value="Mehrfamilienhaus">Mehrfamilienhaus</option>
<div class="OEA_item6 result" transition:fade={{ duration: 1000 }}> <option value="Gewerbegebäude">Gewerbegebäude</option>
<cardBAGwidget client:load /> <option value="Mischgebäude">Mischgebäude</option>
</div> </select>
{/if} </div>
</div>
<div class="OEA_item2">
</div> <div class="OEA_title1">Anlass</div>
</div> <select
class="OEA_auswahl1"
bind:value={anlass}
<style lang="scss"> >
<option value="" selected disabled>bitte auswählen</option>
@tailwind base; <option value="Vermietung/Verkauf"
@tailwind components; >Vermietung/Verkauf</option
@tailwind utilities; >
<option value="Modernisierung">Modernisierung</option>
#OEA_widget { <option value="Neubau">Neubau</option>
@apply bg-gray-100 p-4 shadow-xl; <option value="Erweiterung">Erweiterung</option>
<option value="Aushangpflicht">Aushangpflicht</option>
#OEA_input { @apply space-y-2; <option value="sonstiges">sonstiges z.B. Bank</option>
</select>
</div>
.OEA_zeile1, .OEA_zeile2 { </div>
@apply flex flex-row space-x-2;
<div class="OEA_zeile2">
.OEA_item1, .OEA_item2, .OEA_item3, .OEA_item4, .OEA_item5 { <div class="OEA_item3">
@apply w-full; <div class="OEA_title2">Baujahr</div>
<select
.OEA_title1, .OEA_title2 { class="OEA_auswahl2"
@apply font-bold text-lg text-white p-1.5 pl-2 rounded w-full; bind:value={baujahr}
} >
} <option value="" selected disabled>bitte auswählen</option>
} <option value="vor 1978">vor 1978</option>
<option value="nach 1977">nach 1977</option>
.OEA_title1 { </select>
@apply bg-secondary; </div>
} >>>>>>> origin/UMBE:src/components/Widget.svelte
.OEA_title2 { <div class="OEA_item4">
@apply bg-primary; <div class="OEA_title2">Wohneinheiten</div>
} <select
class="OEA_auswahl2"
.OEA_auswahl1, .OEA_auswahl2 { bind:value={einheiten}
@apply w-full p-2 rounded focus:outline-none focus:ring-2 focus:ring-blue-500; >
} <option value="" selected disabled>bitte auswählen</option>
<option value="bis 4 Wohneinheiten"
#OEA_result { >bis 4 Wohneinheiten</option
@apply rounded-lg text-gray-700; >
} <option value="mehr als 4 Wohneinheiten"
>mehr als 4 Wohneinheiten</option
>
.OEA_zeile3 { </select>
@apply flex flex-row space-x-4 pt-6 items-center justify-center; </div>
}
<div class="OEA_item5">
.OEA_item6 { <div class="OEA_title2">Sanierungsstatus</div>
<select
.result { class="OEA_auswahl2"
@apply opacity-0 transition-opacity duration-1000 ease-in-out; bind:value={sanierungsstatus}
} >
<option selected disabled>bitte auswählen</option>
.result[style*="opacity: 1"] { <option value="saniert">saniert</option>
@apply opacity-100; <option value="unsaniert">unsaniert</option>
} </select>
} </div>
</div>
}
} <div class="OEA_zeile3">
{#if showVerbrauchsausweis}
<div
</style> class="OEA_item6 result"
transition:fade={{ duration: 1000 }}
>
<CardVerbrauchsausweisWidget />
</div>
{/if}
{#if allowedReason.includes(anlass) && allowedTypes.includes(gebaeudetyp)}
<div
class="OEA_item6 result"
transition:fade={{ duration: 1000 }}
>
<CardBedarfsausweisWidget />
</div>
{/if}
{#if allowedReason.includes(anlass) && allowedTypesGewerbe.includes(gebaeudetyp)}
<div
class="OEA_item6 result"
transition:fade={{ duration: 1000 }}
>
<CardVerbrauchsausweisGewerbeWidget />
</div>
{/if}
{#if allowedReason.includes(anlass) && allowedTypesGewerbe.includes(gebaeudetyp)}
<div
class="OEA_item6 result"
transition:fade={{ duration: 1000 }}
>
<CardBedarfsausweisGewerbeWidget />
</div>
{/if}
</div>
</div>
</div>
<style lang="scss">
#OEA_widget {
@apply bg-gray-100 p-4 shadow-xl;
#OEA_input {
@apply space-y-2;
.OEA_zeile1,
.OEA_zeile2 {
@apply flex flex-row space-x-2;
.OEA_item1,
.OEA_item2,
.OEA_item3,
.OEA_item4,
.OEA_item5 {
@apply w-full;
.OEA_title1,
.OEA_title2 {
@apply font-bold text-lg text-white p-1.5 pl-2 rounded w-full;
}
}
}
.OEA_title1 {
@apply bg-secondary;
}
.OEA_title2 {
@apply bg-primary;
}
.OEA_auswahl1,
.OEA_auswahl2 {
@apply w-full p-2 rounded focus:outline-none focus:ring-2 focus:ring-blue-500;
}
#OEA_result {
@apply rounded-lg text-gray-700;
}
.OEA_zeile3 {
@apply flex flex-row space-x-4 pt-6 items-start justify-center;
}
.OEA_item6 {
.result {
@apply opacity-0 transition-opacity duration-1000 ease-in-out;
}
.result[style*="opacity: 1"] {
@apply opacity-100;
}
}
}
}
</style>

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,14 +1,13 @@
--- ---
import Layout from "#layouts/Layout_1.astro"; import Layout from "#layouts/Layout_1.astro";
import BannerPrice from "#content/banner-saeule.svelte";
---
---
<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>