Bugfixes und Bezahlen

This commit is contained in:
Moritz Utcke
2025-03-11 09:15:22 -03:00
parent 9b50053007
commit 8b489a94cc
13 changed files with 326 additions and 47 deletions

View File

@@ -12,19 +12,20 @@ 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"),
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"), "aufnahme": await import("../src/pages/api/aufnahme/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-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"), "bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].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/[uid]": await import("../src/pages/api/bilder/[uid].ts"), "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"),
"geg-nachweis-gewerbe/[uid]": await import("../src/pages/api/geg-nachweis-gewerbe/[uid].ts"), "geg-nachweis-gewerbe/[uid]": await import("../src/pages/api/geg-nachweis-gewerbe/[uid].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"),
"geg-nachweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-wohnen/[uid].ts"), "geg-nachweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-wohnen/[uid].ts"),
"geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"), "geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"),
"objekt": await import("../src/pages/api/objekt/index.ts"), "objekt": await import("../src/pages/api/objekt/index.ts"),
"rechnung/[uid]": await import("../src/pages/api/rechnung/[uid].ts"),
"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"),

View File

@@ -138,21 +138,22 @@ export function getAusweisartFromUUID(uid: string): Enums.Ausweisart | null {
return null return null
} }
if (uid.startsWith("vaw")) { switch(uid.split("-")[0]) {
return Enums.Ausweisart.VerbrauchsausweisWohnen case "vaw":
} else if (uid.startsWith("vag")) { return Enums.Ausweisart.VerbrauchsausweisWohnen
return Enums.Ausweisart.VerbrauchsausweisGewerbe case "vag":
} else if (uid.startsWith("baw")) { return Enums.Ausweisart.VerbrauchsausweisGewerbe
return Enums.Ausweisart.BedarfsausweisWohnen case "baw":
} else if (uid.startsWith("bag")) { return Enums.Ausweisart.BedarfsausweisWohnen
return Enums.Ausweisart.BedarfsausweisGewerbe case "bag":
} else if (uid.startsWith("gnw")) { return Enums.Ausweisart.BedarfsausweisGewerbe
return Enums.Ausweisart.GEGNachweisWohnen case "gnw":
} else if (uid.startsWith("gng")) { return Enums.Ausweisart.GEGNachweisWohnen
return Enums.Ausweisart.GEGNachweisGewerbe case "gng":
return Enums.Ausweisart.GEGNachweisGewerbe
default:
return null
} }
return null;
} }
export type UnterlageClient = Omit<Unterlage, "id" | "aufnahme_id"> export type UnterlageClient = Omit<Unterlage, "id" | "aufnahme_id">
@@ -165,10 +166,10 @@ export type ObjektKomplettClient = ObjektClient & {
export type AufnahmeKomplettClient = AufnahmeClient & { export type AufnahmeKomplettClient = AufnahmeClient & {
bilder: BildClient[], bilder: BildClient[],
unterlagen: UnterlageClient[], unterlagen: UnterlageClient[],
bedarfsausweise_wohnen: BedarfsausweisWohnenClient[], bedarfsausweise_wohnen: (BedarfsausweisWohnenClient & { rechnung: RechnungClient })[],
verbrauchsausweise_wohnen: VerbrauchsausweisWohnenClient[], verbrauchsausweise_wohnen: (VerbrauchsausweisWohnenClient & { rechnung: RechnungClient })[],
verbrauchsausweise_gewerbe: VerbrauchsausweisGewerbeClient[], verbrauchsausweise_gewerbe: (VerbrauchsausweisGewerbeClient & { rechnung: RechnungClient })[],
geg_nachweise_wohnen: GEGNachweisWohnenClient[] geg_nachweise_wohnen: (GEGNachweisWohnenClient & { rechnung: RechnungClient })[]
} }
export type GEGNachweisWohnenClient = Omit<GEGNachweisWohnen, "id" | "aufnahme_id" | "benutzer_id"> & { export type GEGNachweisWohnenClient = Omit<GEGNachweisWohnen, "id" | "aufnahme_id" | "benutzer_id"> & {

View File

@@ -1,5 +1,5 @@
<script lang="ts"> <script lang="ts">
import { AufnahmeKomplettClient, BedarfsausweisWohnenClient, getAusweisartFromUUID, ObjektKomplettClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { AufnahmeKomplettClient, BedarfsausweisWohnenClient, getAusweisartFromUUID, ObjektKomplettClient, 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 {
@@ -18,6 +18,7 @@
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient; export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
export let aufnahme: AufnahmeKomplettClient; export let aufnahme: AufnahmeKomplettClient;
export let rechnung: RechnungClient;
export let objekt: Objekt; export let objekt: Objekt;
const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33; const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33;
@@ -152,11 +153,13 @@
<div class="w-full border rounded-lg my-2"> <div class="w-full border rounded-lg my-2">
<div class="bg-green-600 h-4 rounded-lg" class:bg-red-600={progress == 33} class:bg-primary={progress == 66} style="width: {progress}%;"></div> <div class="bg-green-600 h-4 rounded-lg" class:bg-red-600={progress == 33} class:bg-primary={progress == 66} style="width: {progress}%;"></div>
</div> </div>
<!-- TODO: Metrics für den Fortschritt festlegen -->
<span class="text-sm font-semibold text-base-content" <span class="text-sm font-semibold text-base-content"
>{progress}%</span >{progress}%</span
> >
</div> </div>
{#if ausweis.bestellt}
<p class="text-sm font-semibold">Der Ausweis wurde von Ihnen freigegeben und befindet sich in Prüfung vom IB Cornelsen</p>
{/if}
{#await calculations then calculations} {#await calculations then calculations}
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<div class="flex flex-row justify-between"> <div class="flex flex-row justify-between">
@@ -212,6 +215,10 @@
href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.uid}" href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?uid={ausweis.uid}"
>Stornieren</a> >Stornieren</a>
{/if} {/if}
{#if !rechnung || rechnung.bezahlmethode === Enums.Bezahlmethoden.rechnung}
<a href="/energieausweis-erstellen/bezahlung?uid={ausweis.uid}" class="button text-sm">Bezahlen</a>
{/if}
{#if !ausweis.ausgestellt && !ausweis.bestellt} {#if !ausweis.ausgestellt && !ausweis.bestellt}

View File

@@ -1,6 +1,6 @@
import { decodeToken } from "#lib/auth/token.js"; import { decodeToken } from "#lib/auth/token.js";
import { hashPassword } from "#lib/password.js"; import { hashPassword } from "#lib/password.js";
import { prisma } from "#lib/server/prisma"; import { prisma } from "#lib/server/prisma.js";
import { APIError, TypesafeAPIContextWithRequest } from "astro-typesafe-api/server"; import { APIError, TypesafeAPIContextWithRequest } from "astro-typesafe-api/server";
import { z } from "zod"; import { z } from "zod";

View File

@@ -64,13 +64,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}></DashboardAusweis> <DashboardAusweis {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}></DashboardAusweis> <DashboardAusweis {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}></DashboardAusweis> <DashboardAusweis {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

@@ -14,6 +14,7 @@
BenutzerClient, BenutzerClient,
BildClient, BildClient,
ObjektClient, ObjektClient,
RechnungClient,
UnterlageClient, UnterlageClient,
VerbrauchsausweisWohnenClient, VerbrauchsausweisWohnenClient,
} from "#components/Ausweis/types.js"; } from "#components/Ausweis/types.js";
@@ -38,6 +39,7 @@
export let objekt: ObjektClient; export let objekt: ObjektClient;
export let bilder: BildClient[]; export let bilder: BildClient[];
export let unterlagen: UnterlageClient[]; export let unterlagen: UnterlageClient[];
export let rechnung: RechnungClient | null = null;
export let ausweisart: Enums.Ausweisart; export let ausweisart: Enums.Ausweisart;
export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal;
export let ausweistyp: Enums.AusweisTyp = Enums.AusweisTyp.Standard; export let ausweistyp: Enums.AusweisTyp = Enums.AusweisTyp.Standard;
@@ -289,14 +291,12 @@
} }
try { try {
const { uid, checkout_url } = await api.rechnung.PUT.fetch( let uid: string, checkout_url: string | undefined;
{
ausweisart, if (rechnung) {
const result = await api.rechnung._uid.PATCH.fetch({
bezahlmethode: aktiveBezahlmethode, bezahlmethode: aktiveBezahlmethode,
services: services abweichende_versand_adresse: $abweichende_versand_adresse,
.filter((service) => service.selected)
.map((service) => service.id),
email: $email,
empfaenger: $empfaenger, empfaenger: $empfaenger,
strasse: $strasse, strasse: $strasse,
plz: $plz, plz: $plz,
@@ -306,15 +306,52 @@
versand_plz: $versand_plz, versand_plz: $versand_plz,
versand_ort: $versand_ort, versand_ort: $versand_ort,
telefon: $telefon, telefon: $telefon,
ausweis_uid: ausweis.uid, versand_zusatzzeile: $versand_zusatzzeile
ausweistyp, }, {
}, params: {
{ uid: rechnung.uid
},
headers: { headers: {
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`, Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
}, },
} })
);
console.log(result);
uid = result.uid
checkout_url = result.checkout_url
} else {
const result = await api.rechnung.PUT.fetch(
{
ausweisart,
bezahlmethode: aktiveBezahlmethode,
services: services
.filter((service) => service.selected)
.map((service) => service.id),
email: $email,
empfaenger: $empfaenger,
strasse: $strasse,
plz: $plz,
ort: $ort,
versand_empfaenger: $versand_empfaenger,
versand_strasse: $versand_strasse,
versand_plz: $versand_plz,
versand_ort: $versand_ort,
telefon: $telefon,
ausweis_uid: ausweis.uid,
ausweistyp,
},
{
headers: {
Authorization: `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`,
},
}
);
uid = result.uid;
checkout_url = result.checkout_url;
}
// Alle alten Ausweisdateien im localStorage löschen. // Alle alten Ausweisdateien im localStorage löschen.
localStorage.clear(); localStorage.clear();

View File

@@ -0,0 +1,150 @@
import { UUidWithPrefix, getAusweisartFromUUID } from "#components/Ausweis/types.js"
import { Enums } from "#lib/client/prisma.js"
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"
import { mollieClient } from "#lib/mollie.js"
import { prisma } from "#lib/server/prisma.js"
import { PaymentMethod } from "@mollie/api-client"
import { defineApiRoute, APIError } from "astro-typesafe-api/server"
import { RechnungSchema } from "src/generated/zod/rechnung.js"
import { z } from "zod"
export const PATCH = defineApiRoute({
input: RechnungSchema.pick({
bezahlmethode: true,
ort: true,
plz: true,
strasse: true,
telefon: true,
empfaenger: true,
versand_empfaenger: true,
versand_ort: true,
versand_plz: true,
versand_strasse: true,
versand_zusatzzeile: true,
abweichende_versand_adresse: true
}),
output: z.object({
checkout_url: z.string().optional(),
uid: UUidWithPrefix,
}),
middleware: authorizationMiddleware,
headers: authorizationHeaders,
async fetch(input, context, user) {
// Wir holen uns die Rechnung
const rechnung = await prisma.rechnung.findUnique({
where: {
uid: context.params.uid,
benutzer: {
id: user.id
}
},
include: {
bedarfsausweis_gewerbe: true,
bedarfsausweis_wohnen: true,
geg_nachweis_gewerbe: true,
geg_nachweis_wohnen: true,
verbrauchsausweis_gewerbe: true,
verbrauchsausweis_wohnen: true
}
})
if (!rechnung) {
throw new APIError({
code: "NOT_FOUND",
message: "Rechnung konnte nicht gefunden werden oder gehört einem anderen Benutzer."
})
}
await prisma.rechnung.update({
where: {
id: rechnung.id
},
data: {
bezahlmethode: input.bezahlmethode,
ort: input.ort,
plz: input.plz,
strasse: input.strasse,
telefon: input.telefon,
empfaenger: input.empfaenger,
versand_empfaenger: input.versand_empfaenger,
versand_ort: input.versand_ort,
versand_plz: input.versand_plz,
versand_strasse: input.versand_strasse,
versand_zusatzzeile: input.versand_zusatzzeile,
abweichende_versand_adresse: input.abweichende_versand_adresse,
}
})
if (input.bezahlmethode === Enums.Bezahlmethoden.rechnung) {
return { uid: rechnung.uid }
}
const ausweis = rechnung.verbrauchsausweis_gewerbe || rechnung.verbrauchsausweis_wohnen || rechnung.bedarfsausweis_gewerbe || rechnung.bedarfsausweis_wohnen || rechnung.geg_nachweis_gewerbe || rechnung.geg_nachweis_wohnen;
if (!ausweis) {
throw new APIError({
code: "NOT_FOUND",
message: "Rechnung hat keinen verknüpften Ausweis"
})
}
const ausweisart = getAusweisartFromUUID(ausweis.uid)
if (!ausweisart) {
throw new APIError({
code: "INTERNAL_SERVER_ERROR",
message: "Ausweis ist ungültig."
})
}
const description = getPaymentDescription(ausweisart);
// Wir erstellen eine Mollie Payment Referenz.
const payment = await mollieClient.payments.create({
amount: {
value: rechnung.betrag.toFixed(2),
currency: "EUR",
},
metadata: {
rechnung_uid: rechnung.uid,
},
method: input.bezahlmethode as PaymentMethod,
description,
redirectUrl: `https://ibcornelsen.de/payment/success?a=${ausweis.uid}&r=${rechnung.uid}`,
webhookUrl: `http://ibcornelsen.de/api/webhooks/mollie?uid=${rechnung.uid}`,
});
const checkoutUrl = payment.getCheckoutUrl();
if (!checkoutUrl) {
throw new APIError({
code: "INTERNAL_SERVER_ERROR",
message: "Checkout URL konnte nicht erstellt werden.",
});
}
return {
uid: rechnung.uid,
checkout_url: checkoutUrl,
};
},
})
function getPaymentDescription(ausweisart: Enums.Ausweisart) {
switch(ausweisart) {
case "BedarfsausweisWohnen":
return "Bedarfsausweis Wohngebäude"
case "BedarfsausweisGewerbe":
return "Bedarfsausweis Gewerbegebäude"
case "VerbrauchsausweisGewerbe":
return "Verbrauchsausweis Gewerbegebäude"
case "VerbrauchsausweisWohnen":
return "Verbrauchsausweis Wohngebäude"
case "GEGNachweisBedarfsausweis":
case "GEGNachweisGewerbe":
case "GEGNachweisWohnen":
return "GEG Nachweis"
default:
return ""
}
}

View File

@@ -7,7 +7,7 @@ import {
authorizationHeaders, authorizationHeaders,
authorizationMiddleware, authorizationMiddleware,
} from "#lib/middleware/authorization.js"; } from "#lib/middleware/authorization.js";
import { UUidWithPrefix } from "#components/Ausweis/types.js"; import { getAusweisartFromUUID, UUidWithPrefix } from "#components/Ausweis/types.js";
import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js"; import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js";
import { PRICES, SERVICES } from "#lib/constants.js"; import { PRICES, SERVICES } from "#lib/constants.js";
import { Rechnung } from "#lib/client/prisma.js"; import { Rechnung } from "#lib/client/prisma.js";
@@ -162,7 +162,7 @@ export const PUT = defineApiRoute({
// Wir erstellen eine Mollie Payment Referenz. // Wir erstellen eine Mollie Payment Referenz.
const payment = await mollieClient.payments.create({ const payment = await mollieClient.payments.create({
amount: { amount: {
value: "45.00", value: betrag.toFixed(2),
currency: "EUR", currency: "EUR",
}, },
metadata: { metadata: {
@@ -189,3 +189,5 @@ export const PUT = defineApiRoute({
}; };
}, },
}); });

View File

@@ -12,6 +12,8 @@ export const PATCH = defineApiRoute({
id: true, id: true,
benutzer_id: true, benutzer_id: true,
aufnahme_id: true, aufnahme_id: true,
updated_at: true,
created_at: true
}), }),
output: z.void(), output: z.void(),
headers: { headers: {

View File

@@ -18,7 +18,9 @@ export const PUT = defineApiRoute({
benutzer_id: true, benutzer_id: true,
uid: true, uid: true,
aufnahme_id: true, aufnahme_id: true,
rechnung_id: true rechnung_id: true,
updated_at: true,
created_at: true
}).merge(z.object({ }).merge(z.object({
startdatum: z.coerce.date() startdatum: z.coerce.date()
})), })),

View File

@@ -37,12 +37,36 @@ const aufnahme = await prisma.aufnahme.findUnique({
objekt: true, objekt: true,
bilder: true, bilder: true,
unterlagen: true, unterlagen: true,
bedarfsausweise_wohnen: true, bedarfsausweise_wohnen: {
verbrauchsausweise_gewerbe: true, include: {
verbrauchsausweise_wohnen: true, rechnung: true
bedarfsausweise_gewerbe: true, }
geg_nachweise_gewerbe: true, },
geg_nachweise_wohnen: true, verbrauchsausweise_gewerbe: {
include: {
rechnung: true
}
},
verbrauchsausweise_wohnen: {
include: {
rechnung: true
}
},
bedarfsausweise_gewerbe: {
include: {
rechnung: true
}
},
geg_nachweise_gewerbe: {
include: {
rechnung: true
}
},
geg_nachweise_wohnen: {
include: {
rechnung: true
}
},
events: true events: true
} }
}) })

View File

@@ -0,0 +1,52 @@
---
import { getAusweisartFromUUID } 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 KundendatenModule from "#modules/KundendatenModule.svelte";
import { PaymentStatus } from "@mollie/api-client";
import { AusweisTyp } from "src/generated/enums";
const uid = Astro.url.searchParams.get("uid")
if (!uid) {
return Astro.redirect("/404")
}
const user = await getCurrentUser(Astro)
const adapter = getPrismaAusweisAdapter(uid)
const ausweisart = getAusweisartFromUUID(uid)
if (!user || !adapter || !ausweisart) {
return Astro.redirect("/404")
}
const ausweis = await adapter.findUnique({
where: {
uid,
benutzer_id: user.id
},
include: {
aufnahme: {
include: {
objekt: true,
bilder: true
}
},
rechnung: true
}
})
if (!ausweis) {
return Astro.redirect("/404")
}
if (ausweis.rechnung.status === PaymentStatus.paid) {
return Astro.redirect("/dashboard")
}
---
<AusweisLayoutPruefung title="Energieausweis Bezahlung">
<KundendatenModule {user} {ausweis} objekt={ausweis.aufnahme.objekt} rechnung={ausweis.rechnung} aufnahme={ausweis.aufnahme} bilder={ausweis.aufnahme.bilder} {ausweisart} ausweistyp={AusweisTyp.Standard} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only></KundendatenModule>
</AusweisLayoutPruefung>

View File

@@ -9,6 +9,7 @@ import { getCurrentUser } from "#lib/server/user";
const user = await getCurrentUser(Astro) || {} const user = await getCurrentUser(Astro) || {}
// POST Body
const params = new URLSearchParams(await Astro.request.text()); const params = new URLSearchParams(await Astro.request.text());
if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") || !params.has("bilder") || !params.has("ausweisart")) { if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") || !params.has("bilder") || !params.has("ausweisart")) {