-
Zusammenfassung
-
- Ausstellung für {aufnahme.gebaeudetyp} ({aufnahme.baujahr_gebaeude}) mit {aufnahme.einheiten} Wohneinheiten und {aufnahme.flaeche} m² Wohnfläche
- sowie {aufnahme.nutzflaeche} m² energetische Nutzfläche. Als Ausstellgrund wurde {ausweis.ausstellgrund} angegeben.
+
+
{aufnahme.gebaeudetyp}
+ {#if (aufnahme.einheiten > 0 && aufnahme.einheiten !== null)}
+ mit {aufnahme.einheiten} Wohneinheiten
+ {/if}
+
+
+
+ Gebäude (Bj {aufnahme.baujahr_gebaeude}) mit
+ {#if aufnahme.flaeche > 0 && aufnahme.flaeche !== null}
+ {aufnahme.flaeche} m² Wohnfläche
+ sowie
+ {/if}
+ {aufnahme.nutzflaeche} m² energetische Nutzfläche. Als Ausstellgrund wurde {ausweis.ausstellgrund} angegeben.
{aufnahme.gebaeudeteil === "Wohnen"
? "Die eingegebenen Daten beziehen sich auf den Wohnteil eines gemischt genutzten Gebäudes."
: "Die eingegebenen Daten beziehen sich auf das gesamte Gebäude."}
- {aufnahme.saniert ? aufnahme.saniert : "Das Gebäude ist in unsaniertem Zustand."}
+ {aufnahme.saniert ? "Das Gebäude ist in unsaniertem Zustand." : "Das Gebäude ist in saniertem Zustand."}
-
- Verbrauch der Heizung ({aufnahme.baujahr_heizung}) mit Energieträger {ausweis.brennstoff_1} in {ausweis.einheit_1} vom
- {moment(ausweis.startdatum).format("DD.MM.YYYY")} - {moment(ausweis.startdatum).add("3", "years").format("DD.MM.YYYY")}:
- {ausweis.verbrauch_1}, {ausweis.verbrauch_2}, {ausweis.verbrauch_3}
- Zusätzliche Heizquelle {ausweis.brennstoff_2} in {ausweis.einheit_2}:
- {ausweis.verbrauch_4}, {ausweis.verbrauch_5}, {ausweis.verbrauch_6}
- {ausweis.warmwasser_enthalten ? "Warmwasser enthalten" : "Warmwasser nicht enthalten"}, {ausweis.anteil_warmwasser}
- Alternative Energieversorgung: {aufnahme.alternative_heizung ? "Heizung" : ""}, {aufnahme.alternative_warmwasser ? "Warmwasser" : ""}
- {aufnahme.alternative_lueftung ? "Lüftung" : ""} {aufnahme.alternative_kuehlung ? "Kühlung" : ""}
- Leerstand {aufnahme.leerstand}%, {aufnahme.lueftung}, Kühlung {aufnahme.kuehlung}
+ {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
+
+ Gebäudestrom der Jahre vom
+ {moment(ausweis.startdatum).format("MM.YYYY")} bis {moment(ausweis.startdatum).add("3", "years").format("MM.YYYY")} beträgt
+ {ausweis.strom_1} kWh, {ausweis.strom_2} kWh und {ausweis.strom_3} kWh.
+ Im Stromverbrauch enthalten sind
+ {ausweis.stromverbrauch_enthealt_heizung ? "Heizung, " : ""}
+ {ausweis.stromverbrauch_enthaelt_warmwasser ? "Warmwasser, " : ""}
+ {ausweis.stromverbrauch_enthaelt_lueftung ? "Lüftung, " : ""}
+ {ausweis.stromverbrauch_enthaelt_beleuchtung ? "Beleuchtung, " : ""}
+ {ausweis.stromverbrauch_enthaelt_kuehlung ? "Kühlung, " : ""}
+ {#if ausweis.stromverbrauch_sonstig !== null}
+ sowie {ausweis.stromverbrauch_enthaelt_sonstige}.
+ {/if}
-
- Angaben zur Heizunganlage
+ {/if}
+
+ Heizung (Bj {aufnahme.baujahr_heizung}) wird mit {ausweis.brennstoff_1} betrieben. Die Verbräuche vom
+ {moment(ausweis.startdatum).format("MM.YYYY")} bis {moment(ausweis.startdatum).add("3", "years").format("MM.YYYY")} betragen
+ {ausweis.verbrauch_1} {ausweis.einheit_1}, {ausweis.verbrauch_2} {ausweis.einheit_1} und {ausweis.verbrauch_3} {ausweis.einheit_1}.
+ {#if ausweis.zusaetzliche_heizquelle} -
+ Eine weitere Heizung wird mit {ausweis.brennstoff_2} betrieben mit den Verbräuchen {ausweis.verbrauch_4} {ausweis.einheit_2}, {ausweis.verbrauch_5}
+ {ausweis.einheit_2} und {ausweis.verbrauch_6} {ausweis.einheit_2}.
+ {/if}
+
+
+ {#if ausweis.anteil_warmwasser_1 !== null && ausweis.anteil_warmwasser_1 > 0}
+ {#if aufnahme.solarsystem_warmwasser}
+ Da ein Solarsystem für Warmwasser vorhanden ist,
+ wurde ein Warmwasseranteil von {ausweis.anteil_warmwasser_1 * 0.6}% berücksichtigt.
+ {:else}
+ Es wurde ein Warmwasseranteil von {ausweis.anteil_warmwasser_1}% berücksichtigt.
+ {/if}
+ {:else}
+ {#if aufnahme.solarsystem_warmwasser}
+ Da ein Solarsystem für Warmwasser vorhanden ist, wurde ein reduzierter Warmwasserzuschlag von 12 kWh/m²a angesetzt.
+ {:else}
+ Es wurde ein Warmwasserzuschlag von 20 kWh/m²a angesetzt.
+ {/if}
+ {/if}
+ {#if !ausweis.alternative_heizung && !ausweis.alternative_warmwasser && !ausweis.alternative_lueftung && !ausweis.alternative_kuehlung}
+ Alternative Energieversorgung wird nicht verwendet
+ {:else}
+ Alternative Energieversorgung wird verwendet für {ausweis.alternative_heizung ? "Heizung, " : ""}{ausweis.alternative_warmwasser ? "Warmwasser, " : ""}{ausweis.alternative_lueftung ? "Lüftung, " : ""}{ausweis.alternative_kuehlung ? "Kühlung, " : ""}
+ {/if}.
+ Der Leerstand beträgt {aufnahme.leerstand}%. Das Gebäude verfügt über eine
+ {#if aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung}
+ Fensterlüftung
+ {:else if aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung}
+ Schachtlüftung
+ {:else if aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung}
+ Lüftungsanlage mit Wärmerückgewinnung
+ {:else if aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung}
+ Lüftungsanlage ohne Wärmerückgewinnung
+ {/if}
+ {#if ausweis.kuehlung_enthalten && ausweis.kuehlung_entahlten !== null}
+ und wird thermisch gekühlt.
+ {:else if aufnahme.kuehlung === "1" && aufnahme.kuhlung !== null}
+ und wird gekühlt.
+ {:else}
+ und wird nicht gekühlt.
+ {/if}
+
+
+ Heizung:
{aufnahme.zentralheizung ? "Zentral/Etagenheizung, " : ""}
{aufnahme.einzelofen ? "Einzelofen, " : ""}
{aufnahme.waermepumpe ? "Wärmepumpe, " : ""}
@@ -456,8 +523,8 @@
{aufnahme.raum_temperatur_regler ? "Raumtemperaturregler, " : ""}
{aufnahme.zirkulation ? "Zirkulation, " : ""}
-
- Angaben zu Fenster Dachfenster und Türen
+
+ Fenster:
{aufnahme.isolier_verglasung ? "Fenster Isolierglas, " : ""}
{aufnahme.dreifach_verglasung ? "Dreifachverglasung, " : ""}
{aufnahme.doppel_verglasung ? "Doppelverglasung, " : ""}
@@ -468,8 +535,8 @@
{aufnahme.tueren_dicht ? "Türen dicht, " : ""}
{aufnahme.rolllaeden_kaesten_gedaemmt ? "Rollladenkästen gedämmt" : ""}
-
- Angaben zur Wärmedämmung
+
+ Dämmung:
{aufnahme.dachgeschoss_gedaemmt ? "Dachgeschoss gedämmt, " : ""}
{aufnahme.aussenwand_gedaemmt ? "Außenwand gedämmt, " : ""}
{aufnahme.keller_decke_gedaemmt ? "Kellerdecke gedämmt, " : ""}
@@ -479,27 +546,87 @@
{aufnahme.dachgeschoss_min_12cm_gedaemmt ? "Dachgeschoss min. 12cm gedämmt, " : ""}
{aufnahme.aussenwand_min_12cm_gedaemmt ? "Außenwand min. 12cm gedämmt" : ""}
-
-
+
+
Hiermit bestätige ich {benutzer.vorname} {benutzer.name} als Besteller folgende Angaben:
+ {#if ausweis.pruefpunkt_heizungsalter}
+
Das Heizungsalter ist jünger als 3 Jahre. Es betrifft einen Heizungstausch ohne energetische Verbesserung.
+ {/if}
+ {#if ausweis.pruefpunkt_verbrauch_niedrig}
+
Ich habe die Verbrauchsangaben kontrolliert. Der niedrige Energiekennwert ist korrekt.
+ {/if}
+ {#if ausweis.pruefpunkt_verbrauch_hoch}
+
Ich habe die Verbrauchsangaben kontrolliert. Der hohe Energiekennwert ist korrekt.
+ {/if}
+ {#if ausweis.pruefpunkt_verbrauch_null}
+
Die eingegebenen Heizverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben.
+ {/if}
+ {#if ausweis.pruefpunkt_verbrauch_abweichung}
+
Die eingegebenen Heizverbräuche sind korrekt und die Abweichung lässt sich begründen.
+ {/if}
+ {#if ausweis.pruefpunkt_wohnflaeche_einheiten}
+
Die Angabe der Wohnfläche ist korrekt und bezieht sich auf das gesamte Gebäude.
+ {/if}
+ {#if ausweis.pruefpunkt_strom_null}
+
Die eingegebenen Stromverbräuche sind korrekt. Alle 3 Felder wurden vollständig eingegeben.
+ {/if}
+ {#if ausweis.pruefpunkt_strom_abweichung}
+
Die eingegebenen Stromverbräuche sind korrekt und die Abweichung lässt sich begründen.
+ {/if}
+ {#if ausweis.pruefpunkt_heizungsanlage}
+
Das Baujahr der Heizungsanlage ist kleiner als das Baujahr des Gebäudes und begründet.
+ {/if}
+ {#if ausweis.pruefpunkt_anteil_warmwasser}
+
Ich habe den Warmwasseranteil nochmal überprüft. Dieser ist korrekt und begründet.
+ {/if}
+ {#if ausweis.pruefpunkt_wohnflaeche}
+
Ich habe die Wohnfläche nochmal überprüft und bestätige die Richtigkeit. Es handelt sich lediglich um die Wohnfläche innerhalb des Gebäudes.
+ {/if}
+
Ich habe die AGB und DSGVO im
Impressum gelesen und akzeptiert. Ich bestätige die Richtigkeit der Eingabe.
+
+
+
-
-
- Besteller: {benutzer.vorname} {benutzer.name}
-
-
- Telefon: {rechnung.telefon}
-
-
- E-Mail: {benutzer.email}
-
+
+
+ Rechnungsadresse
+ IB Cornelsen, Katendeich 5, 21035 Hamburg
+
+
+ Versandadresse
+ IB Cornelsen, Katendeich 5, 21035 Hamburg
+
+
Unterlagen
+
-
-
-
Unterlagen
+
+
+
+ {#if Object.keys($notifications).length > 0}
+ {Object.keys($notifications).length}
+ {/if}
+
+
+
+
diff --git a/src/components/Dashboard/DashboardSidebar.svelte b/src/components/Dashboard/DashboardSidebar.svelte
index d866e270..3e9577ff 100644
--- a/src/components/Dashboard/DashboardSidebar.svelte
+++ b/src/components/Dashboard/DashboardSidebar.svelte
@@ -51,21 +51,109 @@
Besteller
-
-
- Mitwirkende
-
-
-
-
-
-
-
- {#if Object.keys($notifications).length > 0}
- {Object.keys($notifications).length}
- {/if}
-
-
-
-
-
+
-
-
-
-
+
{#if aufnahme.verbrauchsausweise_wohnen.length > 0}
{#each [aufnahme.verbrauchsausweise_wohnen.sort((a, b) => new Date(b.updated_at || 0).getTime() - new Date(a.updated_at || 0).getTime())[0]] as ausweis}
From fd390238d90ba1bb0d0daaa3aaff394eeaebc148 Mon Sep 17 00:00:00 2001
From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com>
Date: Mon, 21 Apr 2025 16:30:19 +0200
Subject: [PATCH 082/105] =?UTF-8?q?Ausweis=20Box=20Design=20=C3=84nderung?=
=?UTF-8?q?=20Text?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/astro-typesafe-api-caller.ts | 45 +++++++++----------
.../Dashboard/DashboardAusweis.svelte | 6 ++-
2 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index 7c5ffb36..38dbbbd9 100644
--- a/src/astro-typesafe-api-caller.ts
+++ b/src/astro-typesafe-api-caller.ts
@@ -1,32 +1,31 @@
import { createCallerFactory } from "astro-typesafe-api/server";
export const createCaller = createCallerFactory({
+ "bild": await import("../src/pages/api/bild.ts"),
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
"unterlage": await import("../src/pages/api/unterlage.ts"),
- "bild": await import("../src/pages/api/bild.ts"),
- "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
- "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
- "ticket": await import("../src/pages/api/ticket/index.ts"),
- "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"),
- "user/self": await import("../src/pages/api/user/self.ts"),
- "user": await import("../src/pages/api/user/index.ts"),
- "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"),
- "geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"),
- "ausweise": await import("../src/pages/api/ausweise/index.ts"),
- "rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
- "rechnung": await import("../src/pages/api/rechnung/index.ts"),
- "rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"),
- "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
- "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
- "aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
- "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
- "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
- "admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
- "admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
- "admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"),
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
+ "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
+ "admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
+ "admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
+ "admin/post-ausstellen": await import("../src/pages/api/admin/post-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"),
+ "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"),
+ "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"),
@@ -36,13 +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"),
- "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.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"),
- "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"),
- "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"),
"objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"),
})
\ No newline at end of file
diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte
index a4c87b8a..cb696fa4 100644
--- a/src/components/Dashboard/DashboardAusweis.svelte
+++ b/src/components/Dashboard/DashboardAusweis.svelte
@@ -408,15 +408,17 @@
{/if}
+
{#if ausweis.bestellt}
{#if ausweis.ausweistyp === Enums.AusweisTyp.Beratung || ausweis.ausweistyp === Enums.AusweisTyp.BeratungXL}
Sie haben Hilfe zu diesem Ausweis angefordert. Sie werden innerhalb der nächsten 48 Stunden über die hinterlegte Telefonnummer vom IB Cornelsen kontaktiert.
{:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline || ausweis.ausweistyp === Enums.AusweisTyp.OfflineXL}
Sie haben die offline Variant zu diesem Ausweis angefordert. Bitte übermitteln Sie uns die letzten drei Jahre der Energieabrechnungen Ihres Energieversorgers.
{:else if !ausweis.ausgestellt}
-
Der Ausweis wurde von Ihnen freigegeben und befindet sich in Prüfung durch IB Cornelsen
+
Der Ausweis wurde von Ihnen freigegeben und befindet sich in Prüfung durch IB Cornelsen
{/if}
- {/if}
+ {/if}
+
From 5360ec3d24419c96a896b3350cf18bba5e1ec906 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 21 Apr 2025 15:08:43 -0300
Subject: [PATCH 083/105] Ausweis als Admin bearbeiten
---
src/pages/api/bedarfsausweis-gewerbe/[id].ts | 7 ++-----
src/pages/api/bedarfsausweis-wohnen/[id].ts | 9 +++------
src/pages/api/geg-nachweis-gewerbe/[id].ts | 9 +++------
src/pages/api/geg-nachweis-wohnen/[id].ts | 9 +++------
src/pages/api/verbrauchsausweis-gewerbe/[id].ts | 7 ++-----
src/pages/api/verbrauchsausweis-wohnen/[id].ts | 7 ++-----
6 files changed, 15 insertions(+), 33 deletions(-)
diff --git a/src/pages/api/bedarfsausweis-gewerbe/[id].ts b/src/pages/api/bedarfsausweis-gewerbe/[id].ts
index bab820d7..7c6d879a 100644
--- a/src/pages/api/bedarfsausweis-gewerbe/[id].ts
+++ b/src/pages/api/bedarfsausweis-gewerbe/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { BedarfsausweisGewerbeSchema } from "src/generated/zod/bedarfsausweisgewerbe.js";
import { z } from "zod";
@@ -31,13 +31,10 @@ export const PATCH = defineApiRoute({
const objekt = await prisma.bedarfsausweisGewerbe.findUnique({
where: {
id: ctx.params.id,
- benutzer: {
- id: user.id
- }
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/bedarfsausweis-wohnen/[id].ts b/src/pages/api/bedarfsausweis-wohnen/[id].ts
index e4b1d970..346380ab 100644
--- a/src/pages/api/bedarfsausweis-wohnen/[id].ts
+++ b/src/pages/api/bedarfsausweis-wohnen/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { BedarfsausweisWohnenSchema } from "src/generated/zod/bedarfsausweiswohnen.js";
import { z } from "zod";
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.bedarfsausweisWohnen.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/geg-nachweis-gewerbe/[id].ts b/src/pages/api/geg-nachweis-gewerbe/[id].ts
index 97904b9b..92290c42 100644
--- a/src/pages/api/geg-nachweis-gewerbe/[id].ts
+++ b/src/pages/api/geg-nachweis-gewerbe/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { GEGNachweisGewerbeSchema } from "src/generated/zod/gegnachweisgewerbe.js";
import { z } from "zod";
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.gEGNachweisGewerbe.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/geg-nachweis-wohnen/[id].ts b/src/pages/api/geg-nachweis-wohnen/[id].ts
index 5a7f2053..64a188e2 100644
--- a/src/pages/api/geg-nachweis-wohnen/[id].ts
+++ b/src/pages/api/geg-nachweis-wohnen/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { GEGNachweisWohnenSchema } from "src/generated/zod/gegnachweiswohnen.js";
import { z } from "zod";
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.gEGNachweisWohnen.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/verbrauchsausweis-gewerbe/[id].ts b/src/pages/api/verbrauchsausweis-gewerbe/[id].ts
index ca3fdd54..0469cb94 100644
--- a/src/pages/api/verbrauchsausweis-gewerbe/[id].ts
+++ b/src/pages/api/verbrauchsausweis-gewerbe/[id].ts
@@ -27,14 +27,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.verbrauchsausweisGewerbe.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/verbrauchsausweis-wohnen/[id].ts b/src/pages/api/verbrauchsausweis-wohnen/[id].ts
index 98fac976..116cf4b8 100644
--- a/src/pages/api/verbrauchsausweis-wohnen/[id].ts
+++ b/src/pages/api/verbrauchsausweis-wohnen/[id].ts
@@ -28,14 +28,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.verbrauchsausweisWohnen.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
From 28f8933f72b907adf4c618f5640b05a4d742cd96 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 21 Apr 2025 15:08:43 -0300
Subject: [PATCH 084/105] Ausweis als Admin bearbeiten
---
src/astro-typesafe-api-caller.ts | 10 +++++-----
src/pages/api/aufnahme/[id]/index.ts | 5 ++---
src/pages/api/bedarfsausweis-gewerbe/[id].ts | 7 ++-----
src/pages/api/bedarfsausweis-wohnen/[id].ts | 9 +++------
src/pages/api/geg-nachweis-gewerbe/[id].ts | 9 +++------
src/pages/api/geg-nachweis-wohnen/[id].ts | 9 +++------
src/pages/api/objekt/[id]/index.ts | 7 ++-----
src/pages/api/verbrauchsausweis-gewerbe/[id].ts | 7 ++-----
src/pages/api/verbrauchsausweis-wohnen/[id].ts | 7 ++-----
9 files changed, 24 insertions(+), 46 deletions(-)
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index dbc1dfbf..9d4a1e70 100644
--- a/src/astro-typesafe-api-caller.ts
+++ b/src/astro-typesafe-api-caller.ts
@@ -12,12 +12,12 @@ export const createCaller = createCallerFactory({
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
"ausweise": await import("../src/pages/api/ausweise/index.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"),
"bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
+ "aufnahme": await import("../src/pages/api/aufnahme/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"),
@@ -26,14 +26,14 @@ export const createCaller = createCallerFactory({
"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"),
"verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"),
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
- "ticket": await import("../src/pages/api/ticket/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"),
"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"),
diff --git a/src/pages/api/aufnahme/[id]/index.ts b/src/pages/api/aufnahme/[id]/index.ts
index bd301ec7..49f72673 100644
--- a/src/pages/api/aufnahme/[id]/index.ts
+++ b/src/pages/api/aufnahme/[id]/index.ts
@@ -20,12 +20,11 @@ export const PATCH = defineApiRoute({
const aufnahme = await prisma.aufnahme.findUnique({
where: {
- id,
- benutzer_id: user.id
+ id
}
});
- if (!aufnahme) {
+ if (!aufnahme || (aufnahme.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Aufnahme mit dieser UID existiert nicht oder gehört nicht dem aktuellen Benutzer."
diff --git a/src/pages/api/bedarfsausweis-gewerbe/[id].ts b/src/pages/api/bedarfsausweis-gewerbe/[id].ts
index bab820d7..7c6d879a 100644
--- a/src/pages/api/bedarfsausweis-gewerbe/[id].ts
+++ b/src/pages/api/bedarfsausweis-gewerbe/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { BedarfsausweisGewerbeSchema } from "src/generated/zod/bedarfsausweisgewerbe.js";
import { z } from "zod";
@@ -31,13 +31,10 @@ export const PATCH = defineApiRoute({
const objekt = await prisma.bedarfsausweisGewerbe.findUnique({
where: {
id: ctx.params.id,
- benutzer: {
- id: user.id
- }
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/bedarfsausweis-wohnen/[id].ts b/src/pages/api/bedarfsausweis-wohnen/[id].ts
index e4b1d970..346380ab 100644
--- a/src/pages/api/bedarfsausweis-wohnen/[id].ts
+++ b/src/pages/api/bedarfsausweis-wohnen/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { BedarfsausweisWohnenSchema } from "src/generated/zod/bedarfsausweiswohnen.js";
import { z } from "zod";
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.bedarfsausweisWohnen.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/geg-nachweis-gewerbe/[id].ts b/src/pages/api/geg-nachweis-gewerbe/[id].ts
index 97904b9b..92290c42 100644
--- a/src/pages/api/geg-nachweis-gewerbe/[id].ts
+++ b/src/pages/api/geg-nachweis-gewerbe/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { GEGNachweisGewerbeSchema } from "src/generated/zod/gegnachweisgewerbe.js";
import { z } from "zod";
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.gEGNachweisGewerbe.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/geg-nachweis-wohnen/[id].ts b/src/pages/api/geg-nachweis-wohnen/[id].ts
index 5a7f2053..64a188e2 100644
--- a/src/pages/api/geg-nachweis-wohnen/[id].ts
+++ b/src/pages/api/geg-nachweis-wohnen/[id].ts
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import { generatePrefixedId } from "#lib/db.js";
import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
-import { prisma } from "#lib/server/prisma.js";
+import { Enums, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { GEGNachweisWohnenSchema } from "src/generated/zod/gegnachweiswohnen.js";
import { z } from "zod";
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.gEGNachweisWohnen.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/objekt/[id]/index.ts b/src/pages/api/objekt/[id]/index.ts
index 0e6ea00a..6013147c 100644
--- a/src/pages/api/objekt/[id]/index.ts
+++ b/src/pages/api/objekt/[id]/index.ts
@@ -20,14 +20,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.objekt.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Objekt konnte nicht gefunden werden."
diff --git a/src/pages/api/verbrauchsausweis-gewerbe/[id].ts b/src/pages/api/verbrauchsausweis-gewerbe/[id].ts
index ca3fdd54..0469cb94 100644
--- a/src/pages/api/verbrauchsausweis-gewerbe/[id].ts
+++ b/src/pages/api/verbrauchsausweis-gewerbe/[id].ts
@@ -27,14 +27,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.verbrauchsausweisGewerbe.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
diff --git a/src/pages/api/verbrauchsausweis-wohnen/[id].ts b/src/pages/api/verbrauchsausweis-wohnen/[id].ts
index 98fac976..116cf4b8 100644
--- a/src/pages/api/verbrauchsausweis-wohnen/[id].ts
+++ b/src/pages/api/verbrauchsausweis-wohnen/[id].ts
@@ -28,14 +28,11 @@ export const PATCH = defineApiRoute({
async fetch(input, ctx, user) {
const objekt = await prisma.verbrauchsausweisWohnen.findUnique({
where: {
- id: ctx.params.id,
- benutzer: {
- id: user.id
- }
+ id: ctx.params.id
}
})
- if (!objekt) {
+ if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
throw new APIError({
code: "NOT_FOUND",
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
From 1f86a063ef8e345429c24b6a19c6b5fec886f15e Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 21 Apr 2025 15:23:59 -0300
Subject: [PATCH 085/105] Ausweis erstellen aus Dashboard
---
.../bedarfsausweis-wohngebaeude/index.astro | 2 +-
.../verbrauchsausweis-gewerbe/index.astro | 2 +-
.../verbrauchsausweis-wohngebaeude/index.astro | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro b/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro
index 77528d1e..6bae0ec2 100644
--- a/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro
+++ b/src/pages/energieausweis-erstellen/bedarfsausweis-wohngebaeude/index.astro
@@ -61,7 +61,7 @@ if (id) {
);
}
- aufnahme = await getAufnahme(ausweis.aufnahme_id) as Aufnahme
+ aufnahme = await getAufnahme(aufnahme_id) as Aufnahme
if (!aufnahme) {
// Die Aufnahme existiert wohl nicht.
diff --git a/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro b/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro
index 744699cc..80ff48c2 100644
--- a/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro
+++ b/src/pages/energieausweis-erstellen/verbrauchsausweis-gewerbe/index.astro
@@ -61,7 +61,7 @@ if (id) {
);
}
- aufnahme = await getAufnahme(ausweis.aufnahme_id) as Aufnahme
+ aufnahme = await getAufnahme(aufnahme_id) as Aufnahme
if (!aufnahme) {
// Die Aufnahme existiert wohl nicht.
diff --git a/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro b/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro
index 3923b2b0..89401e7c 100644
--- a/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro
+++ b/src/pages/energieausweis-erstellen/verbrauchsausweis-wohngebaeude/index.astro
@@ -60,7 +60,7 @@ if (id) {
);
}
- aufnahme = await getAufnahme(ausweis.aufnahme_id) as Aufnahme
+ aufnahme = await getAufnahme(aufnahme_id) as Aufnahme
if (!aufnahme) {
// Die Aufnahme existiert wohl nicht.
From 55305f31b70ba1dd7900b2e8edd3d3c3e369c9c9 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 21 Apr 2025 15:35:29 -0300
Subject: [PATCH 086/105] =?UTF-8?q?Unn=C3=B6tige=20Dateien=20entfernt?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/lib/AusweisData.ts | 42 ------
src/lib/validators/index.ts | 255 ------------------------------------
2 files changed, 297 deletions(-)
delete mode 100644 src/lib/AusweisData.ts
delete mode 100644 src/lib/validators/index.ts
diff --git a/src/lib/AusweisData.ts b/src/lib/AusweisData.ts
deleted file mode 100644
index 4c2255d0..00000000
--- a/src/lib/AusweisData.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
-import { z } from "zod";
-import { verbrauchsausweisWohnenPDFValidator } from "./validators/verbrauchsausweis-wohnen-pdf-validator";
-
-export function convertAusweisData(
- inputs: Partial
-): Record {
- // Wir wollen alle Werte zu einem Flachen Objekt umwandeln, sodass wir dass später benutzen können.
- // Dazu kommen noch einige wichtige Eigenschaften die man im PDF brauchen könnte.
- let pdfInputs: z.infer = {
- ...inputs,
- pdf: {
- "brennstoff": [inputs.aufnahme?.brennstoff_1, inputs.aufnahme?.brennstoff_2].filter(x => x).join(", ")
- }
- }
- let result = recursiveFlatten(inputs, "");
- // Außerdem müssen wir alle Werte zu strings umwandeln.
- for (const key in result) {
- result[key] = String(result[key]);
- }
-
- return result;
-}
-
-
-function recursiveFlatten(obj: any, parentKey = ""): Record {
- const result: Record = {};
-
- for (const key in obj) {
- const value = obj[key];
-
- const newKey = parentKey ? `${parentKey}.${key}` : key;
-
- if (typeof value === "object") {
- Object.assign(result, recursiveFlatten(value, newKey));
- } else {
- result[newKey] = value;
- }
- }
-
- return result;
-}
\ No newline at end of file
diff --git a/src/lib/validators/index.ts b/src/lib/validators/index.ts
deleted file mode 100644
index 98c3d862..00000000
--- a/src/lib/validators/index.ts
+++ /dev/null
@@ -1,255 +0,0 @@
-import {
- VerbrauchsausweisWohnenSchema,
- AufnahmeSchema,
- ObjektSchema,
- BildSchema,
- RechnungSchema,
- EventSchema,
- BenutzerSchema,
- GebaeudePlaeneSchema,
- AnteilshaberSchema,
- BedarfsausweisWohnenSchema,
- VerbrauchsausweisGewerbeSchema
-} from "#lib/client/prisma";
-import { z } from "zod";
-
-export const RechnungValidator = RechnungSchema.omit({
- aufnahme_id: true,
- id: true,
- benutzer_id: true
-})
-
-export const GebaeudePlaeneValidator = GebaeudePlaeneSchema.omit({
- id: true,
- objekt_id: true
-})
-
-export const AnteilshaberValidator = AnteilshaberSchema.omit({
- benutzer_id: true,
- id: true,
- objekt_id: true
-})
-
-export const BildValidator = BildSchema.omit({
- id: true,
- objekt_id: true
-})
-
-export const AufnahmeValidator = AufnahmeSchema.omit({
- id: true,
- benutzer_id: true,
- objekt_id: true,
-}).merge(
- z.object({
- verbrauchsausweis_wohnen: VerbrauchsausweisWohnenSchema.omit({
- id: true,
- benutzer_id: true,
- aufnahme_id: true,
- }).nullable(),
- bedarfsausweis_wohnen: VerbrauchsausweisWohnenSchema.omit({
- id: true,
- benutzer_id: true,
- aufnahme_id: true,
- }).nullable(),
- verbrauchsausweis_gewerbe: VerbrauchsausweisWohnenSchema.omit({
- id: true,
- benutzer_id: true,
- aufnahme_id: true,
- }).nullable(),
- rechnungen: z.array(
- RechnungValidator
- ),
- events: z.array(
- EventSchema.omit({
- benutzer_id: true,
- id: true,
- }).merge(
- z.object({
- benutzer: BenutzerSchema.pick({ uid: true }),
- })
- )
- ),
- })
-);
-
-export const ObjektValidator = ObjektSchema.omit({
- benutzer_id: true,
- id: true
-}).merge(z.object({
- aufnahme: z.array(
- AufnahmeValidator
- ).nullable().optional(),
- bilder: z.array(
- BildValidator
- ).nullable().optional(),
- gebaeude_plaene: z.array(
- GebaeudePlaeneValidator
- ).nullable().optional(),
- Anteilshaber: z.array(
- AnteilshaberValidator
- ).nullable().optional()
-}))
-
-/**
- * Runtime überprüfung für den Verbrauchsausweis Wohnen
- * Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
- */
-export const VerbrauchsausweisWohnenValidator =
- VerbrauchsausweisWohnenSchema.merge(
- z.object({
- benutzer: BenutzerSchema.omit({
- id: true,
- passwort: true
- }),
- aufnahme: AufnahmeSchema.omit({
- benutzer_id: true,
- objekt_id: true,
- id: true,
- }).merge(
- z.object({
- objekt: ObjektSchema.omit({
- benutzer_id: true,
- id: true,
- }).merge(
- z.object({
- bilder: z.array(
- BildSchema.omit({
- id: true,
- objekt_id: true,
- })
- )
- })
- ),
- rechnungen: RechnungSchema.omit({
- aufnahme_id: true,
- benutzer_id: true,
- id: true,
- }).array(),
- events: z.array(
- EventSchema.omit({
- aufnahme_id: true,
- id: true,
- benutzer_id: true
- }).merge(z.object({
- benutzer: BenutzerSchema.pick({
- uid: true
- })
- }))
- )
- })
- )
- })
- ).omit({
- benutzer_id: true,
- id: true,
- aufnahme_id: true,
- });
-
- export const VerbrauchsausweisWohnenBerechnungValidator2024 = z.object({
- endEnergieVerbrauchGesamt: z.number(),
- primaerEnergieVerbrauchGesamt: z.number(),
- energieEffizienzKlasse: z.string(),
- co2EmissionenGesamt: z.number()
- })
-
- /**
- * Runtime überprüfung für den Verbrauchsausweis Wohnen
- * Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
- */
-export const BedarfsausweisWohnenValidator =
-BedarfsausweisWohnenSchema.merge(
- z.object({
- aufnahme: AufnahmeSchema.omit({
- benutzer_id: true,
- objekt_id: true,
- id: true,
- }).merge(
- z.object({
- objekt: ObjektSchema.omit({
- benutzer_id: true,
- id: true,
- }).merge(
- z.object({
- bilder: z.array(
- BildSchema.omit({
- id: true,
- objekt_id: true,
- })
- )
- })
- ),
- rechnungen: RechnungSchema.omit({
- aufnahme_id: true,
- benutzer_id: true,
- id: true,
- }).array(),
- events: z.array(
- EventSchema.omit({
- aufnahme_id: true,
- id: true,
- benutzer_id: true
- }).merge(z.object({
- benutzer: BenutzerSchema.pick({
- uid: true
- })
- }))
- )
- })
- )
- })
-).omit({
- benutzer_id: true,
- id: true,
- aufnahme_id: true,
-});
-
-/**
- * Runtime überprüfung für den Verbrauchsausweis Wohnen
- * Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
- */
-export const VerbrauchsausweisGewerbeValidator =
- VerbrauchsausweisGewerbeSchema.merge(
- z.object({
- aufnahme: AufnahmeSchema.omit({
- benutzer_id: true,
- objekt_id: true,
- id: true,
- }).merge(
- z.object({
- objekt: ObjektSchema.omit({
- benutzer_id: true,
- id: true,
- }).merge(
- z.object({
- bilder: z.array(
- BildSchema.omit({
- id: true,
- objekt_id: true,
- })
- )
- })
- ),
- rechnungen: RechnungSchema.omit({
- aufnahme_id: true,
- benutzer_id: true,
- id: true,
- }).array(),
- events: z.array(
- EventSchema.omit({
- aufnahme_id: true,
- id: true,
- benutzer_id: true
- }).merge(z.object({
- benutzer: BenutzerSchema.pick({
- uid: true
- })
- }))
- )
- })
- )
- })
- ).omit({
- benutzer_id: true,
- id: true,
- aufnahme_id: true,
- });
\ No newline at end of file
From 05b31a4862623c873fbaba5c75766c888e47feb7 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 21 Apr 2025 16:15:47 -0300
Subject: [PATCH 087/105] Dashboard
---
src/astro-typesafe-api-caller.ts | 16 ++--
.../Dashboard/DashboardAufnahmeModule.svelte | 6 +-
src/pages/dashboard/aufnahme/[id].astro | 18 ++++
src/pages/dashboard/aufnahme/index.astro | 80 -----------------
src/pages/dashboard/objekte/[page].astro | 86 +++++++------------
5 files changed, 58 insertions(+), 148 deletions(-)
delete mode 100644 src/pages/dashboard/aufnahme/index.astro
diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts
index 38dbbbd9..f9ac79c1 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/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
"admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
@@ -12,15 +13,14 @@ export const createCaller = createCallerFactory({
"admin/post-ausstellen": await import("../src/pages/api/admin/post-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"),
+ "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
+ "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/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"),
+ "ausweise": await import("../src/pages/api/ausweise/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"),
@@ -31,12 +31,12 @@ export const createCaller = createCallerFactory({
"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"),
- "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"),
+ "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
+ "user": await import("../src/pages/api/user/index.ts"),
+ "user/self": await import("../src/pages/api/user/self.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/modules/Dashboard/DashboardAufnahmeModule.svelte b/src/modules/Dashboard/DashboardAufnahmeModule.svelte
index 5aba005a..2b76f0ee 100644
--- a/src/modules/Dashboard/DashboardAufnahmeModule.svelte
+++ b/src/modules/Dashboard/DashboardAufnahmeModule.svelte
@@ -1,9 +1,7 @@
\ No newline at end of file
From e2c14dace9b7246b3ab9ecaa6fcf0dbc6690dc63 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Mon, 21 Apr 2025 21:40:17 -0300
Subject: [PATCH 098/105] Suche
---
.../Ausweis/ButtonWeiterHilfe.svelte | 2 +-
.../Dashboard/DashboardSidebar.svelte | 12 ++
.../Dashboard/DashboardAufnahmeModule.svelte | 4 +-
src/modules/Dashboard/DashboardModule.svelte | 2 +-
src/modules/KundendatenModule.svelte | 4 +-
src/pages/dashboard/index.astro | 2 +-
src/pages/dashboard/objekte/[id].astro | 83 +++++++++++
src/pages/dashboard/objekte/[page].astro | 134 ------------------
src/pages/dashboard/objekte/index.astro | 57 +++++++-
9 files changed, 156 insertions(+), 144 deletions(-)
create mode 100644 src/pages/dashboard/objekte/[id].astro
delete mode 100644 src/pages/dashboard/objekte/[page].astro
diff --git a/src/components/Ausweis/ButtonWeiterHilfe.svelte b/src/components/Ausweis/ButtonWeiterHilfe.svelte
index a4aa436e..5216376b 100644
--- a/src/components/Ausweis/ButtonWeiterHilfe.svelte
+++ b/src/components/Ausweis/ButtonWeiterHilfe.svelte
@@ -135,7 +135,7 @@
);
blockLocalStorageSync = true;
localStorage.clear()
- window.location.href = `/dashboard/objekte?id=${ausweis.id}`
+ window.location.href = `/dashboard/objekte/${ausweis.id}`
}
}
diff --git a/src/components/Dashboard/DashboardSidebar.svelte b/src/components/Dashboard/DashboardSidebar.svelte
index 78ee0e7c..ff7269f9 100644
--- a/src/components/Dashboard/DashboardSidebar.svelte
+++ b/src/components/Dashboard/DashboardSidebar.svelte
@@ -5,6 +5,7 @@
Gear,
LockClosed,
CaretDown,
+ MagnifyingGlass,
} from "radix-svelte-icons";
import NotificationProvider from "#components/NotificationProvider/NotificationProvider.svelte";
import DashboardNotification from "./DashboardNotification.svelte";
@@ -17,6 +18,8 @@
export let lightTheme: boolean;
export let benutzer: BenutzerClient;
+
+ let id: string;
+
+
Ausweise
+
+
+
+
+
diff --git a/src/modules/Dashboard/DashboardAufnahmeModule.svelte b/src/modules/Dashboard/DashboardAufnahmeModule.svelte
index 08b0f09f..916a6e42 100644
--- a/src/modules/Dashboard/DashboardAufnahmeModule.svelte
+++ b/src/modules/Dashboard/DashboardAufnahmeModule.svelte
@@ -81,7 +81,7 @@
{#if page > 1}
-
+
{:else}
@@ -89,7 +89,7 @@
{/if}
Ausweis {page} / {totalPageCount}
{#if totalPageCount > page}
-
+
{:else}
diff --git a/src/modules/Dashboard/DashboardModule.svelte b/src/modules/Dashboard/DashboardModule.svelte
index 045493d2..36ecfe3b 100644
--- a/src/modules/Dashboard/DashboardModule.svelte
+++ b/src/modules/Dashboard/DashboardModule.svelte
@@ -112,7 +112,7 @@
{/each}
-
+
diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte
index e676aa71..d283d5c3 100644
--- a/src/modules/KundendatenModule.svelte
+++ b/src/modules/KundendatenModule.svelte
@@ -265,7 +265,7 @@
);
localStorage.clear();
- window.location.href = `/dashboard/objekte?id=${ausweis.id}`
+ window.location.href = `/dashboard/objekte/${ausweis.id}`
}
}
@@ -1103,7 +1103,7 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8"
{#if user.rolle === Enums.BenutzerRolle.ADMIN}
{/if}
diff --git a/src/pages/dashboard/index.astro b/src/pages/dashboard/index.astro
index 92ab6037..eecb06df 100644
--- a/src/pages/dashboard/index.astro
+++ b/src/pages/dashboard/index.astro
@@ -1,5 +1,5 @@
---
-return Astro.redirect("/dashboard/objekte/1", 301);
+return Astro.redirect("/dashboard/objekte?p=1", 301);
---
diff --git a/src/pages/dashboard/objekte/[id].astro b/src/pages/dashboard/objekte/[id].astro
new file mode 100644
index 00000000..9f088af2
--- /dev/null
+++ b/src/pages/dashboard/objekte/[id].astro
@@ -0,0 +1,83 @@
+---
+import UserLayout from "#layouts/DashboardLayout.astro";
+import { Enums, prisma } from "#lib/server/prisma";
+import { getCurrentUser } from "#lib/server/user";
+import DashboardAufnahmeModule from "#modules/Dashboard/DashboardAufnahmeModule.svelte";
+import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
+
+const id = Astro.params.id as string;
+const page = Number(Astro.url.searchParams.get("p"));
+const user = await getCurrentUser(Astro);
+
+if (!user) {
+ return Astro.redirect("/auth/login");
+}
+
+const totalPageCount = await prisma.aufnahme.count({
+ where:
+ user.rolle === Enums.BenutzerRolle.USER
+ ? {
+ benutzer: {
+ id: user.id,
+ },
+ }
+ : {},
+});
+
+let ausweis;
+// Wir fragen den neuesten Ausweis ab
+// Falls der Nutzer ein Admin ist dann kommt der ganz neueste ansonsten der neueste des eingeloggten Benutzers.
+if (user.rolle === Enums.BenutzerRolle.USER) {
+ const adapter = getPrismaAusweisAdapter(id);
+ ausweis = await adapter?.findUnique({
+ where: {
+ id,
+ benutzer_id: user.id,
+ },
+ include: {
+ rechnung: true,
+ aufnahme: {
+ include: {
+ bilder: true,
+ unterlagen: true,
+ objekt: true,
+ },
+ },
+ },
+ });
+} else {
+ const adapter = getPrismaAusweisAdapter(id);
+ ausweis = await adapter?.findUnique({
+ where: {
+ id,
+ },
+ include: {
+ rechnung: true,
+ aufnahme: {
+ include: {
+ bilder: true,
+ unterlagen: true,
+ objekt: true,
+ },
+ },
+ },
+ });
+}
+
+if (!ausweis) {
+ return Astro.redirect("/dashboard/objekte?p=1")
+}
+
+---
+
+
+
+
+
+
diff --git a/src/pages/dashboard/objekte/[page].astro b/src/pages/dashboard/objekte/[page].astro
deleted file mode 100644
index a376ab08..00000000
--- a/src/pages/dashboard/objekte/[page].astro
+++ /dev/null
@@ -1,134 +0,0 @@
----
-import UserLayout from "#layouts/DashboardLayout.astro";
-import { Enums, prisma } from "#lib/server/prisma";
-import { getCurrentUser } from "#lib/server/user";
-import DashboardAufnahmeModule from "#modules/Dashboard/DashboardAufnahmeModule.svelte";
-import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
-
-const params = Astro.params;
-
-const page = Number(params.page);
-
-const id = Astro.url.searchParams.get("id") || undefined;
-
-const user = await getCurrentUser(Astro);
-
-if (!user) {
- return Astro.redirect("/auth/login");
-}
-
-const totalPageCount = await prisma.aufnahme.count({
- where:
- user.rolle === Enums.BenutzerRolle.USER
- ? {
- benutzer: {
- id: user.id,
- },
- }
- : {},
-});
-
-if (page < 1 || page > totalPageCount) {
- return Astro.redirect("/dashboard/objekte/1");
-}
-
-let ausweis,
- result: { id: string; updated_at: Date }[] = [];
-// Wir fragen den neuesten Ausweis ab
-// Falls der Nutzer ein Admin ist dann kommt der ganz neueste ansonsten der neueste des eingeloggten Benutzers.
-if (user.rolle === Enums.BenutzerRolle.USER) {
- if (id) {
- const adapter = getPrismaAusweisAdapter(id);
- ausweis = await adapter?.findUnique({
- where: {
- id,
- benutzer_id: user.id,
- },
- include: {
- rechnung: true,
- aufnahme: {
- include: {
- bilder: true,
- unterlagen: true,
- objekt: true,
- },
- },
- },
- });
- } else {
- result =
- await prisma.$queryRaw`SELECT id, updated_at FROM "VerbrauchsausweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
- SELECT id, updated_at FROM "VerbrauchsausweisGewerbe" WHERE benutzer_id = ${user.id} UNION ALL
- SELECT id, updated_at FROM "BedarfsausweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
- SELECT id, updated_at FROM "BedarfsausweisGewerbe" WHERE benutzer_id = ${user.id} UNION ALL
- SELECT id, updated_at FROM "GEGNachweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
- SELECT id, updated_at FROM "GEGNachweisGewerbe" WHERE benutzer_id = ${user.id}
- ORDER BY updated_at DESC LIMIT 1 OFFSET ${page - 1}`;
- }
-} else {
- if (id) {
- const adapter = getPrismaAusweisAdapter(id);
- ausweis = await adapter?.findUnique({
- where: {
- id,
- },
- include: {
- rechnung: true,
- aufnahme: {
- include: {
- bilder: true,
- unterlagen: true,
- objekt: true,
- },
- },
- },
- });
- } else {
- 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
- SELECT id, updated_at FROM "BedarfsausweisGewerbe" UNION ALL
- SELECT id, updated_at FROM "GEGNachweisWohnen" UNION ALL
- SELECT id, updated_at FROM "GEGNachweisGewerbe"
- ORDER BY updated_at DESC LIMIT 1 OFFSET ${page - 1}`;
- }
-}
-
-if (result.length > 0) {
- const adapter = getPrismaAusweisAdapter(result[0].id);
-
- ausweis = await adapter?.findUnique({
- where: {
- id: result[0].id,
- },
- include: {
- rechnung: true,
- aufnahme: {
- include: {
- bilder: true,
- unterlagen: true,
- objekt: true,
- },
- },
- },
- });
-}
-
-if (!ausweis) {
- return Astro.redirect("/dashboard/objekte/1")
-}
-
----
-
-
-
-
-
-
diff --git a/src/pages/dashboard/objekte/index.astro b/src/pages/dashboard/objekte/index.astro
index 36cd4161..872b7640 100644
--- a/src/pages/dashboard/objekte/index.astro
+++ b/src/pages/dashboard/objekte/index.astro
@@ -1,5 +1,56 @@
---
-return Astro.redirect("/dashboard/objekte/1");
----
+import { Enums, prisma } from "#lib/server/prisma";
+import { getCurrentUser } from "#lib/server/user";
-
\ No newline at end of file
+const page = Number(Astro.url.searchParams.get("p"));
+
+const user = await getCurrentUser(Astro);
+
+if (!user) {
+ return Astro.redirect("/auth/login");
+}
+
+const totalPageCount = await prisma.aufnahme.count({
+ where:
+ user.rolle === Enums.BenutzerRolle.USER
+ ? {
+ benutzer: {
+ id: user.id,
+ },
+ }
+ : {},
+});
+
+if (page < 1 || page > totalPageCount) {
+ return Astro.redirect("/dashboard/objekte?p=1");
+}
+
+let result: { id: string; updated_at: Date }[] = [];
+// Wir fragen den neuesten Ausweis ab
+// Falls der Nutzer ein Admin ist dann kommt der ganz neueste ansonsten der neueste des eingeloggten Benutzers.
+if (user.rolle === Enums.BenutzerRolle.USER) {
+ result =
+ await prisma.$queryRaw`SELECT id, updated_at FROM "VerbrauchsausweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
+ SELECT id, updated_at FROM "VerbrauchsausweisGewerbe" WHERE benutzer_id = ${user.id} UNION ALL
+ SELECT id, updated_at FROM "BedarfsausweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
+ SELECT id, updated_at FROM "BedarfsausweisGewerbe" WHERE benutzer_id = ${user.id} UNION ALL
+ SELECT id, updated_at FROM "GEGNachweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
+ SELECT id, updated_at FROM "GEGNachweisGewerbe" WHERE benutzer_id = ${user.id}
+ ORDER BY updated_at DESC LIMIT 1 OFFSET ${page - 1}`;
+} else {
+ 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
+ SELECT id, updated_at FROM "BedarfsausweisGewerbe" UNION ALL
+ SELECT id, updated_at FROM "GEGNachweisWohnen" UNION ALL
+ SELECT id, updated_at FROM "GEGNachweisGewerbe"
+ ORDER BY updated_at DESC LIMIT 1 OFFSET ${page - 1}`;
+}
+
+if (!result) {
+ return Astro.redirect("/dashboard/objekte?p=1");
+}
+
+return Astro.redirect(`/dashboard/objekte/${result[0].id}?p=${page}`)
+---
\ No newline at end of file
From 414727fdc1a23c341c94ce8edc7edf0d13a3cd74 Mon Sep 17 00:00:00 2001
From: Moritz Utcke
Date: Tue, 22 Apr 2025 00:09:08 -0300
Subject: [PATCH 099/105] Unterlagen und Bilder
---
src/components/Dashboard/DashboardAusweis.svelte | 14 ++++++++------
.../Dashboard/DashboardAufnahmeModule.svelte | 11 +----------
2 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte
index 1ead9a40..8446d91a 100644
--- a/src/components/Dashboard/DashboardAusweis.svelte
+++ b/src/components/Dashboard/DashboardAusweis.svelte
@@ -9,12 +9,10 @@
Pencil2,
QuestionMarkCircled,
} from "radix-svelte-icons";
- import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
import { api } from "astro-typesafe-api/client";
import Cookies from "js-cookie";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
import { Enums, Objekt } from "#lib/client/prisma.js";
- import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
import { addNotification, updateNotification } from "#components/Notifications/shared.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";
@@ -30,6 +28,8 @@
import { notifications } from "#components/NotificationProvider/shared.js";
import { Bell } from "radix-svelte-icons";
import { A13BerechnungRechnerischeLaufzeitHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A13BerechnungRechnerischeLaufzeitHeizung.js";
+ import mime from "mime"
+
const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33;
const ausweisart = getAusweisartFromId(ausweis.id);
@@ -611,11 +611,13 @@
{/if}
{rechnung?.versand_strasse}, {rechnung?.versand_plz} {rechnung?.versand_ort}