diff --git a/src/components/AusweisPruefenBox.svelte b/src/components/AusweisPruefenBox.svelte
index 80d18900..2c0b988b 100644
--- a/src/components/AusweisPruefenBox.svelte
+++ b/src/components/AusweisPruefenBox.svelte
@@ -479,11 +479,11 @@
|
- {#if aufnahme.erledigt}
+ {#if ausweis.ausgestellt}
- {:else if aufnahme.bestellt}
+ {:else if ausweis.bestellt}
diff --git a/src/lib/pdf/images/stempel-unterschrift.png b/src/lib/pdf/images/stempel-unterschrift.png
new file mode 100644
index 00000000..d0a5407d
Binary files /dev/null and b/src/lib/pdf/images/stempel-unterschrift.png differ
diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts
index 1de9435d..679d949d 100644
--- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts
+++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts
@@ -4,7 +4,7 @@ import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
import { Enums } from "@ibcornelsen/database/server";
import * as fs from "fs"
import moment from "moment";
-import { PDFDocument, PDFFont, PDFImage, PDFName, PDFNumber, PDFPage, StandardFonts, TextAlignment } from "pdf-lib";
+import { PDFDocument, PDFFont, PDFImage, PDFName, PDFNumber, PDFPage, rgb, StandardFonts, TextAlignment } from "pdf-lib";
export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) {
@@ -44,80 +44,75 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
}
pages[0].drawText(aufnahme.gebaeudetyp || "", {
- x: 181,
- y: height - 191,
+ x: 211,
+ y: height - 166,
size: 10
})
pages[0].drawText(objekt.adresse || "", {
- x: 181,
- y: height - 210,
+ x: 211,
+ y: height - 194,
size: 10
})
pages[0].drawText(aufnahme.gebaeudeteil || "", {
- x: 181,
- y: height - 226,
+ x: 211,
+ y: height - 214.5,
size: 10
})
pages[0].drawText(aufnahme.baujahr_gebaeude?.toString() || "", {
- x: 181,
- y: height - 242.5,
+ x: 211,
+ y: height - 229.5,
size: 10
})
pages[0].drawText(aufnahme.baujahr_heizung?.toString() || "", {
- x: 181,
- y: height - 259,
+ x: 211,
+ y: height - 250,
size: 10
})
pages[0].drawText(aufnahme.nutzflaeche?.toString() || "", {
- x: 181,
- y: height - 295,
+ x: 211,
+ y: height - 271.5,
size: 10
})
pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, {
- x: 181,
- y: height - 314,
+ x: 211,
+ y: height - 285,
size: 10
})
+ if (ausweis.warmwasser_enthalten) {
+ pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, {
+ x: 211,
+ y: height - 299,
+ size: 10
+ })
+ }
+
+ function checkbox(page: PDFPage, x: number, y: number) {
+ page.drawSvgPath(``, {
+ x,
+ y,
+ scale: 0.4,
+ color: rgb(0,0,0)
+ })
+ }
+
+ if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) {
+ checkbox(pages[0], 213, height - 334)
+ } else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) {
+ checkbox(pages[0], 213, height - 345)
+ } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) {
+ checkbox(pages[0], 355, height - 334)
+ } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) {
+ checkbox(pages[0], 355, height - 345)
+ }
- // const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
-
- // const adresse = fillFormField("adresse", objekt.adresse)
-
-
- // const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
-
- // const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString())
-
- // const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
-
- // const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString())
-
- // const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`)
-
- // fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
-
- // if (ausweis.warmwasser_enthalten) {
- // fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
- // }
-
- // toggleCheck("fensterlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung)
- // toggleCheck("schachtlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung)
- // toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung)
- // toggleCheck("lueftungsanlage_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung)
-
- // toggleCheck("anlass_neubau", ausweis.ausstellgrund == "Neubau")
- // toggleCheck("anlass_vermietung", ausweis.ausstellgrund == "Vermietung" || ausweis.ausstellgrund == "Verkauf")
- // toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
- // toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
-
const gebaeudeBild = bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
@@ -129,10 +124,10 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
image = await pdf.embedPng(gebaeudeBild?.base64)
}
pages[0].drawImage(image, {
- x: 424.5,
- y: height - 321,
+ x: 460.5,
+ y: height - 289,
width: 111,
- height: 143
+ height: 138
})
}
@@ -368,7 +363,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
const addEmpfehlungenGenerator = () => {
let i = 0;
let yOffset = 43;
- const initialHeight = 568
+ const initialHeight = 562
const initialXOffset = 36;
return (bauteil?: string, beschreibung?: string, alsEinzelmassnahme?: boolean, amortisationszeit?: string, kosten?: string) => {
pages[3].drawText((i + 1).toString(), {
diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts
index 2e8afcfb..6c1985c9 100644
--- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts
+++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts
@@ -5,6 +5,8 @@ import { Enums } from "@ibcornelsen/database/server";
import * as fs from "fs"
import moment from "moment";
import { PDFDocument, PDFFont, PDFImage, PDFPage, RotationTypes, StandardFonts, TextAlignment } from "pdf-lib";
+import { addCheckMark } from "./utils/checkbox.js";
+import { addText } from "./utils/text.js";
/* -------------------------------- Pdf Tools ------------------------------- */
@@ -45,7 +47,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
- const adresse = fillFormField("adresse", objekt.adresse)
+ const adresse = fillFormField("adresse", objekt.adresse || "")
const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
@@ -54,7 +56,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
- const einheiten = fillFormField("einheiten", aufnahme.einheiten?.toString())
+ const einheiten = fillFormField("einheiten", (aufnahme.einheiten || 1).toString())
const nutzflaeche = fillFormField("nutzflaeche", `${aufnahme.nutzflaeche?.toString()}m²`)
@@ -91,6 +93,48 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
})
}
+ if (aufnahme.flaeche == 0) {
+ addCheckMark(pages[0], 274, height - 277)
+ }
+
+ // Checkmark Angabe energetische Qualität des Gebäudes.
+ addCheckMark(pages[0], 43, height - 560)
+
+ // Datenerhebung durch Eigentümer
+ addCheckMark(pages[0], 298, height - 590)
+
+ // Ausstellungsdatum
+ pages[0].drawText(moment().format("DD.MM.YYYY"), {
+ font,
+ size: 10,
+ x: 508,
+ y: height - 771
+ })
+
+ // Gültig bis
+ pages[0].drawText(moment().add(10, "years").format("DD.MM.YYYY"), {
+ font: bold,
+ size: 10,
+ x: 90,
+ y: height - 113
+ })
+
+ // Stempel und Unterschrift
+
+ // TODO: ausweis.erledigt
+ if (ausweis.ausgestellt) {
+ const stempel = await pdf.embedPng(fs.readFileSync(new URL("./images/stempel-unterschrift.png", import.meta.url), "base64"));
+ const stempelHeight = 60
+
+ pages[0].drawImage(stempel, {
+ x: 450,
+ y: height - 770,
+ height: stempelHeight,
+ width: stempel.width / (stempel.height / stempelHeight)
+ })
+ }
+
+
/* -------------------------------- Seite 2 -------------------------------- */
@@ -110,9 +154,25 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
const pfeilWidth = 20
const margin = 5;
+ // Buchstaben hinzufügen und hervorheben
+ const klassen: [string, number][] = [
+ ["A+", 94],
+ ["A", 136.5],
+ ["B", 175],
+ ["C", 215],
+ ["D", 264],
+ ["E", 320],
+ ["F", 382],
+ ["G", 447],
+ ["H", 495],
+ ]
+ for (const klasse of klassen) {
+ addText(page, klasse[0], klasse[1], height - 227, 12, berechnungen?.energieEffizienzKlasse === klasse[0] ? bold : font)
+ }
+
page.drawImage(pfeilNachUnten, {
x: endenergieverbrauchTranslationX,
- y: height - 215,
+ y: height - 212,
width: pfeilWidth,
height: 30
})
@@ -149,7 +209,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
page.drawImage(pfeilNachOben, {
x: primaerenergieverbrauchTranslationX,
- y: height - 298,
+ y: height - 297,
width: pfeilWidth,
height: 30
})
@@ -184,6 +244,22 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
addEnergieverbrauchSkalaPfeile(pages[2])
+ // CO2 Emissionen
+ pages[2].drawText(berechnungen?.co2EmissionenGesamt.toString() || "", {
+ x: 392,
+ y: height - 166.5,
+ font,
+ size: 10
+ })
+
+ // Endenergieverbrauch
+ pages[2].drawText(berechnungen?.endEnergieVerbrauchGesamt.toString() || "", {
+ x: 455,
+ y: height - 326,
+ font,
+ size: 10
+ })
+
/* -------------------------------- Seite 3 -------------------------------- */
// Verbräuche
@@ -260,11 +336,11 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
addVerbrauch(
moment(ausweis.startdatum).format("MM.YYYY"),
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
- aufnahme.brennstoff_1,
+ aufnahme.brennstoff_1 || "",
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
- Math.round(berechnungen?.energieVerbrauchGesamt_1).toString(),
+ Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(),
"0",
- Math.round(berechnungen?.energieVerbrauchHeizung_1).toString(),
+ Math.round(berechnungen?.energieVerbrauchHeizung_1 || 0).toString(),
berechnungen?.durchschnittsKlimafaktor.toString()
);
} else {
@@ -272,11 +348,11 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
addVerbrauch(
moment(ausweis.startdatum).format("MM.YYYY"),
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
- aufnahme.brennstoff_1,
+ aufnahme.brennstoff_1 || "",
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
- Math.round(berechnungen?.energieVerbrauchGesamt_1).toString(),
- Math.round(berechnungen?.energieVerbrauchWarmwasser_1).toString(),
- Math.round(berechnungen?.energieVerbrauchHeizung_1).toString(),
+ Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(),
+ Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
+ Math.round(berechnungen?.energieVerbrauchHeizung_1 || 0).toString(),
berechnungen?.durchschnittsKlimafaktor.toString()
);
}
@@ -285,11 +361,11 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
addVerbrauch(
moment(ausweis.startdatum).format("MM.YYYY"),
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
- aufnahme.brennstoff_2,
+ aufnahme.brennstoff_2 || "",
berechnungen?.brennstoff_2.primaerenergiefaktor.toString(),
- Math.round(berechnungen?.energieVerbrauchGesamt_2).toString(),
- Math.round(berechnungen?.energieVerbrauchWarmwasser_2).toString(),
- Math.round(berechnungen?.energieVerbrauchHeizung_2).toString(),
+ Math.round(berechnungen?.energieVerbrauchGesamt_2 || 0).toString(),
+ Math.round(berechnungen?.energieVerbrauchWarmwasser_2 || 0).toString(),
+ Math.round(berechnungen?.energieVerbrauchHeizung_2 || 0).toString(),
berechnungen?.durchschnittsKlimafaktor.toString()
);
}
@@ -304,8 +380,8 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
"Warmwasserzuschlag",
berechnungen?.primaerfaktorww.toString(),
- Math.round(berechnungen?.energieVerbrauchWarmwasser_1).toString(),
- Math.round(berechnungen?.energieVerbrauchWarmwasser_1).toString(),
+ Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
+ Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
"0",
"0"
);
@@ -322,9 +398,9 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
"Leerstandszuschlag",
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
- Math.round(berechnungen?.leerstandsZuschlagHeizung + berechnungen?.leerstandsZuschlagWarmwasser).toString(),
- Math.round(berechnungen?.leerstandsZuschlagWarmwasser).toString(),
- Math.round(berechnungen?.leerstandsZuschlagHeizung).toString(),
+ Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
+ Math.round((berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
+ Math.round((berechnungen?.leerstandsZuschlagHeizung || 0)).toString(),
berechnungen?.durchschnittsKlimafaktor.toString()
);
} else {
@@ -333,7 +409,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
"Leerstandszuschlag",
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
- Math.round(berechnungen?.leerstandsZuschlagHeizung + berechnungen?.leerstandsZuschlagWarmwasser).toString(),
+ Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
"0",
"0",
berechnungen?.durchschnittsKlimafaktor.toString()
@@ -352,7 +428,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
"Leerstandszuschlag",
berechnungen?.primaerfaktorww.toString(),
- Math.round(berechnungen?.kuehlungsZuschlag).toString(),
+ Math.round(berechnungen?.kuehlungsZuschlag || 0).toString(),
"0",
"0",
"1.8"
@@ -447,11 +523,21 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
})
}
+ function addDatumGEG(page: PDFPage, font: PDFFont) {
+ page.drawText("20. Juli 2022", {
+ x: 308,
+ y: page.getHeight() - 70,
+ size: 10,
+ font
+ })
+ }
+
for (const page of pages) {
addAnsichtsausweisLabel(page, font)
+ addDatumGEG(page, font)
}
- // pdf.getForm().flatten()
+ pdf.getForm().flatten()
return pdf.save();
}
\ No newline at end of file
diff --git a/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf b/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf
index 5aee3f6c..6d700892 100644
Binary files a/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf and b/src/lib/pdf/templates/GEG24_Nichtwohngebaeude.pdf differ
diff --git a/src/lib/pdf/utils/checkbox.ts b/src/lib/pdf/utils/checkbox.ts
new file mode 100644
index 00000000..d2cf7270
--- /dev/null
+++ b/src/lib/pdf/utils/checkbox.ts
@@ -0,0 +1,13 @@
+import { PDFPage, rgb } from "pdf-lib";
+
+export function addCheckMark(page: PDFPage, x: number, y: number) {
+ page.drawSvgPath(
+ ``,
+ {
+ x,
+ y,
+ scale: 0.4,
+ color: rgb(0, 0, 0),
+ }
+ );
+}
diff --git a/src/lib/pdf/utils/text.ts b/src/lib/pdf/utils/text.ts
new file mode 100644
index 00000000..1a175e2e
--- /dev/null
+++ b/src/lib/pdf/utils/text.ts
@@ -0,0 +1,7 @@
+import { PDFField, PDFFont, PDFPage } from "pdf-lib";
+
+export function addText(page: PDFPage, text: string, x: number, y: number, size: number, font: PDFFont) {
+ page.drawText(text, {
+ font, x, y, size
+ })
+}
\ No newline at end of file
diff --git a/src/pages/api/rechnung/index.ts b/src/pages/api/rechnung/index.ts
index 32da79b1..28e76488 100644
--- a/src/pages/api/rechnung/index.ts
+++ b/src/pages/api/rechnung/index.ts
@@ -113,6 +113,41 @@ 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.",
+ });
+ }
+
if (bezahlmethode === Enums.Bezahlmethoden.rechnung) {
return { uid: rechnung.uid }
}
|