From 8d7d59bb4e99dd43afa67d1f975d965a45c6a5d7 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Fri, 2 May 2025 11:16:46 +0200
Subject: [PATCH 01/47] 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, {
--
2.49.1
From 39e91dae7bb946337f97847625a01cde23b9dee8 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Fri, 2 May 2025 11:44:24 +0200
Subject: [PATCH 02/47] 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, {
--
2.49.1
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/47] 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}
--
2.49.1
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/47] 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"),
--
2.49.1
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/47] .
---
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
--
2.49.1
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/47] 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"
);
--
2.49.1
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/47] 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"
--
2.49.1
From d76b8b4e146ad2fd21ed6f9fe609a634b62d2923 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Wed, 14 May 2025 13:53:19 +0200
Subject: [PATCH 08/47] 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
+ });
+
+
},
})
--
2.49.1
From 058a84025c72dba4f1b8625f2bc58d508bacfe2b Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Fri, 16 May 2025 13:48:15 +0200
Subject: [PATCH 09/47] 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) || {}
+ }
+}
---
-
+
--
2.49.1
From 7e047125a7d528d1bb02537b628d568d90fd2259 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Sun, 18 May 2025 11:57:26 -0300
Subject: [PATCH 10/47] 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:
--
2.49.1
From 42b2767c7060a6706ed61951d8ec8eb1bbe3f345 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Tue, 20 May 2025 16:55:18 +0200
Subject: [PATCH 11/47] =?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;
--
2.49.1
From e2f230e2404114a28f5785d7016d0039775128c4 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Tue, 20 May 2025 12:50:07 -0300
Subject: [PATCH 12/47] =?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
--
2.49.1
From 5869b282c4cfa0bbaffb1dfea7d20f53202fffb6 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Wed, 28 May 2025 14:15:01 +0200
Subject: [PATCH 13/47] 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) || {}
}
}
--
2.49.1
From 36bcacd8a2d04ccdfd0d748447a16d692efc83fa Mon Sep 17 00:00:00 2001
From: Robert Jagtiani
Date: Sun, 1 Jun 2025 23:27:07 +0200
Subject: [PATCH 14/47] 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"}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/layouts/AusweisLayoutDatenImmowelt2.astro b/src/layouts/AusweisLayoutDatenImmowelt2.astro
deleted file mode 100644
index f0ff2f32..00000000
--- a/src/layouts/AusweisLayoutDatenImmowelt2.astro
+++ /dev/null
@@ -1,156 +0,0 @@
----
-import "../style/global.css";
-import "../style/formular.css";
-import "../../svelte-dialogs.config"
-import Header from "#components/design/header/AusweisHeaderImmowelt2.astro";
-import Footer from "#components/design/footer/Footer.astro";
-import { NotificationWrapper } from "@ibcornelsen/ui";
-
-export interface Props {
- title: string;
-}
-
-const { title } = Astro.props;
----
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {title || 'Energieausweis online erstellen - Online Energieausweis'}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/layouts/AusweisLayoutDatenPartner.astro b/src/layouts/AusweisLayoutDatenPartner.astro
index f2a46122..b79bf6cb 100644
--- a/src/layouts/AusweisLayoutDatenPartner.astro
+++ b/src/layouts/AusweisLayoutDatenPartner.astro
@@ -85,6 +85,14 @@ window.addEventListener("scroll", () => {
+
+
+
+
@@ -127,7 +135,11 @@ window.addEventListener("scroll", () => {
-
+
+
+
+
@@ -136,7 +148,6 @@ window.addEventListener("scroll", () => {
-
diff --git a/src/layouts/AusweisLayoutPruefung.astro b/src/layouts/AusweisLayoutPruefung.astro
index b133387a..02cba403 100644
--- a/src/layouts/AusweisLayoutPruefung.astro
+++ b/src/layouts/AusweisLayoutPruefung.astro
@@ -37,6 +37,14 @@ const { title } = Astro.props;
+
+
+
+
@@ -79,6 +87,10 @@ const { title } = Astro.props;
+
+
+
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index c050ca1a..5d79cd5e 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -98,6 +98,15 @@ window.addEventListener("scroll", (event) => {
+
+
+
+
+
@@ -111,6 +120,10 @@ window.addEventListener("scroll", (event) => {
+
+
+
--
2.49.1
From 9fa8ee22513e17807f1cf23deebe56e73fb5d96a Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 2 Jun 2025 21:35:00 -0300
Subject: [PATCH 15/47] Heap Snapshot Generator
---
src/pages/heap-snapshot.astro | 6 ++++++
1 file changed, 6 insertions(+)
create mode 100644 src/pages/heap-snapshot.astro
diff --git a/src/pages/heap-snapshot.astro b/src/pages/heap-snapshot.astro
new file mode 100644
index 00000000..f539168b
--- /dev/null
+++ b/src/pages/heap-snapshot.astro
@@ -0,0 +1,6 @@
+---
+import { writeHeapSnapshot } from "v8";
+
+// Create a named heap snapshot
+writeHeapSnapshot(".heapsnapshot");
+---
\ No newline at end of file
--
2.49.1
From 85591431eb36f3414b7e3c2dc0954ac356f1b889 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 2 Jun 2025 21:46:30 -0300
Subject: [PATCH 16/47] Heap Snapshot
---
src/pages/heap-snapshot.astro | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/pages/heap-snapshot.astro b/src/pages/heap-snapshot.astro
index f539168b..3497bd66 100644
--- a/src/pages/heap-snapshot.astro
+++ b/src/pages/heap-snapshot.astro
@@ -2,5 +2,5 @@
import { writeHeapSnapshot } from "v8";
// Create a named heap snapshot
-writeHeapSnapshot(".heapsnapshot");
+writeHeapSnapshot("~/.heapsnapshot");
---
\ No newline at end of file
--
2.49.1
From 5f5e3f4bed6cbb8ee483ac28731ba7372d52ce27 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 2 Jun 2025 21:49:26 -0300
Subject: [PATCH 17/47] Heap Snapshot
---
src/pages/heap-snapshot.astro | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/pages/heap-snapshot.astro b/src/pages/heap-snapshot.astro
index 3497bd66..1c1f49bf 100644
--- a/src/pages/heap-snapshot.astro
+++ b/src/pages/heap-snapshot.astro
@@ -1,6 +1,19 @@
---
-import { writeHeapSnapshot } from "v8";
+import { getHeapSnapshot } from "v8";
+import * as fs from "fs";
// Create a named heap snapshot
-writeHeapSnapshot("~/.heapsnapshot");
+const snapshotStream = getHeapSnapshot();
+const fileName = `heap-${Date.now()}.heapsnapshot`;
+const fileStream = fs.createWriteStream(fileName);
+
+snapshotStream.pipe(fileStream);
+
+fileStream.on("finish", () => {
+ console.log(`Heap snapshot saved to ${fileName}`);
+});
+
+fileStream.on("error", (err) => {
+ console.error("Error writing heap snapshot:", err);
+});
---
\ No newline at end of file
--
2.49.1
From 4d6b8283ff4b656e7ed89795f1d9b6753c34aeb4 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Tue, 3 Jun 2025 11:06:53 +0200
Subject: [PATCH 18/47] Kundendatenmodule - Daten speichern wenn nicht
eingeloggt
---
src/astro-typesafe-api-caller.ts | 2 +-
src/client/lib/lesen.ts | 15 +++++++++++++++
src/modules/KundendatenModule.svelte | 21 +++++++++++++++------
src/pages/api/user/index.ts | 14 ++++++++++++--
4 files changed, 43 insertions(+), 9 deletions(-)
create mode 100644 src/client/lib/lesen.ts
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index a75e2803..262124be 100644
--- a/src/astro-typesafe-api-caller.ts
+++ b/src/astro-typesafe-api-caller.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/client/lib/lesen.ts b/src/client/lib/lesen.ts
new file mode 100644
index 00000000..c7ded8a2
--- /dev/null
+++ b/src/client/lib/lesen.ts
@@ -0,0 +1,15 @@
+import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
+import { Benutzer } from "#lib/client/prisma.js";
+import { api } from "astro-typesafe-api/client";
+import Cookies from "js-cookie";
+
+export async function benutzerLesen(benutzerId: string): Promise {
+ const benutzer = await api.user.GET.fetch({ id: benutzerId }
+ , {
+ headers: {
+ Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
+ }
+ });
+
+ return benutzer[0];
+}
\ No newline at end of file
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte
index 10995576..335338b9 100644
--- a/src/modules/KundendatenModule.svelte
+++ b/src/modules/KundendatenModule.svelte
@@ -33,6 +33,7 @@
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 { benutzerLesen } from "#client/lib/lesen.js";
import { exclude } from "#lib/exclude.js";
export let user: Partial;
@@ -240,7 +241,7 @@
}
}
- async function speichern() {
+ async function speichern(authuser = null) {
loginAction = speichern;
if (!await validateAccessTokenClient()) {
loginOverlayHidden = false;
@@ -256,7 +257,11 @@
} else {
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
}
-
+
+ if (authuser) {
+ user = await benutzerLesen(authuser.id);
+ }
+
let resultUser: Awaited> | Awaited> | null = null;
const { passwort, ...baseUser } = impersonatedUser ?? user;
@@ -289,7 +294,7 @@
}
}
- async function bestellen() {
+ async function bestellen(authuser = null) {
if (!form.checkValidity()) {
addNotification({
dismissable: true,
@@ -332,6 +337,10 @@
}
}
+ if (authuser) {
+ user = await benutzerLesen(authuser.id);
+ }
+
let resultUser: Awaited> | Awaited> | null = null;
const { passwort, ...baseUser } = impersonatedUser ?? user;
@@ -1104,7 +1113,7 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8"
- Speichern
+ speichern()}>Speichern
{#if rechnung && rechnung.status === "paid"}
@@ -1112,7 +1121,7 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8"
class="order-1 sm:order-2 button cursor-pointer"
data-cy="bestellen"
type="button"
- on:click={bestellen}>Absenden bestellen()}>Absenden
{:else}
{#if gegAnfrage}
@@ -1127,7 +1136,7 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8"
class="order-1 sm:order-2 button cursor-pointer"
data-cy="bestellen"
type="button"
- on:click={bestellen}>Kostenpflichtig bestellen bestellen()}>Kostenpflichtig bestellen
{/if}
{/if}
diff --git a/src/pages/api/user/index.ts b/src/pages/api/user/index.ts
index 43050ab0..ba9f3cbc 100644
--- a/src/pages/api/user/index.ts
+++ b/src/pages/api/user/index.ts
@@ -38,7 +38,7 @@ export const POST = defineApiRoute({
if (input.telefon) updateData.telefon = input.telefon;
if (input.verified) updateData.telefon = input.verified;
- //Admin may update other users
+ //Only Admin can 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){
@@ -64,9 +64,14 @@ export const GET = defineApiRoute({
email: z.string()
})),
output: z.array(BenutzerSchema),
- middleware: adminMiddleware,
+ middleware: authorizationMiddleware,
async fetch(input, context, admin) {
if ("id" in input) {
+ //Only Admin can read other users
+ if (admin.rolle != Enums.BenutzerRolle.ADMIN && input.id != admin.id) {
+ return;
+ }
+
const user = await prisma.benutzer.findUnique({
where: {
id: input.id
@@ -79,6 +84,11 @@ export const GET = defineApiRoute({
return [user];
} else {
+ //Only admin can read many users
+ if (admin.rolle != Enums.BenutzerRolle.ADMIN ) {
+ return;
+ }
+
const users = await prisma.benutzer.findMany({
where: {
email: {
--
2.49.1
From 19136d475d1fab4a20f618f145f46411f689b2d3 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 9 Jun 2025 10:43:46 -0300
Subject: [PATCH 19/47] Makefile
---
Makefile | 2 +-
src/astro-typesafe-api-caller.ts | 5 +----
src/pages/api/admin/ausstellen.ts | 2 --
3 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/Makefile b/Makefile
index a300f08f..33760009 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ PERSISTENT_DIR := $(HOME)/persistent/$(APP_NAME)
BACKUP_FILENAME := $(HOME)/backups/$(shell date +"%Y-%m-%d_%H-%M-%S").sql.gz
online-energieausweis:
- bun run dev --host
+ NODE_ENV="development" bun run dev --host
dev: database online-energieausweis
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index a75e2803..8534c72d 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,8 +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"),
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
@@ -33,8 +32,6 @@ export const createCaller = createCallerFactory({
"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"),
- "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"),
"aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"),
diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts
index c30f00fc..29084cef 100644
--- a/src/pages/api/admin/ausstellen.ts
+++ b/src/pages/api/admin/ausstellen.ts
@@ -17,7 +17,6 @@ import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { z } from "astro:content";
import { transport } from "#lib/mail.js";
import {Attachment} from "nodemailer/lib/mailer/index.js";
-import { BASE_URI } from "#lib/constants.js";
import { getAnsichtsausweis, getDatenblatt, getAushang } from "#lib/server/ausweis.js";
import { PutObjectCommand } from "@aws-sdk/client-s3";
import { s3Client } from "#lib/s3.js";
@@ -34,7 +33,6 @@ import {
getVerbrauchsausweisWohnenKomplett,
} from "#lib/server/db.js";
import { PDFDocument } from "pdf-lib";
-import * as fs from 'fs';
export const GET = defineApiRoute({
input: z.object({
--
2.49.1
From e48cd6acdef61dbbebe5dd4c9b4447f78d7f6b95 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 9 Jun 2025 10:52:39 -0300
Subject: [PATCH 20/47] Prozentzahl rausgenommen
---
src/components/Dashboard/DashboardAusweis.svelte | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte
index 96ea5121..00174081 100644
--- a/src/components/Dashboard/DashboardAusweis.svelte
+++ b/src/components/Dashboard/DashboardAusweis.svelte
@@ -341,9 +341,6 @@
- {progress}%
{#await calculations then calculations}
--
2.49.1
From feef273c8cfcc5ff66e27f3deef2d6a1d45feecc Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 9 Jun 2025 12:09:50 -0300
Subject: [PATCH 21/47] Disables autorestart for database backup cronjob
Prevents the daily database backup cronjob from restarting automatically.
This ensures that the backup process only runs according to the defined schedule,
avoiding unintended backups outside of the scheduled time.
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 33760009..b32d05c5 100644
--- a/Makefile
+++ b/Makefile
@@ -72,4 +72,4 @@ prod: install-dependencies prisma-studio backup-database-cronjob update-dwd-klim
backup-database-cronjob:
- pm2 delete daily-db-backup
- pm2 start bash --name "daily-db-backup" --cron "0 0 * * *" -- backup-database.bash
\ No newline at end of file
+ pm2 start bash --name "daily-db-backup" --no-autorestart --no-start --cron "0 0 * * *" -- backup-database.bash
\ No newline at end of file
--
2.49.1
From 54d8fb5d1bf45f050865fad0f6b66390485ee1d4 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 9 Jun 2025 12:11:59 -0300
Subject: [PATCH 22/47] no-start existiert nicht
---
Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index b32d05c5..b59f8b73 100644
--- a/Makefile
+++ b/Makefile
@@ -72,4 +72,4 @@ prod: install-dependencies prisma-studio backup-database-cronjob update-dwd-klim
backup-database-cronjob:
- pm2 delete daily-db-backup
- pm2 start bash --name "daily-db-backup" --no-autorestart --no-start --cron "0 0 * * *" -- backup-database.bash
\ No newline at end of file
+ pm2 start bash --name "daily-db-backup" --no-autorestart --cron "0 0 * * *" -- backup-database.bash
\ No newline at end of file
--
2.49.1
From d98a5065ef7c46dbcad86b909318d60f60035478 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Wed, 11 Jun 2025 09:50:41 -0500
Subject: [PATCH 23/47] Abrechnung und Workflow
---
.github/workflows/prevent-wrong-pr.yml | 4 +
src/astro-typesafe-api-caller.ts | 5 +-
.../Abrechnung/AbrechungTable.svelte | 109 ++++++
.../Dashboard/DashboardSidebar.svelte | 1 +
src/pages/dashboard/abrechnung/index.astro | 334 ++++++++++++++++++
5 files changed, 452 insertions(+), 1 deletion(-)
create mode 100644 src/components/Abrechnung/AbrechungTable.svelte
create mode 100644 src/pages/dashboard/abrechnung/index.astro
diff --git a/.github/workflows/prevent-wrong-pr.yml b/.github/workflows/prevent-wrong-pr.yml
index c2073db3..d25826c0 100644
--- a/.github/workflows/prevent-wrong-pr.yml
+++ b/.github/workflows/prevent-wrong-pr.yml
@@ -13,6 +13,8 @@ jobs:
steps:
- name: Prevent dev merges
run: |
+ echo "${{ github.head_ref }}";
+ echo "${{ github.base_ref }}";
if [[ "${{ github.head_ref }}" == "dev" ]]; then
echo "ERROR: Merging 'dev' into '${{ github.base_ref }}' is forbidden!"
exit 1
@@ -21,6 +23,8 @@ jobs:
- name: Allow only staging into main
if: github.base_ref == 'main'
run: |
+ echo "${{ github.head_ref }}";
+ echo "${{ github.base_ref }}";
if [[ "${{ github.head_ref }}" != "staging" ]]; then
echo "ERROR: Only 'staging' branch is allowed to merge into 'main'. Current: '${{ github.head_ref }}'"
exit 1
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index 85eb31a1..478d3c24 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,9 +12,11 @@ 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"),
"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"),
@@ -34,6 +35,8 @@ export const createCaller = createCallerFactory({
"user/self": await import("../src/pages/api/user/self.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"),
"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/components/Abrechnung/AbrechungTable.svelte b/src/components/Abrechnung/AbrechungTable.svelte
new file mode 100644
index 00000000..03aa4efb
--- /dev/null
+++ b/src/components/Abrechnung/AbrechungTable.svelte
@@ -0,0 +1,109 @@
+
+
+ {#each periods as dt}
+ {@const jahrMonat = dt.format("Y-m")}
+ {#if jahrMonat in bestellungenNachMonat && bestellungenNachMonat[jahrMonat].length > 0}
+
+ {@const provisionMonat = bestellungenNachMonat[jahrMonat].reduce((acc, bestellung) => {
+ if (bestellung.verbrauchsausweis_wohnen) {
+ return acc + provisionen[Enums.Ausweisart.VerbrauchsausweisWohnen];
+ }
+ if (bestellung.bedarfsausweis_wohnen) {
+ return acc + provisionen[Enums.Ausweisart.BedarfsausweisWohnen];
+ }
+ if (bestellung.verbrauchsausweis_gewerbe) {
+ return acc + provisionen[Enums.Ausweisart.VerbrauchsausweisGewerbe];
+ }
+
+ return acc;
+ }) * 1.19}
+
+
+
$month_name $year_name - Klicke, um Tabelle anzuzeigen
+
PDF Ansehen
+
+
+
+
+ ID
+ DATUM
+ GEBÄUDEADRESSE
+ PLZ
+ ORT
+ AUSWEIS
+ BETRAG NETTO
+
+
+
+ {#each bestellungenNachMonat[jahrMonat] as bestellung}
+ {@const provisionBestellung = bestellung.verbrauchsausweis_wohnen ? provisionen[Enums.Ausweisart.VerbrauchsausweisWohnen] : bestellung.verbrauchsausweis_gewerbe ? provisionen[Enums.Ausweisart.VerbrauchsausweisGewerbe] : provisionen[Enums.Ausweisart.BedarfsausweisWohnen]}
+
+ {bestellung.id}
+ {moment(bestellung.created_at).format("Y/m/d")}
+ {bestellung["objekt_strasse"]}
+ {bestellung["objekt_plz"]}
+ {bestellung["objekt_ort"]}
+ {bestellung['ausweisart']}
+ {provisionBestellung} €
+
+ {/each}
+
+ {/if}
+ {/each}
+
+
+
+
\ No newline at end of file
diff --git a/src/components/Dashboard/DashboardSidebar.svelte b/src/components/Dashboard/DashboardSidebar.svelte
index 5a0e4767..a3706fe8 100644
--- a/src/components/Dashboard/DashboardSidebar.svelte
+++ b/src/components/Dashboard/DashboardSidebar.svelte
@@ -70,6 +70,7 @@
{/if}
+ Conversions
diff --git a/src/pages/dashboard/abrechnung/index.astro b/src/pages/dashboard/abrechnung/index.astro
new file mode 100644
index 00000000..f0fe5e8a
--- /dev/null
+++ b/src/pages/dashboard/abrechnung/index.astro
@@ -0,0 +1,334 @@
+---
+import AbrechungTable from "#components/Abrechnung/AbrechungTable.svelte";
+import { Enums, prisma } from "#lib/server/prisma";
+import { getCurrentUser } from "#lib/server/user";
+import moment from "moment";
+
+
+const start = moment(Astro.url.searchParams.get("start"))
+const end = moment(Astro.url.searchParams.get("end"))
+
+let startdatum = start.toDate();
+let enddatum = end.toDate();
+
+const benutzer = await getCurrentUser(Astro)
+
+if (!benutzer) {
+ return Astro.redirect("/404")
+}
+
+const provisionen={
+ [Enums.Ausweisart.VerbrauchsausweisWohnen]: 10,
+ [Enums.Ausweisart.BedarfsausweisWohnen]: 10,
+ [Enums.Ausweisart.VerbrauchsausweisGewerbe]: 10,
+}
+
+// $kommission = db()->one("SELECT abr_va, abr_ba, abr_vanw FROM users WHERE resellercode = :resellercode", ["resellercode" => $resellercode]);
+// Select every entry from database where user was involved.
+let bestellungen;
+if (start.isValid() && end.isValid()) {
+ bestellungen = await prisma.rechnung.findMany({
+ where: {
+ partner_code: "immowelt",
+ OR: [{
+ verbrauchsausweis_gewerbe: {
+ ausgestellt: true
+ }
+ },
+ {
+ bedarfsausweis_wohnen: {
+ ausgestellt: true
+ }
+ },
+ {
+ verbrauchsausweis_wohnen: {
+ ausgestellt: true
+ }
+ }],
+ AND: [{
+ created_at: {
+ gte: startdatum
+ },
+ }, {
+ created_at: {
+ lte: enddatum
+ },
+ }]
+ },
+ orderBy: {
+ created_at: "desc"
+ },
+ include: {
+ bedarfsausweis_wohnen: true,
+ verbrauchsausweis_gewerbe: true,
+ verbrauchsausweis_wohnen: true
+ }
+ });
+} else {
+ bestellungen = await prisma.rechnung.findMany({
+ where: {
+ partner_code: "immowelt",
+ OR: [{
+ verbrauchsausweis_gewerbe: {
+ ausgestellt: true
+ }
+ },
+ {
+ bedarfsausweis_wohnen: {
+ ausgestellt: true
+ }
+ },
+ {
+ verbrauchsausweis_wohnen: {
+ ausgestellt: true
+ }
+ }]
+ },
+ orderBy: {
+ created_at: "desc"
+ },
+ include: {
+ bedarfsausweis_wohnen: true,
+ verbrauchsausweis_gewerbe: true,
+ verbrauchsausweis_wohnen: true
+ }
+ });
+}
+
+// Wann wurde der partner_code zum ersten mal benutzt?
+const partnerCodeErstesMal = (await prisma.rechnung.findFirst({
+ select: {
+ created_at: true
+ },
+ where: {
+ partner_code: "immowelt",
+ OR: [{
+ verbrauchsausweis_gewerbe: {
+ ausgestellt: true
+ }
+ },
+ {
+ bedarfsausweis_wohnen: {
+ ausgestellt: true
+ }
+ },
+ {
+ verbrauchsausweis_wohnen: {
+ ausgestellt: true
+ }
+ }],
+ created_at: {
+ gte: moment().set("year", 2020).set("dayOfYear", 1).toDate()
+ }
+ },
+ orderBy: {
+ created_at: "asc"
+ }
+}))?.created_at
+
+let provision = 0;
+const ausweisarten: string[] = [];
+for (const bestellung of bestellungen) {
+ if (bestellung.verbrauchsausweis_wohnen) {
+ ausweisarten.push(Enums.Ausweisart.VerbrauchsausweisWohnen)
+ provision += provisionen[Enums.Ausweisart.VerbrauchsausweisWohnen]
+ }
+ if (bestellung.bedarfsausweis_wohnen) {
+ ausweisarten.push(Enums.Ausweisart.BedarfsausweisWohnen)
+ provision += provisionen[Enums.Ausweisart.BedarfsausweisWohnen]
+ }
+ if (bestellung.verbrauchsausweis_gewerbe) {
+ ausweisarten.push(Enums.Ausweisart.VerbrauchsausweisGewerbe)
+ provision += provisionen[Enums.Ausweisart.VerbrauchsausweisGewerbe]
+ }
+}
+
+---
+
+
+
+
+
+
+
+ Reporting | online-energieausweis.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
2.49.1
From 1e7fd7afe030626288ceafa671a17de2c9d4dfd2 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Wed, 11 Jun 2025 13:53:49 -0500
Subject: [PATCH 24/47] Fenster Art Float
---
prisma/schema/BedarfsausweisWohnen.prisma | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/prisma/schema/BedarfsausweisWohnen.prisma b/prisma/schema/BedarfsausweisWohnen.prisma
index 656d4717..a5882035 100644
--- a/prisma/schema/BedarfsausweisWohnen.prisma
+++ b/prisma/schema/BedarfsausweisWohnen.prisma
@@ -41,13 +41,13 @@ model BedarfsausweisWohnen {
volumen Float?
dicht Boolean?
fenster_flaeche_1 Float?
- fenster_art_1 String?
+ fenster_art_1 Float?
fenster_flaeche_2 Float?
- fenster_art_2 String?
+ fenster_art_2 Float?
dachfenster_flaeche Float?
- dachfenster_art String?
+ dachfenster_art Float?
haustuer_flaeche Float?
- haustuer_art String?
+ haustuer_art Float?
dach_bauart String? @db.VarChar
decke_bauart String? @db.VarChar
dach_daemmung String?
--
2.49.1
From e9f51560f6701c688f984b622e140dd2f9c8ef18 Mon Sep 17 00:00:00 2001
From: Carl Mahnke
Date: Fri, 13 Jun 2025 10:23:17 +0200
Subject: [PATCH 25/47] =?UTF-8?q?Rechnungsadresse=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 +
.../Dashboard/DashboardAusweis.svelte | 45 ++++---
src/modules/KundendatenModule.svelte | 119 ++++++++++++------
src/pages/api/rechnung/[id].ts | 53 +++++---
src/pages/dashboard/rechnung/aendern.astro | 108 ++++++++++++++++
5 files changed, 264 insertions(+), 67 deletions(-)
create mode 100644 src/pages/dashboard/rechnung/aendern.astro
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index 478d3c24..dc71b7df 100644
--- a/src/astro-typesafe-api-caller.ts
+++ b/src/astro-typesafe-api-caller.ts
@@ -13,6 +13,10 @@ 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"),
+<<<<<<< Updated upstream
+=======
+ "ausweise": await import("../src/pages/api/ausweise/index.ts"),
+>>>>>>> Stashed changes
"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"),
@@ -33,6 +37,8 @@ export const createCaller = createCallerFactory({
"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"),
+ "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"),
"verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"),
diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte
index 00174081..eeb89516 100644
--- a/src/components/Dashboard/DashboardAusweis.svelte
+++ b/src/components/Dashboard/DashboardAusweis.svelte
@@ -257,6 +257,12 @@
let bedarfsausweisFileInput: HTMLInputElement;
let bedarfsausweisAdditionalInput: HTMLInputElement;
+
+ let dropdownOpen = false;
+
+ function toggleDropdown() {
+ dropdownOpen = !dropdownOpen;
+ }
@@ -273,30 +279,41 @@
{/if}
-
+
+
+ {#if dropdownOpen}
-
- Ausweis Stornieren
+ Stornieren
-
-
- Als Vorlage benutzen
-
-
- hilfeModal.showModal()}
+
+
+
+ hilfeModal.showModal()} class="flex items-center gap-2" disabled
> Hilfe Erhalten
-
+
+ {#if ausweis.bestellt && rechnung}
+
+ {/if}
-
+ {/if}
+
+
{#if ausweis.ausgestellt}
Ausgestellt
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte
index 335338b9..306d7145 100644
--- a/src/modules/KundendatenModule.svelte
+++ b/src/modules/KundendatenModule.svelte
@@ -46,9 +46,8 @@
export let rechnung: RechnungClient | null = null;
export let ausweisart: Enums.Ausweisart;
export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal;
-
export let partner_code: string;
-
+ export let nurRechnungsadresseUpdate: Boolean | null = false;
let email: string, vorname: string, name: string, empfaenger: string, strasse: string, plz: string, ort: string, zusatzzeile: string, telefon: string;
@@ -67,9 +66,18 @@
vorname = impersonatedUser.vorname || "";
name = impersonatedUser.name || "";
telefon = impersonatedUser.telefon || "";
+ email = impersonatedUser.email || "";
+ if (rechnung){
+ empfaenger = rechnung?.empfaenger || "";
+ strasse = rechnung?.strasse || "";
+ plz = rechnung?.plz || "";
+ ort = rechnung?.ort || "";
+ zusatzzeile = rechnung?.zusatzzeile || "";
+ email = rechnung?.email || "";
+ }
}
- let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false")
+ let abweichende_versand_adresse = rechnung?.abweichende_versand_adresse ?? JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false")
let versand_email: string | undefined,
versand_zusatzzeile: string | undefined,
@@ -77,16 +85,13 @@
versand_strasse: string | undefined,
versand_plz: string | undefined,
versand_ort: string | undefined;
- $: {
- if (!abweichende_versand_adresse) {
- versand_email = email
- versand_zusatzzeile = zusatzzeile
- versand_empfaenger = empfaenger
- versand_strasse = strasse
- versand_plz = plz
- versand_ort = ort
- }
- }
+
+ versand_email = "";//Todo Datenbankfeld fehlt noch
+ versand_zusatzzeile = rechnung?.versand_zusatzzeile ?? zusatzzeile;
+ versand_empfaenger = rechnung?.versand_empfaenger ?? empfaenger;
+ versand_strasse = rechnung?.versand_strasse ?? strasse;
+ versand_plz = rechnung?.versand_plz ?? plz;
+ versand_ort = rechnung?.versand_ort ?? ort;
$: {
// Wir speichern jede Änderung an den Kundendaten im localStorage ab.
@@ -274,6 +279,39 @@
resultUser = await benutzerSpeichern(benutzerObjekt);
+
+ let id: string, checkout_url: string | undefined;
+
+ if (rechnung) {
+ const result = await api.rechnung._id.PATCH.fetch({
+ bezahlmethode: aktiveBezahlmethode,
+ abweichende_versand_adresse: abweichende_versand_adresse,
+ empfaenger: empfaenger,
+ strasse: strasse,
+ plz: plz,
+ ort: ort,
+ zusatzzeile: zusatzzeile,
+ versand_empfaenger: versand_empfaenger,
+ versand_strasse: versand_strasse,
+ versand_plz: versand_plz,
+ versand_ort: versand_ort,
+ telefon: telefon,
+ email: email,
+ versand_zusatzzeile: versand_zusatzzeile
+ }, {
+ params: {
+ id: rechnung.id
+ },
+ headers: {
+ Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
+ },
+ })
+
+ id = result.id
+ checkout_url = result.checkout_url
+ }
+
+
} catch(e) {
addNotification({
dismissable: true,
@@ -369,6 +407,7 @@
strasse: strasse,
plz: plz,
ort: ort,
+ zusatzzeile: zusatzzeile,
versand_empfaenger: versand_empfaenger,
versand_strasse: versand_strasse,
versand_plz: versand_plz,
@@ -399,13 +438,16 @@
strasse: strasse,
plz: plz,
ort: ort,
+ zusatzzeile: zusatzzeile,
versand_empfaenger: versand_empfaenger,
versand_strasse: versand_strasse,
versand_plz: versand_plz,
versand_ort: versand_ort,
+ versand_zusatzzeile: versand_zusatzzeile,
telefon: telefon,
ausweis_id: ausweis.id,
- partner_code
+ partner_code,
+ abweichende_versand_adresse: abweichende_versand_adresse
},
{
headers: {
@@ -445,6 +487,7 @@
let form: HTMLFormElement;
+{#if !nurRechnungsadresseUpdate}
{/if}
-
+{/if}