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

This commit is contained in:
Robert Jagtiani
2025-02-14 01:16:39 +01:00
158 changed files with 5603 additions and 1240 deletions

View File

@@ -2,11 +2,10 @@
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
import ProgressBar from "#components/Ausweis/Progressbar.svelte";
//import Hilfe from "#components/Ausweis/Hilfe.svelte";
import { PRICES } from "#lib/constants";
import { PRICES } from "#lib/constants.js";
import Bereich from "#components/labels/Bereich.svelte";
import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
@@ -29,20 +28,19 @@
import {
BedarfsausweisWohnenClient,
BenutzerClient,
ObjektClient,
UploadedGebaeudeBild,
AufnahmeClient
} from "#components/Ausweis/types.js";
import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
let ausweisart = Enums.Ausweisart.BedarfsausweisWohnen
export let ausweis: BedarfsausweisWohnenClient;
export let objekt: ObjektClient
export let aufnahme: AufnahmeClient
export let user: BenutzerClient = {} as BenutzerClient;
let aufnahme = ausweis.aufnahme || {};
let gebaeude =
ausweis.aufnahme?.objekt || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] =
ausweis.aufnahme?.objekt
?.gebaeude_bilder || [];
export let images: UploadedGebaeudeBild[] = []
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];
@@ -159,13 +157,15 @@
}
</script>
<div id="skala" class="bg-white grid grid-cols-1 gap-x-8 gap-y-4 p-4
<div id="skala" class="bg-white grid grid-cols-1 gap-x-8 gap-y-4 p-4">
<div class="w-full rounded-lg border-gray/35 border-2 relative px-4">
<PerformanceScore
bind:ausweis
bind:aufnahme={aufnahme}
bind:objekt={gebaeude}
bind:objekt={objekt}
{ausweisart}
/>
</div>
</div>
@@ -173,12 +173,10 @@
<div id="progress-box" class="w-full box relative px-4 py-3 text-center order-1 2xl:order-2 self-stretch">
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
<h2 class="text-primary text-xl">{Energieausweis} {PRICES.BedarfsausweisWohnen[0]}</h2>
<h2 class="text-primary text-xl">{ausweisart} {PRICES.BedarfsausweisWohnen[0]}</h2>
<ProgressBar progress={0} />
</div>
</div>
<form id="formInput-1" on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">
<div id="formular-box" class="formular-boxen ring-0">
@@ -189,10 +187,10 @@
<Bereich bereich="A" title="Prüfung der Ausweisart">
<Ausweisart
bind:objekt={gebaeude}
bind:objekt={objekt}
bind:aufnahme={aufnahme}
bind:ausweis
{Energieausweis}
{ausweisart}
/>
</Bereich>
@@ -200,23 +198,22 @@
<!-- 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 /></Bereich
>
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:aufnahme bind:objekt /></Bereich
>
<hr />
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:gebaeude_aufnahme_allgemein /></Bereich
><GebaeudeDaten bind:aufnahme bind:objekt /></Bereich
>
<!-- C - Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen -->
<Bereich
bind:ausweis
bereich="C"
title="Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen"
>
@@ -605,7 +602,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
><input
type="checkbox"
name="energiequelle_2_nutzung_1"
bind:checked={ausweis.energiequelle_2_nutzung[0]}
bind:checked={ausweis.alternative_heizung}
value="Heizung"
/>Heizung</label
>
@@ -613,7 +610,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
><input
type="checkbox"
name="energiequelle_2_nutzung_2"
bind:checked={ausweis.energiequelle_2_nutzung[1]}
bind:checked={ausweis.alternative_warmwasser}
value="Warmwasser"
/>Warmwasser</label
>
@@ -621,7 +618,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
><input
type="checkbox"
name="energiequelle_2_nutzung_3"
bind:checked={ausweis.energiequelle_2_nutzung[2]}
bind:checked={ausweis.alternative_lueftung}
value="Lüftung"
/>Lüftung</label
>
@@ -629,7 +626,7 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
><input
type="checkbox"
name="energiequelle_2_nutzung_4"
bind:checked={ausweis.energiequelle_2_nutzung[3]}
bind:checked={ausweis.alternative_kuehlung}
value="Kühlung"
/>Kühlung</label
>
@@ -964,13 +961,13 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
<!-- F Angaben zur Heizungsanlage -->
<Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:ausweis
/></Bereich
<Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
<!-- G Angaben zur Fenster, Dachfenster und Türen -->
@@ -978,8 +975,8 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
@@ -988,8 +985,8 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
>
@@ -1000,27 +997,30 @@ title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgesc
><AusweisPreviewContainer
bind:images
bind:ausweis
bind:gebaeude
bind:objekt
bind:aufnahme
{ausweisart}
/></Bereich
>
<ButtonWeiterHilfe {spaeterWeitermachen}
bind:ausweis
bind:images
bind:user
bind:gebaeude
bind:gebaeude_aufnahme_allgemein
>
<ButtonWeiterHilfe {spaeterWeitermachen}
bind:ausweis
bind:images
bind:user
bind:objekt
bind:aufnahme
ausweisart={Enums.Ausweisart.BedarfsausweisWohnen}
/>
<BilderZusatzsysteme
{ausweis}
{gebaeude}
{aufnahme}
{images}
/>
<hr />
<div class="flex flex-row justify-between">
<button class="button">Weiter</button>
</div>
{ausweis}
{objekt}
{aufnahme}
{images}
/>
<hr />
<div class="flex flex-row justify-between">
<button class="button">Weiter</button>
</div>
</div>
</form>

