Dashboard

This commit is contained in:
Moritz Utcke
2025-04-21 16:15:47 -03:00
parent fd390238d9
commit 05b31a4862
5 changed files with 58 additions and 148 deletions

View File

@@ -5,6 +5,7 @@ export const createCaller = createCallerFactory({
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"), "klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"), "postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
"unterlage": await import("../src/pages/api/unterlage.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/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"), "admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
"admin/erinnern": await import("../src/pages/api/admin/erinnern.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/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"),
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
"ausweise": await import("../src/pages/api/ausweise/index.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/access-token": await import("../src/pages/api/auth/access-token.ts"),
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.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"), "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/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"),
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.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"), "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/[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-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/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
"rechnung": await import("../src/pages/api/rechnung/index.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"),
"ticket": await import("../src/pages/api/ticket/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/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.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"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
"aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.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]": await import("../src/pages/api/aufnahme/[id]/index.ts"),

View File

@@ -1,9 +1,7 @@
<script lang="ts"> <script lang="ts">
import { AufnahmeKomplettClient, BenutzerClient } from "#components/Ausweis/types.js"; import { AufnahmeKomplettClient, BenutzerClient } from "#components/Ausweis/types.js";
import AusweisPruefenNotification from "#components/AusweisPruefenNotification.svelte";
import Carousel from "#components/Carousel.svelte"; import Carousel from "#components/Carousel.svelte";
import DashboardAusweis from "#components/Dashboard/DashboardAusweis.svelte"; import DashboardAusweis from "#components/Dashboard/DashboardAusweis.svelte";
import DashboardNachweis from "#components/Dashboard/DashboardNachweis.svelte";
import NotificationWrapper from "#components/Notifications/NotificationWrapper.svelte"; import NotificationWrapper from "#components/Notifications/NotificationWrapper.svelte";
import { Objekt } from "#lib/client/prisma.js"; import { Objekt } from "#lib/client/prisma.js";
import mime from "mime" import mime from "mime"
@@ -90,7 +88,7 @@
{#each aufnahme.verbrauchsausweise_gewerbe as ausweis} {#each aufnahme.verbrauchsausweise_gewerbe as ausweis}
<DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis> <DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
{/each} {/each}
{#each aufnahme.geg_nachweise_wohnen as nachweis} <!-- {#each aufnahme.geg_nachweise_wohnen as nachweis}
<DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis> <DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis>
{/each} {/each}
{#each aufnahme.geg_nachweise_gewerbe as nachweis} {#each aufnahme.geg_nachweise_gewerbe as nachweis}
@@ -98,7 +96,7 @@
{/each} {/each}
{#each aufnahme.bedarfsausweise_gewerbe as nachweis} {#each aufnahme.bedarfsausweise_gewerbe as nachweis}
<DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis> <DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis>
{/each} {/each} -->
</div> </div>
<div class="fixed bottom-8 right-8 flex flex-col gap-4"> <div class="fixed bottom-8 right-8 flex flex-col gap-4">

View File

@@ -39,31 +39,49 @@ const aufnahme = await prisma.aufnahme.findUnique({
bilder: true, bilder: true,
unterlagen: true, unterlagen: true,
bedarfsausweise_wohnen: { bedarfsausweise_wohnen: {
orderBy: {
updated_at: "desc"
},
include: { include: {
rechnung: true rechnung: true
} }
}, },
verbrauchsausweise_gewerbe: { verbrauchsausweise_gewerbe: {
orderBy: {
updated_at: "desc"
},
include: { include: {
rechnung: true rechnung: true
} }
}, },
verbrauchsausweise_wohnen: { verbrauchsausweise_wohnen: {
orderBy: {
updated_at: "desc"
},
include: { include: {
rechnung: true rechnung: true
} }
}, },
bedarfsausweise_gewerbe: { bedarfsausweise_gewerbe: {
orderBy: {
updated_at: "desc"
},
include: { include: {
rechnung: true rechnung: true
} }
}, },
geg_nachweise_gewerbe: { geg_nachweise_gewerbe: {
orderBy: {
updated_at: "desc"
},
include: { include: {
rechnung: true rechnung: true
} }
}, },
geg_nachweise_wohnen: { geg_nachweise_wohnen: {
orderBy: {
updated_at: "desc"
},
include: { include: {
rechnung: true rechnung: true
} }

View File

@@ -1,80 +0,0 @@
---
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
import { prisma, Enums } from "#lib/server/prisma";
import { createCaller } from "src/astro-typesafe-api-caller";
const caller = createCaller(Astro)
const id = Astro.url.searchParams.get("id");
if (!id) {
return Astro.redirect("/dashboard/objekte")
}
const user = await caller.user.self.GET.fetch(undefined, {
headers: {
"Authorization": `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
}
});
if (!user) {
return Astro.redirect("/auth/login")
}
const objekte = await prisma.objekt.findFirst({
where: user.rolle === Enums.BenutzerRolle.USER ? {
benutzer: {
id: user.id
},
} : {
...(id ? {OR: [
{
aufnahmen: {
every: {
verbrauchsausweise_gewerbe: {
some: {
id
}
},
}
}
},
{
aufnahmen: {
every: {
verbrauchsausweise_wohnen: {
some: {
id
}
},
}
}
},
{
aufnahmen: {
every: {
bedarfsausweise_wohnen: {
some: {
id
}
},
}
}
},]} : {})
},
orderBy: {
erstellungsdatum: "desc"
},
include: {
aufnahmen: {
include: {
bilder: true,
unterlagen: true,
bedarfsausweise_wohnen: true,
verbrauchsausweise_gewerbe: true,
verbrauchsausweise_wohnen: true
}
}
}
})
---

View File

@@ -3,6 +3,7 @@ import UserLayout from "#layouts/DashboardLayout.astro";
import { Enums, prisma } from "#lib/server/prisma"; import { Enums, prisma } from "#lib/server/prisma";
import DashboardModule from "#modules/Dashboard/DashboardModule.svelte"; import DashboardModule from "#modules/Dashboard/DashboardModule.svelte";
import { getCurrentUser } from "#lib/server/user"; import { getCurrentUser } from "#lib/server/user";
import DashboardAufnahmeModule from "#modules/Dashboard/DashboardAufnahmeModule.svelte";
const params = Astro.params; const params = Astro.params;
@@ -16,7 +17,7 @@ if (!user) {
return Astro.redirect("/auth/login") return Astro.redirect("/auth/login")
} }
const totalPages = await prisma.objekt.count({ const totalPages = await prisma.aufnahme.count({
where: user.rolle === Enums.BenutzerRolle.USER ? { where: user.rolle === Enums.BenutzerRolle.USER ? {
benutzer: { benutzer: {
id: user.id id: user.id
@@ -24,9 +25,9 @@ const totalPages = await prisma.objekt.count({
} : {} } : {}
}) })
let objekte = [] let aufnahme;
if (id) { if (id) {
objekte = await prisma.objekt.findMany({ aufnahme = await prisma.aufnahme.findFirst({
where: user.rolle === Enums.BenutzerRolle.USER ? { where: user.rolle === Enums.BenutzerRolle.USER ? {
benutzer: { benutzer: {
id: user.id id: user.id
@@ -35,42 +36,30 @@ if (id) {
...(id ? { ...(id ? {
OR: [ OR: [
{ {
aufnahmen: {
every: {
verbrauchsausweise_gewerbe: { verbrauchsausweise_gewerbe: {
some: { some: {
id: { id: {
contains: id contains: id
} }
} }
},
}
} }
}, },
{ {
aufnahmen: {
every: {
verbrauchsausweise_wohnen: { verbrauchsausweise_wohnen: {
some: { some: {
id: { id: {
contains: id contains: id
} }
} }
},
}
} }
}, },
{ {
aufnahmen: {
every: {
bedarfsausweise_wohnen: { bedarfsausweise_wohnen: {
some: { some: {
id: { id: {
contains: id contains: id
} }
} }
},
}
} }
},]} : {}) },]} : {})
}, },
@@ -78,21 +67,18 @@ if (id) {
erstellungsdatum: "desc" erstellungsdatum: "desc"
}, },
include: { include: {
aufnahmen: { bilder: true,
include: { unterlagen: true,
bilder: true, bedarfsausweise_wohnen: true,
unterlagen: true, verbrauchsausweise_gewerbe: true,
bedarfsausweise_wohnen: true, verbrauchsausweise_wohnen: true,
verbrauchsausweise_gewerbe: true, objekt: true
verbrauchsausweise_wohnen: true
}
}
}, },
take: 25, take: 1,
skip: (page - 1) * 25 skip: (page - 1)
}) })
} else { } else {
objekte = await prisma.objekt.findMany({ aufnahme = await prisma.aufnahme.findFirst({
where: user.rolle === Enums.BenutzerRolle.USER ? { where: user.rolle === Enums.BenutzerRolle.USER ? {
benutzer: { benutzer: {
id: user.id id: user.id
@@ -100,64 +86,52 @@ if (id) {
} : { } : {
OR: [ OR: [
{ {
aufnahmen: { verbrauchsausweise_gewerbe: {
every: { some: {
verbrauchsausweise_gewerbe: { ausgestellt: false,
some: { bestellt: true
ausgestellt: false,
bestellt: true
}
},
} }
} },
}, },
{ {
aufnahmen: {
every: {
verbrauchsausweise_wohnen: { verbrauchsausweise_wohnen: {
some: { some: {
ausgestellt: false, ausgestellt: false,
bestellt: true bestellt: true
} }
}, },
}
}
}, },
{ {
aufnahmen: {
every: {
bedarfsausweise_wohnen: { bedarfsausweise_wohnen: {
some: { some: {
ausgestellt: false, ausgestellt: false,
bestellt: true bestellt: true
} }
}, },
}
}
}] }]
}, },
orderBy: { orderBy: {
erstellungsdatum: "desc" erstellungsdatum: "desc"
}, },
include: { include: {
aufnahmen: { bilder: true,
include: { unterlagen: true,
bilder: true, bedarfsausweise_wohnen: true,
unterlagen: true, verbrauchsausweise_gewerbe: true,
bedarfsausweise_wohnen: true, verbrauchsausweise_wohnen: true,
verbrauchsausweise_gewerbe: true, objekt: true
verbrauchsausweise_wohnen: true
}
}
}, },
take: 25, take: 1,
skip: (page - 1) * 25 skip: (page - 1)
}) })
} }
--- ---
<UserLayout title="Objekte" {user}> <UserLayout title="Objekte" {user}>
<DashboardModule {user} {objekte} totalPages={Math.ceil(totalPages / 25)} page={page} {id} client:load /> <DashboardAufnahmeModule {user} {aufnahme} benutzer={user} objekt={aufnahme.objekt} client:load/>
<!-- {!aufnahme ? <p>Keine weiteren Ausweise vorhanden.</p> : <DashboardAufnahmeModule {user} {aufnahme} benutzer={user} objekt={aufnahme.objekt} client:load/>} -->
<!-- <DashboardModule {user} {objekte} totalPages={Math.ceil(totalPages / 25)} page={page} {id} client:load /> -->
</UserLayout> </UserLayout>