From 946a99117663d507d07a86edbfd9c781cd7958ef Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Fri, 17 Oct 2025 13:13:43 -0400 Subject: [PATCH] Verbesserungen 1. Info Box direkt beim Login anzeigen anstatt kleine Box unten in der Ecke 2. Pflichtfelder bei Schritt 2 noch nicht in rot markiert --- .../Ausweis/ButtonWeiterHilfe.svelte | 2 -- src/components/PlzSuche.svelte | 1 - src/lib/server/mail/auto-registrierung.ts | 2 +- src/lib/server/mail/invoice.ts | 2 +- src/lib/server/mail/payment-success.ts | 2 +- src/lib/server/mail/registrierung.ts | 2 +- src/lib/server/mail/speichern-erfolgreich.ts | 2 +- src/modules/EmbeddedLoginModule.svelte | 20 ++++++----- src/modules/EmbeddedRegisterModule.svelte | 27 +++++++------- src/modules/KundendatenModule.svelte | 35 +++++++++++++++++++ src/modules/LoginModule.svelte | 23 ++++++------ src/modules/RegisterModule.svelte | 27 +++++++------- src/pages/api/admin/ausstellen.ts | 4 +-- .../api/admin/bedarfsausweis-ausstellen.ts | 4 +-- src/pages/api/admin/stornieren.ts | 2 +- 15 files changed, 92 insertions(+), 63 deletions(-) diff --git a/src/components/Ausweis/ButtonWeiterHilfe.svelte b/src/components/Ausweis/ButtonWeiterHilfe.svelte index 2a4934c5..f83e1cb0 100644 --- a/src/components/Ausweis/ButtonWeiterHilfe.svelte +++ b/src/components/Ausweis/ButtonWeiterHilfe.svelte @@ -44,8 +44,6 @@ // Wir holen uns die Daten aus dem Formular const data = new FormData(form); // Und gleichen diese mit allen Feldern ab die "required" sind, damit stellen wir sicher, dass alles richtig ausgefüllt wurde. - console.log(form.querySelectorAll("select[name][required], input[name][required]")); - (form.querySelectorAll("select[name][required], input[name][required]") as NodeListOf).forEach((element) => { const value = data.get(element.getAttribute("name") as string) diff --git a/src/components/PlzSuche.svelte b/src/components/PlzSuche.svelte index a6a6015d..8812ef0a 100644 --- a/src/components/PlzSuche.svelte +++ b/src/components/PlzSuche.svelte @@ -58,7 +58,6 @@ {...$$restProps} bind:value={zip} on:input={fetchZipCodeInformation} - on:change={onchange} on:focus={() => { if (zipCodes.length > 0) { hideZipDropdown = false diff --git a/src/lib/server/mail/auto-registrierung.ts b/src/lib/server/mail/auto-registrierung.ts index bc579163..7fa6045f 100644 --- a/src/lib/server/mail/auto-registrierung.ts +++ b/src/lib/server/mail/auto-registrierung.ts @@ -12,7 +12,7 @@ export async function sendAutoRegisterMail( to: user.email, subject: `Ihre Registrierung bei IBCornelsen`, bcc: "info@online-energieausweis.org", - html: `

Sehr geehrte*r ${user.vorname} ${user.name},

+ html: `

Sehr geehrte/r Kund/in,

vielen Dank für Ihre Registrierung bei IBCornelsen. Ihr Benutzerkonto wurde erfolgreich erstellt.

Nachfolgend finden Sie Ihre Zugangsdaten:

diff --git a/src/lib/server/mail/invoice.ts b/src/lib/server/mail/invoice.ts index 3ec9deac..cc93e2cb 100644 --- a/src/lib/server/mail/invoice.ts +++ b/src/lib/server/mail/invoice.ts @@ -75,6 +75,6 @@ export async function sendInvoiceMail( name: rechnung.empfaenger || "", }, bcc: "info@online-energieausweis.org", - html: `

Sehr geehrte*r ${user.vorname} ${user.name},

` + getPaymentInvoiceBody(ausweis, rechnung, ausweisart), + html: `

Sehr geehrte/r ${user.vorname} ${user.name},

