Bugfixes und Bezahlen
This commit is contained in:
@@ -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"),
|
||||||
|
|||||||
@@ -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"> & {
|
||||||
|
|||||||
@@ -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">
|
||||||
@@ -213,6 +216,10 @@
|
|||||||
>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}
|
||||||
<!-- TODO -->
|
<!-- TODO -->
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
150
src/pages/api/rechnung/[uid].ts
Normal file
150
src/pages/api/rechnung/[uid].ts
Normal 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 ""
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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()
|
||||||
})),
|
})),
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
52
src/pages/energieausweis-erstellen/bezahlung.astro
Normal file
52
src/pages/energieausweis-erstellen/bezahlung.astro
Normal 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>
|
||||||
@@ -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")) {
|
||||||
|
|||||||
Reference in New Issue
Block a user