Datenbank und Checkliste
This commit is contained in:
@@ -1,14 +1,23 @@
|
||||
import { getAusweisartFromId } from "#components/Ausweis/types.js";
|
||||
import { adminMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
import {
|
||||
Aufnahme,
|
||||
BedarfsausweisWohnen,
|
||||
Benutzer,
|
||||
Bild,
|
||||
Enums,
|
||||
Objekt,
|
||||
prisma,
|
||||
VerbrauchsausweisGewerbe,
|
||||
VerbrauchsausweisWohnen,
|
||||
} from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "astro:content";
|
||||
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";
|
||||
import { PERSISTENT_DIR } from "#lib/server/constants.js";
|
||||
import { PutObjectCommand } from "@aws-sdk/client-s3";
|
||||
import { s3Client } from "#lib/s3.js";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
@@ -19,10 +28,25 @@ export const GET = defineApiRoute({
|
||||
async fetch({ id_ausweis }, context, user) {
|
||||
const ausweisart = getAusweisartFromId(id_ausweis);
|
||||
|
||||
if (ausweisart === "VerbrauchsausweisWohnen") {
|
||||
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
let ausweis:
|
||||
| ((
|
||||
| VerbrauchsausweisGewerbe
|
||||
| VerbrauchsausweisWohnen
|
||||
| BedarfsausweisWohnen
|
||||
) & {
|
||||
aufnahme: Aufnahme & {
|
||||
bilder: Bild[];
|
||||
objekt: Objekt & {
|
||||
benutzer: Benutzer;
|
||||
};
|
||||
};
|
||||
})
|
||||
| null = null;
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
where: {
|
||||
id: id_ausweis
|
||||
id: id_ausweis,
|
||||
},
|
||||
include: {
|
||||
aufnahme: {
|
||||
@@ -37,89 +61,133 @@ export const GET = defineApiRoute({
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (!ausweis) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Ausweis existiert nicht.",
|
||||
});
|
||||
}
|
||||
|
||||
const rechnung = await prisma.rechnung.findFirst({
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
ausweis = await prisma.verbrauchsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
verbrauchsausweis_wohnen: {
|
||||
id: id_ausweis
|
||||
id: id_ausweis,
|
||||
},
|
||||
include: {
|
||||
aufnahme: {
|
||||
include: {
|
||||
bilder: true,
|
||||
objekt: {
|
||||
include: {
|
||||
benutzer: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
erstellt_am: "desc",
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
ausweis = await prisma.bedarfsausweisWohnen.findUnique({
|
||||
where: {
|
||||
id: id_ausweis,
|
||||
},
|
||||
include: {
|
||||
aufnahme: {
|
||||
include: {
|
||||
bilder: true,
|
||||
objekt: {
|
||||
include: {
|
||||
benutzer: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (!rechnung) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message:
|
||||
"Die Rechnung wurde noch nicht erstellt, wir können nicht fortfahren.",
|
||||
});
|
||||
}
|
||||
if (!ausweis) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Ausweis existiert nicht.",
|
||||
});
|
||||
}
|
||||
|
||||
// TODO
|
||||
// SECTION: Rechnung erstellen (LexOffice)
|
||||
// Wir wollen die Rechnung an lex office versenden, und uns die ID von da holen.
|
||||
// Falls die Rechnung bereits existiert ist das nicht nötig.
|
||||
// if (!$rechnung->lex_office_id) {
|
||||
// [$lex_office_id, $renr] = createInvoice($ausweis, $rechnung);
|
||||
// sleep(1); // TODO: Nach der Umstellung von LexOffice auf etwas anderes MUSS das hier unbedingt entfernt werden!
|
||||
const rechnung = await prisma.rechnung.findFirst({
|
||||
where: {
|
||||
verbrauchsausweis_wohnen: {
|
||||
id: id_ausweis,
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
erstellt_am: "desc",
|
||||
},
|
||||
});
|
||||
|
||||
// if (!$lex_office_id || !$renr) {
|
||||
// die("Bei der Erstellung der Rechnung ist etwas schiefgelaufen - Möglicherweise ist etwas mit LexOffice?");
|
||||
// }
|
||||
if (!rechnung) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message:
|
||||
"Die Rechnung wurde noch nicht erstellt, wir können nicht fortfahren.",
|
||||
});
|
||||
}
|
||||
|
||||
// $rechnung->lex_office_id = $lex_office_id;
|
||||
// $rechnung->rechnungsnummer = $renr;
|
||||
// $rechnung->save();
|
||||
// }
|
||||
// TODO
|
||||
// SECTION: Rechnung erstellen (LexOffice)
|
||||
// Wir wollen die Rechnung an lex office versenden, und uns die ID von da holen.
|
||||
// Falls die Rechnung bereits existiert ist das nicht nötig.
|
||||
// if (!$rechnung->lex_office_id) {
|
||||
// [$lex_office_id, $renr] = createInvoice($ausweis, $rechnung);
|
||||
// sleep(1); // TODO: Nach der Umstellung von LexOffice auf etwas anderes MUSS das hier unbedingt entfernt werden!
|
||||
|
||||
// TODO
|
||||
// if ($ausweis->erledigt != 2) {$ausweis->erstellungsdatum = date("Y-m-d H:i:s");}
|
||||
// $ausweis->erledigt = 2;
|
||||
// $ausweis->save();
|
||||
// if (!$lex_office_id || !$renr) {
|
||||
// die("Bei der Erstellung der Rechnung ist etwas schiefgelaufen - Möglicherweise ist etwas mit LexOffice?");
|
||||
// }
|
||||
|
||||
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
|
||||
);
|
||||
// $rechnung->lex_office_id = $lex_office_id;
|
||||
// $rechnung->rechnungsnummer = $renr;
|
||||
// $rechnung->save();
|
||||
// }
|
||||
|
||||
if (pdfAusweis) {
|
||||
const pdfAusweisPath = fileURLToPath(
|
||||
new URL(
|
||||
`${PERSISTENT_DIR}/generated/Ausweis-${ausweis.id}.pdf`,
|
||||
import.meta.url
|
||||
)
|
||||
);
|
||||
fs.writeFileSync(pdfAusweisPath, pdfAusweis);
|
||||
}
|
||||
// TODO
|
||||
// if ($ausweis->erledigt != 2) {$ausweis->erstellungsdatum = date("Y-m-d H:i:s");}
|
||||
// $ausweis->erledigt = 2;
|
||||
// $ausweis->save();
|
||||
|
||||
if (pdfDatenblatt) {
|
||||
const pdfDatenblattPath = fileURLToPath(
|
||||
new URL(
|
||||
`${PERSISTENT_DIR}/generated/Datenblatt-${ausweis.id}.pdf`,
|
||||
import.meta.url
|
||||
)
|
||||
);
|
||||
|
||||
fs.writeFileSync(pdfDatenblattPath, pdfDatenblatt);
|
||||
}
|
||||
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
|
||||
);
|
||||
|
||||
let text: string;
|
||||
if (pdfAusweis) {
|
||||
const command = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
Body: pdfAusweis,
|
||||
ACL: "private",
|
||||
});
|
||||
|
||||
if (rechnung.status === Enums.Rechnungsstatus.paid) {
|
||||
text = `
|
||||
const response = await s3Client.send(command);
|
||||
}
|
||||
|
||||
if (pdfDatenblatt) {
|
||||
const command = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
Body: pdfDatenblatt,
|
||||
ACL: "private",
|
||||
});
|
||||
|
||||
const response = await s3Client.send(command);
|
||||
}
|
||||
|
||||
let text: string;
|
||||
|
||||
if (rechnung.status === Enums.Rechnungsstatus.paid) {
|
||||
text = `
|
||||
<p>Sehr geehrte*r ${user.vorname} ${user.name},</p>
|
||||
|
||||
<p>im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
@@ -145,8 +213,8 @@ fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`;
|
||||
} else {
|
||||
text = `
|
||||
} else {
|
||||
text = `
|
||||
<p>Sehr geehrte*r ${user.vorname} ${user.name},</p>
|
||||
|
||||
<p>im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. Nachfolgend finden Sie unsere Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.</p>
|
||||
@@ -197,15 +265,13 @@ fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`;
|
||||
}
|
||||
|
||||
await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`,
|
||||
text,
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`,
|
||||
text,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
@@ -49,7 +49,7 @@ export const PUT = defineApiRoute({
|
||||
// Wir erstellen eine Mollie Payment Referenz und eine neue Rechnung in unserer Datenbank, daraufhin geben
|
||||
// wir eine Checkout URL zurück auf die der Nutzer weitergeleitet werden kann.
|
||||
|
||||
const { ausweis_id, ausweisart, bezahlmethode, services } = input;
|
||||
const { ausweis_id, ausweisart, bezahlmethode, services, partner_code } = input;
|
||||
|
||||
const adapter = getPrismaAusweisAdapter(ausweis_id);
|
||||
|
||||
@@ -105,6 +105,7 @@ export const PUT = defineApiRoute({
|
||||
}
|
||||
},
|
||||
services,
|
||||
partner_code
|
||||
}
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
@@ -121,6 +122,7 @@ export const PUT = defineApiRoute({
|
||||
}
|
||||
},
|
||||
services,
|
||||
partner_code
|
||||
}
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
@@ -137,6 +139,7 @@ export const PUT = defineApiRoute({
|
||||
}
|
||||
},
|
||||
services,
|
||||
partner_code
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user