` + getPaymentInvoiceBody(ausweis, rechnung, ausweisart), }); } diff --git a/src/lib/server/mail/payment-success.ts b/src/lib/server/mail/payment-success.ts index 48e7fc4a..0775a052 100644 --- a/src/lib/server/mail/payment-success.ts +++ b/src/lib/server/mail/payment-success.ts @@ -80,6 +80,6 @@ export async function sendPaymentSuccessMail( name: rechnung.empfaenger || "", }, bcc: "info@online-energieausweis.org", - html: `

Sehr geehrte*r ${user.vorname} ${user.name},

` + getPaymentSuccessBody(ausweis, rechnung, ausweisart), + html: `

Sehr geehrte/r ${user.vorname} ${user.name},

` + getPaymentSuccessBody(ausweis, rechnung, ausweisart), }); } diff --git a/src/lib/server/mail/registrierung.ts b/src/lib/server/mail/registrierung.ts index 36b357ad..c08fa9fb 100644 --- a/src/lib/server/mail/registrierung.ts +++ b/src/lib/server/mail/registrierung.ts @@ -12,7 +12,7 @@ export async function sendRegisterMail( to: user.email, subject: `Ihre Registrierung bei IBCornelsen`, bcc: "info@online-energieausweis.org", - html: `

Sehr geehrte*r ${user.vorname} ${user.name},

+ html: `

Sehr geehrte/r ${user.vorname} ${user.name},

vielen Dank für Ihre Registrierung bei IBCornelsen. Ihr Benutzerkonto wurde erfolgreich erstellt.

Nachfolgend finden Sie Ihre Zugangsdaten:

diff --git a/src/lib/server/mail/speichern-erfolgreich.ts b/src/lib/server/mail/speichern-erfolgreich.ts index 042d8c3e..18aebccc 100644 --- a/src/lib/server/mail/speichern-erfolgreich.ts +++ b/src/lib/server/mail/speichern-erfolgreich.ts @@ -7,7 +7,7 @@ export async function sendAusweisGespeichertMail(user: Benutzer, ausweis_id: str from: `"IBCornelsen" `, to: user.email, subject: `Ihr Ausweis wurde gespeichert - IBCornelsen - (ID: ${ausweis_id})`, - html: `

Sehr geehrte*r ${user.vorname} ${user.name},

