Merge branch 'main' into UMBE
This commit is contained in:
@@ -18,9 +18,6 @@
|
||||
bilder: UploadedGebaeudeBild[],
|
||||
events: Event[]
|
||||
}[];
|
||||
|
||||
console.log(ausweise);
|
||||
|
||||
</script>
|
||||
|
||||
<div class="gap-4 flex flex-col">
|
||||
|
||||
@@ -1,29 +1,20 @@
|
||||
<script lang="ts">
|
||||
import { BenutzerClient, ObjektClient } from "#components/Ausweis/types.js";
|
||||
import { BenutzerClient, ObjektKomplettClient } from "#components/Ausweis/types.js";
|
||||
import DashboardAusweis from "#components/Dashboard/DashboardAusweis.svelte";
|
||||
import DashboardObjekt from "#components/Dashboard/DashboardObjekt.svelte";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let objekte: ObjektClient[];
|
||||
export let objekte: ObjektKomplettClient[];
|
||||
</script>
|
||||
|
||||
<h1 class="text-4xl font-medium my-8">Willkommen zurück, {user.vorname}!</h1>
|
||||
<h1 class="text-4xl font-medium">Willkommen zurück, {user.vorname}!</h1>
|
||||
<p class="text-lg">
|
||||
Hier finden Sie eine Übersicht über all ihre Ausweise und Gebäude.
|
||||
</p>
|
||||
|
||||
<h1 class="text-4xl font-medium my-8">Gebäude</h1>
|
||||
<div class="grid grid-cols-1 gap-4 lg:grid-cols-2">
|
||||
<!-- {#each objekte as objekt}
|
||||
<div class="card lg:card-side bg-base-200 card-bordered border-base-300">
|
||||
<figure class="lg:w-1/2">
|
||||
<img
|
||||
src={(objekt.gebaeude_bilder && `/bilder/${objekt.gebaeude_bilder[0]?.uid}.webp`) || "/images/placeholder.jpg"}
|
||||
class="object-cover w-full h-full"
|
||||
alt="Gebäudebild"
|
||||
/>
|
||||
</figure>
|
||||
<div class="card-body lg:w-1/2 p-4">
|
||||
<h4 class="text-lg font-semibold">{objekt.adresse}, {objekt.plz} {objekt.ort}</h4>
|
||||
</div>
|
||||
</div>
|
||||
{/each} -->
|
||||
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
|
||||
{#each objekte as objekt}
|
||||
<DashboardObjekt {objekt}></DashboardObjekt>
|
||||
{/each}
|
||||
</div>
|
||||
33
src/modules/Dashboard/DashboardObjektModule.svelte
Normal file
33
src/modules/Dashboard/DashboardObjektModule.svelte
Normal file
@@ -0,0 +1,33 @@
|
||||
<script lang="ts">
|
||||
import { BenutzerClient, ObjektKomplettClient } from "#components/Ausweis/types.js";
|
||||
import Carousel from "#components/Carousel.svelte";
|
||||
import DashboardAusweis from "#components/Dashboard/DashboardAusweis.svelte";
|
||||
import { ChevronLeft, ChevronRight } from "radix-svelte-icons";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let objekt: ObjektKomplettClient;
|
||||
</script>
|
||||
|
||||
<h1 class="text-4xl font-medium mb-8">{objekt.adresse}</h1>
|
||||
|
||||
<div class="bg-white rounded-lg">
|
||||
<Carousel perPage={1}>
|
||||
{#each objekt.bilder as bild, i (i)}
|
||||
<img src="/bilder/{bild.uid}.webp" alt={bild.kategorie} class="max-h-[60vh] h-full w-full object-contain">
|
||||
{/each}
|
||||
|
||||
<span slot="left-control" class="p-2.5 bg-opacity-50 bg-white block rounded-full"><ChevronLeft size={24}></ChevronLeft></span>
|
||||
<span slot="right-control" class="p-2.5 bg-opacity-50 bg-white block rounded-full"><ChevronRight size={24}></ChevronRight></span>
|
||||
</Carousel>
|
||||
</div>
|
||||
|
||||
<div class="my-8 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
|
||||
{#each objekt.aufnahmen as aufnahme}
|
||||
{@const ausweis = aufnahme.verbrauchsausweis_wohnen ?? aufnahme.verbrauchsausweis_gewerbe ?? aufnahme.bedarfsausweis_wohnen}
|
||||
{#if !ausweis}
|
||||
<p>Diese Aufnahme hat noch keinen Ausweis.</p>
|
||||
{:else}
|
||||
<DashboardAusweis {ausweis} {aufnahme} {objekt} progress={0}></DashboardAusweis>
|
||||
{/if}
|
||||
{/each}
|
||||
</div>
|
||||
@@ -71,11 +71,7 @@
|
||||
export let bezahlmethode: Bezahlmethoden =
|
||||
Enums.Bezahlmethoden.paypal;
|
||||
|
||||
let prices: number[] = [];
|
||||
|
||||
if (aufnahme.ausweisart) {
|
||||
prices = PRICES[aufnahme.ausweisart];
|
||||
}
|
||||
let prices = PRICES[ausweisart];
|
||||
|
||||
let basePrice: number = prices[0];
|
||||
|
||||
@@ -91,6 +87,7 @@
|
||||
[Enums.Ausweisart.VerbrauchsausweisGewerbe]: `/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.BedarfsausweisWohnen]: `/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.BedarfsausweisGewerbe]: `/energieausweis-erstellen/bedarfsausweis-gewerbe?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.GEGNachweisWohnen]: `/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`,
|
||||
}[ausweisart]
|
||||
|
||||
async function speichern(e: SubmitEvent) {
|
||||
@@ -115,6 +112,10 @@
|
||||
window.location.href = `/kaufabschluss?uid=${ausweis.uid}`;
|
||||
}
|
||||
|
||||
async function anfordern() {
|
||||
// TODO Angebot anfordern
|
||||
}
|
||||
|
||||
async function bestellen() {
|
||||
const ausweisart = getAusweisartFromUUID(ausweis.uid) as Enums.Ausweisart;
|
||||
|
||||
@@ -165,6 +166,7 @@
|
||||
bestellenNichtMoeglich = true
|
||||
}
|
||||
|
||||
const gegAnfrage = (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) || (ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) || (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe)
|
||||
</script>
|
||||
|
||||
<div
|
||||
@@ -174,6 +176,7 @@
|
||||
2xl:grid-cols-2 2xl:gap-x-8
|
||||
"
|
||||
>
|
||||
{#if !gegAnfrage}
|
||||
<div id="performance-box" class="w-full box relative px-4 order-1 self-stretch grid grid-cols-1">
|
||||
<PerformanceScore
|
||||
bind:ausweis
|
||||
@@ -182,6 +185,7 @@
|
||||
{ausweisart}
|
||||
/>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div
|
||||
id="progress-box"
|
||||
@@ -189,9 +193,13 @@
|
||||
>
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">
|
||||
Verbrauchsausweis Wohnen {PRICES.VerbrauchsausweisWohnen[0]} €
|
||||
{ausweisart} {prices[0]} €
|
||||
</h2>
|
||||
<Progressbar step2={'step'}/>
|
||||
{#if gegAnfrage}
|
||||
<Progressbar active={1} steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}/>
|
||||
{:else}
|
||||
<Progressbar active={1}/>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -208,10 +216,10 @@
|
||||
<Rechnungsadresse bind:user bind:rechnung /></Bereich
|
||||
>
|
||||
|
||||
{#if !gegAnfrage}
|
||||
<Bereich bereich="3" title="Bezahlmethode">
|
||||
<Bezahlung bind:selectedPaymentType={bezahlmethode} /></Bereich
|
||||
>
|
||||
|
||||
<div class="grid grid-cols-2 gap-x-6 my-6">
|
||||
<div class="zusaetze bereich-box bg-white">
|
||||
<h3>Zusatzleistungen:</h3>
|
||||
@@ -275,6 +283,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div
|
||||
class="w-full grid grid-cols-[min-content_1fr_min-content_min-content] grid-rows-[min_content_1fr] gap-x-2 self-start justify-self-end mt-8"
|
||||
@@ -285,7 +294,11 @@
|
||||
|
||||
<button class="button">Speichern</button>
|
||||
|
||||
<button class="button cursor-pointer" data-cy="bestellen" on:click={bestellen} >Kostenpflichtig bestellen</button>
|
||||
{#if gegAnfrage}
|
||||
<button class="button cursor-pointer" data-cy="bestellen" on:click={anfordern} >Angebot anfordern</button>
|
||||
{:else}
|
||||
<button class="button cursor-pointer" data-cy="bestellen" on:click={bestellen} >Kostenpflichtig bestellen</button>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">Verbrauchsausweis Gewerbe {PRICES.VerbrauchsausweisGewerbe[0]} €</h2>
|
||||
<Progressbar step1={'step'} />
|
||||
<Progressbar active={0} />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -227,9 +227,9 @@ lg:grid-cols-2 lg:gap-x-6
|
||||
|
||||
<div id="progress-box" class="w-full box relative px-4 py-3 text-center order-2 self-stretch">
|
||||
|
||||
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
|
||||
<h1 class="text-secondary text-3xl m-0">Energieausweis erstellen</h1>
|
||||
<h2 class="text-primary text-xl">{ausweisart} {PRICES.VerbrauchsausweisWohnen[0]} €</h2>
|
||||
<Progressbar step1={'step'}/>
|
||||
<Progressbar active={0}/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
362
src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte
Normal file
362
src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte
Normal file
@@ -0,0 +1,362 @@
|
||||
<script lang="ts">
|
||||
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
|
||||
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
|
||||
import {
|
||||
VerbrauchsausweisWohnenClient,
|
||||
ObjektClient,
|
||||
AufnahmeClient,
|
||||
BenutzerClient,
|
||||
UploadedGebaeudeBild,
|
||||
UnterlageClient,
|
||||
GEGNachweisWohnenClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
import InputLabel from "#components/labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Progressbar from "#components/Ausweis/Progressbar.svelte";
|
||||
import FileGrid from "#components/FileGrid.svelte";
|
||||
import Hilfe from "#components/Ausweis/Hilfe.svelte";
|
||||
import Overlay from "#components/Overlay.svelte";
|
||||
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
|
||||
import { validateAccessTokenClient } from "#client/lib/validateAccessToken.js";
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { exclude } from "#lib/exclude.js";
|
||||
import Cookies from "js-cookie";
|
||||
|
||||
export async function nachweisSpeichern(
|
||||
nachweis: GEGNachweisWohnenClient,
|
||||
objekt: ObjektClient,
|
||||
aufnahme: AufnahmeClient,
|
||||
unterlagen: (UnterlageClient & { data?: string })[]
|
||||
) {
|
||||
if (objekt.uid) {
|
||||
await api.objekt._uid.PATCH.fetch({
|
||||
...exclude(objekt, ["uid"])
|
||||
}, {
|
||||
params: {
|
||||
uid: objekt.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api.objekt.PUT.fetch({
|
||||
...exclude(objekt, ["uid"])
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
|
||||
objekt.uid = uid;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (aufnahme.uid) {
|
||||
await api.aufnahme._uid.PATCH.fetch({
|
||||
...exclude({...aufnahme, baujahr_klima: []}, ["uid"])
|
||||
}, {
|
||||
params: {
|
||||
uid: aufnahme.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api.aufnahme.PUT.fetch({
|
||||
aufnahme: {...aufnahme, baujahr_klima: []},
|
||||
uid_objekt: objekt.uid
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
|
||||
aufnahme.uid = uid
|
||||
}
|
||||
|
||||
if (nachweis.uid) {
|
||||
await api["geg-nachweis-wohnen"]._uid.PATCH.fetch({
|
||||
|
||||
...exclude(nachweis, ["uid"])
|
||||
}, {
|
||||
params: {
|
||||
uid: nachweis.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api["geg-nachweis-wohnen"].PUT.fetch({
|
||||
nachweis: nachweis,
|
||||
uid_aufnahme: aufnahme.uid
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
|
||||
nachweis.uid = uid;
|
||||
}
|
||||
|
||||
for (const unterlage of unterlagen) {
|
||||
if (unterlage.uid || !unterlage.data) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const response = await api.objekt._uid.unterlagen.PUT.fetch({
|
||||
data: unterlage.data,
|
||||
kategorie: unterlage.kategorie,
|
||||
mime: unterlage.mime,
|
||||
name: unterlage.name
|
||||
}, {
|
||||
params: {
|
||||
uid: objekt.uid
|
||||
},
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
}
|
||||
})
|
||||
|
||||
unterlage.uid = response.uid
|
||||
}
|
||||
|
||||
return {
|
||||
uid_ausweis: nachweis.uid,
|
||||
uid_aufnahme: aufnahme.uid,
|
||||
uid_objekt: objekt.uid
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function nachweisAbschicken() {
|
||||
if (!(await validateAccessTokenClient())) {
|
||||
loginOverlayHidden = false;
|
||||
return;
|
||||
}
|
||||
|
||||
const result = await nachweisSpeichern(nachweis, objekt, aufnahme, unterlagen)
|
||||
|
||||
if (result !== null) {
|
||||
window.history.pushState(
|
||||
{},
|
||||
"",
|
||||
`${location.pathname}?uid=${result.uid_ausweis}`
|
||||
);
|
||||
window.location.href = `/kundendaten?uid=${result.uid_ausweis}`;
|
||||
}
|
||||
|
||||
loginOverlayHidden = true;
|
||||
}
|
||||
|
||||
async function spaeterWeitermachen() {
|
||||
if (!(await validateAccessTokenClient())) {
|
||||
loginOverlayHidden = false;
|
||||
return;
|
||||
}
|
||||
|
||||
loginOverlayHidden = true;
|
||||
}
|
||||
|
||||
let loginOverlayHidden = true;
|
||||
|
||||
export let nachweis: GEGNachweisWohnenClient;
|
||||
export let objekt: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
export let bilder: UploadedGebaeudeBild[] = [];
|
||||
export let plaene: (UnterlageClient & { data: string })[] =
|
||||
[];
|
||||
export let unterlagen: (UnterlageClient & {
|
||||
data: string;
|
||||
})[] = [];
|
||||
|
||||
|
||||
if (Object.keys(nachweis).length === 0) {
|
||||
const localStorageAusweis = localStorage.getItem("ausweis");
|
||||
if (localStorageAusweis) {
|
||||
nachweis = JSON.parse(localStorageAusweis)
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(aufnahme).length === 0) {
|
||||
const localStorageAufnahme = localStorage.getItem("aufnahme");
|
||||
if (localStorageAufnahme) {
|
||||
aufnahme = JSON.parse(localStorageAufnahme)
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(objekt).length === 0) {
|
||||
const localStorageObjekt = localStorage.getItem("objekt");
|
||||
if (localStorageObjekt) {
|
||||
objekt = JSON.parse(localStorageObjekt)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$: {
|
||||
if (nachweis.uid && objekt.uid && aufnahme.uid) {
|
||||
localStorage.setItem(nachweis.uid, JSON.stringify(nachweis))
|
||||
localStorage.setItem(objekt.uid, JSON.stringify(objekt))
|
||||
localStorage.setItem(aufnahme.uid, JSON.stringify(aufnahme))
|
||||
} else {
|
||||
localStorage.setItem("ausweis", JSON.stringify(nachweis))
|
||||
localStorage.setItem("aufnahme", JSON.stringify(aufnahme))
|
||||
localStorage.setItem("objekt", JSON.stringify(objekt))
|
||||
}
|
||||
}
|
||||
|
||||
const ausweisart = Enums.Ausweisart.GEGNachweisVerbrauchsausweisWohnen;
|
||||
</script>
|
||||
|
||||
<div
|
||||
id="skala"
|
||||
class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll"
|
||||
>
|
||||
<div
|
||||
id="progress-box"
|
||||
class="w-full box relative px-4 py-3 text-center order-2 self-stretch"
|
||||
>
|
||||
<h1 class="text-secondary text-3xl m-0">GEG Nachweis Anfragen</h1>
|
||||
<h2 class="text-primary text-xl">Verbrauchsausweis Wohnen</h2>
|
||||
<Progressbar
|
||||
active={0}
|
||||
steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form
|
||||
id="formInput-1"
|
||||
on:submit={nachweisAbschicken}
|
||||
name="ausweis"
|
||||
data-test="ausweis"
|
||||
>
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
<!-- A Prüfung der Ausweisart -->
|
||||
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<Ausweisart bind:objekt bind:aufnahme bind:ausweis={nachweis} {ausweisart} />
|
||||
</Bereich>
|
||||
|
||||
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
|
||||
|
||||
<Bereich
|
||||
bereich="B"
|
||||
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
|
||||
><GebaeudeDaten bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich bereich="C" title="Beschreibung des Bauvorhabens">
|
||||
<div class="bereich-box">
|
||||
<div class="input-standard order-3 md:order-5 xl:order-3">
|
||||
<InputLabel
|
||||
title="Angaben zur Heizung, Lüftung, Energieerezugung, Qualität und Aufbau der Gebäudehülle usw."
|
||||
></InputLabel>
|
||||
|
||||
<textarea class="rounded-e-none" rows="10" bind:value={nachweis.beschreibung}></textarea>
|
||||
|
||||
<div class="help-label">
|
||||
<HelpLabel>
|
||||
Geben Sie kurz an: Heizung, Lüftung, regenerative
|
||||
Energie (Solar, PV) und die Gebäudehülle (Qualität,
|
||||
Aufbau).
|
||||
</HelpLabel>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Bereich>
|
||||
|
||||
<Bereich bereich="D" title="Gebäudepläne & Unterlagen">
|
||||
<div
|
||||
class="bereich-box grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6"
|
||||
>
|
||||
<div class="md:box md:card mb-0">
|
||||
<div class="font-bold mb-2">Pläne</div>
|
||||
|
||||
<div>
|
||||
Hier können sie Grundrisspläne, Ansichtspläne und
|
||||
Schnitte hochladen. Die Dateien können entweder im PDF
|
||||
Format oder als Bild hochgeladen werden.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<div>
|
||||
<strong
|
||||
>Bitte laden Sie hier mind. 1 Dokument hoch:</strong
|
||||
>
|
||||
</div>
|
||||
<FileGrid
|
||||
max={Infinity}
|
||||
min={1}
|
||||
name={"plaene"}
|
||||
bind:files={plaene}
|
||||
bind:ausweis={nachweis}
|
||||
bind:objekt
|
||||
></FileGrid>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="bereich-box grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6"
|
||||
>
|
||||
<div class="md:box md:card mb-0">
|
||||
<div class="font-bold mb-2">Unterlagen</div>
|
||||
|
||||
<div>
|
||||
Hier können sie weitere Unterlagen wie z.B.
|
||||
Baugenehmigungen, U-Wert Berechnungen, Anlagentechnik
|
||||
oder ihren alten Energieausweis hochladen. Die Dateien
|
||||
können entweder im PDF Format oder als Bild hochgeladen
|
||||
werden.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<FileGrid
|
||||
max={Infinity}
|
||||
min={0}
|
||||
name={"unterlagen"}
|
||||
bind:files={unterlagen}
|
||||
bind:ausweis={nachweis}
|
||||
bind:objekt
|
||||
></FileGrid>
|
||||
</div>
|
||||
</div>
|
||||
</Bereich>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="grid grid-cols-[1fr_min-content_min-content_min-content] grid-rows-[min_content_1fr] gap-x-2 self-start justify-self-end mt-8"
|
||||
>
|
||||
<div></div>
|
||||
|
||||
<Hilfe />
|
||||
|
||||
<button class="button" type="button" on:click={spaeterWeitermachen}
|
||||
>Später Weitermachen
|
||||
</button>
|
||||
|
||||
<div>
|
||||
<Overlay bind:hidden={loginOverlayHidden}>
|
||||
<div class="bg-white w-full max-w-screen-sm py-8">
|
||||
<EmbeddedAuthFlowModule onLogin={nachweisAbschicken}
|
||||
></EmbeddedAuthFlowModule>
|
||||
</div>
|
||||
</Overlay>
|
||||
|
||||
<button
|
||||
on:click={nachweisAbschicken}
|
||||
type="button"
|
||||
class="button"
|
||||
data-cy="weiter">Weiter</button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
Reference in New Issue
Block a user