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

This commit is contained in:
Robert Jagtiani
2024-12-12 18:35:47 +01:00
17 changed files with 883 additions and 413 deletions

View File

@@ -45,7 +45,6 @@
"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",

View File

@@ -4,11 +4,11 @@ import {
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(

View File

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

View File

@@ -1,7 +1,7 @@
<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;

View File

@@ -6,13 +6,19 @@
import Label from "#components/Label.svelte"; import Label from "#components/Label.svelte";
import HelpLabel from "#components/HelpLabel.svelte"; import HelpLabel from "#components/HelpLabel.svelte";
import ZipSearch from "#components/PlzSuche.svelte"; import ZipSearch from "#components/PlzSuche.svelte";
import { hotWaterProductionTypes } from "./HotWaterProductionTypes"; import { hotWaterProductionTypes } from "./HotWaterProductionTypes.js";
import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte"; import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment"; import moment from "moment";
import { BitChecker } from "src/lib/BitChecker"; import { BitChecker } from "src/lib/BitChecker.js";
import type { BedarfsausweisWohnen } from "@ibcornelsen/database/client"; import { Enums } from "@ibcornelsen/database/client";
import { BedarfsausweisWohnenClient, BenutzerClient, UploadedGebaeudeBild } from "#components/Ausweis/types.js";
let ausweis: BedarfsausweisWohnen = {} as BedarfsausweisWohnen; export let ausweis: BedarfsausweisWohnenClient;
export let user: BenutzerClient = {} as BenutzerClient;
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || [];
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4]; let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];
@@ -50,7 +56,7 @@
ausweis.objekt_ort = "Hamburg"; ausweis.objekt_ort = "Hamburg";
ausweis.wohnflaeche = 152; ausweis.wohnflaeche = 152;
ausweis.keller_beheizt = true; ausweis.keller_beheizt = true;
ausweis.dachgeschoss = Dachgeschoss.UNBEHEIZT; ausweis.dachgeschoss = Enums.Heizungsstatus.UNBEHEIZT;
ausweis.energieverbrauch_zeitraum = moment("04.01.2018"); ausweis.energieverbrauch_zeitraum = moment("04.01.2018");
ausweis.energietraeger_1 = "Erdgas"; ausweis.energietraeger_1 = "Erdgas";
ausweis.energietraeger_einheit_heizquelle_1 = "kWh"; ausweis.energietraeger_einheit_heizquelle_1 = "kWh";
@@ -112,7 +118,7 @@
<Progressbar progress={0} /> <Progressbar progress={0} />
</div> </div>
<PerformanceScore {ausweis} /> <PerformanceScore {ausweis} {gebaeude} {gebaeude_aufnahme_allgemein} />
</div> </div>
<form action="FORM/transfer/VA_1to2" enctype="multipart/form-data"> <form action="FORM/transfer/VA_1to2" enctype="multipart/form-data">
@@ -133,7 +139,9 @@
<hr /> <hr />
<Label>A - Prüfung der Ausweisart</Label> <Label>A - Prüfung der Ausweisart</Label>
<Ausweisart bind:ausweis /> <Ausweisart bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis />
<hr /> <hr />
<Label <Label
>B - Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Gebäudetyp >B - Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Gebäudetyp
@@ -866,9 +874,9 @@
required required
> >
<option> Bitte auswählen</option> <option> Bitte auswählen</option>
<option value={Dachgeschoss.NICHT_VORHANDEN}> nicht vorhanden</option> <option value={Enums.Heizungsstatus.NICHT_VORHANDEN}> nicht vorhanden</option>
<option value={Dachgeschoss.UNBEHEIZT}> unbeheizt</option> <option value={Enums.Heizungsstatus.UNBEHEIZT}> unbeheizt</option>
<option value={Dachgeschoss.BEHEIZT}> beheizt</option> <option value={Enums.Heizungsstatus.BEHEIZT}> beheizt</option>
</select> </select>
</div> </div>
</div> </div>
@@ -1296,7 +1304,7 @@
>G - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des >G - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des
Gebäudes</Label Gebäudes</Label
> >
<BilderZusatzsysteme {ausweis} /> <BilderZusatzsysteme {ausweis} {gebaeude} {gebaeude_aufnahme_allgemein} {images} />
<hr /> <hr />
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
<button class="button">Weiter</button> <button class="button">Weiter</button>

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

