Verbesserungen und Datenumzug
This commit is contained in:
@@ -9,6 +9,7 @@ import { fileURLToPath } from "url";
|
||||
import * as fs from "fs";
|
||||
import { transport } from "#lib/mail.js";
|
||||
import { BASE_URI } from "#lib/constants.js";
|
||||
import { getAnsichtsausweis, getDatenblatt } from "#lib/server/ausweis.js";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
@@ -27,9 +28,9 @@ export const GET = defineApiRoute({
|
||||
include: {
|
||||
aufnahme: {
|
||||
include: {
|
||||
bilder: true,
|
||||
objekt: {
|
||||
include: {
|
||||
bilder: true,
|
||||
benutzer: true,
|
||||
},
|
||||
},
|
||||
@@ -84,35 +85,35 @@ export const GET = defineApiRoute({
|
||||
// $ausweis->erledigt = 2;
|
||||
// $ausweis->save();
|
||||
|
||||
const pdfAusweis = await pdfVerbrauchsausweisWohnen(
|
||||
const pdfAusweis = await getAnsichtsausweis(ausweis, ausweis.aufnahme, ausweis.aufnahme.objekt, ausweis.aufnahme.bilder, ausweis.aufnahme.objekt.benutzer)
|
||||
const pdfDatenblatt = await getDatenblatt(
|
||||
ausweis,
|
||||
ausweis.aufnahme,
|
||||
ausweis.aufnahme.objekt,
|
||||
ausweis.aufnahme.bilder,
|
||||
ausweis.aufnahme.objekt.benutzer
|
||||
);
|
||||
const pdfDatenblatt = await pdfDatenblattVerbrauchsausweisWohnen(
|
||||
ausweis,
|
||||
ausweis.aufnahme,
|
||||
ausweis.aufnahme.objekt,
|
||||
ausweis.aufnahme.objekt.benutzer
|
||||
);
|
||||
|
||||
const pdfAusweisPath = fileURLToPath(
|
||||
new URL(
|
||||
`../../../../persistent/generated/Ausweis-${ausweis.uid}.pdf`,
|
||||
import.meta.url
|
||||
)
|
||||
);
|
||||
const pdfDatenblattPath = fileURLToPath(
|
||||
new URL(
|
||||
`../../../../persistent/generated/Datenblatt-${ausweis.uid}.pdf`,
|
||||
import.meta.url
|
||||
)
|
||||
);
|
||||
if (pdfAusweis) {
|
||||
const pdfAusweisPath = fileURLToPath(
|
||||
new URL(
|
||||
`../../../../persistent/generated/Ausweis-${ausweis.uid}.pdf`,
|
||||
import.meta.url
|
||||
)
|
||||
);
|
||||
fs.writeFileSync(pdfAusweisPath, pdfAusweis);
|
||||
}
|
||||
|
||||
fs.writeFileSync(pdfAusweisPath, pdfAusweis);
|
||||
fs.writeFileSync(pdfDatenblattPath, pdfDatenblatt);
|
||||
if (pdfDatenblatt) {
|
||||
const pdfDatenblattPath = fileURLToPath(
|
||||
new URL(
|
||||
`../../../../persistent/generated/Datenblatt-${ausweis.uid}.pdf`,
|
||||
import.meta.url
|
||||
)
|
||||
);
|
||||
|
||||
fs.writeFileSync(pdfDatenblattPath, pdfDatenblatt);
|
||||
}
|
||||
|
||||
let text: string;
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ export const GET = defineApiRoute({
|
||||
}
|
||||
}
|
||||
},
|
||||
output: ZodOverlap<OptionalNullable<GEGNachweisWohnenClient>>(GEGNachweisWohnenSchema.merge(z.object({
|
||||
output: GEGNachweisWohnenSchema.merge(z.object({
|
||||
uid_aufnahme: UUidWithPrefix,
|
||||
uid_objekt: UUidWithPrefix,
|
||||
uid_benutzer: UUidWithPrefix.optional()
|
||||
@@ -156,7 +156,7 @@ export const GET = defineApiRoute({
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true
|
||||
})),
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
9
src/pages/api/rechnung/anfordern.ts
Normal file
9
src/pages/api/rechnung/anfordern.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { defineApiRoute } from "astro-typesafe-api/server";
|
||||
|
||||
// TODO
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
async fetch(input, context, transfer) {
|
||||
|
||||
},
|
||||
})
|
||||
@@ -1,5 +1,5 @@
|
||||
import { z } from "zod";
|
||||
import { BedarfsausweisWohnen, Enums, RechnungSchema, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/server";
|
||||
import { Enums, RechnungSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { mollieClient } from "#lib/mollie.js";
|
||||
import { PaymentMethod } from "@mollie/api-client";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
authorizationMiddleware,
|
||||
} from "#lib/middleware/authorization.js";
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
meta: {
|
||||
@@ -50,33 +51,21 @@ export const PUT = defineApiRoute({
|
||||
|
||||
// TODO: Services Implementieren
|
||||
|
||||
let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen;
|
||||
if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
ausweis = await prisma.bedarfsausweisWohnen.findUnique({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
ausweis = await prisma.verbrauchsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
// Wir müssen überprüfen, ob dem Nutzer der Ausweis tatsächlich gehört.
|
||||
ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
where: {
|
||||
uid: ausweis_uid,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
const adapter = getPrismaAusweisAdapter(ausweis_uid);
|
||||
|
||||
if (!adapter) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Ausweisart nicht unterstützt.",
|
||||
});
|
||||
message: "Ungültige Ausweis UID"
|
||||
})
|
||||
}
|
||||
|
||||
const ausweis = await adapter.findUnique({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
}
|
||||
})
|
||||
|
||||
if (!ausweis) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
@@ -113,40 +102,14 @@ export const PUT = defineApiRoute({
|
||||
});
|
||||
}
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
await prisma.bedarfsausweisWohnen.update({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
},
|
||||
data: {
|
||||
bestellt: true
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
await prisma.verbrauchsausweisGewerbe.update({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
},
|
||||
data: {
|
||||
bestellt: true
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
// Wir müssen überprüfen, ob dem Nutzer der Ausweis tatsächlich gehört.
|
||||
await prisma.verbrauchsausweisWohnen.update({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
},
|
||||
data: {
|
||||
bestellt: true
|
||||
}
|
||||
});
|
||||
} else {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Ausweisart nicht unterstützt.",
|
||||
});
|
||||
}
|
||||
await adapter.update({
|
||||
where: {
|
||||
uid: ausweis_uid
|
||||
},
|
||||
data: {
|
||||
bestellt: true
|
||||
}
|
||||
})
|
||||
|
||||
if (bezahlmethode === Enums.Bezahlmethoden.rechnung) {
|
||||
return { uid: rechnung.uid }
|
||||
@@ -163,7 +126,7 @@ export const PUT = defineApiRoute({
|
||||
},
|
||||
method: input.bezahlmethode as PaymentMethod,
|
||||
description: "Verbrauchsausweis Wohnen 2016",
|
||||
redirectUrl: "https://ibcornelsen.de/payment/success",
|
||||
redirectUrl: `https://ibcornelsen.de/payment/success?a=${ausweis.uid}&r=${rechnung.uid}`,
|
||||
webhookUrl: `http://ibcornelsen.de/api/webhooks/mollie?uid=${rechnung.uid}`,
|
||||
});
|
||||
|
||||
|
||||
@@ -2,36 +2,49 @@
|
||||
|
||||
import { Enums, prisma } from "@ibcornelsen/database/server";
|
||||
import Layout from "../../layouts/Layout.astro";
|
||||
import { createCaller } from "../../astro-typesafe-api-caller.js";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
|
||||
import PaymentSuccessModule from "#modules/PaymentSuccessModule.svelte";
|
||||
import { sendPaymentSuccessMail } from "#lib/server/mail/payment-success";
|
||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
|
||||
import { sendInvoiceMail } from "#lib/server/mail/invoice";
|
||||
import { getCurrentUser } from "#lib/server/user";
|
||||
|
||||
const uid = Astro.url.searchParams.get("uid");
|
||||
const uidRechnung = Astro.url.searchParams.get("r");
|
||||
const uidAusweis = Astro.url.searchParams.get("a");
|
||||
const user = await getCurrentUser(Astro)
|
||||
|
||||
|
||||
const caller = createCaller(Astro)
|
||||
|
||||
const user = await caller.user.self.GET.fetch(undefined, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!uid || !user) {
|
||||
if (!uidRechnung || !uidAusweis || !user) {
|
||||
return Astro.redirect("/")
|
||||
}
|
||||
|
||||
const rechnung = await prisma.rechnung.findUnique({
|
||||
where: {
|
||||
uid: uid,
|
||||
uid: uidRechnung,
|
||||
benutzer: {
|
||||
uid: user.uid
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!rechnung) {
|
||||
return Astro.redirect("/404")
|
||||
const adapter = getPrismaAusweisAdapter(uidAusweis);
|
||||
|
||||
if (!adapter) {
|
||||
return Astro.redirect("/")
|
||||
}
|
||||
|
||||
const ausweis = adapter.findUnique({
|
||||
where: {
|
||||
uid: uidAusweis
|
||||
}
|
||||
})
|
||||
|
||||
if (!rechnung || !ausweis) {
|
||||
return Astro.redirect("/")
|
||||
}
|
||||
|
||||
if (rechnung.status === "paid") {
|
||||
sendPaymentSuccessMail(ausweis, rechnung, user)
|
||||
} else if (rechnung.bezahlmethode === Enums.Bezahlmethoden.rechnung) {
|
||||
sendInvoiceMail(ausweis, rechnung, user)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user