Admin formular aufrufen

This commit is contained in:
Moritz Utcke
2025-03-15 20:51:37 -03:00
parent de94e1ba6d
commit 8e9dfc5153
8 changed files with 43 additions and 25 deletions

View File

@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { AufnahmeKomplettClient, BedarfsausweisWohnenClient, getAusweisartFromUUID, ObjektKomplettClient, RechnungClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { AufnahmeKomplettClient, BedarfsausweisWohnenClient, BenutzerClient, getAusweisartFromUUID, RechnungClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
import moment from "moment"; import moment from "moment";
import { dialogs } from "svelte-dialogs"; import { dialogs } from "svelte-dialogs";
import { import {
@@ -13,7 +13,7 @@
import { api } from "astro-typesafe-api/client"; import { api } from "astro-typesafe-api/client";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
import { AusweisTyp, Enums, Objekt } from "#lib/client/prisma.js"; import { Enums, Objekt } from "#lib/client/prisma.js";
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
import { shortenUID } from "#server/lib/hash.js"; import { shortenUID } from "#server/lib/hash.js";
@@ -21,6 +21,7 @@
export let aufnahme: AufnahmeKomplettClient; export let aufnahme: AufnahmeKomplettClient;
export let rechnung: RechnungClient; export let rechnung: RechnungClient;
export let objekt: Objekt; export let objekt: Objekt;
export let benutzer: BenutzerClient;
const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33; const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33;
const ausweisart = getAusweisartFromUUID(ausweis.uid); const ausweisart = getAusweisartFromUUID(ausweis.uid);
@@ -250,6 +251,21 @@
>Bearbeiten</a> >Bearbeiten</a>
{/if} {/if}
{/if} {/if}
{#if benutzer.rolle === Enums.BenutzerRolle.ADMIN}
<!-- TODO -->
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen}
<a
class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.uid}"
>Formular</a>
{:else if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
<a
class="button text-sm"
href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid={ausweis.uid}"
>Formular</a>
{/if}
{/if}
<a <a
class="p-2 rounded-lg hover:bg-gray-200" class="p-2 rounded-lg hover:bg-gray-200"

View File

@@ -9,6 +9,7 @@
export let user: BenutzerClient; export let user: BenutzerClient;
export let aufnahme: AufnahmeKomplettClient; export let aufnahme: AufnahmeKomplettClient;
export let objekt: Objekt; export let objekt: Objekt;
export let benutzer: BenutzerClient;
let dropdownOpen = false; let dropdownOpen = false;
@@ -64,13 +65,13 @@
<div class="my-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3"> <div class="my-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
{#each aufnahme.verbrauchsausweise_wohnen as ausweis} {#each aufnahme.verbrauchsausweise_wohnen as ausweis}
<DashboardAusweis {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis> <DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
{/each} {/each}
{#each aufnahme.bedarfsausweise_wohnen as ausweis} {#each aufnahme.bedarfsausweise_wohnen as ausweis}
<DashboardAusweis {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis> <DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
{/each} {/each}
{#each aufnahme.verbrauchsausweise_gewerbe as ausweis} {#each aufnahme.verbrauchsausweise_gewerbe as ausweis}
<DashboardAusweis {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}
<DashboardNachweis {nachweis} {aufnahme} {objekt}></DashboardNachweis> <DashboardNachweis {nachweis} {aufnahme} {objekt}></DashboardNachweis>

View File

@@ -1,5 +1,5 @@
import { authorizationMiddleware } from "#lib/middleware/authorization.js"; import { 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 { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { z } from "zod"; import { z } from "zod";
import { UUidWithPrefix } from "#components/Ausweis/types.js"; import { UUidWithPrefix } from "#components/Ausweis/types.js";
@@ -59,10 +59,10 @@ export const GET = defineApiRoute({
const { uid } = ctx.params; const { uid } = ctx.params;
const aufnahme = await prisma.aufnahme.findUnique({ const aufnahme = await prisma.aufnahme.findUnique({
where: { where: user.rolle === Enums.BenutzerRolle.USER ? {
uid, uid,
benutzer_id: user.id benutzer_id: user.id
}, } : { uid },
select: { select: {
benutzer_id: true, benutzer_id: true,
bilder: { bilder: {

View File

@@ -1,7 +1,7 @@
import { AufnahmeClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js"; import { AufnahmeClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js";
import { exclude } from "#lib/exclude.js"; import { exclude } from "#lib/exclude.js";
import { authorizationMiddleware } from "#lib/middleware/authorization.js"; import { 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 { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { AufnahmeSchema } from "src/generated/zod/aufnahme.js"; import { AufnahmeSchema } from "src/generated/zod/aufnahme.js";
import { z } from "zod"; import { z } from "zod";
@@ -71,10 +71,10 @@ export const GET = defineApiRoute({
const { uid } = context.params; const { uid } = context.params;
const aufnahme = await prisma.aufnahme.findUnique({ const aufnahme = await prisma.aufnahme.findUnique({
where: { where: user.rolle === Enums.BenutzerRolle.USER ? {
uid, uid,
benutzer_id: user.id benutzer_id: user.id
}, } : { uid },
include: { include: {
objekt: { objekt: {
select: { select: {

View File

@@ -1,7 +1,7 @@
import { ObjektClient, OptionalNullable, ZodOverlap } from "#components/Ausweis/types.js"; import { ObjektClient, OptionalNullable, ZodOverlap } from "#components/Ausweis/types.js";
import { exclude } from "#lib/exclude.js"; import { exclude } from "#lib/exclude.js";
import { authorizationMiddleware } from "#lib/middleware/authorization.js"; import { authorizationMiddleware } from "#lib/middleware/authorization.js";
import { ObjektSchema, prisma } from "#lib/server/prisma.js"; import { Enums, ObjektSchema, prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { z } from "zod"; import { z } from "zod";
@@ -69,10 +69,10 @@ export const GET = defineApiRoute({
const { uid } = ctx.params; const { uid } = ctx.params;
const objekt = await prisma.objekt.findUnique({ const objekt = await prisma.objekt.findUnique({
where: { where: user.rolle === Enums.BenutzerRolle.USER ? {
uid, uid,
benutzer_id: user.id benutzer_id: user.id
}, } : { uid },
}); });
if (!objekt) { if (!objekt) {

View File

@@ -1,7 +1,7 @@
import { OptionalNullable, UUidWithPrefix, VerbrauchsausweisWohnenClient, ZodOverlap } from "#components/Ausweis/types.js"; import { OptionalNullable, UUidWithPrefix, VerbrauchsausweisWohnenClient, ZodOverlap } from "#components/Ausweis/types.js";
import { exclude } from "#lib/exclude.js"; import { exclude } from "#lib/exclude.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.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 { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { VerbrauchsausweisWohnenSchema } from "src/generated/zod/verbrauchsausweiswohnen.js"; import { VerbrauchsausweisWohnenSchema } from "src/generated/zod/verbrauchsausweiswohnen.js";
import { z } from "zod"; import { z } from "zod";
@@ -175,10 +175,10 @@ export const GET = defineApiRoute({
} }
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
where: { where: user.rolle === Enums.BenutzerRolle.USER ? {
uid, uid,
benutzer_id: user.id benutzer_id: user.id
}, } : { uid },
include: { include: {
benutzer: { benutzer: {
select: { select: {

View File

@@ -2,7 +2,7 @@
import { createCaller } from "../../../astro-typesafe-api-caller.js"; import { createCaller } from "../../../astro-typesafe-api-caller.js";
import { validateAccessTokenServer } from "#server/lib/validateAccessToken"; import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
import { prisma } from "#lib/server/prisma"; import { Enums, prisma } from "#lib/server/prisma";
import UserLayout from "#layouts/DashboardLayout.astro"; import UserLayout from "#layouts/DashboardLayout.astro";
import DashboardAufnahmeModule from "#modules/Dashboard/DashboardAufnahmeModule.svelte"; import DashboardAufnahmeModule from "#modules/Dashboard/DashboardAufnahmeModule.svelte";
@@ -26,13 +26,14 @@ if (!user) {
return Astro.redirect("/auth/login") return Astro.redirect("/auth/login")
} }
const aufnahme = await prisma.aufnahme.findUnique({ const aufnahme = await prisma.aufnahme.findUnique({
where: { where: user.rolle === Enums.BenutzerRolle.USER ? {
benutzer: { benutzer: {
uid: user.uid uid: user.uid
}, },
uid uid
}, } : { uid },
include: { include: {
objekt: true, objekt: true,
bilder: true, bilder: true,
@@ -77,5 +78,5 @@ if (!aufnahme) {
--- ---
<UserLayout title="Dashboard" {user}> <UserLayout title="Dashboard" {user}>
<DashboardAufnahmeModule {user} {aufnahme} objekt={aufnahme.objekt} client:load/> <DashboardAufnahmeModule {user} {aufnahme} benutzer={user} objekt={aufnahme.objekt} client:only/>
</UserLayout> </UserLayout>

View File

@@ -3,7 +3,7 @@ import { createCaller } from "../../astro-typesafe-api-caller.js";
import { validateAccessTokenServer } from "#server/lib/validateAccessToken"; import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
import DashboardModule from "#modules/Dashboard/DashboardModule.svelte"; import DashboardModule from "#modules/Dashboard/DashboardModule.svelte";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
import { prisma } from "#lib/server/prisma"; import { Enums, prisma } from "#lib/server/prisma";
import DashboardLayout from "#layouts/DashboardLayout.astro"; import DashboardLayout from "#layouts/DashboardLayout.astro";
const accessTokenValid = await validateAccessTokenServer(Astro); const accessTokenValid = await validateAccessTokenServer(Astro);
@@ -25,12 +25,12 @@ if (!user) {
} }
const objekte = await prisma.objekt.findMany({ const objekte = await prisma.objekt.findMany({
where: { where: user.rolle === Enums.BenutzerRolle.USER ? {
benutzer: { benutzer: {
uid: user.uid uid: user.uid
} }
}, } : {},
take: 10, take: 25,
orderBy: { orderBy: {
erstellungsdatum: "desc" erstellungsdatum: "desc"
}, },