View File

@@ -1,72 +1,51 @@
<script lang="ts"> <script lang="ts">
import CardVerbrauchsausweisWidget from "#content/CardVerbrauchsausweisWidget.svelte";
import CardVerbrauchsausweisGewerbeWidget from "#content/CardVerbrauchsausweisGewerbeWidget.svelte";
import CardBedarfsausweisWidget from "#content/CardBedarfsausweisWidget.svelte";
import CardBedarfsausweisGewerbeWidget from "#content/CardBedarfsausweisGewerbeWidget.svelte";
import { fade } from "svelte/transition";
<<<<<<< HEAD:src/components/widgets/welcherAusweisWidget.svelte
import cardVAwidget from "#content/cardVAwidget.svelte"; import cardVAwidget from "#content/cardVAwidget.svelte";
import cardVAGwidget from "#content/cardVAGwidget.svelte"; import cardVAGwidget from "#content/cardVAGwidget.svelte";
import cardBAwidget from "#content/cardBAwidget.svelte"; import cardBAwidget from "#content/cardBAwidget.svelte";
import cardBAGwidget from "#content/cardBAGwidget.svelte"; import cardBAGwidget from "#content/cardBAGwidget.svelte";
import { fade } from 'svelte/transition'; import { fade } from 'svelte/transition';
=======
let gebaeudetyp: string;
let anlass: string;
let einheiten: string;
let sanierungsstatus: string;
let baujahr: string;
>>>>>>> origin/UMBE:src/components/Widget.svelte
let selectedType: string = ""; const allowedTypes = [
let selectedReason: string = ""; "Einfamilienhaus",
let selectedUnits: string = ""; "Zweifamilienhaus",
let selectedStatus: string = ""; "Mehrfamilienhaus",
let selectedYear: string = ""; "Mischgebäude",
];
const allowedTypesGewerbe = ["Gewerbegebäude", "Mischgebäude"];
const allowedReason = ["Vermietung/Verkauf", "sonstiges", "Aushangpflicht"];
let showBA: boolean = false; let showVerbrauchsausweis: boolean = false
let showVAG: boolean = false;
let showBAG: boolean = false;
let showVA: boolean = false;
function handleTypeChange(event: Event) {
selectedType = (event.target as HTMLSelectElement).value;
updateResultVisibility();
}
function handleReasonChange(event: Event) {
selectedReason = (event.target as HTMLSelectElement).value;
updateResultVisibility();
}
function handleUnitsChange(event: Event) {
selectedUnits = (event.target as HTMLSelectElement).value;
updateResultVisibility();
}
function handleStatusChange(event: Event) {
selectedStatus = (event.target as HTMLSelectElement).value;
updateResultVisibility();
}
function handleYearChange(event: Event) {
selectedYear = (event.target as HTMLSelectElement).value;
updateResultVisibility();
}
const allowedTypes = ["Einfamilienhaus", "Zweifamilienhaus", "Mehrfamilienhaus", "Mischgebäude"];
const allowedTypesGewerbe = ["Gewerbegebäude", "Mischgebäude"];
const allowedReason = ["Vermietung/Verkauf", "sonstiges", "Aushangpflicht"];
// const allowedReasonBau = ["Modernisierung", "Neubau", "Erweiterung"];
function updateResultVisibility() {
// Die Bedingung, um das Ergebnis anzuzeigen
// Zusätzliche Bedingung: Wenn "vor 1978" ausgewählt wurde
if (selectedYear === "vor 1978") {
showVA = (allowedReason.includes(selectedReason) && allowedTypes.includes(selectedType)) && (selectedUnits === "mehr als 4 Wohneinheiten" || selectedStatus === "saniert");
}
else
{
showVA = allowedReason.includes(selectedReason) && allowedTypes.includes(selectedType);
}
showBA = allowedReason.includes(selectedReason) && allowedTypes.includes(selectedType);
showVAG = allowedReason.includes(selectedReason) && allowedTypesGewerbe.includes(selectedType);
showBAG = allowedReason.includes(selectedReason) && allowedTypesGewerbe.includes(selectedType);
}
$: {
if (baujahr === "vor 1978") {
showVerbrauchsausweis =
allowedReason.includes(anlass) &&
allowedTypes.includes(gebaeudetyp) &&
(einheiten === "mehr als 4 Wohneinheiten" ||
sanierungsstatus === "saniert");
} else {
showVerbrauchsausweis =
allowedReason.includes(anlass) &&
allowedTypes.includes(gebaeudetyp);
}
}
</script> </script>
<<<<<<< HEAD:src/components/widgets/welcherAusweisWidget.svelte
<div id="OEA_widget"> <div id="OEA_widget">
<input id="recode" type="hidden" value="widgetvorlage"> <input id="recode" type="hidden" value="widgetvorlage">
@@ -153,70 +132,184 @@ import { fade } from 'svelte/transition';
</div> </div>
{/if} {/if}
</div> </div>
=======
<div id="OEA_widget">
<input id="recode" type="hidden" value="widgetvorlage" />
</div> <div id="OEA_input">
</div> <div class="OEA_zeile1">
<div class="OEA_item1">
<div class="OEA_title1">Gebäudetyp</div>
<style lang="scss"> <select
class="OEA_auswahl1"
@tailwind base; bind:value={gebaeudetyp}
@tailwind components; >
@tailwind utilities; <option value="" selected disabled>bitte auswählen</option>
<option value="Einfamilienhaus">Einfamilienhaus</option>
#OEA_widget { <option value="Zweifamilienhaus">Zweifamilienhaus</option>
@apply bg-gray-100 p-4 shadow-xl; <option value="Mehrfamilienhaus">Mehrfamilienhaus</option>
<option value="Gewerbegebäude">Gewerbegebäude</option>
#OEA_input { @apply space-y-2; <option value="Mischgebäude">Mischgebäude</option>
</select>
</div>
.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 { <div class="OEA_item2">
@apply flex flex-row space-x-4 pt-6 items-center justify-center; <div class="OEA_title1">Anlass</div>
} <select
class="OEA_auswahl1"
bind:value={anlass}
>
<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>
.OEA_item6 { <div class="OEA_zeile2">
<div class="OEA_item3">
.result { <div class="OEA_title2">Baujahr</div>
@apply opacity-0 transition-opacity duration-1000 ease-in-out; <select
} class="OEA_auswahl2"
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>
</select>
</div>
>>>>>>> origin/UMBE:src/components/Widget.svelte
.result[style*="opacity: 1"] { <div class="OEA_item4">
@apply opacity-100; <div class="OEA_title2">Wohneinheiten</div>
} <select
} class="OEA_auswahl2"
bind:value={einheiten}
>
<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"
bind:value={sanierungsstatus}
>
<option selected disabled>bitte auswählen</option>
<option value="saniert">saniert</option>
<option value="unsaniert">unsaniert</option>
</select>
</div>
</div>
</style> <div class="OEA_zeile3">
{#if showVerbrauchsausweis}
<div
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

@@ -5,7 +5,7 @@
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";
@@ -15,7 +15,11 @@
//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 {
RawNotificationWrapper,
RawNotification,
notifications,
} 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";
@@ -24,7 +28,10 @@
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 { AuditType, hidden } from "#components/Verbrauchsausweis/audits/hidden.js"; import {
AuditType,
hidden,
} 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";
@@ -32,28 +39,45 @@
//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 { VerbrauchsausweisWohnenClient, BenutzerClient, UploadedGebaeudeBild } from "#components/Ausweis/types.js"; import {
VerbrauchsausweisWohnenClient,
BenutzerClient,
UploadedGebaeudeBild,
} 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 = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {}; let gebaeude =
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || []; ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] =
ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten
?.gebaeude_bilder || [];
async function spaeterWeitermachen() { async function spaeterWeitermachen() {
const result = await verbrauchsausweisWohnenSpeichern(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user); const result = await verbrauchsausweisWohnenSpeichern(
ausweis,
gebaeude,
gebaeude_aufnahme_allgemein,
images,
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({}, "", `${location.pathname}?uid=${result.uid}`); window.history.pushState(
{},
"",
`${location.pathname}?uid=${result.uid}`
);
speichernOverlayHidden = false; speichernOverlayHidden = false;
} }
} }
@@ -83,18 +107,27 @@
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(ausweis, gebaeude, gebaeude_aufnahme_allgemein, images, user); const result = await verbrauchsausweisWohnenSpeichern(
ausweis,
gebaeude,
gebaeude_aufnahme_allgemein,
images,
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({}, "", `${location.pathname}?uid=${result.uid}`); window.history.pushState(
{},
"",
`${location.pathname}?uid=${result.uid}`
);
window.location.href = `/kundendaten?uid=${result.uid}`; window.location.href = `/kundendaten?uid=${result.uid}`;
} }
} }
@@ -103,15 +136,16 @@
let speichernOverlayHidden = true; let speichernOverlayHidden = true;
$: { $: {
if (gebaeude_aufnahme_allgemein.saniert if (
&& gebaeude_aufnahme_allgemein.oberste_geschossdecke_gedaemmt === undefined gebaeude_aufnahme_allgemein.saniert &&
&& gebaeude_aufnahme_allgemein.dachgeschoss_gedaemmt === undefined) { gebaeude_aufnahme_allgemein.oberste_geschossdecke_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}>
@@ -127,30 +161,45 @@
</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">
<!-- Später weitermachen / Hilfe anfordern -->
<div id="formular-box" class="formular-boxen ring-0"> <div
class="w-full grid gap-x-4 gap-y-2
<!-- Später weitermachen / Hilfe anfordern -->
<div 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"><button class="button" type="button" on:click={spaeterWeitermachen}>Später Weitermachen</button></div> >
<div class="md:justify-self-end"><Hilfe /></div> <div class="md:justify-self-start">
<button
</div> class="button"
type="button"
<div class="mt-2"><button class="button hidden" on:click={automatischAusfüllen} type="button" >Automatisch Ausfüllen</button></div> on:click={spaeterWeitermachen}>Später Weitermachen</button
>
</div>
<div class="md:justify-self-end"><Hilfe /></div>
</div>
<div class="mt-2">
<button
class="button hidden"
on:click={automatischAusfüllen}
type="button">Automatisch Ausfüllen</button
>
</div>
<!-- A Prüfung der Ausweisart -->
<BereichLabel bereich="A">Prüfung der Ausweisart</BereichLabel>
<Ausweisart
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/>
<!-- A Prüfung der Ausweisart --> <!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
<<<<<<< HEAD
<BereichLabel bereich="A">Prüfung der Ausweisart</BereichLabel> <BereichLabel bereich="A">Prüfung der Ausweisart</BereichLabel>
<div class="collapseBereich"> <div class="collapseBereich">
<Ausweisart <Ausweisart
@@ -174,15 +223,16 @@
</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> </form>
<style lang="scss"> <style lang="scss">
</style> </style>

View File

@@ -7,38 +7,21 @@
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 ZipSearch from "../../components/PlzSuche.svelte"; import ZipSearch from "../../components/PlzSuche.svelte";
import { buildingTypes } from "./BuildingTypes"; import { buildingTypes } from "./BuildingTypes.js";
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte"; import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment"; import moment from "moment";
import { Enums } from "@ibcornelsen/database/client"; import { Enums } from "@ibcornelsen/database/client";
import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types"; import { GebaeudeClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
import { BenutzerClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
export let images: UploadedGebaeudeBild[] = []; export let ausweis: VerbrauchsausweisGewerbeClient;
export let gebaeude: GebaeudeClient = {} as GebaeudeClient; export let user: BenutzerClient = {} as BenutzerClient;
export let ausweis: VerbrauchsausweisGewerbeClient = {} as VerbrauchsausweisGewerbeClient;
let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {};
let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || [];
function automatischAusfüllen() { function automatischAusfüllen() {
gebaeude.baujahr_gebaeude = [1962];
gebaeude.baujahr_heizung = [1952];
gebaeude.saniert = true;
gebaeude.einheiten = 1;
ausweis.ausstellgrund = "Vermietung";
ausweis.verbrauch_1 = 15000;
ausweis.verbrauch_2 = 14000;
ausweis.verbrauch_3 = 16000;
gebaeude.flaeche = 152;
ausweis.keller_beheizt = true;
ausweis.brennstoff_1 = "Erdgas H";
ausweis.einheit_1 = "kWh";
ausweis.anteil_warmwasser_1 = 18;
ausweis.startdatum = moment("12.01.2019").toDate();
gebaeude.plz = "21039";
gebaeude.ort = "Hamburg";
gebaeude.adresse = "Curslacker Deich 170";
gebaeude.gebaeudeteil = "Gesamtgebäude";
gebaeude = gebaeude;
ausweis = ausweis;
} }
</script> </script>
@@ -48,7 +31,7 @@
<Progressbar progress={0} /> <Progressbar progress={0} />
</div> </div>
<PerformanceScore bind:ausweis bind:gebaeude /> <PerformanceScore bind:ausweis bind:gebaeude bind:gebaeude_aufnahme_allgemein />
</div> </div>
<!-- TODO: Submit implementieren in externer Datei wenn Verbrauchsausweis Wohnen fertig ist --> <!-- TODO: Submit implementieren in externer Datei wenn Verbrauchsausweis Wohnen fertig ist -->
@@ -72,7 +55,7 @@
<Label>A - Prüfung der Ausweisart</Label> <Label>A - Prüfung der Ausweisart</Label>
<Ausweisart bind:ausweis bind:gebaeude /> <Ausweisart bind:ausweis bind:gebaeude bind:gebaeude_aufnahme_allgemein />
<div <div
class="flex flex-col p-4" class="flex flex-col p-4"
@@ -204,7 +187,7 @@
</div> </div>
<div class="GRB"> <div class="GRB">
<Verbrauch bind:ausweis bind:gebaeude /> <Verbrauch bind:ausweis bind:gebaeude bind:gebaeude_aufnahme_allgemein />
</div> </div>
<hr> <hr>
<div class="flex flex-row gap-4"> <div class="flex flex-row gap-4">
@@ -620,7 +603,7 @@
> >
</div> </div>
<BilderZusatzsysteme {ausweis} {gebaeude} bind:images /> <BilderZusatzsysteme {ausweis} {gebaeude} bind:images bind:gebaeude_aufnahme_allgemein />
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
<Hilfe /> <Hilfe />

View File

@@ -2,9 +2,34 @@
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";
const uid = Astro.url.searchParams.get("uid");
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"> <AusweisLayout title="Bedarfsausweis erstellen | IBCornelsen">
<BedarfsausweisContent client:load></BedarfsausweisContent> <BedarfsausweisContent client:load ausweis={ausweis}></BedarfsausweisContent>
</AusweisLayout> </AusweisLayout>

View File

@@ -2,9 +2,32 @@
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";
const uid = Astro.url.searchParams.get("uid");
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"> <AusweisLayout title="Verbrauchsausweis Gewerbe erstellen | IBCornelsen">
<VerbrauchsausweisGewerbeModule client:load></VerbrauchsausweisGewerbeModule> <VerbrauchsausweisGewerbeModule client:load ausweis={ausweis}></VerbrauchsausweisGewerbeModule>
</AusweisLayout> </AusweisLayout>

View File

@@ -1,6 +1,10 @@
--- ---
import Layout from "#layouts/Layout.astro"; import Layout from "#layouts/Layout.astro";
<<<<<<< HEAD
import ProduktVergleich from "#content/produktVergleich.svelte"; import ProduktVergleich from "#content/produktVergleich.svelte";
=======
import BannerSaeule from "#content/BannerSaeule.svelte";
>>>>>>> origin/UMBE
--- ---
@@ -8,7 +12,11 @@ import ProduktVergleich from "#content/produktVergleich.svelte";
<h1>Unsere Ausweise im Detail:</h1> <h1>Unsere Ausweise im Detail:</h1>
<<<<<<< HEAD
<!-- <ProduktVergleich /> --> <!-- <ProduktVergleich /> -->
=======
<BannerSaeule client:load />
>>>>>>> origin/UMBE
</Layout> </Layout>

View File

@@ -1,6 +1,5 @@
--- ---
import Layout from "#layouts/Layout_1.astro"; import Layout from "#layouts/Layout_1.astro";
import BannerPrice from "#content/banner-saeule.svelte";
--- ---