diff --git a/notes/ausweis-erstellung.md b/notes/ausweis-erstellung.md new file mode 100644 index 00000000..1d9dad8a --- /dev/null +++ b/notes/ausweis-erstellung.md @@ -0,0 +1,19 @@ +# Ausweis Erstellung + +Wenn ein neuer Nutzer auf unsere Seite kommt und einen Ausweis erstellen möchte muss er sich nicht unbedingt sofort registrieren. Um den Kunden ein reibungsloses Erlebnis zu bieten versuchen wir den Nutzer automatisch anzulegen, allerdings kann es sein, dass der Ausweis nicht weiter bearbeitet wird. In diesem Fall müssen wir den Ausweis nach einer Zeit wieder löschen, damit er nicht für immer in unserer Datenbank bleibt. + +```tefcha +Nutzer Kommt auf unsere Seite + +if Nutzer ist eingeloggt + Ausweis wird erstellt und Nutzer zugewiesen +else + Ausweis erstellen + -> Schritt 2 + if Nutzer registriert sich + Ausweis wird verknüpft + else + Ausweis nach einer Woche gelöscht + +usw... +``` \ No newline at end of file diff --git a/src/client/lib/verbrauchsausweisWohnenSpeichern.ts b/src/client/lib/verbrauchsausweisWohnenSpeichern.ts index c75da3d9..98cb9da0 100644 --- a/src/client/lib/verbrauchsausweisWohnenSpeichern.ts +++ b/src/client/lib/verbrauchsausweisWohnenSpeichern.ts @@ -5,9 +5,7 @@ import { UploadedGebaeudeBild, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types"; -import { dialogs } from "svelte-dialogs"; -import { validateAccessTokenClient } from "./validateAccessToken"; -import LoginDialog from "#components/LoginDialog.svelte"; + import { exclude } from "#lib/exclude"; import { client } from "src/trpc"; import { bilderHochladen } from "./bilderHochladen"; @@ -20,48 +18,28 @@ export async function verbrauchsausweisWohnenSpeichern( images: (UploadedGebaeudeBild & { base64?: string })[], user: BenutzerClient ) { - // 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())) { - // TOOD: Auf Dialog umstellen. - const loggedIn = await dialogs.modal(LoginDialog); - - if (!loggedIn) { - return false; - } - } - if (ausweis.uid) { // 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", "events"] - ); - const ausweisGeneratedFieldsEntfernt = exclude(ausweis, [ - "rechnungen", - "erstellungsdatum", - ]); - await client.v1.verbrauchsausweisWohnen[2016].speichern.mutate({ - ...ausweisGeneratedFieldsEntfernt, + ...ausweis, gebaeude_aufnahme_allgemein: { - ...gebaeudeAufnahmeGeneratedFieldsEntfernt, + ...exclude( + gebaeude_aufnahme_allgemein, + ["erstellungsdatum", "events", "ausstellungsdatum", "rechnungen"] + ), gebaeude_stammdaten: { - ...gebaeudeBilderEntfernt, + ...exclude(gebaeude, [ + "gebaeude_bilder", + ]), }, }, }); - console.log(ausweisGeneratedFieldsEntfernt); - images = await bilderHochladen(images, gebaeude); - return true; + return { uid: ausweis.uid, gebaeude_uid: gebaeude.uid, gebaeude_aufnahme_uid: gebaeude_aufnahme_allgemein.uid }; } catch (e) { // TODO: Ticket mit Fehldermeldung abschicken. } @@ -78,13 +56,10 @@ export async function verbrauchsausweisWohnenSpeichern( }, }, }); - ausweis.uid = response.uid; - gebaeude.uid = response.gebaeude_uid; - gebaeude_aufnahme_allgemein.uid = response.gebaeude_aufnahme_uid; images = await bilderHochladen(images, gebaeude); - return true; + return response; } catch (e: any) { await client.v1.tickets.erstellen.mutate({ titel: "Ausweis konnte nicht gespeichert werden", @@ -107,5 +82,5 @@ export async function verbrauchsausweisWohnenSpeichern( timeout: 6000, type: "error", }); - return false; + return null; } diff --git a/src/components/Ausweis/AusweisPreviewContainer.svelte b/src/components/Ausweis/AusweisPreviewContainer.svelte index c9f13baf..f22070e3 100644 --- a/src/components/Ausweis/AusweisPreviewContainer.svelte +++ b/src/components/Ausweis/AusweisPreviewContainer.svelte @@ -13,10 +13,8 @@ VerbrauchsausweisWohnenClient, } from "./types"; - export let ausweis: - | VerbrauchsausweisWohnenClient; + export let ausweis: VerbrauchsausweisWohnenClient; export let gebaeude: GebaeudeClient; - export let images: UploadedGebaeudeBild[] = []; diff --git a/src/components/Ausweis/BilderZusatzsysteme.svelte b/src/components/Ausweis/BilderZusatzsysteme.svelte index 8bae7530..739ac969 100644 --- a/src/components/Ausweis/BilderZusatzsysteme.svelte +++ b/src/components/Ausweis/BilderZusatzsysteme.svelte @@ -5,10 +5,6 @@ import DaemmungImage from "./DaemmungImage.svelte"; import FensterImage from "./FensterImage.svelte"; import Label from "../Label.svelte"; - import type { - BedarfsausweisWohnen, - VerbrauchsausweisGewerbe, - } from "@ibcornelsen/database/client"; import { GebaeudeAufnahmeClient, GebaeudeClient, @@ -18,10 +14,7 @@ export let gebaeude: GebaeudeClient; export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient; - export let ausweis: - | VerbrauchsausweisWohnenClient - | VerbrauchsausweisGewerbe - | BedarfsausweisWohnen; + export let ausweis: VerbrauchsausweisWohnenClient export let images: UploadedGebaeudeBild[]; @@ -388,4 +381,4 @@ als PDF anschauen - + diff --git a/src/components/Ausweis/PerformanceScore.svelte b/src/components/Ausweis/PerformanceScore.svelte index 3e17f350..c2fca932 100644 --- a/src/components/Ausweis/PerformanceScore.svelte +++ b/src/components/Ausweis/PerformanceScore.svelte @@ -1,17 +1,31 @@
- Energieeffizienz Skala - - -
\ No newline at end of file + Energieeffizienz Skala + + + diff --git a/src/components/Ausweis/Verbrauch.svelte b/src/components/Ausweis/Verbrauch.svelte index 7f2bd0cf..2d1925da 100644 --- a/src/components/Ausweis/Verbrauch.svelte +++ b/src/components/Ausweis/Verbrauch.svelte @@ -4,13 +4,17 @@ import Label from "../Label.svelte"; import fuelList from "./brennstoffListe"; import { auditVerbrauchAbweichung } from "../Verbrauchsausweis/audits/VerbrauchAbweichung"; - import type { VerbrauchsausweisGewerbe } from "@ibcornelsen/database/client"; import { GebaeudeAufnahmeClient, GebaeudeClient, VerbrauchsausweisWohnenClient } from "./types"; - let availableYears = [ - 2018, 2019, - ]; - let availableMonths = [ + // Wir dürfen bis zu 4.5 Jahre alte Klimafaktoren benutzen, also nehmen wir alle Monate seitdem und generieren daraus die Auswahl. + // Allerdings müssen wir auch berücksichtigen, dass wir drei folgende Jahre brauchen, also + // kann der Nutzer nur 36 + 18 Monate zurückgehen. + let availableDates: { + year: number; + month: number; + }[] = []; + + let monthNames = [ "Januar", "Februar", "März", @@ -25,9 +29,20 @@ "Dezember", ]; + const startDate = moment().subtract(4, "years").subtract(6, "months"); + const endDate = moment().subtract(3, "years"); + + for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) { + availableDates.push({ + year: m.year(), + month: m.month(), + }); + } + + export let gebaeude: GebaeudeClient; export let gebaeude_aufnahme_allgemein: GebaeudeAufnahmeClient; - export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe; + export let ausweis: VerbrauchsausweisWohnenClient; const fuelMap: Record = {}; for (const fuel of fuelList) { @@ -35,12 +50,10 @@ fuelMap[fuel[0]] = fuelMap[fuel[0]] || []; fuelMap[fuel[0]].push(fuel[1]); } - - console.log(ausweis.startdatum); - let month = ausweis.startdatum?.getMonth() || 1; - let year = ausweis.startdatum?.getFullYear() || 2018; + let month = ausweis.startdatum?.getMonth() || null; + let year = ausweis.startdatum?.getFullYear() || null; $: { if (typeof month === "number" && typeof year === "number") { @@ -173,9 +186,18 @@ required > - {#each availableMonths as m, i} - - {/each} + {#if year !== null} + {#each availableDates.filter(date => date.year == year) as date} + + {/each} + {:else} + {#each Array.from(availableDates.reduce((a,c) => { + a.add(c.month); + return a; + }, new Set())) as month} + + {/each} + {/if} diff --git a/src/components/Ausweis/types.ts b/src/components/Ausweis/types.ts index 41b0a661..7ea0fc50 100644 --- a/src/components/Ausweis/types.ts +++ b/src/components/Ausweis/types.ts @@ -4,7 +4,7 @@ import { inferProcedureInput, inferProcedureOutput } from "@trpc/server"; export type UploadedGebaeudeBild = inferProcedureOutput< AppRouter["v1"]["verbrauchsausweisWohnen"]["get"] ->["gebaeude_aufnahme_allgemein"]["gebaeude_stammdaten"]["gebaeude_bilder"][0]; +>["gebaeude_aufnahme_allgemein"]["gebaeude_stammdaten"]["gebaeude_bilder"][0] & { base64?: string }; /** diff --git a/src/components/ImageGrid.svelte b/src/components/ImageGrid.svelte index ce6367f4..8589213f 100644 --- a/src/components/ImageGrid.svelte +++ b/src/components/ImageGrid.svelte @@ -9,6 +9,9 @@ export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; export let gebaeude: GebaeudeClient; export let kategorie: Enums.BilderKategorie + + console.log(images); +
@@ -18,7 +21,7 @@ {#if image.kategorie == kategorie}
{kategorie} diff --git a/src/components/SidebarLeft.astro b/src/components/SidebarLeft.astro index d6638ddb..39b78592 100644 --- a/src/components/SidebarLeft.astro +++ b/src/components/SidebarLeft.astro @@ -2,7 +2,7 @@