From e867a74478faea5f8287c5d26506452938c96149 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Wed, 5 Mar 2025 22:25:00 -0300 Subject: [PATCH] Kundendaten werden lokal gespeichert --- src/client/lib/helpers.ts | 19 +- src/components/Ausweis/Ansprechpartner.svelte | 61 --- .../Ausweis/Rechnungsadresse.svelte | 297 ------------ src/modules/KundendatenModule.svelte | 435 ++++++++++++++++-- src/pages/kundendaten.astro | 2 +- 5 files changed, 413 insertions(+), 401 deletions(-) delete mode 100644 src/components/Ausweis/Ansprechpartner.svelte delete mode 100644 src/components/Ausweis/Rechnungsadresse.svelte diff --git a/src/client/lib/helpers.ts b/src/client/lib/helpers.ts index aef33eaf..e20fc762 100644 --- a/src/client/lib/helpers.ts +++ b/src/client/lib/helpers.ts @@ -1,7 +1,22 @@ import { writable, Writable } from "svelte/store"; import { ZodEffects, ZodNullable, ZodOptional, ZodType } from "zod"; -export function localStorageSync(initial: T, name: string, modifier: (stored: any) => T = (stored) => JSON.parse(stored), reverseModifier: (value: T) => string = (value) => JSON.stringify(value)): Writable { +/** + * Synchronisiert den ersten Writable in den zweiten. + */ +export function writableSync(source: Writable) { + let $val; + source.subscribe($ => $val = $)(); + const target = writable($val) + + source.subscribe((value) => { + target.set(value); + }) + + return target; +} + +export function localStorageSync(initial: T, name: string, modifier: (stored: any) => T = (stored) => stored, reverseModifier: (value: T) => string = (value) => value as string): Writable { const stored = localStorage.getItem(name) as T let value = initial; if (stored) { @@ -29,7 +44,7 @@ export function isZodInstanceOf>( if (schema instanceof ZodOptional || schema instanceof ZodNullable) { return isZodInstanceOf(schema._def.innerType, targetType); }else if (schema instanceof ZodEffects) { - return getZodBaseType(schema._def.schema) + return isZodInstanceOf(getZodBaseType(schema._def.schema), targetType) } return false; diff --git a/src/components/Ausweis/Ansprechpartner.svelte b/src/components/Ausweis/Ansprechpartner.svelte deleted file mode 100644 index 90eeca02..00000000 --- a/src/components/Ausweis/Ansprechpartner.svelte +++ /dev/null @@ -1,61 +0,0 @@ - - -
- - - -
- - - - -
- - Bitte Geben Sie hier den Vornamen des Ansprechpartners ein. - -
-
- - - -
- - - - -
- - Bitte Geben Sie hier den Nachnamen des - Ansprechpartners ein. - -
-
- - - -
- - - - -
- - Bitte Geben Sie hier die Telefonnummer des - Ansprechpartners ein. - -
-
-
diff --git a/src/components/Ausweis/Rechnungsadresse.svelte b/src/components/Ausweis/Rechnungsadresse.svelte deleted file mode 100644 index 1d689dd0..00000000 --- a/src/components/Ausweis/Rechnungsadresse.svelte +++ /dev/null @@ -1,297 +0,0 @@ - - -
- - -
- - - - -
- - Bitte geben Sie den Empfänger ein, auf den die Rechnung - ausgestellt wird. - -
-
- - - -
- - - - -
- - Bitte geben Sie die Strasse und Hausnummer, so wie Sie auf der - Rechnung erscheinen soll, ein. - -
-
- - - -
-
- - -
- -
- - - - -
- - Bitte geben Sie die PLZ des Ortes, so wie Sie auf der - Rechnung erscheinen soll, ein. - -
-
-
- - - -
- - - - -
- - Bitte geben Sie, falls erforderlich, zusätzliche nformationen - ein. - -
-
- - - -
- - - - -
- - Bitte geben Sie die E-Mail Adresse des Rechnungsempfängers ein. - -
-
- - -
-
- - - -
-
- - {#if rechnung.abweichende_versand_adresse} - - -
- - - - -
- - Bitte geben Sie den Namen des Versand-Empfängers ein. - -
-
- - - -
- - - - -
- - Bitte geben Sie die Versand-Empfänger Strasse und Hausnummer - ein, an die die Rechnung versandt wird. - -
-
- - - -
-
- - -
- -
- - - - -
- - Bitte geben Sie die Versand-Empfänger PLZ des Ortes ein, - an den die Rechnung versandt wird. - -
-
-
- - - -
- - - - -
- - Bitte geben Sie, falls erforderlich, zusätzliche - nformationen ein. - -
-
- - - -
- - - - -
- - Bitte geben Sie die E-Mail Adresse des Versand-Empfängers - ein. - -
-
- - - {/if} -
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index e6d0fc65..5ddee285 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -2,8 +2,6 @@ import PerformanceScore from "#components/Ausweis/PerformanceScore.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"; import type { Bezahlmethoden } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js"; import { @@ -29,6 +27,11 @@ import { addNotification } from "#components/Notifications/shared.js"; import NotificationWrapper from "#components/Notifications/NotificationWrapper.svelte"; import { nachweisSpeichern } from "#client/lib/nachweisSpeichern.js"; + import { localStorageSync, writableSync } from "#client/lib/helpers.js"; + import HelpLabel from "#components/labels/HelpLabel.svelte"; + import InputLabel from "#components/labels/InputLabel.svelte"; + import PlzSuche from "#components/PlzSuche.svelte"; + import { writable } from "svelte/store"; export let user: Partial; export let ausweis: VerbrauchsausweisWohnenClient; @@ -40,18 +43,41 @@ export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; export let ausweistyp: Enums.AusweisTyp = Enums.AusweisTyp.Standard; - let rechnung: Partial = { - 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, - }; + const email = localStorageSync(user.email || "", "kundendaten.email") + const vorname = localStorageSync(user.vorname || "", "kundendaten.vorname") + const name = localStorageSync(user.name || "", "kundendaten.name") + const empfaenger = localStorageSync(`${user.vorname} ${user.name}`, "kundendaten.empfaenger", JSON.parse, JSON.stringify) + const strasse = localStorageSync(user.adresse || "", "kundendaten.strasse") + const plz = localStorageSync(user.plz || "", "kundendaten.plz") + const ort = localStorageSync(user.ort || "", "kundendaten.ort") + const zusatzzeile = localStorageSync("", "kundendaten.zusatzzeile") + const telefon = localStorageSync(user.telefon || "", "kundendaten.telefon") + + const abweichende_versand_adresse = localStorageSync(false, "kundendaten.abweichende_versand_adresse", JSON.parse, JSON.stringify) + + let versand_email, + versand_zusatzzeile, + versand_empfaenger, + versand_strasse, + versand_plz, + versand_ort; + $: { + if ($abweichende_versand_adresse) { + versand_email = writable($email) + versand_zusatzzeile = writable($zusatzzeile) + versand_empfaenger = writable($empfaenger) + versand_strasse = writable($strasse) + versand_plz = writable($plz) + versand_ort = writable($ort) + } else { + versand_email = writableSync(email) + versand_zusatzzeile = writableSync(zusatzzeile) + versand_empfaenger = writableSync(empfaenger) + versand_strasse = writableSync(strasse) + versand_plz = writableSync(plz) + versand_ort = writableSync(ort) + } + } let services: { name: string; @@ -127,7 +153,6 @@ if (!await validateAccessTokenClient()) { loginAction = bestellen - rechnung = rechnung loginOverlayHidden = false; return } @@ -152,16 +177,16 @@ try { const { uid } = await api.rechnung.anfordern.PUT.fetch( { - 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, + email: $email, + empfaenger: $empfaenger, + strasse: $strasse, + plz: $plz, + ort: $ort, + versand_empfaenger: $versand_empfaenger, + versand_strasse: $versand_strasse, + versand_plz: $versand_plz, + versand_ort: $versand_ort, + telefon: $telefon, nachweis_uid: ausweis.uid, }, { @@ -226,7 +251,6 @@ if (!await validateAccessTokenClient()) { loginAction = bestellen - rechnung = rechnung loginOverlayHidden = false; return } @@ -264,16 +288,16 @@ 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, + email: $email, + empfaenger: $empfaenger, + strasse: $strasse, + plz: $plz, + ort: $ort, + versand_empfaenger: $versand_empfaenger, + versand_strasse: $versand_strasse, + versand_plz: $versand_plz, + versand_ort: $versand_ort, + telefon: $telefon, ausweis_uid: ausweis.uid, ausweistyp, }, @@ -373,13 +397,344 @@
- + + + +
+ + + + +
+ + Bitte Geben Sie hier den Vornamen des Ansprechpartners ein. + +
+
+ + + +
+ + + + +
+ + Bitte Geben Sie hier den Nachnamen des + Ansprechpartners ein. + +
+
+ + + +
+ + + + +
+ + Bitte Geben Sie hier die Telefonnummer des + Ansprechpartners ein. + +
+
+
+ - + + +
+ + + + +
+ + Bitte geben Sie den Empfänger ein, auf den die Rechnung + ausgestellt wird. + +
+
+ + + +
+ + + + +
+ + Bitte geben Sie die Strasse und Hausnummer, so wie Sie auf der + Rechnung erscheinen soll, ein. + +
+
+ + + +
+
+ + +
+ +
+ + + + +
+ + Bitte geben Sie die PLZ des Ortes, so wie Sie auf der + Rechnung erscheinen soll, ein. + +
+
+
+ + + +
+ + + + +
+ + Bitte geben Sie, falls erforderlich, zusätzliche nformationen + ein. + +
+
+ + + +
+ + + + +
+ + Bitte geben Sie die E-Mail Adresse des Rechnungsempfängers ein. + +
+
+ + +
+
+ + + +
+
+ + {#if $abweichende_versand_adresse} + + +
+ + + + +
+ + Bitte geben Sie den Namen des Versand-Empfängers ein. + +
+
+ + + +
+ + + + +
+ + Bitte geben Sie die Versand-Empfänger Strasse und Hausnummer + ein, an die die Rechnung versandt wird. + +
+
+ + + +
+
+ + +
+ +
+ + + + +
+ + Bitte geben Sie die Versand-Empfänger PLZ des Ortes ein, + an den die Rechnung versandt wird. + +
+
+
+ + + +
+ + + + +
+ + Bitte geben Sie, falls erforderlich, zusätzliche + nformationen ein. + +
+
+ + + +
+ + + + +
+ + Bitte geben Sie die E-Mail Adresse des Versand-Empfängers + ein. + +
+
+ + + {/if} + + {#if !gegAnfrage} @@ -522,7 +877,7 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8"
- +
diff --git a/src/pages/kundendaten.astro b/src/pages/kundendaten.astro index 1409477f..53531f5f 100644 --- a/src/pages/kundendaten.astro +++ b/src/pages/kundendaten.astro @@ -34,6 +34,6 @@ try { --- - +