View File

@@ -1,8 +1,11 @@
<script lang="ts">
import { BenutzerClient, ObjektClient } from "#components/Ausweis/types";
import { BenutzerClient, ObjektClient } from "#components/Ausweis/types.js";
export let user: BenutzerClient;
export let gebaeudeArray: ObjektClient[];
export let objekte: ObjektClient[];
console.log(objekte);
</script>
<h1 class="text-4xl font-medium my-8">Willkommen zurück, {user.vorname}!</h1>
@@ -12,18 +15,18 @@
<h1 class="text-4xl font-medium my-8">Gebäude</h1>
<div class="grid grid-cols-1 gap-4 lg:grid-cols-2">
{#each gebaeudeArray as gebaeude}
<!-- {#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={(gebaeude.gebaeude_bilder && `/bilder/${gebaeude.gebaeude_bilder[0]?.uid}.webp`) || "/images/placeholder.jpg"}
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">{gebaeude.adresse}, {gebaeude.plz} {gebaeude.ort}</h4>
<h4 class="text-lg font-semibold">{objekt.adresse}, {objekt.plz} {objekt.ort}</h4>
</div>
</div>
{/each}
{/each} -->
</div>

View File

@@ -1,6 +1,6 @@
<script lang="ts">
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
import ProgressBar from "#components/Ausweis/Progressbar.svelte";
import Progressbar from "#components/Ausweis/Progressbar.svelte";
import Bereich from "#components/labels/Bereich.svelte";
import Ansprechpartner from "#components/Ausweis/Ansprechpartner.svelte";
import Rechnungsadresse from "#components/Ausweis/Rechnungsadresse.svelte";
@@ -12,22 +12,40 @@
import { Enums } from "@ibcornelsen/database/client";
import { dialogs } from "svelte-dialogs";
import LoginDialog from "#components/LoginDialog.svelte";
import { PRICES } from "#lib/constants.js";
import { API_ACCESS_TOKEN_COOKIE_NAME, PRICES } from "#lib/constants.js";
import Cookies from "js-cookie";
import {
AufnahmeClient,
BenutzerClient,
getAusweisartFromUUID,
ObjektClient,
RechnungClient,
VerbrauchsausweisWohnenClient,
} from "#components/Ausweis/types.js";
import { validateAccessTokenClient } from "src/client/lib/validateAccessToken.js";
import ButtonZurueckSpeichernKaufabschluss from "#components/Ausweis/ButtonZurueckSpeichernKaufabschluss.svelte";
import { api } from "astro-typesafe-api/client";
import A10WaermequellenAnlagentechnikTrinkwarmwasser from "#components/Tabellen/A10WaermequellenAnlagentechnikTrinkwarmwasser.svelte";
export let user: BenutzerClient;
export let ausweis: VerbrauchsausweisWohnenClient;
export let aufnahme: AufnahmeClient;
export let objekt: ObjektClient;
export let ausweisart: Enums.Ausweisart;
let services = [
let rechnung: Partial<RechnungClient> = {
email: user.email,
empfaenger: user.vorname + " " + user.name,
strasse: user.adresse,
plz: user.plz,
ort: user.ort,
versand_empfaenger: user.vorname + " " + user.name,
versand_strasse: user.adresse,
versand_plz: user.plz,
versand_ort: user.ort,
telefon: user.telefon,
}
let services: { name: string, id: Enums.Service, price: number, selected: boolean }[] = [
{
name: "Qualitätsdruck per Post (zusätzlich zur PDF Version)",
id: Enums.Service.Qualitaetsdruck,
@@ -54,7 +72,7 @@
},
];
export let selectedPaymentType: Bezahlmethoden =
export let bezahlmethode: Bezahlmethoden =
Enums.Bezahlmethoden.paypal;
let prices: number[] = [];
@@ -72,6 +90,13 @@
0
);
const zurueck = {
[Enums.Ausweisart.VerbrauchsausweisWohnen]: `/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid=${ausweis.uid}`,
[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}`,
}[ausweisart]
async function speichern(e: SubmitEvent) {
e.preventDefault();
@@ -93,6 +118,38 @@
window.location.href = `/kaufabschluss?uid=${ausweis.uid}`;
}
async function bestellen() {
const ausweisart = getAusweisartFromUUID(ausweis.uid) as Enums.Ausweisart;
try {
const { uid, checkout_url } = await api.rechnung.PUT.fetch({
ausweisart,
bezahlmethode,
services: services.filter(service => service.selected).map(service => service.id),
email: rechnung.email,
empfaenger: rechnung.empfaenger,
strasse: rechnung.strasse,
plz: rechnung.plz,
ort: rechnung.ort,
versand_empfaenger: rechnung.versand_empfaenger,
versand_strasse: rechnung.versand_strasse,
versand_plz: rechnung.versand_plz,
versand_ort: rechnung.versand_ort,
telefon: rechnung.telefon,
ausweis_uid: ausweis.uid
}, {
headers: {
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
}
})
window.location.href = checkout_url;
} catch(e) {
console.log(e);
}
}
</script>
<div
@@ -102,12 +159,14 @@
2xl:grid-cols-2 2xl:gap-x-8
"
>
<div
id="performance-box"
class="w-full box relative px-4 order-2 2xl:order-1 self-stretch grid grid-cols-1"
>
<PerformanceScore bind:ausweis bind:aufnahme bind:objekt />
</div>
<div id="performance-box" class="w-full box relative px-4 order-1 self-stretch grid grid-cols-1">
<PerformanceScore
bind:ausweis
bind:aufnahme={aufnahme}
bind:objekt={objekt}
{ausweisart}
/>
</div>
<div
id="progress-box"
@@ -117,11 +176,11 @@
<h2 class="text-primary text-xl">
Verbrauchsausweis Wohnen {PRICES.VerbrauchsausweisWohnen[0]}
</h2>
<ProgressBar progress={0} step2={'step'}/>
<Progressbar progress={0} step1={''} step2={'step'} step3={''}/>
</div>
</div>
<form id="formInput-2" on:submit={speichern}>
<div id="formInput-2">
<div id="formular-box" class="formular-boxen ring-0">
<Bereich
bereich="1"
@@ -131,11 +190,11 @@
>
<Bereich bereich="2" title="Rechnungsadresse">
<Rechnungsadresse bind:user /></Bereich
<Rechnungsadresse bind:user bind:rechnung /></Bereich
>
<Bereich bereich="3" title="Bezahlmethode">
<Bezahlung bind:selectedPaymentType /></Bereich
<Bezahlung bind:selectedPaymentType={bezahlmethode} /></Bereich
>
<div class="grid grid-cols-2 gap-x-6 my-6">
@@ -193,8 +252,8 @@
<div>:</div>
<div class="justify-self-end">
<img
src="images/{selectedPaymentType}.png"
alt={selectedPaymentType}
src="images/{bezahlmethode}.png"
alt={bezahlmethode}
/>
</div>
</div>
@@ -202,10 +261,21 @@
</div>
</div>
<ButtonZurueckSpeichernKaufabschluss />
<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"
>
<a class="button justify-self-start" href={zurueck}>Zurück</a>
</form>
<!--
<div></div>
<button class="button">Speichern</button>
<button class="button" data-cy="bestellen" on:click={bestellen}>kostenpflichtig bestellen</button>
</div>
</div>
</div>
<!--
<div class="bereich-box pr-12 mt-6">
<Pruefung
bereich="A"
@@ -332,7 +402,9 @@
</div>
{/each}
</div>
<ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
<ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
<!-- <ButtonZurueckSpeichernKaufabschluss bind:ausweis bind:aufnahme bind:objekt bind:bilder bind:user /> -->
<style lang="postcss">

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import { loginClient } from "#lib/login";
import { loginClient } from "#lib/login.js";
import CrossCircled from "radix-svelte-icons/src/lib/icons/CrossCircled.svelte";
import { fade } from "svelte/transition";
@@ -61,7 +61,7 @@
<span class="font-semibold">Das hat leider nicht geklappt, haben sie ihr Passwort und ihre Email Adresse richtig eingegeben?</span>
</div>
{/if}
<button class="btn btn-primary" type="submit">Einloggen</button>
<button class="button" type="submit">Einloggen</button>
<div class="flex-row justify-between" style="margin-top: 10px">
<a class="link link-hover" href="/auth/signup{redirect ? `?redirect=${redirect}` : ""}">Registrieren</a>
<a class="link link-hover" href="/auth/passwort-vergessen{redirect ? `?redirect=${redirect}` : ""}"

View File

@@ -1,13 +1,11 @@
<script lang="ts">
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
import ProgressBar from "#components/Ausweis/Progressbar.svelte";
import Hilfe from "#components/Ausweis/Hilfe.svelte";
import { PRICES } from "#lib/constants";
import { PRICES } from "#lib/constants.js";
import ButtonSpaeterHilfe from "#components/Ausweis/ButtonSpaeterHilfe.svelte";
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
import Warmwasseranteil from "#components/Ausweis/Warmwasseranteil.svelte";
import ThermischeKuehlung from "#components/Ausweis/ThermischeKuehlung.svelte";
import LueftungundLeerstand from "#components/Ausweis/LueftungundLeerstand.svelte";
@@ -17,53 +15,54 @@
import AusweisPreviewContainer from "#components/Ausweis/AusweisPreviewContainer.svelte";
import Bereich from "#components/labels/Bereich.svelte";
import HelpLabel from "#components/HelpLabel.svelte";
import Verbrauch from "#components/Ausweis/Verbrauch.svelte";
import StromVerbrauch from "#components/Ausweis/StromVerbrauch.svelte";
import Label from "#components/Label.svelte";
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
import ZipSearch from "../../components/PlzSuche.svelte";
import { buildingTypes } from "./BuildingTypes.js";
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment";
import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
import { BenutzerClient } from "#components/Ausweis/types.js";
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
import { Enums } from "@ibcornelsen/database/client";
import { ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
import { BenutzerClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import moment from "moment";
export let ausweis: VerbrauchsausweisGewerbeClient;
export let user: BenutzerClient = {} as BenutzerClient;
export let objekt: ObjektClient = {} as ObjektClient;
export let aufnahme: AufnahmeClient = {} as AufnahmeClient;
export let bilder: UploadedGebaeudeBild[] = [];
export let ausweisart = Enums.Ausweisart.VerbrauchsausweisGewerbe;
export let Energieausweis = "Verbrauchsausweis Gewerbe";
function automatischAusfüllen() {
aufnahme.baujahr_gebaeude = [1952];
aufnahme.baujahr_heizung = [1952];
aufnahme.saniert = true;
aufnahme.einheiten = 1;
aufnahme.gebaeudetyp = "Polizeidienstgebäude";
aufnahme.keller =
Enums.Heizungsstatus.NICHT_VORHANDEN;
aufnahme.dachgeschoss =
Enums.Heizungsstatus.NICHT_VORHANDEN;
aufnahme.lueftung = "Fensterlueftung";
aufnahme.kuehlung = "1";
ausweis.ausstellgrund = "Vermietung";
ausweis.verbrauch_1 = 15000;
ausweis.verbrauch_2 = 14000;
ausweis.verbrauch_3 = 16000;
aufnahme.flaeche = 152;
aufnahme.nutzflaeche = 172;
ausweis.keller_beheizt = true;
let aufnahme = ausweis.aufnahme || {};
let gebaeude = ausweis.aufnahme?.objekt || {};
let images: (UploadedGebaeudeBild & { base64?: string })[] = ausweis.aufnahme?.objekt?.gebaeude_bilder || [];
aufnahme.brennstoff_1 = "Erdgas H";
ausweis.einheit_1 = "kWh";
ausweis.anteil_warmwasser_1 = 18;
ausweis.startdatum = moment("01.01.2021").toDate();
objekt.plz = "21039";
objekt.ort = "Hamburg";
objekt.adresse = "Curslacker Deich 170";
aufnahme.gebaeudeteil = "Gesamtgebäude";
function automatischAusfüllen() {
objekt = objekt;
ausweis = ausweis;
}
async function spaeterWeitermachen() {
const result = await verbrauchsausweisWohnenSpeichern(
ausweis,
gebaeude,
aufnahme,
images,
user
);
if (result !== null) {
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// Sonst müsste er alles neu eingeben...
ausweis.uid = result.uid;
gebaeude.uid = result.gebaeude_uid;
aufnahme.uid = result.gebaeude_aufnahme_uid;
window.history.pushState(
{},
"",
`${location.pathname}?uid=${result.uid}`
);
speichernOverlayHidden = false;
}
}
</script>
@@ -77,14 +76,15 @@
<PerformanceScore
bind:ausweis
bind:aufnahme={aufnahme}
bind:objekt={gebaeude}
bind:objekt={objekt}
{ausweisart}
/>
</div>
<div id="progress-box" class="w-full box relative px-4 py-3 text-center order-1 2xl:order-2 self-stretch">
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
<h2 class="text-primary text-xl">{Energieausweis} {PRICES.VerbrauchsausweisGewerbe[0]}</h2>
<h2 class="text-primary text-xl">Verbrauchsausweis Gewerbe {PRICES.VerbrauchsausweisGewerbe[0]}</h2>
<ProgressBar progress={0} />
</div>
@@ -94,7 +94,7 @@
<!-- TODO: Submit implementieren in externer Datei wenn Verbrauchsausweis Wohnen fertig ist -->
<form id="formInput-1" on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">
<form id="formInput-1" data-cy="ausweis" name="ausweis">
<div id="formular-box" class="formular-boxen ring-0">
<ButtonSpaeterHilfe {automatischAusfüllen} {spaeterWeitermachen} />
@@ -103,10 +103,10 @@
<Bereich bereich="A" title="Prüfung der Ausweisart">
<Ausweisart
bind:gebaeude
bind:objekt
bind:aufnahme
bind:ausweis
ausweisart={Energieausweis}
{ausweisart}
/>
</Bereich>
@@ -117,7 +117,8 @@
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
>
<GebaeudeDaten
bind:aufnahme />
bind:aufnahme
bind:objekt />
</Bereich
>
@@ -128,7 +129,7 @@
title="Eingabe von 3 zusammenhängenden Verbrauchsjahren"
>
<StromVerbrauch
bind:gebaeude
bind:objekt
bind:aufnahme
bind:ausweis
/>
@@ -158,8 +159,8 @@
<Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images
bind:gebaeude
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
@@ -169,8 +170,8 @@
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images
bind:gebaeude
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
@@ -179,8 +180,8 @@
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images
bind:gebaeude
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
/></Bereich
@@ -190,19 +191,22 @@
<Bereich bereich="I" title="Gebäudebild und Energieausweis PDF Vorschau"
><AusweisPreviewContainer
bind:images
bind:images={bilder}
bind:ausweis
bind:gebaeude
bind:objekt
bind:aufnahme
{ausweisart}
/></Bereich>
</div>
<ButtonWeiterHilfe {spaeterWeitermachen}
bind:ausweis
bind:images
bind:bilder
bind:user
bind:gebaeude
bind:objekt
bind:aufnahme
ausweisart={Enums.Ausweisart.VerbrauchsausweisGewerbe}
>
</ButtonWeiterHilfe>

View File

@@ -1,91 +0,0 @@
<script lang="ts">
import { validateAccessTokenClient } from "#client/lib/validateAccessToken.js";
import { verbrauchsausweisWohnenSpeichern } from "#client/lib/verbrauchsausweisWohnenSpeichern.js";
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import { addNotification } from "#components/Notifications/index.js";
import Overlay from "#components/Overlay.svelte";
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
import { api } from "astro-typesafe-api/client"
export let objekt: ObjektClient;
export let bilder: UploadedGebaeudeBild[];
export let ausweis: VerbrauchsausweisWohnenClient;
export let user: BenutzerClient;
export let aufnahme: AufnahmeClient;
async function ausweisSpeichern() {
// Um einen Ausweis zu speichern müssen wir eingeloggt sein, andernfalls wird die API den call ablehnen.
// Wir prüfen also ob wir eingeloggt sind und leiten den Nutzer ggf. auf die Login Seite weiter.
if (!await validateAccessTokenClient()) {
loginOverlayHidden = false;
return
}
loginOverlayHidden = true;
// Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter.
try {
const response = await verbrauchsausweisWohnenSpeichern(ausweis,
objekt,
aufnahme,
bilder)
if (response !== null) {
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// Sonst müsste er alles neu eingeben...
ausweis.uid = response.uid_ausweis;
objekt.uid = response.uid_objekt;
aufnahme.uid = response.uid_aufnahme;
return true
}
} catch (e: any) {
console.log(e);
await api.ticket.PUT.fetch({
titel: "Ausweis konnte nicht gespeichert werden",
beschreibung: e.stack,
email: user.email ?? "",
metadata: JSON.stringify({
ausweis,
gebaeude: objekt
})
})
}
addNotification({
dismissable: false,
message: "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
subtext: "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
timeout: 6000,
type: "error"
})
return false
}
async function ausweisAbschicken() {
const result = await ausweisSpeichern();
if (result === true) {
window.history.pushState(
{},
"",
`${location.pathname}?uid=${ausweis.uid}`
);
window.location.href = `/kundendaten?uid=${ausweis.uid}`;
}
}
let loginOverlayHidden = true;
</script>
<Overlay bind:hidden={loginOverlayHidden}>
<div class="bg-white w-full max-w-screen-sm py-8">
<EmbeddedAuthFlowModule onLogin={ausweisAbschicken}></EmbeddedAuthFlowModule>
</div>
</Overlay>
<button on:click={ausweisAbschicken} type="button" class="button" data-cy="weiter">Weiter</button>

View File

@@ -50,7 +50,6 @@
ObjektClient,
AufnahmeClient,
} from "#components/Ausweis/types.js";
import { verbrauchsausweisWohnenSpeichern } from "src/client/lib/verbrauchsausweisWohnenSpeichern.js";
import { Enums } from "@ibcornelsen/database/client";
// TODO: Vom Server sollte ein volles Objekt kommen, dass alle Subobjekte enthält, weil es sonst zu Problemen führen kann
@@ -62,26 +61,27 @@
export let bilder: UploadedGebaeudeBild[] = []
async function spaeterWeitermachen() {
const result = await verbrauchsausweisWohnenSpeichern(
ausweis,
objekt,
aufnahme,
bilder
);
// TODO FIX
// const result = await ausweisSpeichern(
// ausweis,
// objekt,
// aufnahme,
// bilder
// );
if (result !== null) {
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// Sonst müsste er alles neu eingeben...
ausweis.uid = result.uid_ausweis;
objekt.uid = result.uid_objekt;
aufnahme.uid = result.uid_aufnahme;
window.history.pushState(
{},
"",
`${location.pathname}?uid=${result.uid_ausweis}`
);
speichernOverlayHidden = false;
}
// if (result !== null) {
// // Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// // Sonst müsste er alles neu eingeben...
// ausweis.uid = result.uid_ausweis;
// objekt.uid = result.uid_objekt;
// aufnahme.uid = result.uid_aufnahme;
// window.history.pushState(
// {},
// "",
// `${location.pathname}?uid=${result.uid_ausweis}`
// );
// speichernOverlayHidden = false;
// }
}
function automatischAusfüllen() {
@@ -118,27 +118,27 @@
}
async function ausweisAbschicken(e: SubmitEvent) {
if (e && e.preventDefault) e.preventDefault();
const result = await verbrauchsausweisWohnenSpeichern(
ausweis,
objekt,
aufnahme,
bilder
);
// if (e && e.preventDefault) e.preventDefault();
// const result = await ausweisSpeichern(
// ausweis,
// objekt,
// aufnahme,
// bilder
// );
if (result !== null) {
// Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// Sonst müsste er alles neu eingeben...
ausweis.uid = result.uid_ausweis;
objekt.uid = result.uid_objekt;
aufnahme.uid = result.uid_aufnahme;
window.history.pushState(
{},
"",
`${location.pathname}?uid=${result.uid_ausweis}`
);
// window.location.href = `/kundendaten?uid=${result.uid_ausweis}`;
}
// if (result !== null) {
// // Falls der Nutzer zurück navigiert, sollte er wieder auf seinen Vorgang kommen.
// // Sonst müsste er alles neu eingeben...
// ausweis.uid = result.uid_ausweis;
// objekt.uid = result.uid_objekt;
// aufnahme.uid = result.uid_aufnahme;
// window.history.pushState(
// {},
// "",
// `${location.pathname}?uid=${result.uid_ausweis}`
// );
// // window.location.href = `/kundendaten?uid=${result.uid_ausweis}`;
// }
}
let waitOverlayHidden = true;
@@ -185,6 +185,7 @@ lg:grid-cols-2 lg:gap-x-6
bind:ausweis
bind:aufnahme={aufnahme}
bind:objekt={objekt}
{ausweisart}
/>
</div>
@@ -192,7 +193,7 @@ lg:grid-cols-2 lg:gap-x-6
<h1 class="text-secondary text-3xl m-0">Energiesausweis erstellen</h1>
<h2 class="text-primary text-xl">{ausweisart} {PRICES.VerbrauchsausweisWohnen[0]}</h2>
<Progressbar progress={0} step1={'step'} />
<Progressbar progress={0} step1={'step'} step2={''} step3={''}/>
</div>
</div>
@@ -229,7 +230,7 @@ lg:grid-cols-2 lg:gap-x-6
bereich="C"
title="Eingabe von 3 zusammenhängenden Verbrauchsjahren"
><Verbrauch
bind:gebaeude={objekt}
bind:objekt={objekt}
bind:aufnahme={aufnahme}
bind:ausweis
/></Bereich
@@ -256,7 +257,7 @@ lg:grid-cols-2 lg:gap-x-6
<Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images={bilder}
bind:gebaeude={objekt}
bind:objekt={objekt}
bind:aufnahme={aufnahme}
bind:ausweis
/></Bereich
@@ -267,7 +268,7 @@ lg:grid-cols-2 lg:gap-x-6
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images={bilder}
bind:gebaeude={objekt}
bind:objekt={objekt}
bind:aufnahme={aufnahme}
bind:ausweis
/></Bereich
@@ -277,7 +278,7 @@ lg:grid-cols-2 lg:gap-x-6
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images={bilder}
bind:gebaeude={objekt}
bind:objekt={objekt}
bind:aufnahme={aufnahme}
bind:ausweis
/></Bereich
@@ -289,7 +290,9 @@ lg:grid-cols-2 lg:gap-x-6
><AusweisPreviewContainer
bind:images={bilder}
bind:ausweis
bind:gebaeude={objekt}
bind:objekt={objekt}
bind:aufnahme
{ausweisart}
/></Bereich
>
</div>
@@ -300,6 +303,7 @@ lg:grid-cols-2 lg:gap-x-6
bind:user
bind:objekt
bind:aufnahme
ausweisart={Enums.Ausweisart.VerbrauchsausweisWohnen}
>
</ButtonWeiterHilfe>