Merge remote-tracking branch 'origin/dev' into dashboard
This commit is contained in:
@@ -9,7 +9,6 @@ export const createCaller = createCallerFactory({
|
||||
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
|
||||
"admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
|
||||
"admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-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/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
|
||||
@@ -63,8 +63,15 @@
|
||||
fuelMap[fuel[0]].push(fuel[1]);
|
||||
}
|
||||
|
||||
let month = moment(ausweis.startdatum).month();
|
||||
let year = moment(ausweis.startdatum).year();
|
||||
// Falls der Ausweis bereits einmal gespeichert wurde mit einem Startdatum sollten wir dieses benutzen.
|
||||
let month: number, year: number;
|
||||
if (ausweis.startdatum) {
|
||||
month = moment(ausweis.startdatum).get("month")
|
||||
year = moment(ausweis.startdatum).get("year")
|
||||
} else {
|
||||
month = availableDates[availableDates.length - 1].month;
|
||||
year = availableDates[availableDates.length - 1].year;
|
||||
}
|
||||
|
||||
$: {
|
||||
if (typeof month === "number" && typeof year === "number") {
|
||||
|
||||
@@ -52,7 +52,7 @@ $: {
|
||||
<!-- % Anteil Warmwasser -->
|
||||
|
||||
<div class="input-standard order-2 md:order-2 xl:order-2">
|
||||
<Inputlabel title="% Anteil Warmwasser"></Inputlabel>
|
||||
<Inputlabel title="% Anteil Kühlung"></Inputlabel>
|
||||
|
||||
<input
|
||||
name="anteil_kuehlung_1"
|
||||
|
||||
@@ -40,15 +40,15 @@
|
||||
"Dezember",
|
||||
];
|
||||
|
||||
const startDate = moment(aufnahme.erstellungsdatum || Date.now())
|
||||
const earlistPossibleStartDate = moment(aufnahme.erstellungsdatum || Date.now())
|
||||
.subtract(4, "years")
|
||||
.subtract(6, "months");
|
||||
const endDate = moment(aufnahme.erstellungsdatum || Date.now()).subtract(
|
||||
const lastPossibleEndDate = moment(aufnahme.erstellungsdatum || Date.now()).subtract(
|
||||
3,
|
||||
"years"
|
||||
);
|
||||
|
||||
for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) {
|
||||
for (let m = moment(earlistPossibleStartDate); m.isBefore(lastPossibleEndDate); m.add(1, "month")) {
|
||||
availableDates.push({
|
||||
year: m.year(),
|
||||
month: m.month(),
|
||||
@@ -62,8 +62,15 @@
|
||||
fuelMap[fuel[0]].push(fuel[1]);
|
||||
}
|
||||
|
||||
let month = availableDates[availableDates.length - 1].month;
|
||||
let year = availableDates[availableDates.length - 1].year;
|
||||
// Falls der Ausweis bereits einmal gespeichert wurde mit einem Startdatum sollten wir dieses benutzen.
|
||||
let month: number, year: number;
|
||||
if (ausweis.startdatum) {
|
||||
month = moment(ausweis.startdatum).get("month")
|
||||
year = moment(ausweis.startdatum).get("year")
|
||||
} else {
|
||||
month = availableDates[availableDates.length - 1].month;
|
||||
year = availableDates[availableDates.length - 1].year;
|
||||
}
|
||||
|
||||
$: {
|
||||
if (typeof month === "number" && typeof year === "number") {
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
async function stornieren() {
|
||||
try {
|
||||
const response = await api.admin.stornieren.PUT.fetch({
|
||||
uid_ausweis: ausweis.id
|
||||
ausweis_id: ausweis.id
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
@@ -149,7 +149,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
async function ausstellen() {
|
||||
async function ausstellen(post = false) {
|
||||
const notification = addNotification({
|
||||
message: "Ausweis wird ausgestellt.",
|
||||
subtext: "Der Ausweis wird nun ausgestellt, bitte habe einen Augenblick geduld..",
|
||||
@@ -158,7 +158,8 @@
|
||||
})
|
||||
try {
|
||||
await api.admin.ausstellen.GET.fetch({
|
||||
id_ausweis: ausweis.id
|
||||
id_ausweis: ausweis.id,
|
||||
post
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
@@ -403,9 +404,10 @@
|
||||
{/if}
|
||||
|
||||
{#if benutzer.rolle === Enums.BenutzerRolle.ADMIN}
|
||||
<button class="button text-sm" on:click={ausstellen}>A</button>
|
||||
<button class="button text-sm" on:click={stornieren}>S</button>
|
||||
<button class="button text-sm" on:click={registriernummer}>R</button>
|
||||
<button class="button text-sm" title="Ausstellen" on:click={() => ausstellen(false)}>A</button>
|
||||
<button class="button text-sm" title="Ausstellen mit Postversand" on:click={() => ausstellen(true)}>P</button>
|
||||
<button class="button text-sm" title="Stornieren" on:click={stornieren}>S</button>
|
||||
<button class="button text-sm" title="Registriernummer anfordern" on:click={registriernummer}>R</button>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types";
|
||||
import { z } from "zod";
|
||||
import { verbrauchsausweisWohnenPDFValidator } from "./validators/verbrauchsausweis-wohnen-pdf-validator";
|
||||
|
||||
export function convertAusweisData(
|
||||
inputs: Partial<VerbrauchsausweisWohnenClient>
|
||||
): Record<string, string> {
|
||||
// Wir wollen alle Werte zu einem Flachen Objekt umwandeln, sodass wir dass später benutzen können.
|
||||
// Dazu kommen noch einige wichtige Eigenschaften die man im PDF brauchen könnte.
|
||||
let pdfInputs: z.infer<typeof verbrauchsausweisWohnenPDFValidator> = {
|
||||
...inputs,
|
||||
pdf: {
|
||||
"brennstoff": [inputs.aufnahme?.brennstoff_1, inputs.aufnahme?.brennstoff_2].filter(x => x).join(", ")
|
||||
}
|
||||
}
|
||||
let result = recursiveFlatten(inputs, "");
|
||||
// Außerdem müssen wir alle Werte zu strings umwandeln.
|
||||
for (const key in result) {
|
||||
result[key] = String(result[key]);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
function recursiveFlatten(obj: any, parentKey = ""): Record<string, string> {
|
||||
const result: Record<string, string> = {};
|
||||
|
||||
for (const key in obj) {
|
||||
const value = obj[key];
|
||||
|
||||
const newKey = parentKey ? `${parentKey}.${key}` : key;
|
||||
|
||||
if (typeof value === "object") {
|
||||
Object.assign(result, recursiveFlatten(value, newKey));
|
||||
} else {
|
||||
result[newKey] = value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -108,7 +108,7 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
}
|
||||
|
||||
let kuehlungsZuschlag_1: number = 0, kuehlungsZuschlag_2: number = 0; let kuehlungsZuschlag = 0;
|
||||
if (aufnahme.kuehlung === "1" && aufnahme.kuehlung !== null) {
|
||||
if (aufnahme.kuehlung === "1" && aufnahme.kuehlung !== null && (ausweis.stromverbrauch_enthaelt_kuehlung === false || ausweis.stromverbrauch_enthaelt_kuehlung === null)) {
|
||||
|
||||
kuehlungsZuschlag = 6 * nutzflaeche * 3;
|
||||
}
|
||||
@@ -151,7 +151,7 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
let energieVerbrauchStrom = (ausweis.strom_1 || 0) + (ausweis.strom_2 || 0) + (ausweis.strom_3 || 0);
|
||||
let leerstandsZuschlagStrom = leerstand * energieVerbrauchStrom;
|
||||
|
||||
let endEnergieVerbrauchStrom = (energieVerbrauchStrom + leerstandsZuschlagStrom) / (3 * nutzflaeche);
|
||||
let endEnergieVerbrauchStrom = (energieVerbrauchStrom + leerstandsZuschlagStrom + (kuehlungsZuschlag || 0)) / (3 * nutzflaeche);
|
||||
let primaerEnergieVerbrauchStrom = endEnergieVerbrauchStrom * 1.8;
|
||||
|
||||
let co2EmissionenStrom = endEnergieVerbrauchStrom * 0.560;
|
||||
|
||||
@@ -60,7 +60,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
// Leerstand wird in Prozent angegeben, muss hier aber in eine Zahl zwischen 0 und 1 umgerechnet werden.
|
||||
let leerstand = (aufnahme.leerstand || 0) / 100;
|
||||
|
||||
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
|
||||
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt && ausweis.anteil_warmwasser_1 !== 0) {
|
||||
if (aufnahme.solarsystem_warmwasser) {
|
||||
// Wenn Warmwasser enthalten und Anteil bekannt und Solarsystem
|
||||
energieVerbrauchWarmwasser_1 =
|
||||
|
||||
@@ -3,13 +3,13 @@ import * as fs from "fs"
|
||||
import { PDFDocument, StandardFonts } from "pdf-lib";
|
||||
import { xml2pdf } from "./elements/xml2pdf.js";
|
||||
import moment from "moment";
|
||||
import { Enums, Heizungsstatus } from "#lib/server/prisma.js";
|
||||
import { Enums, Heizungsstatus, Rechnung } from "#lib/server/prisma.js";
|
||||
import { copyPage } from "./utils/copyPage.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Server.js";
|
||||
|
||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||
|
||||
export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) {
|
||||
export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, rechnung: Rechnung | null, bilder: BildClient[]) {
|
||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||
const page3 = copyPage(pdf.getPages()[0]);
|
||||
@@ -32,14 +32,6 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
|
||||
const marginX = 60;
|
||||
const marginY = 150;
|
||||
|
||||
benutzer = benutzer || {
|
||||
vorname: "Max",
|
||||
name: "Mustermann",
|
||||
adresse: "Musterstraße 123",
|
||||
plz: "12345",
|
||||
ort: "Beispielhausen"
|
||||
};
|
||||
|
||||
const translateHeizungsstatus: Record<Heizungsstatus, string> = {
|
||||
BEHEIZT: "beheizt",
|
||||
NICHT_VORHANDEN: "nicht vorhanden",
|
||||
@@ -70,9 +62,10 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
|
||||
}
|
||||
|
||||
const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}">
|
||||
<text size="12" lineHeight="14">${benutzer.vorname} ${benutzer.name}</text>
|
||||
<text size="12" lineHeight="14">${benutzer.adresse}</text>
|
||||
<text size="12" lineHeight="14">${benutzer.plz} ${benutzer.ort}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_empfaenger || ""}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_zusatzzeile || ""}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_strasse || ""}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_plz || ""} ${rechnung?.versand_ort || ""}</text>
|
||||
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
||||
<text size="12" font="bold">Datenblatt Energieausweis</text>
|
||||
<text size="12">Ausweis ID: ${ausweis.id}</text>
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||
import { AufnahmeClient, BildClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import * as fs from "fs"
|
||||
import { PDFDocument, StandardFonts } from "pdf-lib";
|
||||
import { xml2pdf } from "./elements/xml2pdf.js";
|
||||
import moment from "moment";
|
||||
import { Enums, Heizungsstatus } from "#lib/server/prisma.js";
|
||||
import { Enums, Heizungsstatus, Rechnung } from "#lib/server/prisma.js";
|
||||
import { copyPage } from "./utils/copyPage.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Server.js";
|
||||
|
||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||
|
||||
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) {
|
||||
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, rechnung: Rechnung | null, bilder: BildClient[]) {
|
||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||
const page3 = copyPage(pdf.getPages()[0]);
|
||||
@@ -34,15 +33,6 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
const marginX = 60;
|
||||
const marginY = 150;
|
||||
|
||||
benutzer = benutzer || {
|
||||
firma: "Max Mustermann GmbH",
|
||||
vorname: "Max",
|
||||
name: "Mustermann",
|
||||
adresse: "Musterstraße 123",
|
||||
plz: "12345",
|
||||
ort: "Beispielhausen"
|
||||
};
|
||||
|
||||
const translateHeizungsstatus: Record<Heizungsstatus, string> = {
|
||||
BEHEIZT: "beheizt",
|
||||
NICHT_VORHANDEN: "nicht vorhanden",
|
||||
@@ -54,9 +44,10 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
const id = ausweis.id;
|
||||
|
||||
const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}">
|
||||
<text size="12" lineHeight="14">${benutzer.firma}</text>
|
||||
<text size="12" lineHeight="14">${benutzer.adresse}</text>
|
||||
<text size="12" lineHeight="14">${benutzer.plz} ${benutzer.ort}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_empfaenger || ""}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_zusatzzeile || ""}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_strasse || ""}</text>
|
||||
<text size="12" lineHeight="14">${rechnung?.versand_plz || ""} ${rechnung?.versand_ort || ""}</text>
|
||||
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
||||
<text size="12" font="bold">Datenblatt Energieausweis</text>
|
||||
<text size="12">Ausweis ID: ${id}</text>
|
||||
|
||||
@@ -150,6 +150,15 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.kuehlung_enthalten === true && ausweis.kuehlung_enthalten !== null) {
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 381.5,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) {
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
@@ -296,17 +305,6 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
width: pfeilWidth,
|
||||
height: 30
|
||||
})
|
||||
const endEnergieVerbrauchGesamt = Math.round(berechnungen?.endEnergieVerbrauchGesamt ?? 0);
|
||||
const MaxvergleichsWertWaerme = Math.round(berechnungen?.vergleichsWertWaerme * 2);
|
||||
const MaxvergleichsWertWaermeText = `> ${MaxvergleichsWertWaerme.toString()}`;
|
||||
const MaxvergleichswertStrom = Math.round(berechnungen?.vergleichsWertStrom * 2);
|
||||
const MaxvergleichswertStromText = `> ${Math.round(MaxvergleichswertStrom).toString()}`;
|
||||
const endEnergieVerbrauchGesamtText = `${endEnergieVerbrauchGesamt.toString()}kWh/(m²a)`;
|
||||
const stromVerbrauchGesamtText = `${Math.round(berechnungen?.endEnergieVerbrauchStrom ?? 0).toString()}kWh/(m²a)`;
|
||||
const vergleichswertWaermeText = `${Math.round(berechnungen?.vergleichsWertWaerme).toString()}kWh/(m²a)`
|
||||
const vergleichswertWaermeText2 = `${Math.round(berechnungen?.vergleichsWertWaerme).toString()}`
|
||||
const vergleichswertStromText = `${Math.round(berechnungen?.vergleichsWertStrom).toString()}kWh/(m²a)`
|
||||
const vergleichswertStromText2 = `${Math.round(berechnungen?.vergleichsWertStrom).toString()}`
|
||||
|
||||
page.drawText("0", {
|
||||
x: 85,
|
||||
@@ -315,6 +313,8 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
font: bold
|
||||
})
|
||||
|
||||
const vergleichswertWaermeText2 = `${Math.round(berechnungen?.vergleichsWertWaerme).toString()}`
|
||||
|
||||
page.drawText(vergleichswertWaermeText2, {
|
||||
x: 295,
|
||||
y: height - 241,
|
||||
@@ -322,7 +322,9 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText(MaxvergleichsWertWaermeText, {
|
||||
const maxVergleichswertWaermeText = `> ${Math.round(berechnungen?.vergleichsWertWaerme * 2).toString()}`;
|
||||
|
||||
page.drawText(maxVergleichswertWaermeText, {
|
||||
x: vergleichsWertWaermeTranslationX * 2 - 78,
|
||||
y: height - 241,
|
||||
size: 13,
|
||||
@@ -336,6 +338,8 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
font: bold
|
||||
})
|
||||
|
||||
const vergleichswertStromText2 = `${Math.round(berechnungen?.vergleichsWertStrom).toString()}`
|
||||
|
||||
page.drawText(vergleichswertStromText2, {
|
||||
x: 295,
|
||||
y: height - 385,
|
||||
@@ -343,13 +347,16 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText(MaxvergleichswertStromText, {
|
||||
const maxVergleichswertStromText = `> ${Math.round(berechnungen?.vergleichsWertStrom * 2).toString()}`;
|
||||
|
||||
page.drawText(maxVergleichswertStromText, {
|
||||
x: vergleichsWertStromTranslationX * 2 - 78,
|
||||
y: height - 385,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
const endEnergieVerbrauchGesamtText = `${Math.round(berechnungen?.endEnergieVerbrauchGesamt ?? 0).toString()}kWh/(m²a)`;
|
||||
|
||||
if (endenergieverbrauchTranslationPercentage > 0.5) {
|
||||
page.drawText("Endenergieverbrauch Wärme", {
|
||||
@@ -378,6 +385,8 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
})
|
||||
}
|
||||
|
||||
const vergleichswertWaermeText = `${Math.round(berechnungen?.vergleichsWertWaerme).toString()}kWh/(m²a)`
|
||||
|
||||
if (vergleichsWertWaermeTranslationPercentage > 0.5) {
|
||||
page.drawText("Vergleichswert Wärme", {
|
||||
x: vergleichsWertWaermeTranslationX - margin - font.widthOfTextAtSize("Vergleichswert Wärme", 10),
|
||||
@@ -419,6 +428,8 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
height: 30
|
||||
})
|
||||
|
||||
const stromVerbrauchGesamtText = `${Math.round(berechnungen?.endEnergieVerbrauchStrom ?? 0).toString()}kWh/(m²a)`;
|
||||
|
||||
if (stromVerbrauchTranslationPercentage > 0.5) {
|
||||
page.drawText("Endenergieverbrauch Strom", {
|
||||
x: stromVerbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Strom", 10),
|
||||
@@ -446,6 +457,9 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
})
|
||||
}
|
||||
|
||||
const vergleichswertStromText = `${Math.round(berechnungen?.vergleichsWertStrom).toString()}kWh/(m²a)`
|
||||
|
||||
|
||||
if (vergleichsWertWaermeTranslationPercentage > 0.5) {
|
||||
page.drawText("Vergleichswert Strom", {
|
||||
x: vergleichsWertStromTranslationX - margin - font.widthOfTextAtSize("Vergleichswert Strom", 10),
|
||||
@@ -639,8 +653,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
const addVerbrauch = addVerbrauchGenerator();
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
// Mit Warmwasserzuschlag
|
||||
// Primäre Heizquelle
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
@@ -648,26 +661,12 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
berechnungen?.endEnergieVerbrauchKuehlungsZuschlag_1,
|
||||
berechnungen?.kuehlungsZuschlag_1,
|
||||
Math.round(berechnungen?.energieVerbrauchHeizung_1 || 0).toString(),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString(),
|
||||
berechnungen?.energieVerbrauchStrom
|
||||
);
|
||||
} else {
|
||||
// Ohne Warmwasserzuschlag
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
ausweis.brennstoff_1 || "",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
berechnungen?.endEnergieVerbrauchKuehlungsZuschlag_1,
|
||||
Math.round(berechnungen?.energieVerbrauchHeizung_1 || 0).toString(),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString(),
|
||||
berechnungen?.energieVerbrauchStrom
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
if (ausweis.zusaetzliche_heizquelle) {
|
||||
addVerbrauch(
|
||||
@@ -677,31 +676,12 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
berechnungen?.brennstoff_2.primaerenergiefaktor.toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchGesamt_2 || 0).toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_2 || 0).toString(),
|
||||
berechnungen?.endEnergieVerbrauchKuehlungsZuschlag_2,
|
||||
berechnungen?.kuehlungsZuschlag_2,
|
||||
Math.round(berechnungen?.energieVerbrauchHeizung_2 || 0).toString(),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString(),
|
||||
0
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// TODO
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
/**
|
||||
* Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m²
|
||||
* @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
*/
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Warmwasserzuschlag",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
0,
|
||||
"0"
|
||||
);
|
||||
}
|
||||
|
||||
if (aufnahme.leerstand && aufnahme.leerstand > 0) {
|
||||
/**
|
||||
@@ -714,10 +694,12 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Leerstandszuschlag",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0) + (berechnungen?.leerstandsZuschlagKuehlung || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0)),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString()
|
||||
Math.round((berechnungen?.leerstandsZuschlagKuehlung || 0)),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0)).toString(),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagStrom || 0))
|
||||
);
|
||||
} else {
|
||||
addVerbrauch(
|
||||
@@ -725,15 +707,17 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Leerstandszuschlag",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
"0",
|
||||
0,
|
||||
berechnungen?.durchschnittsKlimafaktor.toString()
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0) + (berechnungen?.leerstandsZuschlagKuehlung || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagKuehlung || 0)),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0)).toString(),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagStrom || 0))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
if (aufnahme.kuehlung === "1" && (ausweis.stromverbrauch_enthaelt_kuehlung === false || ausweis.stromverbrauch_enthaelt_kuehlung === null)) {
|
||||
/**
|
||||
* Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m²
|
||||
* Primärenergiefaktor Strom
|
||||
@@ -743,16 +727,17 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Kühlungszuschlag",
|
||||
"",
|
||||
// TODO
|
||||
// berechnungen?.primaerfaktorww.toString(),
|
||||
"1.8",
|
||||
"",
|
||||
"",
|
||||
Math.round(berechnungen?.kuehlungsZuschlag || 0),
|
||||
""
|
||||
0,
|
||||
"",
|
||||
"",
|
||||
Math.round(berechnungen?.kuehlungsZuschlag || 0)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------- Seite 4 -------------------------------- */
|
||||
|
||||
const splitToSize = (text: string, size: number, font: PDFFont, fontSize: number) => {
|
||||
|
||||
@@ -209,13 +209,6 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else {
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 394.5,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) {
|
||||
@@ -541,7 +534,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
);
|
||||
}
|
||||
|
||||
if (!ausweis.warmwasser_enthalten) {
|
||||
if (!ausweis.warmwasser_enthalten || ausweis.anteil_warmwasser_1 === 0) {
|
||||
/**
|
||||
* Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m²
|
||||
* @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
|
||||
@@ -3,7 +3,7 @@ import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVer
|
||||
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
||||
import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js";
|
||||
import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js";
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
import { Enums, prisma, Rechnung } from "#lib/server/prisma.js";
|
||||
|
||||
|
||||
/**
|
||||
@@ -50,15 +50,15 @@ export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient
|
||||
* Gibt das richtige Datenblatt basierend auf der Ausweisart zurück.
|
||||
* @param ausweis
|
||||
*/
|
||||
export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient,rechnung:RechnungClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromId(ausweis.id)) {
|
||||
export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, rechnung: Rechnung, ausweisart = getAusweisartFromId(ausweis.id)) {
|
||||
if (!ausweisart) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
return await pdfDatenblattVerbrauchsausweisWohnen(rechnung, ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder)
|
||||
return await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, rechnung, bilder)
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder)
|
||||
return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, rechnung, bilder)
|
||||
}
|
||||
|
||||
return null
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Aufnahme, BedarfsausweisGewerbe, BedarfsausweisWohnen, Bild, GEGNachweisGewerbe, GEGNachweisWohnen, Objekt, prisma, Unterlage, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "./prisma.js";
|
||||
import { Aufnahme, BedarfsausweisGewerbe, BedarfsausweisWohnen, Bild, GEGNachweisGewerbe, GEGNachweisWohnen, Objekt, prisma, Rechnung, Unterlage, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "./prisma.js";
|
||||
|
||||
export async function getVerbrauchsausweisWohnen(id: string): Promise<VerbrauchsausweisWohnen | null> {
|
||||
return await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
@@ -24,6 +24,7 @@ export async function getVerbrauchsausweisWohnenKomplett(id: string) {
|
||||
},
|
||||
},
|
||||
},
|
||||
rechnung: true
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -54,6 +55,7 @@ export async function getVerbrauchsausweisGewerbeKomplett(id: string) {
|
||||
},
|
||||
},
|
||||
},
|
||||
rechnung: true
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -82,6 +84,7 @@ export async function getBedarfsausweisWohnenKomplett(id: string) {
|
||||
},
|
||||
},
|
||||
},
|
||||
rechnung: true
|
||||
},
|
||||
})
|
||||
}
|
||||
@@ -141,3 +144,11 @@ export async function getUnterlagen(aufnahme_id: string): Promise<Unterlage[]> {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export async function getRechnung(rechnung_id: string) {
|
||||
return await prisma.rechnung.findUnique({
|
||||
where: {
|
||||
id: rechnung_id
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -1,255 +0,0 @@
|
||||
import {
|
||||
VerbrauchsausweisWohnenSchema,
|
||||
AufnahmeSchema,
|
||||
ObjektSchema,
|
||||
BildSchema,
|
||||
RechnungSchema,
|
||||
EventSchema,
|
||||
BenutzerSchema,
|
||||
GebaeudePlaeneSchema,
|
||||
AnteilshaberSchema,
|
||||
BedarfsausweisWohnenSchema,
|
||||
VerbrauchsausweisGewerbeSchema
|
||||
} from "#lib/client/prisma";
|
||||
import { z } from "zod";
|
||||
|
||||
export const RechnungValidator = RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
})
|
||||
|
||||
export const GebaeudePlaeneValidator = GebaeudePlaeneSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true
|
||||
})
|
||||
|
||||
export const AnteilshaberValidator = AnteilshaberSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
objekt_id: true
|
||||
})
|
||||
|
||||
export const BildValidator = BildSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true
|
||||
})
|
||||
|
||||
export const AufnahmeValidator = AufnahmeSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
verbrauchsausweis_wohnen: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}).nullable(),
|
||||
bedarfsausweis_wohnen: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}).nullable(),
|
||||
verbrauchsausweis_gewerbe: VerbrauchsausweisWohnenSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
}).nullable(),
|
||||
rechnungen: z.array(
|
||||
RechnungValidator
|
||||
),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
benutzer: BenutzerSchema.pick({ uid: true }),
|
||||
})
|
||||
)
|
||||
),
|
||||
})
|
||||
);
|
||||
|
||||
export const ObjektValidator = ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true
|
||||
}).merge(z.object({
|
||||
aufnahme: z.array(
|
||||
AufnahmeValidator
|
||||
).nullable().optional(),
|
||||
bilder: z.array(
|
||||
BildValidator
|
||||
).nullable().optional(),
|
||||
gebaeude_plaene: z.array(
|
||||
GebaeudePlaeneValidator
|
||||
).nullable().optional(),
|
||||
Anteilshaber: z.array(
|
||||
AnteilshaberValidator
|
||||
).nullable().optional()
|
||||
}))
|
||||
|
||||
/**
|
||||
* Runtime überprüfung für den Verbrauchsausweis Wohnen
|
||||
* Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
|
||||
*/
|
||||
export const VerbrauchsausweisWohnenValidator =
|
||||
VerbrauchsausweisWohnenSchema.merge(
|
||||
z.object({
|
||||
benutzer: BenutzerSchema.omit({
|
||||
id: true,
|
||||
passwort: true
|
||||
}),
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
objekt: ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
bilder: z.array(
|
||||
BildSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
),
|
||||
rechnungen: RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).array(),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}).merge(z.object({
|
||||
benutzer: BenutzerSchema.pick({
|
||||
uid: true
|
||||
})
|
||||
}))
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
).omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
});
|
||||
|
||||
export const VerbrauchsausweisWohnenBerechnungValidator2024 = z.object({
|
||||
endEnergieVerbrauchGesamt: z.number(),
|
||||
primaerEnergieVerbrauchGesamt: z.number(),
|
||||
energieEffizienzKlasse: z.string(),
|
||||
co2EmissionenGesamt: z.number()
|
||||
})
|
||||
|
||||
/**
|
||||
* Runtime überprüfung für den Verbrauchsausweis Wohnen
|
||||
* Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
|
||||
*/
|
||||
export const BedarfsausweisWohnenValidator =
|
||||
BedarfsausweisWohnenSchema.merge(
|
||||
z.object({
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
objekt: ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
bilder: z.array(
|
||||
BildSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
),
|
||||
rechnungen: RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).array(),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}).merge(z.object({
|
||||
benutzer: BenutzerSchema.pick({
|
||||
uid: true
|
||||
})
|
||||
}))
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
).omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
});
|
||||
|
||||
/**
|
||||
* Runtime überprüfung für den Verbrauchsausweis Wohnen
|
||||
* Dieser Typ beinhaltet alle Daten bis auf die IDs aller Verlinkungen.
|
||||
*/
|
||||
export const VerbrauchsausweisGewerbeValidator =
|
||||
VerbrauchsausweisGewerbeSchema.merge(
|
||||
z.object({
|
||||
aufnahme: AufnahmeSchema.omit({
|
||||
benutzer_id: true,
|
||||
objekt_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
objekt: ObjektSchema.omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).merge(
|
||||
z.object({
|
||||
bilder: z.array(
|
||||
BildSchema.omit({
|
||||
id: true,
|
||||
objekt_id: true,
|
||||
})
|
||||
)
|
||||
})
|
||||
),
|
||||
rechnungen: RechnungSchema.omit({
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
}).array(),
|
||||
events: z.array(
|
||||
EventSchema.omit({
|
||||
aufnahme_id: true,
|
||||
id: true,
|
||||
benutzer_id: true
|
||||
}).merge(z.object({
|
||||
benutzer: BenutzerSchema.pick({
|
||||
uid: true
|
||||
})
|
||||
}))
|
||||
)
|
||||
})
|
||||
)
|
||||
})
|
||||
).omit({
|
||||
benutzer_id: true,
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
});
|
||||
@@ -190,7 +190,7 @@
|
||||
>
|
||||
|
||||
<!-- F Angaben zur Heizungsanlage -->
|
||||
<Bereich bereich="F" title="Angaben zur Heizunganlage"
|
||||
<!-- <Bereich bereich="D" title="Angaben zur Heizunganlage"
|
||||
><SanierungszustandHeizungsanlage
|
||||
bind:images={bilder}
|
||||
bind:objekt
|
||||
|
||||
@@ -95,15 +95,10 @@
|
||||
|
||||
<hr />
|
||||
|
||||
{#if user.rolle === Enums.BenutzerRolle.ADMIN}
|
||||
<!-- <div class="flex flex-col mb-4">
|
||||
<AusweisePruefenFilter bind:filters={filters}></AusweisePruefenFilter>
|
||||
</div> -->
|
||||
<form action="" class="flex flex-row gap-2 my-2">
|
||||
<input type="text" bind:value={id} name="id" placeholder="ID">
|
||||
<button class="button text-sm">Suchen</button>
|
||||
</form>
|
||||
{/if}
|
||||
|
||||
<!-- <div class="relative mb-6">
|
||||
<button class="button" on:click={() => {
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
import InputLabel from "#components/labels/InputLabel.svelte";
|
||||
import PlzSuche from "#components/PlzSuche.svelte";
|
||||
import { getMaximumDevitationInPercent } from "#client/lib/helpers.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweis_2016_Client } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Client.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Client } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Client.js";
|
||||
|
||||
|
||||
@@ -8,9 +8,11 @@ import {
|
||||
Enums,
|
||||
Objekt,
|
||||
prisma,
|
||||
Rechnung,
|
||||
VerbrauchsausweisGewerbe,
|
||||
VerbrauchsausweisWohnen,
|
||||
} from "#lib/server/prisma.js";
|
||||
import { join } from "path"
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "astro:content";
|
||||
import { transport } from "#lib/mail.js";
|
||||
@@ -20,19 +22,22 @@ import { PutObjectCommand } from "@aws-sdk/client-s3";
|
||||
import { s3Client } from "#lib/s3.js";
|
||||
import { createInvoice, getLexOfficeRechnung } from "#lib/server/invoice.js";
|
||||
import { tryCatch } from "#lib/tryCatch.js";
|
||||
import SFTPClient from 'ssh2-sftp-client';
|
||||
import {
|
||||
getBedarfsausweisWohnenKomplett,
|
||||
getVerbrauchsausweisGewerbeKomplett,
|
||||
getVerbrauchsausweisWohnenKomplett,
|
||||
} from "#lib/server/db.js";
|
||||
import { PDFDocument } from "pdf-lib";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
input: z.object({
|
||||
id_ausweis: z.string(),
|
||||
post: z.boolean().describe("Ob der Ausweis auch per Post ausgestellt werden soll.").optional().default(false)
|
||||
}),
|
||||
output: z.void(),
|
||||
middleware: adminMiddleware,
|
||||
async fetch({ id_ausweis }, context) {
|
||||
async fetch({ id_ausweis, post }, context) {
|
||||
const ausweisart = getAusweisartFromId(id_ausweis);
|
||||
|
||||
let ausweis:
|
||||
@@ -46,7 +51,8 @@ export const GET = defineApiRoute({
|
||||
objekt: Objekt & {
|
||||
benutzer: Benutzer | null;
|
||||
};
|
||||
};
|
||||
},
|
||||
rechnung: Rechnung
|
||||
})
|
||||
| null = null;
|
||||
|
||||
@@ -95,7 +101,12 @@ export const GET = defineApiRoute({
|
||||
);
|
||||
|
||||
if (error) {
|
||||
return;
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message:
|
||||
"Die Rechnung konnte bei LexOffice nicht angelegt werden..",
|
||||
cause: error
|
||||
});
|
||||
}
|
||||
|
||||
const { id, voucherNumber } = result;
|
||||
@@ -123,196 +134,239 @@ export const GET = defineApiRoute({
|
||||
ausweis.aufnahme,
|
||||
ausweis.aufnahme.objekt,
|
||||
ausweis.aufnahme.bilder,
|
||||
ausweis.aufnahme.objekt.benutzer
|
||||
ausweis.aufnahme.objekt.benutzer,
|
||||
ausweis.rechnung
|
||||
);
|
||||
|
||||
const [pdfRechnung, pdfRechnungError] = await tryCatch(getLexOfficeRechnung(rechnung));
|
||||
// TODO: Das ist immer noch scheiße, LexOffice ist doof
|
||||
// Hier müssen wir warten, damit wir sichergehen können, dass die Rechnung bei LexOffice existiert.
|
||||
setTimeout(async () => {
|
||||
const [pdfRechnung, pdfRechnungError] = await tryCatch(getLexOfficeRechnung(rechnung));
|
||||
|
||||
if (pdfRechnungError) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Rechnungs PDF konnte nicht generiert werden."
|
||||
})
|
||||
}
|
||||
|
||||
if (!pdfAusweis) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Ausweis PDF konnte nicht generiert werden."
|
||||
})
|
||||
}
|
||||
|
||||
if (!pdfDatenblatt) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Datenblatt PDF konnte nicht generiert werden."
|
||||
})
|
||||
}
|
||||
|
||||
const ausweisCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
Body: pdfAusweis,
|
||||
ACL: "private",
|
||||
});
|
||||
|
||||
await s3Client.send(ausweisCommand);
|
||||
|
||||
const datenblattCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Datenblatt.pdf`,
|
||||
Body: pdfDatenblatt,
|
||||
ACL: "private",
|
||||
});
|
||||
|
||||
await s3Client.send(datenblattCommand);
|
||||
|
||||
const rechnungsCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Rechnung.pdf`,
|
||||
Body: pdfDatenblatt,
|
||||
ACL: "private",
|
||||
});
|
||||
|
||||
await s3Client.send(rechnungsCommand);
|
||||
|
||||
let html: string;
|
||||
|
||||
if (rechnung.status === Enums.Rechnungsstatus.paid) {
|
||||
html = `
|
||||
<p>Sehr geehrte*r ${rechnung.empfaenger},</p>
|
||||
|
||||
<p>im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`;
|
||||
} else {
|
||||
html = `
|
||||
<p>Sehr geehrte*r ${rechnung.empfaenger},</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>
|
||||
|
||||
<br>
|
||||
<table>
|
||||
<tr><td>Kreditinstitut</td><td>:</td><td>\t Commerzbank AG</td>
|
||||
<tr><td>Empfänger</td><td>:</td><td>\t IB Cornelsen</td>
|
||||
<tr><td>IBAN</td><td>:<td>\t DE81 2004 0000 0348 6008 00</td>
|
||||
<tr><td>BIC</td><td>:</td><td>\t COBADEFFXXX</td>
|
||||
<tr><td>Betrag</td><td>:</td><td>\t <b>${rechnung.betrag}€</b></td>
|
||||
<tr><td>Verwendungszweck</td><td>:</td><td>\t <b>${rechnung.id}</b></td>
|
||||
</table>
|
||||
<br>
|
||||
|
||||
<p>
|
||||
Alternativ können Sie auch direkt online zahlen indem Sie auf den entsprechenden Link klicken:
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<table>
|
||||
<tr><td>Per Einzuglastschrift zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.id}&p=SEPA'>jetzt per ELV bezahlen</a></td></tr>
|
||||
<tr><td>Per Sofortüberweisung zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.id}&p=Sofort'>jetzt per Sofortüberweisung bezahlen</a></td></tr>
|
||||
<tr><td>Über PayPal zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.id}&p=PayPal'>jetzt per Paypal bezahlen</a></td></tr>
|
||||
<tr><td>Per Giropay zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.id}&p=Giropay'>jetzt per Giropay bezahlen</a></td></tr>
|
||||
<tr><td>Per Visa oder MasterCard zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.id}&p=Kreditkarte'>jetzt per Kreditkarte bezahlen</a></td></tr>
|
||||
</table>
|
||||
<br>
|
||||
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`;
|
||||
}
|
||||
|
||||
await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: rechnung.email || rechnung.benutzer.email,
|
||||
bcc: "info@online-energieausweis.org",
|
||||
subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`,
|
||||
html,
|
||||
attachments: [{
|
||||
filename: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfAusweis),
|
||||
contentType: "application/pdf",
|
||||
contentDisposition: "attachment",
|
||||
}, {
|
||||
filename: `ID_${ausweis.id}_Datenblatt.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfDatenblatt),
|
||||
contentType: "application/pdf",
|
||||
contentDisposition: "attachment",
|
||||
}, {
|
||||
filename: `ID_${ausweis.id}_Rechnung.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfRechnung),
|
||||
contentType: "application/pdf",
|
||||
contentDisposition: "attachment",
|
||||
}]
|
||||
});
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
await prisma.verbrauchsausweisWohnen.update({
|
||||
where: {
|
||||
id: ausweis.id,
|
||||
},
|
||||
data: {
|
||||
ausgestellt: true,
|
||||
},
|
||||
if (pdfRechnungError) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Rechnungs PDF konnte nicht generiert werden."
|
||||
})
|
||||
}
|
||||
|
||||
if (!pdfAusweis) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Ausweis PDF konnte nicht generiert werden."
|
||||
})
|
||||
}
|
||||
|
||||
if (!pdfDatenblatt) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Datenblatt PDF konnte nicht generiert werden."
|
||||
})
|
||||
}
|
||||
|
||||
const ausweisCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
Body: pdfAusweis,
|
||||
ACL: "private",
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
await prisma.verbrauchsausweisGewerbe.update({
|
||||
where: {
|
||||
id: ausweis.id,
|
||||
},
|
||||
data: {
|
||||
ausgestellt: true,
|
||||
},
|
||||
|
||||
await s3Client.send(ausweisCommand);
|
||||
|
||||
const datenblattCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Datenblatt.pdf`,
|
||||
Body: pdfDatenblatt,
|
||||
ACL: "private",
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
await prisma.bedarfsausweisWohnen.update({
|
||||
where: {
|
||||
id: ausweis.id,
|
||||
},
|
||||
data: {
|
||||
ausgestellt: true,
|
||||
},
|
||||
|
||||
await s3Client.send(datenblattCommand);
|
||||
|
||||
const rechnungsCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: `ID_${ausweis.id}_Rechnung.pdf`,
|
||||
Body: pdfDatenblatt,
|
||||
ACL: "private",
|
||||
});
|
||||
}
|
||||
|
||||
await s3Client.send(rechnungsCommand);
|
||||
|
||||
// Falls Postversand angefragt wurde müssen wir die Dateien auf den Postserver hochladen
|
||||
if (post) {
|
||||
const dateiNameDruck = `1011000000000-AW_ID_${ausweis.id}.pdf`;
|
||||
|
||||
const outputPdf = await PDFDocument.create();
|
||||
|
||||
async function appendPdf(buffer: Uint8Array<ArrayBufferLike>) {
|
||||
const doc = await PDFDocument.load(buffer);
|
||||
const copiedPages = await outputPdf.copyPages(doc, doc.getPageIndices());
|
||||
for (const page of copiedPages) {
|
||||
outputPdf.addPage(page);
|
||||
}
|
||||
}
|
||||
|
||||
await appendPdf(pdfDatenblatt);
|
||||
await appendPdf(pdfAusweis);
|
||||
|
||||
const pdfBytes = await outputPdf.save();
|
||||
|
||||
const pdfCommand = new PutObjectCommand({
|
||||
Bucket: "ibc-pdfs",
|
||||
Key: dateiNameDruck,
|
||||
Body: pdfBytes,
|
||||
ACL: "private",
|
||||
});
|
||||
|
||||
await s3Client.send(pdfCommand);
|
||||
|
||||
const sftp = new SFTPClient();
|
||||
|
||||
try {
|
||||
await sftp.connect({
|
||||
host: 'api.ppost.de',
|
||||
username: 'jens.cornelsen@ib-cornelsen.de',
|
||||
password: 'ANTQesWYjd',
|
||||
});
|
||||
|
||||
const cwd = await sftp.cwd();
|
||||
await sftp.put(Buffer.from(pdfBytes), join(cwd, "upload/api", dateiNameDruck));
|
||||
} catch (err) {
|
||||
console.error('SFTP Upload failed:', err);
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Login zum Postversand Server war nicht erfolgreich."
|
||||
});
|
||||
} finally {
|
||||
sftp.end();
|
||||
}
|
||||
}
|
||||
|
||||
let html: string;
|
||||
|
||||
if (rechnung.status === Enums.Rechnungsstatus.paid) {
|
||||
html = `
|
||||
<p>Sehr geehrte*r ${rechnung.empfaenger},</p>
|
||||
|
||||
<p>im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : ""} Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`;
|
||||
} else {
|
||||
html = `
|
||||
<p>Sehr geehrte*r ${rechnung.empfaenger},</p>
|
||||
|
||||
<p>im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. ${post ? "Zusätzlich haben wir Ihren Ausweis per Post verschickt" : ""} Nachfolgend finden Sie unsere Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.</p>
|
||||
|
||||
<br>
|
||||
<table>
|
||||
<tr><td>Kreditinstitut</td><td>:</td><td>\t Commerzbank AG</td>
|
||||
<tr><td>Empfänger</td><td>:</td><td>\t IB Cornelsen</td>
|
||||
<tr><td>IBAN</td><td>:<td>\t DE81 2004 0000 0348 6008 00</td>
|
||||
<tr><td>BIC</td><td>:</td><td>\t COBADEFFXXX</td>
|
||||
<tr><td>Betrag</td><td>:</td><td>\t <b>${rechnung.betrag}€</b></td>
|
||||
<tr><td>Verwendungszweck</td><td>:</td><td>\t <b>${rechnung.lex_office_id}</b></td>
|
||||
</table>
|
||||
<br>
|
||||
|
||||
<br>
|
||||
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`;
|
||||
}
|
||||
|
||||
await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: rechnung.email || rechnung.benutzer.email,
|
||||
bcc: "info@online-energieausweis.org",
|
||||
subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`,
|
||||
html,
|
||||
attachments: [{
|
||||
filename: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfAusweis),
|
||||
contentType: "application/pdf",
|
||||
contentDisposition: "attachment",
|
||||
}, {
|
||||
filename: `ID_${ausweis.id}_Datenblatt.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfDatenblatt),
|
||||
contentType: "application/pdf",
|
||||
contentDisposition: "attachment",
|
||||
}, {
|
||||
filename: `ID_${ausweis.id}_Rechnung.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfRechnung),
|
||||
contentType: "application/pdf",
|
||||
contentDisposition: "attachment",
|
||||
}]
|
||||
});
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
await prisma.verbrauchsausweisWohnen.update({
|
||||
where: {
|
||||
id: ausweis.id,
|
||||
},
|
||||
data: {
|
||||
ausgestellt: true,
|
||||
},
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
await prisma.verbrauchsausweisGewerbe.update({
|
||||
where: {
|
||||
id: ausweis.id,
|
||||
},
|
||||
data: {
|
||||
ausgestellt: true,
|
||||
},
|
||||
});
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
await prisma.bedarfsausweisWohnen.update({
|
||||
where: {
|
||||
id: ausweis.id,
|
||||
},
|
||||
data: {
|
||||
ausgestellt: true,
|
||||
},
|
||||
});
|
||||
}
|
||||
}, 3000)
|
||||
},
|
||||
});
|
||||
|
||||
@@ -194,9 +194,7 @@ export const GET = defineApiRoute({
|
||||
.Registriernummer,
|
||||
kontrolldatei_angefragt: result
|
||||
.DatenregistraturResult
|
||||
.WEB_Service_Antwort.Datendatei
|
||||
? true
|
||||
: false,
|
||||
.WEB_Service_Antwort.Datendatei == 0 ? false : true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -3,16 +3,17 @@ import { adminMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { mollieClient } from "#lib/mollie.js";
|
||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis.js";
|
||||
import { Prisma, prisma } from "#lib/server/prisma.js";
|
||||
import { RefundStatus } from "@mollie/api-client";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
input: z.object({
|
||||
uid_ausweis: UUidWithPrefix
|
||||
ausweis_id: UUidWithPrefix
|
||||
}),
|
||||
middleware: adminMiddleware,
|
||||
async fetch(input, context, transfer) {
|
||||
const adapter = getPrismaAusweisAdapter(input.uid_ausweis) as Prisma.VerbrauchsausweisWohnenDelegate;
|
||||
const adapter = getPrismaAusweisAdapter(input.ausweis_id) as Prisma.VerbrauchsausweisWohnenDelegate;
|
||||
|
||||
if (!adapter) {
|
||||
throw new APIError({
|
||||
@@ -23,7 +24,7 @@ export const PUT = defineApiRoute({
|
||||
|
||||
const ausweis = await adapter.findUnique({
|
||||
where: {
|
||||
uid: input.uid_ausweis
|
||||
id: input.ausweis_id
|
||||
}
|
||||
})
|
||||
|
||||
@@ -36,7 +37,7 @@ export const PUT = defineApiRoute({
|
||||
|
||||
const response = await adapter.findUnique({
|
||||
where: {
|
||||
uid: input.uid_ausweis
|
||||
id: input.ausweis_id
|
||||
},
|
||||
select: {
|
||||
rechnung: true
|
||||
@@ -46,7 +47,7 @@ export const PUT = defineApiRoute({
|
||||
if (!response || !response.rechnung) {
|
||||
await adapter.update({
|
||||
where: {
|
||||
uid: input.uid_ausweis
|
||||
id: input.ausweis_id
|
||||
},
|
||||
data: {
|
||||
storniert: true
|
||||
@@ -63,7 +64,7 @@ export const PUT = defineApiRoute({
|
||||
|
||||
await adapter.update({
|
||||
where: {
|
||||
uid: input.uid_ausweis
|
||||
id: input.ausweis_id
|
||||
},
|
||||
data: {
|
||||
storniert: true,
|
||||
@@ -94,10 +95,17 @@ export const PUT = defineApiRoute({
|
||||
value: rechnung.betrag.toFixed(2)
|
||||
},
|
||||
metadata: {
|
||||
rechnung_uid: rechnung.uid
|
||||
rechnung_id: rechnung.id
|
||||
},
|
||||
testmode: true
|
||||
})
|
||||
|
||||
if (refund.status === RefundStatus.failed) {
|
||||
throw new APIError({
|
||||
code: "INTERNAL_SERVER_ERROR",
|
||||
message: "Rückerstattung konnte nicht durchgeführt werden, Mollie hat die Rückerstattung abgelehnt."
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
@@ -20,12 +20,11 @@ export const PATCH = defineApiRoute({
|
||||
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
id,
|
||||
benutzer_id: user.id
|
||||
id
|
||||
}
|
||||
});
|
||||
|
||||
if (!aufnahme) {
|
||||
if (!aufnahme || (aufnahme.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Aufnahme mit dieser UID existiert nicht oder gehört nicht dem aktuellen Benutzer."
|
||||
|
||||
@@ -31,7 +31,7 @@ export const GET = defineApiRoute({
|
||||
// Falls der Nutzer nicht existiert, wird eine Fehlermeldung zurückgegeben.
|
||||
const user = await prisma.benutzer.findUnique({
|
||||
where: {
|
||||
email: input.email,
|
||||
email: input.email.toLowerCase(),
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { exclude } from "#lib/exclude.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 { BedarfsausweisGewerbeSchema } from "src/generated/zod/bedarfsausweisgewerbe.js";
|
||||
import { z } from "zod";
|
||||
@@ -31,13 +31,10 @@ export const PATCH = defineApiRoute({
|
||||
const objekt = await prisma.bedarfsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
|
||||
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { exclude } from "#lib/exclude.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 { BedarfsausweisWohnenSchema } from "src/generated/zod/bedarfsausweiswohnen.js";
|
||||
import { z } from "zod";
|
||||
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.bedarfsausweisWohnen.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
id: ctx.params.id
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
|
||||
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { exclude } from "#lib/exclude.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 { GEGNachweisGewerbeSchema } from "src/generated/zod/gegnachweisgewerbe.js";
|
||||
import { z } from "zod";
|
||||
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
id: ctx.params.id
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
|
||||
@@ -3,7 +3,7 @@ import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { exclude } from "#lib/exclude.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 { GEGNachweisWohnenSchema } from "src/generated/zod/gegnachweiswohnen.js";
|
||||
import { z } from "zod";
|
||||
@@ -30,14 +30,11 @@ export const PATCH = defineApiRoute({
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.gEGNachweisWohnen.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
id: ctx.params.id
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
|
||||
@@ -20,14 +20,11 @@ export const PATCH = defineApiRoute({
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.objekt.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
id: ctx.params.id
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Objekt konnte nicht gefunden werden."
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { z } from "zod";
|
||||
import { prisma } from "#lib/server/prisma";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
|
||||
@@ -65,6 +65,9 @@ export const PUT = defineApiRoute({
|
||||
const ausweis = await adapter.findUnique({
|
||||
where: {
|
||||
id: ausweis_id
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
})
|
||||
|
||||
@@ -75,6 +78,13 @@ export const PUT = defineApiRoute({
|
||||
});
|
||||
}
|
||||
|
||||
if (ausweis.rechnung) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Eine Rechnung für diesen Ausweis existiert bereits.",
|
||||
});
|
||||
}
|
||||
|
||||
if (ausweis.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "UNAUTHORIZED",
|
||||
|
||||
@@ -27,14 +27,11 @@ export const PATCH = defineApiRoute({
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.verbrauchsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
id: ctx.params.id
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
|
||||
@@ -28,14 +28,11 @@ export const PATCH = defineApiRoute({
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
where: {
|
||||
id: ctx.params.id,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
id: ctx.params.id
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
if (!objekt || (objekt.benutzer_id !== user.id && user.rolle !== Enums.BenutzerRolle.ADMIN)) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
@@ -52,7 +53,7 @@ export const PUT = defineApiRoute({
|
||||
})
|
||||
}
|
||||
|
||||
const id = generatePrefixedId(9, "VW");
|
||||
const id = generatePrefixedId(9, VALID_UUID_PREFIXES.VerbrauchsausweisWohnen);
|
||||
|
||||
const createdAusweis = await prisma.verbrauchsausweisWohnen.create({
|
||||
data: {
|
||||
|
||||
@@ -20,7 +20,7 @@ export const GET: APIRoute = async (Astro) => {
|
||||
const file = await getS3File("ibc-images", `${image.id}.jpg`);
|
||||
|
||||
if (!file) {
|
||||
const file = await getS3File("ibc-images", `${image.name}.jpg`)
|
||||
const file = await getS3File("ibc-images", image.name)
|
||||
|
||||
if (!file) {
|
||||
return new Response(null, { status: 404 })
|
||||
|
||||
@@ -61,7 +61,7 @@ if (id) {
|
||||
);
|
||||
}
|
||||
|
||||
aufnahme = await getAufnahme(ausweis.aufnahme_id) as Aufnahme
|
||||
aufnahme = await getAufnahme(aufnahme_id) as Aufnahme
|
||||
|
||||
if (!aufnahme) {
|
||||
// Die Aufnahme existiert wohl nicht.
|
||||
|
||||
@@ -61,7 +61,7 @@ if (id) {
|
||||
);
|
||||
}
|
||||
|
||||
aufnahme = await getAufnahme(ausweis.aufnahme_id) as Aufnahme
|
||||
aufnahme = await getAufnahme(aufnahme_id) as Aufnahme
|
||||
|
||||
if (!aufnahme) {
|
||||
// Die Aufnahme existiert wohl nicht.
|
||||
|
||||
@@ -60,7 +60,7 @@ if (id) {
|
||||
);
|
||||
}
|
||||
|
||||
aufnahme = await getAufnahme(ausweis.aufnahme_id) as Aufnahme
|
||||
aufnahme = await getAufnahme(aufnahme_id) as Aufnahme
|
||||
|
||||
if (!aufnahme) {
|
||||
// Die Aufnahme existiert wohl nicht.
|
||||
|
||||
@@ -5,7 +5,7 @@ import AusweisLayout from "#layouts/AusweisLayoutPruefung.astro";
|
||||
import { Enums } from "#lib/client/prisma";
|
||||
import { getCurrentUser } from "#lib/server/user";
|
||||
import { getAusweisartFromId } from "#components/Ausweis/types";
|
||||
import { getAufnahme, getBedarfsausweisWohnen, getBilder, getObjekt, getUnterlagen, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db";
|
||||
import { getAufnahme, getBedarfsausweisWohnen, getBilder, getObjekt, getRechnung, getUnterlagen, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db";
|
||||
|
||||
// Man sollte nur auf diese Seite kommen, wenn ein Ausweis bereits vorliegt und in der Datenbank abgespeichert wurde.
|
||||
|
||||
@@ -15,7 +15,7 @@ const user = await getCurrentUser(Astro) || {}
|
||||
const params = new URLSearchParams(await Astro.request.text());
|
||||
const searchParams = Astro.url.searchParams;
|
||||
|
||||
let ausweis, aufnahme, objekt, ausweisart, bilder, unterlagen, partner_code;
|
||||
let ausweis, aufnahme, objekt, ausweisart, bilder, unterlagen, partner_code, rechnung = null;
|
||||
|
||||
if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") || !params.has("bilder") || !params.has("ausweisart")) {
|
||||
// Rechnung und Ausweis als GET parameter
|
||||
@@ -40,6 +40,9 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") |
|
||||
objekt = await getObjekt(aufnahme?.objekt_id)
|
||||
bilder = await getBilder(ausweis.aufnahme_id)
|
||||
unterlagen = await getUnterlagen(ausweis.aufnahme_id)
|
||||
if (ausweis.rechnung_id) {
|
||||
rechnung = await getRechnung(ausweis.rechnung_id)
|
||||
}
|
||||
} else {
|
||||
// Nichts ist vorhanden
|
||||
return Astro.redirect("/404")
|
||||
@@ -65,6 +68,6 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") |
|
||||
---
|
||||
|
||||
<AusweisLayout title="Kundendaten Aufnehmen - IBCornelsen">
|
||||
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} {unterlagen} {partner_code} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
|
||||
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {rechnung} {ausweisart} {unterlagen} {partner_code} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
|
||||
</AusweisLayout>
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@ import { BenutzerClient, getAusweisartFromId, VerbrauchsausweisGewerbeClient, Ve
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js";
|
||||
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
||||
import { Aufnahme, Benutzer, Bild, Enums, Objekt, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
|
||||
import { Aufnahme, Benutzer, Bild, Enums, Objekt, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
|
||||
import { APIRoute } from "astro";
|
||||
import { createCaller } from "src/astro-typesafe-api-caller.js";
|
||||
import { getS3File } from "#lib/s3.js";
|
||||
import { getAufnahme, getBilder, getObjekt, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db.js";
|
||||
import { getAufnahme, getBilder, getObjekt, getRechnung, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db.js";
|
||||
import { getCurrentUser } from "#lib/server/user.js";
|
||||
|
||||
export const GET: APIRoute = async (Astro) => {
|
||||
@@ -22,8 +22,8 @@ export const GET: APIRoute = async (Astro) => {
|
||||
let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | null = null;
|
||||
let aufnahme: Aufnahme = {} as Aufnahme;
|
||||
let objekt: Objekt = {} as Objekt;
|
||||
let user: Benutzer = {} as Benutzer;
|
||||
let bilder: Bild[] = []
|
||||
let rechnung: Rechnung | null = null;
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
ausweis = await getVerbrauchsausweisWohnen(ausweis_id)
|
||||
@@ -42,7 +42,9 @@ export const GET: APIRoute = async (Astro) => {
|
||||
|
||||
bilder = await getBilder(ausweis.aufnahme_id)
|
||||
|
||||
user = await getCurrentUser(Astro)
|
||||
if (ausweis.rechnung_id) {
|
||||
rechnung = await getRechnung(ausweis.rechnung_id)
|
||||
}
|
||||
|
||||
let pdf: Uint8Array<ArrayBufferLike> | null = null;
|
||||
if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) {
|
||||
@@ -50,9 +52,9 @@ export const GET: APIRoute = async (Astro) => {
|
||||
// Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren.
|
||||
pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Datenblatt.pdf`)
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder);
|
||||
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, rechnung, bilder);
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder);
|
||||
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, rechnung, bilder);
|
||||
}
|
||||
|
||||
return new Response(pdf, {
|
||||
@@ -66,31 +68,17 @@ export const POST: APIRoute = async (Astro) => {
|
||||
const body = await Astro.request.text();
|
||||
const params = new URLSearchParams(body);
|
||||
|
||||
const caller = createCaller(Astro);
|
||||
|
||||
const ausweis = JSON.parse(params.get("ausweis") || "{}");
|
||||
const aufnahme = JSON.parse(params.get("aufnahme") || "{}");
|
||||
const objekt = JSON.parse(params.get("objekt") || "{}");
|
||||
const bilder = JSON.parse(params.get("bilder") || "{}");
|
||||
const ausweisart: Enums.Ausweisart = JSON.parse(params.get("ausweisart") || "")
|
||||
|
||||
let user: BenutzerClient = {};
|
||||
|
||||
try {
|
||||
user = await caller.user.self.GET.fetch(undefined, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
}
|
||||
});
|
||||
} catch (e) {
|
||||
|
||||
}
|
||||
|
||||
let pdf: Uint8Array<ArrayBufferLike> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, user, bilder);
|
||||
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, null, bilder);
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, user, bilder);
|
||||
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, null, bilder);
|
||||
}
|
||||
|
||||
return new Response(pdf, {
|
||||
|
||||
@@ -3,6 +3,7 @@ import Layout from "#layouts/Layout.astro";
|
||||
import { BASE_URI } from "#lib/constants";
|
||||
import { transport } from "#lib/mail";
|
||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
|
||||
import { Enums } from "#lib/server/prisma";
|
||||
import { getCurrentUser } from "#lib/server/user";
|
||||
|
||||
const user = await getCurrentUser(Astro)
|
||||
@@ -12,6 +13,11 @@ if (!user || !id) {
|
||||
return Astro.redirect("/")
|
||||
}
|
||||
|
||||
// Wir wollen keine Bestätigungsmail wenn ein Admin speichert.
|
||||
if (user.rolle === Enums.BenutzerRolle.ADMIN) {
|
||||
return Astro.redirect("/dashboard")
|
||||
}
|
||||
|
||||
const adapter = getPrismaAusweisAdapter(id || "")
|
||||
|
||||
if (!adapter) {
|
||||
|
||||
Reference in New Issue
Block a user