diff --git a/src/components/Ausweis/types.ts b/src/components/Ausweis/types.ts index 5ab97079..1004e5e7 100644 --- a/src/components/Ausweis/types.ts +++ b/src/components/Ausweis/types.ts @@ -19,9 +19,9 @@ export type UploadedGebaeudeBild = Omit< * @export * @typedef {VerbrauchsausweisWohnenClient} */ -export type VerbrauchsausweisWohnenClient = inferProcedureInput< - AppRouter["v1"]["verbrauchsausweisWohnen"]["2016"]["speichern"] ->["ausweis"]; +export type VerbrauchsausweisWohnenClient = inferProcedureOutput< +AppRouter["v1"]["verbrauchsausweisWohnen"]["get"] +>; /** * Das ist der Typescript Type für den Verbrauchsausweis Gewerbe mit allen Feldern die @@ -63,12 +63,13 @@ export type BedarfsausweisWohnenClient = inferProcedureInput< * @export * @typedef {GebaeudeClient} */ -export type GebaeudeClient = inferProcedureInput< - AppRouter["v1"]["verbrauchsausweisWohnen"]["2016"]["speichern"] ->["gebaeude"]; +export type GebaeudeClient = inferProcedureOutput< + AppRouter["v1"]["verbrauchsausweisWohnen"]["get"] +>["gebaeude_aufnahme_allgemein"]["gebaeude_stammdaten"]; -export type GebaeudeAufnahmeClient = inferProcedureInput< - AppRouter["v1"]["verbrauchsausweisWohnen"]["2016"]["speichern"] + +export type GebaeudeAufnahmeClient = inferProcedureOutput< + AppRouter["v1"]["verbrauchsausweisWohnen"]["get"] >["gebaeude_aufnahme_allgemein"]; export type BenutzerClient = inferProcedureOutput \ No newline at end of file diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte index d7e8ed42..31b05017 100644 --- a/src/components/Dashboard/DashboardAusweis.svelte +++ b/src/components/Dashboard/DashboardAusweis.svelte @@ -1,8 +1,6 @@
- + {#if ausweis.gebaeude_aufnahme_allgemein.storniert} +
+

Storniert

+
+ {/if}
+ {#if ausweis.ausweisart == "VerbrauchsausweisWohnen"}
- Verbrauchsausweis + Verbrauchsausweis Wohnen
+ {:else if ausweis.ausweisart == "BedarfsausweisWohnen"} +
+ Bedarfsausweis Wohnen +
+ {:else if ausweis.ausweisart == "VerbrauchsausweisGewerbe"} +
+ Verbrauchsausweis Gewerbe +
+ {/if} + + {#if ausweis.erledigt}
Ausgestellt
+ {/if}

{ausweis.gebaeude_aufnahme_allgemein.gebaeude_stammdaten.adresse}

- + - 54% + {progress}%
{#await endEnergieVerbrauchVerbrauchsausweis_2016(ausweis)} diff --git a/src/components/ImageGrid.svelte b/src/components/ImageGrid.svelte index 0a0881fb..ce6367f4 100644 --- a/src/components/ImageGrid.svelte +++ b/src/components/ImageGrid.svelte @@ -18,7 +18,7 @@ {#if image.kategorie == kategorie}
{kategorie} diff --git a/src/components/PlzSuche.svelte b/src/components/PlzSuche.svelte index b97940f9..c49ef1e2 100644 --- a/src/components/PlzSuche.svelte +++ b/src/components/PlzSuche.svelte @@ -6,7 +6,7 @@ export let name: string; export let readonly: boolean = false; - export let city: string | null; + export let city: string | null | undefined; export let zip: string | null = ""; diff --git a/src/lib/AusweisData.ts b/src/lib/AusweisData.ts index da1755a6..f9949a58 100644 --- a/src/lib/AusweisData.ts +++ b/src/lib/AusweisData.ts @@ -1,18 +1,7 @@ -import { GebaeudeAufnahmeClient } from "#components/Ausweis/types"; -import { VerbrauchsausweisWohnen, Benutzer, GebaeudeStammdaten, Rechnungen, GebaeudeBilder } from "@ibcornelsen/database/client"; - -export type AusweisData = VerbrauchsausweisWohnen & { - benutzer: Benutzer; - gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient & { - gebaeude_stammdaten: GebaeudeStammdaten & { - gebaeude_bilder: GebaeudeBilder[]; - } - } - rechnungen: Rechnungen; -}; +import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; export function convertAusweisData( - inputs: AusweisData + inputs: VerbrauchsausweisWohnenClient ): Record { return { "gebaeude_stammdaten.adresse": inputs.gebaeude_aufnahme_allgemein.adresse || "", diff --git a/src/lib/VerbrauchsausweisWohnen/calculateFormProgress.ts b/src/lib/VerbrauchsausweisWohnen/calculateFormProgress.ts new file mode 100644 index 00000000..64280c99 --- /dev/null +++ b/src/lib/VerbrauchsausweisWohnen/calculateFormProgress.ts @@ -0,0 +1,64 @@ +import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; + +type AusweisError = { + title: string, + description: string, + severity: "error" | "warning", + resolvehref?: string +} + +/** + * Berechnet den Fortschritt im Formular anhand bestimmter Faktoren + * Gibt den Fortschritt in Prozent zurück. + * @param ausweis Der Verbrauchsausweis + * @returns Der Fortschritt in Prozent sowie ein Array mit gefundenen Fehlern + */ +export function verbrauchsausweisWohnenCalculateFormProgress(ausweis: VerbrauchsausweisWohnenClient): { + progress: number; + errors: AusweisError[]; +} { + let progress = 0; + const errors: AusweisError[] = []; + + if (ausweis.erledigt) { + // Der Ausweis wurde ausgestellt, also ist der Fortschritt 100% + return { + progress: 100, + errors: [] + }; + } else if (ausweis.gebaeude_aufnahme_allgemein.storniert) { + // Der Ausweis wurde storniert, also ist der Fortschritt 0% + return { + progress: 0, + errors: [] + }; + } + + if (ausweis.gebaeude_aufnahme_allgemein.baujahr_gebaeude.length === 0) { + errors.push({ + title: "Fehlendes Baujahr", + description: "Eines ihrer Gebäude hat noch kein Baujahr angegeben. Beheben sie dies indem sie auf den untenstehenden Link klicken.", + severity: "warning", + resolvehref: `/energieausweis-erstellen/verbrauchsausweis-wohnen?uid=${ausweis.uid}` + }); + + } + + if (ausweis.gebaeude_aufnahme_allgemein.adresse) { + progress += 5; + } + + if (ausweis.gebaeude_aufnahme_allgemein.ort) { + progress += 5; + } + + if (ausweis.verbrauch_1 && ausweis.verbrauch_2 && ausweis.verbrauch_3) { + progress += 5; + } + + + return { + progress, + errors + }; +} \ No newline at end of file diff --git a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte index 906ba2c0..47922d90 100644 --- a/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/Ausweise/VerbrauchsausweisWohnenModule.svelte @@ -19,35 +19,39 @@ import Overlay from "#components/Overlay.svelte"; import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte"; import { validateAccessTokenClient } from "src/client/lib/validateAccessToken"; - import { UploadedGebaeudeBild, VerbrauchsausweisWohnenClient, GebaeudeClient, BenutzerClient, GebaeudeAufnahmeClient } from "#components/Ausweis/types"; + import { VerbrauchsausweisWohnenClient, BenutzerClient } from "#components/Ausweis/types"; import { dialogs } from "svelte-dialogs"; import LoginDialog from "#components/LoginDialog.svelte"; + import { exclude } from "#lib/exclude"; - export let gebaeude: GebaeudeClient = {} as GebaeudeClient; - export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient = {} as GebaeudeAufnahmeClient; - export let images: UploadedGebaeudeBild[] = []; export let ausweis: VerbrauchsausweisWohnenClient = {} as VerbrauchsausweisWohnenClient; export let user: BenutzerClient = {} as BenutzerClient; + let gebaeude_aufnahme_allgemein = ausweis.gebaeude_aufnahme_allgemein || {}; + let gebaeude = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten || {}; + let images = ausweis.gebaeude_aufnahme_allgemein?.gebaeude_stammdaten?.gebaeude_bilder || []; + async function bilderHochladen() { if (images.length == 0) { return; } + const imagesToUpload = images.filter(image => !image.uid); + + if (imagesToUpload.length == 0) { + return; + } + // Alle Bilder hochladen const notification = addNotification({ dismissable: false, message: "Bilder hochladen.", - subtext: `${images.length} Bilder werden hochgeladen, bitte haben sie Geduld.`, + subtext: `${imagesToUpload.length} Bilder werden hochgeladen, bitte haben sie Geduld.`, timeout: 0, type: "info" }) - for (let i = 0; i < images.length; i++) { - const image = images[i]; - if (image.uid) { - // Bild wurde bereits hochgeladen, wir müssen es also nicht nochmal hochladen. - continue - } + for (let i = 0; i < imagesToUpload.length; i++) { + const image = imagesToUpload[i]; try { const response = await client.v1.bilder.upload.mutate({ @@ -61,15 +65,15 @@ updateNotification(notification, { dismissable: true, message: "Bild hochgeladen.", - subtext: `${i + 1}/${images.length} Bildern wurden erfolgreich hochgeladen, bitte haben sie Geduld.`, - timeout: 4000 + subtext: `${i + 1}/${imagesToUpload.length} Bildern wurden erfolgreich hochgeladen.`, + timeout: 3000 }) } catch (e) { updateNotification(notification, { dismissable: true, message: "Bild konnte nicht hochgeladen werden.", - subtext: `Bild ${i + 1}/${images.length} konnte nicht hochgeladen werden, wir haben bereits ein Ticket erstellt und melden uns so schnell wie möglich bei ihnen.`, - timeout: 150000, + subtext: `Eines ihrer Bilder konnte nicht hochgeladen werden. Wir haben bereits ein Ticket erstellt und melden uns so schnell wie möglich bei ihnen.`, + timeout: 15000, type: "error" }) } @@ -92,10 +96,17 @@ // Anscheinend wurde der Ausweis bereits erstellt und hat eine UID. // Jetzt müssen wir ihn nun nur noch abspeichern. try { + const gebaeudeBilderEntfernt = exclude(gebaeude, ["gebaeude_bilder"]) + const gebaeudeAufnahmeGeneratedFieldsEntfernt = exclude(gebaeude_aufnahme_allgemein, ["erstellungsdatum"]) + const ausweisGeneratedFieldsEntfernt = exclude(ausweis, ["ausweisart", "rechnungen"]) await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ - ausweis, - gebaeude, - gebaeude_aufnahme_allgemein + ...ausweisGeneratedFieldsEntfernt, + gebaeude_aufnahme_allgemein: { + ...gebaeudeAufnahmeGeneratedFieldsEntfernt, + gebaeude_stammdaten: { + ...gebaeudeBilderEntfernt + } + } }) await bilderHochladen(); @@ -108,9 +119,13 @@ // Wir speichern den Ausweis ab und leiten auf die "ausweis-gespeichert" Seite weiter. try { const response = await client.v1.verbrauchsausweisWohnen[2016].erstellen.mutate({ - ausweis, - gebaeude, - gebaeude_aufnahme_allgemein + ...ausweis, + gebaeude_aufnahme_allgemein: { + ...gebaeude_aufnahme_allgemein, + gebaeude_stammdaten: { + ...gebaeude + } + } }) ausweis.uid = response.uid; gebaeude.uid = response.gebaeude_uid; diff --git a/src/modules/Dashboard/DashboardAusweiseModule.svelte b/src/modules/Dashboard/DashboardAusweiseModule.svelte index 550751c3..825bd4b7 100644 --- a/src/modules/Dashboard/DashboardAusweiseModule.svelte +++ b/src/modules/Dashboard/DashboardAusweiseModule.svelte @@ -1,60 +1,73 @@ +{#if errorCount > 0}

Wichtiges

-
-
-
-
Warnung!
-

Gebäudebilder

-

Wir haben festgestellt, dass die Bilder für eines ihrer Gebäude nicht ganz den Anforderungen entsprechen, beheben sie das Problem, damit der Fehler so schnell wie möglich behoben werden kann.

-
- Beheben +
+ {#each ausweisUeberpruefung as { errors }} + {#if errors.length > 0} +
+
+
{errors[0].severity == "error" ? "Achtung!" : "Wichtig!"}
+

{errors[0].title}

+

{errors[0].description}

+ {#if errors[0].resolvehref} +
+ Beheben +
+ {/if} +
-
-
-
-
-
Fehler!
-

Daten

-

Der Ausweis für Curslacker Deich 170 hat unvollständige Daten oder die gegebenen Daten sind fehlerhaft, bitte beheben sie das Problem, damit der Ausweis so schnell wie möglich ausgestellt werden kann.

-
- Beheben -
-
-
+ {/if} + {/each}
+{/if}

Ihre Ausweise

- {#await ausweisRequest} + {#if ausweise === null} - - - {:then ausweise} + {:else} {#if ausweise.length == 0}

Es konnten keine Ausweise gefunden werden.

Erstellen sie einen Verbrauchsausweis für ihr Wohngebäude hier

{:else} - {#each ausweise as ausweis} - + {#each ausweise as ausweis, i} + {/each} {/if} - {/await} + {/if}
diff --git a/src/modules/Dashboard/UserModule.svelte b/src/modules/Dashboard/UserModule.svelte index 2586b9da..8a7dc548 100644 --- a/src/modules/Dashboard/UserModule.svelte +++ b/src/modules/Dashboard/UserModule.svelte @@ -2,10 +2,11 @@ import { BenutzerClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; import DashboardAusweis from "#components/Dashboard/DashboardAusweis.svelte"; import DashboardAusweisSkeleton from "#components/Dashboard/DashboardAusweisSkeleton.svelte"; + import { verbrauchsausweisWohnenCalculateFormProgress } from "#lib/VerbrauchsausweisWohnen/calculateFormProgress"; export let user: BenutzerClient; export let ausweise: VerbrauchsausweisWohnenClient[]; - console.log(ausweise); + const ausweisUeberpruefung = ausweise.map(ausweis => verbrauchsausweisWohnenCalculateFormProgress(ausweis)); @@ -41,8 +42,9 @@ {#if ausweise.length == 0} {:else} - {#each ausweise as ausweis} - + {#each ausweise as ausweis, i} + {console.log(ausweis, i)} + {/each} {/if} diff --git a/src/modules/KaufabschlussModule.svelte b/src/modules/KaufabschlussModule.svelte index ed30d5a0..555a6d40 100644 --- a/src/modules/KaufabschlussModule.svelte +++ b/src/modules/KaufabschlussModule.svelte @@ -1,5 +1,4 @@