From 8d7d59bb4e99dd43afa67d1f975d965a45c6a5d7 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Fri, 2 May 2025 11:16:46 +0200 Subject: [PATCH 01/46] Bedarfsausweis Wohnen PDF nach Austellung im Dashboard downloaden --- src/astro-typesafe-api-caller.ts | 12 ++++++------ src/pages/api/admin/bedarfsausweis-ausstellen.ts | 4 ++-- src/pages/pdf/ansichtsausweis.ts | 2 ++ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 89f1e817..262124be 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -13,30 +13,30 @@ export const createCaller = createCallerFactory({ "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), + "ausweise": await import("../src/pages/api/ausweise/index.ts"), "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "ausweise": await import("../src/pages/api/ausweise/index.ts"), "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"), - "geg-nachweis-wohnen/[id]": await import("../src/pages/api/geg-nachweis-wohnen/[id].ts"), - "geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"), "geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"), "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"), + "geg-nachweis-wohnen/[id]": await import("../src/pages/api/geg-nachweis-wohnen/[id].ts"), + "geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"), "objekt": await import("../src/pages/api/objekt/index.ts"), "rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"), "rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"), + "ticket": await import("../src/pages/api/ticket/index.ts"), "user": await import("../src/pages/api/user/index.ts"), "user/self": await import("../src/pages/api/user/self.ts"), - "ticket": await import("../src/pages/api/ticket/index.ts"), - "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), - "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), + "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), + "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), diff --git a/src/pages/api/admin/bedarfsausweis-ausstellen.ts b/src/pages/api/admin/bedarfsausweis-ausstellen.ts index 66944cc2..ff98f424 100644 --- a/src/pages/api/admin/bedarfsausweis-ausstellen.ts +++ b/src/pages/api/admin/bedarfsausweis-ausstellen.ts @@ -197,7 +197,7 @@ export const POST = defineApiRoute({ let filename: string; if (type === "Ausweis") { - filename = `ID_${ausweis.id}_Ausweis.pdf` + filename = `ID_${ausweis.id}_Energieausweis.pdf` } else { filename = `ID_${ausweis.id}_${name}`; } @@ -212,7 +212,7 @@ export const POST = defineApiRoute({ const command = new PutObjectCommand({ Bucket: "ibc-pdfs", - Key: name, + Key: filename, Body: buffer, ACL: "private", }); diff --git a/src/pages/pdf/ansichtsausweis.ts b/src/pages/pdf/ansichtsausweis.ts index 5b4028f2..16a97d4b 100644 --- a/src/pages/pdf/ansichtsausweis.ts +++ b/src/pages/pdf/ansichtsausweis.ts @@ -53,6 +53,8 @@ export const GET: APIRoute = async (Astro) => { pdf = await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user, !ausweis.ausgestellt); } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { pdf = await pdfVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, bilder, user, !ausweis.ausgestellt); + } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { + pdf = await getS3File("ibc-pdfs", `ID_${ausweis.id}_Energieausweis.pdf`) } return new Response(pdf, { From 39e91dae7bb946337f97847625a01cde23b9dee8 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Fri, 2 May 2025 11:44:24 +0200 Subject: [PATCH 02/46] Ausgestellte Ausweis PDFs aus der Cloud laden und nicht neu generieren --- src/astro-typesafe-api-caller.ts | 4 ++-- src/pages/pdf/ansichtsausweis.ts | 27 +++++++++++++++++---------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 262124be..301c62fe 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -35,11 +35,11 @@ export const createCaller = createCallerFactory({ "user/self": await import("../src/pages/api/user/self.ts"), "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), - "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), - "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), "aufnahme/[id]/unterlagen": await import("../src/pages/api/aufnahme/[id]/unterlagen.ts"), "objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"), + "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), + "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), }) \ No newline at end of file diff --git a/src/pages/pdf/ansichtsausweis.ts b/src/pages/pdf/ansichtsausweis.ts index 16a97d4b..84e1623b 100644 --- a/src/pages/pdf/ansichtsausweis.ts +++ b/src/pages/pdf/ansichtsausweis.ts @@ -45,16 +45,23 @@ export const GET: APIRoute = async (Astro) => { user = await getCurrentUser(Astro) let pdf: Uint8Array | null = null; - if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) { - const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray - // Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren. - pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Energieausweis.pdf`) - } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { - pdf = await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user, !ausweis.ausgestellt); - } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { - pdf = await pdfVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, bilder, user, !ausweis.ausgestellt); - } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { - pdf = await getS3File("ibc-pdfs", `ID_${ausweis.id}_Energieausweis.pdf`) + + if (ausweis.ausgestellt) { + if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) { + const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray + // Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren. + pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Energieausweis.pdf`) + } else { + pdf = await getS3File("ibc-pdfs", `ID_${ausweis.id}_Energieausweis.pdf`) + } + } else { + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + pdf = await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user, !ausweis.ausgestellt); + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + pdf = await pdfVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, bilder, user, !ausweis.ausgestellt); + } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { + //todo + } } return new Response(pdf, { From 01d3824514d2eaf3a47c73c34993147b59461d09 Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Fri, 2 May 2025 17:28:15 +0200 Subject: [PATCH 03/46] Neue Bankverbindung --- src/astro-typesafe-api-caller.ts | 2 ++ src/pages/api/admin/ausstellen.ts | 8 ++++---- src/pages/api/admin/bedarfsausweis-ausstellen.ts | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 301c62fe..e8d45122 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -35,6 +35,8 @@ export const createCaller = createCallerFactory({ "user/self": await import("../src/pages/api/user/self.ts"), "verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), + "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), + "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts index 763080f5..c30f00fc 100644 --- a/src/pages/api/admin/ausstellen.ts +++ b/src/pages/api/admin/ausstellen.ts @@ -329,14 +329,14 @@ export const GET = defineApiRoute({

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${ post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : "" - } Nachfolgend finden Sie unsere Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.

+ } Bitte beachten Sie unsere neue Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.


- + - - + +
Kreditinstitut:\t Commerzbank AG
Kreditinstitut:\t Volksbank eG
Empfänger:\t IB Cornelsen
IBAN:\t DE81 2004 0000 0348 6008 00
BIC:\t COBADEFFXXX
IBAN:\t DE13 2519 3331 7209 0731 00
BIC:\t GENODEF1PAT
Betrag:\t ${rechnung.betrag}€
Verwendungszweck:\t ${voucherNumber}
diff --git a/src/pages/api/admin/bedarfsausweis-ausstellen.ts b/src/pages/api/admin/bedarfsausweis-ausstellen.ts index ff98f424..a67e8b02 100644 --- a/src/pages/api/admin/bedarfsausweis-ausstellen.ts +++ b/src/pages/api/admin/bedarfsausweis-ausstellen.ts @@ -336,14 +336,14 @@ export const POST = defineApiRoute({

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${ post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : "" - } Nachfolgend finden Sie unsere Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.

+ } Bitte beachten Sie unsere neue Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.


- + - - + +
Kreditinstitut:\t Commerzbank AG
Kreditinstitut:\t Volksbank eG
Empfänger:\t IB Cornelsen
IBAN:\t DE81 2004 0000 0348 6008 00
BIC:\t COBADEFFXXX
IBAN:\t DE13 2519 3331 7209 0731 00
BIC:\t GENODEF1PAT
Betrag:\t ${rechnung.betrag}€
Verwendungszweck:\t ${voucherNumber}
From fe06c09336e30d745ad74abc785f35d6fb5ed0fe Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Mon, 5 May 2025 13:17:49 +0200 Subject: [PATCH 04/46] Pfeilposition im PDF korrigiert --- src/astro-typesafe-api-caller.ts | 2 -- src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts | 8 ++++---- src/lib/pdf/pdfVerbrauchsausweisWohnen.ts | 6 +++--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index e8d45122..262124be 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -42,6 +42,4 @@ export const createCaller = createCallerFactory({ "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), "aufnahme/[id]/unterlagen": await import("../src/pages/api/aufnahme/[id]/unterlagen.ts"), "objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"), - "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), - "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), }) \ No newline at end of file diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index 7d88d653..67ab1b8f 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -302,14 +302,14 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe const margin = 5; page.drawImage(pfeilNachUnten, { - x: endenergieverbrauchTranslationX, + x: endenergieverbrauchTranslationX - (pfeilWidth / 2), y: height - 210, width: pfeilWidth, height: 30 }) page.drawImage(pfeilNachOben, { - x: vergleichsWertWaermeTranslationX, + x: vergleichsWertWaermeTranslationX - (pfeilWidth / 2), y: height - 293, width: pfeilWidth, height: 30 @@ -424,14 +424,14 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe } page.drawImage(pfeilNachUnten, { - x: stromVerbrauchTranslationX, + x: stromVerbrauchTranslationX - (pfeilWidth / 2), y: height - 354, width: pfeilWidth, height: 30 }) page.drawImage(pfeilNachOben, { - x: vergleichsWertStromTranslationX, + x: vergleichsWertStromTranslationX - (pfeilWidth / 2), y: height - 437, width: pfeilWidth, height: 30 diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 35984c55..edeead3c 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -343,7 +343,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne } page.drawImage(pfeilNachUnten, { - x: endenergieverbrauchTranslationX, + x: endenergieverbrauchTranslationX - (pfeilWidth / 2), y: height - 212, width: pfeilWidth, height: 30 @@ -380,7 +380,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne } page.drawImage(pfeilNachOben, { - x: primaerenergieverbrauchTranslationX, + x: primaerenergieverbrauchTranslationX - (pfeilWidth / 2), y: height - 297, width: pfeilWidth, height: 30 @@ -505,7 +505,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne const addVerbrauch = addVerbrauchGenerator(); - if (!ausweis.warmwasser_enthalten) { + if (ausweis.warmwasser_enthalten !== true) { // Mit Warmwasserzuschlag addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), From 235969ccdac66a577a9214859a28f8b6d6ab12b9 Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Mon, 5 May 2025 13:55:11 +0200 Subject: [PATCH 05/46] . --- src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index 67ab1b8f..2a420188 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -302,14 +302,14 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe const margin = 5; page.drawImage(pfeilNachUnten, { - x: endenergieverbrauchTranslationX - (pfeilWidth / 2), + x: endenergieverbrauchTranslationX, y: height - 210, width: pfeilWidth, height: 30 }) page.drawImage(pfeilNachOben, { - x: vergleichsWertWaermeTranslationX - (pfeilWidth / 2), + x: vergleichsWertWaermeTranslationX, y: height - 293, width: pfeilWidth, height: 30 @@ -369,25 +369,25 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe if (endenergieverbrauchTranslationPercentage > 0.5) { page.drawText("Endenergieverbrauch Wärme", { - x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Wärme", 10), + x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Wärme", 10) - (pfeilWidth / 2), y: height - 191, size: 10 }) page.drawText(endEnergieVerbrauchGesamtText, { - x: endenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(endEnergieVerbrauchGesamtText, 10), + x: endenergieverbrauchTranslationX - margin - bold.widthOfTextAtSize(endEnergieVerbrauchGesamtText, 10) - (pfeilWidth / 2), y: height - 205, size: 10, font: bold }) } else { page.drawText("Endenergieverbrauch Wärme", { - x: endenergieverbrauchTranslationX + pfeilWidth + margin, + x: endenergieverbrauchTranslationX + pfeilWidth + margin + (pfeilWidth / 2), y: height - 191, size: 10 }) page.drawText(endEnergieVerbrauchGesamtText, { - x: endenergieverbrauchTranslationX + pfeilWidth + margin, + x: endenergieverbrauchTranslationX + pfeilWidth + margin + (pfeilWidth / 2), y: height - 205, size: 10, font: bold @@ -398,13 +398,13 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe if (vergleichsWertWaermeTranslationPercentage > 0.5) { page.drawText("Vergleichswert Wärme", { - x: vergleichsWertWaermeTranslationX - margin - font.widthOfTextAtSize("Vergleichswert Wärme", 10), + x: vergleichsWertWaermeTranslationX - margin - font.widthOfTextAtSize("Vergleichswert Wärme", 10) - (pfeilWidth / 2), y: height - 275, size: 10 }) page.drawText(vergleichswertWaermeText, { - x: vergleichsWertWaermeTranslationX - margin - bold.widthOfTextAtSize(vergleichswertWaermeText, 10), + x: vergleichsWertWaermeTranslationX - margin - bold.widthOfTextAtSize(vergleichswertWaermeText, 10) - (pfeilWidth / 2), y: height - 289, size: 10, font: bold @@ -424,14 +424,14 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe } page.drawImage(pfeilNachUnten, { - x: stromVerbrauchTranslationX - (pfeilWidth / 2), + x: stromVerbrauchTranslationX, y: height - 354, width: pfeilWidth, height: 30 }) page.drawImage(pfeilNachOben, { - x: vergleichsWertStromTranslationX - (pfeilWidth / 2), + x: vergleichsWertStromTranslationX, y: height - 437, width: pfeilWidth, height: 30 @@ -441,25 +441,25 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe if (stromVerbrauchTranslationPercentage > 0.5) { page.drawText("Endenergieverbrauch Strom", { - x: stromVerbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Strom", 10), + x: stromVerbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Strom", 10) - (pfeilWidth / 2), y: height - 335, size: 10 }) page.drawText(stromVerbrauchGesamtText, { - x: stromVerbrauchTranslationX - margin - bold.widthOfTextAtSize(stromVerbrauchGesamtText, 10), + x: stromVerbrauchTranslationX - margin - bold.widthOfTextAtSize(stromVerbrauchGesamtText, 10) - (pfeilWidth / 2), y: height - 349, size: 10, font: bold }) } else { page.drawText("Endenergieverbrauch Strom", { - x: stromVerbrauchTranslationX + pfeilWidth + margin, + x: stromVerbrauchTranslationX + pfeilWidth + margin + (pfeilWidth / 2), y: height - 335, size: 10 }) page.drawText(stromVerbrauchGesamtText, { - x: stromVerbrauchTranslationX + pfeilWidth + margin, + x: stromVerbrauchTranslationX + pfeilWidth + margin + (pfeilWidth / 2), y: height - 349, size: 10, font: bold @@ -484,12 +484,12 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe }) } else { page.drawText("Vergleichswert Strom", { - x: vergleichsWertStromTranslationX + pfeilWidth + margin, + x: vergleichsWertStromTranslationX + pfeilWidth + margin + (pfeilWidth / 2), y: height - 420, size: 10 }) page.drawText(vergleichswertStromText, { - x: vergleichsWertStromTranslationX + pfeilWidth + margin, + x: vergleichsWertStromTranslationX + pfeilWidth + margin + (pfeilWidth / 2), y: height - 434, size: 10, font: bold From c7f18dd7ae0cd43e4dde94307a520e87ce7ca8c9 Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Mon, 5 May 2025 14:05:18 +0200 Subject: [PATCH 06/46] Pfeilposition im PDF korrigiert --- src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts | 2 +- src/lib/pdf/pdfVerbrauchsausweisWohnen.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index 2a420188..be32284f 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -431,7 +431,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe }) page.drawImage(pfeilNachOben, { - x: vergleichsWertStromTranslationX, + x: vergleichsWertStromTranslationX, y: height - 437, width: pfeilWidth, height: 30 diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index edeead3c..d14934b2 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -555,7 +555,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne "Warmwasserzuschlag", berechnungen?.primaerfaktorww.toString(), Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), - Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), + Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), "0", "0" ); From 58a81364792efbe5971e1019678b7d2126a4c120 Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Thu, 8 May 2025 23:40:16 +0200 Subject: [PATCH 07/46] Ausstellliste --- src/pages/dashboard/objekte/index.astro | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/dashboard/objekte/index.astro b/src/pages/dashboard/objekte/index.astro index 77c97617..2985d835 100644 --- a/src/pages/dashboard/objekte/index.astro +++ b/src/pages/dashboard/objekte/index.astro @@ -50,9 +50,9 @@ if (user.rolle === Enums.BenutzerRolle.USER) { // SELECT id, updated_at FROM "GEGNachweisGewerbe" WHERE created_at >= ${date} AND bestellt = ${true} result = - await prisma.$queryRaw`SELECT id, updated_at FROM "VerbrauchsausweisWohnen" UNION ALL - SELECT id, updated_at FROM "VerbrauchsausweisGewerbe" UNION ALL - SELECT id, updated_at FROM "BedarfsausweisWohnen" UNION ALL + await prisma.$queryRaw`SELECT id, updated_at FROM "VerbrauchsausweisWohnen" WHERE ausgestellt = ${false} AND bestellt = ${true} UNION ALL + SELECT id, updated_at FROM "VerbrauchsausweisGewerbe" WHERE ausgestellt = ${false} AND bestellt = ${true} UNION ALL + SELECT id, updated_at FROM "BedarfsausweisWohnen" WHERE ausgestellt = ${false} AND bestellt = ${true} UNION ALL SELECT id, updated_at FROM "BedarfsausweisGewerbe" UNION ALL SELECT id, updated_at FROM "GEGNachweisWohnen" UNION ALL SELECT id, updated_at FROM "GEGNachweisGewerbe" From d76b8b4e146ad2fd21ed6f9fe609a634b62d2923 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Wed, 14 May 2025 13:53:19 +0200 Subject: [PATCH 08/46] Benutzerdaten beim Speichern/Bestellen in Tabelle Benutzer speichern --- src/client/lib/speichern.ts | 30 +++++++++++++++++++++- src/modules/KundendatenModule.svelte | 27 +++++++++++++++++++- src/pages/api/user/index.ts | 37 +++++++++++++++------------- 3 files changed, 75 insertions(+), 19 deletions(-) diff --git a/src/client/lib/speichern.ts b/src/client/lib/speichern.ts index 31708641..14b72f79 100644 --- a/src/client/lib/speichern.ts +++ b/src/client/lib/speichern.ts @@ -1,5 +1,5 @@ import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; -import { Aufnahme, Objekt } from "#lib/client/prisma.js"; +import { Aufnahme, Benutzer, Objekt } from "#lib/client/prisma.js"; import { api } from "astro-typesafe-api/client"; import Cookies from "js-cookie"; @@ -161,4 +161,32 @@ export async function objektSpeichern(objekt: Objekt & { id?: string }): Promise return id; } +} + +export async function benutzerSpeichern(benutzer: Partial): Promise { + const completeBenutzer: Benutzer = { + id: benutzer.id, + name: benutzer.name ?? null, + email: benutzer.email, + passwort: benutzer.passwort, + adresse: benutzer.adresse ?? null, + anrede: benutzer.anrede ?? null, + firma: benutzer.firma ?? null, + vorname: benutzer.vorname ?? null, + ort: benutzer.ort ?? null, + plz: benutzer.plz ?? null, + profilbild: benutzer.profilbild ?? null, + telefon: benutzer.telefon ?? null, + updated_at: new Date(), + verified: false + }; + + await api.user.POST.fetch(completeBenutzer + , { + headers: { + Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` + } + }); + + return benutzer.id; } \ No newline at end of file diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 2e79158b..a0cd97d7 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -32,7 +32,9 @@ import { getMaximumDevitationInPercent } from "#client/lib/helpers.js"; import { endEnergieVerbrauchVerbrauchsausweis_2016_Client } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Client } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.js"; - + import { benutzerSpeichern } from "#client/lib/speichern.js"; + import { exclude } from "#lib/exclude.js"; + export let user: Partial; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; export let aufnahme: AufnahmeClient; @@ -249,6 +251,18 @@ } else { result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart) } + + let resultUser: Awaited> | Awaited> | null = null; + + const benutzerObjekt = exclude({ + ...user, + name, + vorname, + telefon + }, ["rolle"]); + + resultUser = await benutzerSpeichern(benutzerObjekt); + } catch(e) { addNotification({ dismissable: true, @@ -312,6 +326,17 @@ } } + let resultUser: Awaited> | Awaited> | null = null; + + const benutzerObjekt = exclude({ + ...user, + name, + vorname, + telefon + }, ["rolle"]); + + resultUser = await benutzerSpeichern(benutzerObjekt); + if (rechnung && rechnung.status === "paid") { window.location.href = "/dashboard" return; diff --git a/src/pages/api/user/index.ts b/src/pages/api/user/index.ts index 4c769cc5..69c986b7 100644 --- a/src/pages/api/user/index.ts +++ b/src/pages/api/user/index.ts @@ -5,7 +5,7 @@ import { adminMiddleware, authorizationMiddleware } from "#lib/middleware/author import { hashPassword } from "#lib/password.js"; import { createLexOfficeCustomer } from "#lib/server/lexoffice.js"; import { sendRegisterMail } from "#lib/server/mail/registrierung.js"; -import { prisma } from "#lib/server/prisma.js"; +import { Benutzer, prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { BenutzerSchema } from "src/generated/zod/benutzer.js"; import { z } from "zod"; @@ -15,8 +15,7 @@ export const POST = defineApiRoute({ id: true, lex_office_id: true, rolle: true, - created_at: true, - updated_at: true + created_at: true }), middleware: authorizationMiddleware, async fetch(input, context, user) { @@ -24,24 +23,28 @@ export const POST = defineApiRoute({ // TODO: Email wurde geändert, neue Bestätigunsmail schicken. } + const updateData: any = {}; + if (input.adresse) updateData.adresse = input.adresse; + if (input.anrede) updateData.anrede = input.anrede; + if (input.email) updateData.email = input.email; + if (input.firma) updateData.firma = input.firma; + if (input.name) updateData.name = input.name; + if (input.vorname) updateData.vorname = input.vorname; + if (input.ort) updateData.ort = input.ort; + // if (input.passwort) updateData.passwort = hashPassword(input.passwort); + if (input.plz) updateData.plz = input.plz; + if (input.profilbild) updateData.profilbild = input.profilbild; + if (input.telefon) updateData.telefon = input.telefon; + if (input.verified) updateData.telefon = input.verified; + await prisma.benutzer.update({ where: { id: user.id }, - data: { - adresse: input.adresse, - anrede: input.anrede, - email: input.email, - firma: input.firma, - name: input.name, - vorname: input.vorname, - ort: input.ort, - passwort: hashPassword(input.passwort), - plz: input.plz, - profilbild: input.profilbild, - telefon: input.telefon, - } - }) + data: updateData + }); + + }, }) From 058a84025c72dba4f1b8625f2bc58d508bacfe2b Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Fri, 16 May 2025 13:48:15 +0200 Subject: [PATCH 09/46] Benutzerdaten beim Speichern/Bestellen als Admin in Tabelle Benutzer speichern --- src/astro-typesafe-api-caller.ts | 2 +- src/client/lib/speichern.ts | 2 +- src/lib/server/user.ts | 18 ++++++++++++ src/modules/KundendatenModule.svelte | 29 ++++++++++++------- src/pages/api/user/index.ts | 12 ++++++-- .../energieausweis-erstellen/bezahlung.astro | 13 +++++++-- src/pages/kundendaten.astro | 12 ++++++-- 7 files changed, 69 insertions(+), 19 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 262124be..c7f1a074 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -5,6 +5,7 @@ export const createCaller = createCallerFactory({ "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "unterlage": await import("../src/pages/api/unterlage.ts"), + "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "admin/bedarfsausweis-ausstellen": await import("../src/pages/api/admin/bedarfsausweis-ausstellen.ts"), "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), @@ -12,7 +13,6 @@ export const createCaller = createCallerFactory({ "admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"), "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), - "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "ausweise": await import("../src/pages/api/ausweise/index.ts"), "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), diff --git a/src/client/lib/speichern.ts b/src/client/lib/speichern.ts index 14b72f79..17f5487f 100644 --- a/src/client/lib/speichern.ts +++ b/src/client/lib/speichern.ts @@ -178,7 +178,7 @@ export async function benutzerSpeichern(benutzer: Partial): Promise; + export let impersonatedUser: Partial | null = null; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; export let aufnahme: AufnahmeClient; export let objekt: ObjektClient; @@ -61,6 +62,10 @@ ort = rechnung?.ort || localStorage.getItem("kundendaten.ort") || user.ort || ""; zusatzzeile = rechnung?.zusatzzeile || localStorage.getItem("kundendaten.zusatzzeile") || "" telefon = rechnung?.telefon || localStorage.getItem("kundendaten.telefon") || user.telefon || ""; + } else if (impersonatedUser) { + vorname = impersonatedUser.vorname || ""; + name = impersonatedUser.name || ""; + telefon = impersonatedUser.telefon || ""; } let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false") @@ -253,13 +258,14 @@ } let resultUser: Awaited> | Awaited> | null = null; - - const benutzerObjekt = exclude({ - ...user, - name, - vorname, - telefon - }, ["rolle"]); + let baseUser = (impersonatedUser?impersonatedUser:user) + + const benutzerObjekt = { + ...baseUser, + name, + vorname, + telefon + }; resultUser = await benutzerSpeichern(benutzerObjekt); @@ -327,13 +333,14 @@ } let resultUser: Awaited> | Awaited> | null = null; - - const benutzerObjekt = exclude({ - ...user, + let baseUser = (impersonatedUser?impersonatedUser:user) + + const benutzerObjekt = { + ...baseUser, name, vorname, telefon - }, ["rolle"]); + }; resultUser = await benutzerSpeichern(benutzerObjekt); diff --git a/src/pages/api/user/index.ts b/src/pages/api/user/index.ts index 69c986b7..cc6a90cf 100644 --- a/src/pages/api/user/index.ts +++ b/src/pages/api/user/index.ts @@ -9,10 +9,10 @@ import { Benutzer, prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { BenutzerSchema } from "src/generated/zod/benutzer.js"; import { z } from "zod"; +import { Enums } from "#lib/client/prisma.js"; export const POST = defineApiRoute({ input: BenutzerSchema.omit({ - id: true, lex_office_id: true, rolle: true, created_at: true @@ -24,6 +24,7 @@ export const POST = defineApiRoute({ } const updateData: any = {}; + updateData.id = user.id; if (input.adresse) updateData.adresse = input.adresse; if (input.anrede) updateData.anrede = input.anrede; if (input.email) updateData.email = input.email; @@ -37,9 +38,16 @@ export const POST = defineApiRoute({ if (input.telefon) updateData.telefon = input.telefon; if (input.verified) updateData.telefon = input.verified; + //Admin may update other users + if (user.rolle == Enums.BenutzerRolle.ADMIN && input.id != user.id) { + updateData.id = input.id; + } else if(user.rolle != Enums.BenutzerRolle.ADMIN && input.id != user.id){ + return; + } + await prisma.benutzer.update({ where: { - id: user.id + id: updateData.id }, data: updateData }); diff --git a/src/pages/energieausweis-erstellen/bezahlung.astro b/src/pages/energieausweis-erstellen/bezahlung.astro index ef1a437c..fcbcd990 100644 --- a/src/pages/energieausweis-erstellen/bezahlung.astro +++ b/src/pages/energieausweis-erstellen/bezahlung.astro @@ -3,10 +3,11 @@ import { getAusweisartFromId } from "#components/Ausweis/types"; import AusweisLayoutPruefung from "#layouts/AusweisLayoutPruefung.astro"; import { getPrismaAusweisAdapter } from "#lib/server/ausweis"; import { Enums } from "#lib/server/prisma"; -import { getCurrentUser } from "#lib/server/user"; +import { getCurrentUser, getOtherUser } from "#lib/server/user"; import KundendatenModule from "#modules/KundendatenModule.svelte"; import { PaymentStatus } from "@mollie/api-client"; import { AusweisTyp } from "src/generated/enums"; +import { BenutzerClient } from "#components/Ausweis/types.js"; const uid = Astro.url.searchParams.get("uid") @@ -45,8 +46,16 @@ if (!ausweis) { if (ausweis.rechnung.status === PaymentStatus.paid) { return Astro.redirect("/dashboard") } + +let impersonatedUser: Partial | null = null; + +if (user){ + if (user.id !== ausweis.benutzer_id){ + impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {} + } +} --- - + diff --git a/src/pages/kundendaten.astro b/src/pages/kundendaten.astro index cab2da8d..239b60e2 100644 --- a/src/pages/kundendaten.astro +++ b/src/pages/kundendaten.astro @@ -3,9 +3,10 @@ import KundendatenModule from "#modules/KundendatenModule.svelte"; import AusweisLayout from "#layouts/AusweisLayoutPruefung.astro"; import { Enums } from "#lib/client/prisma"; -import { getCurrentUser } from "#lib/server/user"; +import { getCurrentUser, getOtherUser } from "#lib/server/user"; import { getAusweisartFromId } from "#components/Ausweis/types"; import { getAufnahme, getBedarfsausweisWohnen, getBilder, getObjekt, getRechnung, getUnterlagen, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db"; +import { BenutzerClient } from "#components/Ausweis/types.js"; // Man sollte nur auf diese Seite kommen, wenn ein Ausweis bereits vorliegt und in der Datenbank abgespeichert wurde. @@ -70,9 +71,16 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") | } } +let impersonatedUser: Partial | null = null; + +if (user){ + if (user.id !== ausweis.benutzer_id){ + impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {} + } +} --- - + From 7e047125a7d528d1bb02537b628d568d90fd2259 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Sun, 18 May 2025 11:57:26 -0300 Subject: [PATCH 10/46] Databse Neustarten nach Server Neustart --- Makefile | 1 + docker-compose.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 80f67115..a300f08f 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,7 @@ run-database: stop-database docker volume create $(DB_VOLUME) docker build -t $(DB_CONTAINER_NAME) . docker run -d --name $(DB_CONTAINER_NAME) \ + --restart=always \ -e POSTGRES_USER=$(DB_USER) \ -e POSTGRES_PASSWORD=$(DB_PASSWORD) \ -p $(DB_PORT):5432 \ diff --git a/docker-compose.yml b/docker-compose.yml index a0485abf..a96bb452 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,7 @@ version: '3' services: database: build: ./ + restart: always env_file: - .env ports: From 42b2767c7060a6706ed61951d8ec8eb1bbe3f345 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Tue, 20 May 2025 16:55:18 +0200 Subject: [PATCH 11/46] =?UTF-8?q?Einstellungen=20Passwort=20=C3=A4ndern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/astro-typesafe-api-caller.ts | 6 +++--- src/client/lib/speichern.ts | 2 +- src/modules/KundendatenModule.svelte | 4 ++-- src/pages/api/user/index.ts | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index c7f1a074..93a299b8 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -5,7 +5,6 @@ export const createCaller = createCallerFactory({ "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "unterlage": await import("../src/pages/api/unterlage.ts"), - "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"), "admin/bedarfsausweis-ausstellen": await import("../src/pages/api/admin/bedarfsausweis-ausstellen.ts"), "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), @@ -13,14 +12,15 @@ export const createCaller = createCallerFactory({ "admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"), "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), + "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "ausweise": await import("../src/pages/api/ausweise/index.ts"), "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), - "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), + "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), + "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"), "geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"), "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"), diff --git a/src/client/lib/speichern.ts b/src/client/lib/speichern.ts index 17f5487f..89f6c2f0 100644 --- a/src/client/lib/speichern.ts +++ b/src/client/lib/speichern.ts @@ -168,7 +168,7 @@ export async function benutzerSpeichern(benutzer: Partial): Promise> | Awaited> | null = null; - let baseUser = (impersonatedUser?impersonatedUser:user) + const { passwort, ...baseUser } = impersonatedUser ?? user; const benutzerObjekt = { ...baseUser, @@ -333,7 +333,7 @@ } let resultUser: Awaited> | Awaited> | null = null; - let baseUser = (impersonatedUser?impersonatedUser:user) + const { passwort, ...baseUser } = impersonatedUser ?? user; const benutzerObjekt = { ...baseUser, diff --git a/src/pages/api/user/index.ts b/src/pages/api/user/index.ts index cc6a90cf..43050ab0 100644 --- a/src/pages/api/user/index.ts +++ b/src/pages/api/user/index.ts @@ -32,7 +32,7 @@ export const POST = defineApiRoute({ if (input.name) updateData.name = input.name; if (input.vorname) updateData.vorname = input.vorname; if (input.ort) updateData.ort = input.ort; - // if (input.passwort) updateData.passwort = hashPassword(input.passwort); + if (input.passwort.length != 0) updateData.passwort = hashPassword(input.passwort); if (input.plz) updateData.plz = input.plz; if (input.profilbild) updateData.profilbild = input.profilbild; if (input.telefon) updateData.telefon = input.telefon; From e2f230e2404114a28f5785d7016d0039775128c4 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Tue, 20 May 2025 12:50:07 -0300 Subject: [PATCH 12/46] =?UTF-8?q?Notify=20Success=20entfernt=20weil=20es?= =?UTF-8?q?=20=C3=BCbel=20nervt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto-merge-staging-into-main.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/auto-merge-staging-into-main.yml b/.github/workflows/auto-merge-staging-into-main.yml index f233b3ad..94c07dd5 100644 --- a/.github/workflows/auto-merge-staging-into-main.yml +++ b/.github/workflows/auto-merge-staging-into-main.yml @@ -61,16 +61,4 @@ jobs: curl -H "Content-Type: application/json" \ -X POST \ -d "{\"content\": \"🚨 Auto-Merge fehlgeschlagen! Bitte manuell prüfen: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}\"}" \ - ${{ secrets.DISCORD_WEBHOOK_URL }} - - notify_success: - needs: merge - if: success() - runs-on: ubuntu-latest - steps: - - name: Send Discord notification on success - run: | - curl -H "Content-Type: application/json" \ - -X POST \ - -d "{\"content\": \"✅ Auto-Merge ausgeführt! Ergebnis jetzt auf [GitHub](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}) und [online-energieausweis.org](https://online-energieausweis.org) einsehen.\"}" \ ${{ secrets.DISCORD_WEBHOOK_URL }} \ No newline at end of file From 5869b282c4cfa0bbaffb1dfea7d20f53202fffb6 Mon Sep 17 00:00:00 2001 From: Carl Mahnke Date: Wed, 28 May 2025 14:15:01 +0200 Subject: [PATCH 13/46] Fixing Kundendatenmodule Datenvorbelegen bei neuem Ausweis --- src/astro-typesafe-api-caller.ts | 6 +++--- src/pages/energieausweis-erstellen/bezahlung.astro | 2 +- src/pages/kundendaten.astro | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 93a299b8..a75e2803 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -17,10 +17,10 @@ export const createCaller = createCallerFactory({ "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), - "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), + "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), + "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"), "geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"), "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"), @@ -37,9 +37,9 @@ export const createCaller = createCallerFactory({ "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), - "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), "aufnahme/[id]/unterlagen": await import("../src/pages/api/aufnahme/[id]/unterlagen.ts"), + "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"), }) \ No newline at end of file diff --git a/src/pages/energieausweis-erstellen/bezahlung.astro b/src/pages/energieausweis-erstellen/bezahlung.astro index fcbcd990..48fda87c 100644 --- a/src/pages/energieausweis-erstellen/bezahlung.astro +++ b/src/pages/energieausweis-erstellen/bezahlung.astro @@ -50,7 +50,7 @@ if (ausweis.rechnung.status === PaymentStatus.paid) { let impersonatedUser: Partial | null = null; if (user){ - if (user.id !== ausweis.benutzer_id){ + if (user.id !== ausweis.benutzer_id && ausweis.benutzer_id !== undefined){ impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {} } } diff --git a/src/pages/kundendaten.astro b/src/pages/kundendaten.astro index 239b60e2..7b5a31b6 100644 --- a/src/pages/kundendaten.astro +++ b/src/pages/kundendaten.astro @@ -74,7 +74,7 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") | let impersonatedUser: Partial | null = null; if (user){ - if (user.id !== ausweis.benutzer_id){ + if (user.id !== ausweis.benutzer_id && ausweis.benutzer_id !== undefined){ impersonatedUser = await getOtherUser(Astro, ausweis.benutzer_id) || {} } } From 36bcacd8a2d04ccdfd0d748447a16d692efc83fa Mon Sep 17 00:00:00 2001 From: Robert Jagtiani Date: Sun, 1 Jun 2025 23:27:07 +0200 Subject: [PATCH 14/46] Google Tag Manager --- src/layouts/AusweisLayoutDaten.astro | 12 ++ src/layouts/AusweisLayoutDatenImmowelt.astro | 157 ------------------ src/layouts/AusweisLayoutDatenImmowelt2.astro | 156 ----------------- src/layouts/AusweisLayoutDatenPartner.astro | 15 +- src/layouts/AusweisLayoutPruefung.astro | 12 ++ src/layouts/Layout.astro | 13 ++ 6 files changed, 50 insertions(+), 315 deletions(-) delete mode 100644 src/layouts/AusweisLayoutDatenImmowelt.astro delete mode 100644 src/layouts/AusweisLayoutDatenImmowelt2.astro diff --git a/src/layouts/AusweisLayoutDaten.astro b/src/layouts/AusweisLayoutDaten.astro index cf1a4523..db6f2fa2 100644 --- a/src/layouts/AusweisLayoutDaten.astro +++ b/src/layouts/AusweisLayoutDaten.astro @@ -102,6 +102,13 @@ const { title } = Astro.props; + + + @@ -147,6 +154,11 @@ const { title } = Astro.props; + + + +
- window.addEventListener("scroll", (event) => { - let scroll = window.scrollY; - - console.log(scroll); - if (scroll >= 400) { - document - .getElementById("skala") - ?.classList.add( - "2xl:fixed", - "2xl:py-4", - "2xl:top-0", - "2xl:z-20" - ); - document.getElementById("skala")?.classList.remove("w-full"); - - document.getElementById("skala").style.borderBottom = - "3px solid #e6e6e6"; - - document.getElementById("performance-box").style.maxWidth = - "688.5px"; - document.getElementById("progress-box").style.maxWidth = "688.5px"; - - document - .getElementById("formInput-1") - ?.classList.add("2xl:mt-[370px]"); - } else { - document - .getElementById("skala") - ?.classList.remove( - "2xl:fixed", - "2xl:py-4", - "2xl:top-0", - "2xl:z-20" - ); - document.getElementById("skala")?.classList.add("w-full"); - - document.getElementById("skala").style.borderBottom = "none"; - - document - .getElementById("formInput-1") - ?.classList.remove("2xl:mt-[370px]"); - } - }); - - - - - - - - - - - - - - - - - - - - - - - - {title || "Energieausweis online erstellen - Online Energieausweis"} - - - - -
- -
-
- -
-
- -