+ html: `

Sehr geehrte/r ${user.vorname} ${user.name},

Ihr Energieausweis wurde erfolgreich in Ihrem Konto gespeichert. Sie können ihn jederzeit in Ihrem Kundenbereich abrufen.

Ihre Vorgänge und Ausweise können Sie in Ihrem Kundenkonto einsehen und bearbeiten:

diff --git a/src/modules/EmbeddedLoginModule.svelte b/src/modules/EmbeddedLoginModule.svelte index fb3ca8a3..d1e06dbc 100644 --- a/src/modules/EmbeddedLoginModule.svelte +++ b/src/modules/EmbeddedLoginModule.svelte @@ -1,5 +1,4 @@

@@ -39,6 +36,7 @@ placeholder="Email" name="email" bind:value={email} + on:focus={() => (error = false)} required /> @@ -50,9 +48,15 @@ placeholder="********" name="passwort" bind:value={password} + on:focus={() => (error = false)} required /> + {#if error} +
+

{errorMessage}

+
+ {/if}
navigate("signup")} class="cursor-pointer" data-cy="registrieren">Registrieren diff --git a/src/modules/EmbeddedRegisterModule.svelte b/src/modules/EmbeddedRegisterModule.svelte index 184b3ce7..40272be3 100644 --- a/src/modules/EmbeddedRegisterModule.svelte +++ b/src/modules/EmbeddedRegisterModule.svelte @@ -1,6 +1,5 @@ @@ -73,6 +65,11 @@ required />
+ {#if error} +
+

{errorMessage}

+
+ {/if}
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 34d28fa5..a2d88d05 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -170,6 +170,7 @@ async function anfordern() { if (!form.checkValidity()) { + displayFormValidity() addNotification({ dismissable: true, message: "Fehlende Daten.", @@ -344,8 +345,30 @@ } } + function displayFormValidity() { + (form.querySelectorAll("select[name][required], input[name][required]") as NodeListOf).forEach((element) => { + if (element.willValidate && !element.checkValidity()) { + element.dataset["isinvalid"] = "true" + + const onChange = () => { + console.log(element, element.value, element.checkValidity()); + + if (!element.checkValidity()) { + return; + } + element.dataset["isinvalid"] = "false" + element.removeEventListener("change", onChange) + } + + element.addEventListener("change", onChange) + } + }) + } + async function bestellen(authuser = null) { if (!form.checkValidity()) { + displayFormValidity() + addNotification({ dismissable: true, message: "Fehlende Daten.", @@ -503,6 +526,14 @@ let loginOverlayHidden = true; let loginAction = () => {}; let form: HTMLFormElement; + let ortInput: HTMLInputElement; + + $: { + if (ort && ortInput) { + ortInput.value = ort + ortInput.dispatchEvent(new Event("change")) + } + } {#if !nurRechnungsadresseUpdate} @@ -661,6 +692,9 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 name="rechnung_plz" bind:zip={plz} bind:city={ort} + onchange={(e) => { + ortInput.dispatchEvent(new Event('change')); + }} />
@@ -672,6 +706,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 type="text" required bind:value={ort} + bind:this={ortInput} />
diff --git a/src/modules/LoginModule.svelte b/src/modules/LoginModule.svelte index a56a3d46..4403f939 100644 --- a/src/modules/LoginModule.svelte +++ b/src/modules/LoginModule.svelte @@ -1,8 +1,6 @@
@@ -38,7 +38,7 @@ placeholder="nutzer@email.com" name="email" bind:value={email} - on:focus={() => (errorHidden = true)} + on:focus={() => (error = false)} required />
@@ -51,15 +51,14 @@ placeholder="********" name="passwort" bind:value={passwort} - on:focus={() => (errorHidden = true)} + on:focus={() => (error = false)} required />
- {#if !errorHidden} - + {#if error} +
+

{errorMessage}

+
{/if}
diff --git a/src/modules/RegisterModule.svelte b/src/modules/RegisterModule.svelte index 63c36d3d..8dff6f93 100644 --- a/src/modules/RegisterModule.svelte +++ b/src/modules/RegisterModule.svelte @@ -1,5 +1,4 @@
@@ -137,6 +129,11 @@ required />
+ {#if error} +
+

{errorMessage}

+
+ {/if}
diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts index 29084cef..605a8626 100644 --- a/src/pages/api/admin/ausstellen.ts +++ b/src/pages/api/admin/ausstellen.ts @@ -294,7 +294,7 @@ export const GET = defineApiRoute({ if (rechnung.status === Enums.Rechnungsstatus.paid) { html = ` -

Sehr geehrte*r ${rechnung.empfaenger},

+

Sehr geehrte/r ${rechnung.empfaenger},

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${ post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : "" @@ -323,7 +323,7 @@ export const GET = defineApiRoute({

`; } else { html = ` -

Sehr geehrte*r ${rechnung.empfaenger},

+

Sehr geehrte/r ${rechnung.empfaenger},

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${ post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : "" diff --git a/src/pages/api/admin/bedarfsausweis-ausstellen.ts b/src/pages/api/admin/bedarfsausweis-ausstellen.ts index a67e8b02..b6cf51c2 100644 --- a/src/pages/api/admin/bedarfsausweis-ausstellen.ts +++ b/src/pages/api/admin/bedarfsausweis-ausstellen.ts @@ -303,7 +303,7 @@ export const POST = defineApiRoute({ if (rechnung.status === Enums.Rechnungsstatus.paid) { html = ` -

Sehr geehrte*r ${rechnung.empfaenger},

+

Sehr geehrte/r ${rechnung.empfaenger},

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${ post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : "" @@ -332,7 +332,7 @@ export const POST = defineApiRoute({

`; } else { html = ` -

Sehr geehrte*r ${rechnung.empfaenger},

+

Sehr geehrte/r ${rechnung.empfaenger},

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${ post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : "" diff --git a/src/pages/api/admin/stornieren.ts b/src/pages/api/admin/stornieren.ts index b9ab2cbb..377f8538 100644 --- a/src/pages/api/admin/stornieren.ts +++ b/src/pages/api/admin/stornieren.ts @@ -120,7 +120,7 @@ export const PUT = defineApiRoute({ to: rechnung.email || user.email, bcc: "info@online-energieausweis.org", subject: `Stornierung des Energieausweises vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`, - html: `

Sehr geehrte*r ${user.vorname} ${user.name},

+ html: `

Sehr geehrte/r ${user.vorname} ${user.name},

Ihr Energieausweis wurde soeben storniert.