2
.gitignore
vendored
2
.gitignore
vendored
@@ -34,7 +34,7 @@ dbml/schema.dbml
|
||||
|
||||
prisma/migrations/20250315143314_/migration.sql
|
||||
|
||||
src/astro-typesafe-api-caller.ts
|
||||
# src/astro-typesafe-api-caller.ts
|
||||
|
||||
src/testing/ausweise.csv
|
||||
src/testing/users.csv
|
||||
|
||||
Binary file not shown.
45
src/astro-typesafe-api-caller.ts
Normal file
45
src/astro-typesafe-api-caller.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { createCallerFactory } from "astro-typesafe-api/server";
|
||||
|
||||
export const createCaller = createCallerFactory({
|
||||
"bild": await import("../src/pages/api/bild.ts"),
|
||||
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
|
||||
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
||||
"unterlage": await import("../src/pages/api/unterlage.ts"),
|
||||
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
|
||||
"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"),
|
||||
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
|
||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||
"bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
|
||||
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
|
||||
"bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||
"bilder/[id]": await import("../src/pages/api/bilder/[id].ts"),
|
||||
"geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"),
|
||||
"geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"),
|
||||
"geg-nachweis-wohnen/[id]": await import("../src/pages/api/geg-nachweis-wohnen/[id].ts"),
|
||||
"geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"),
|
||||
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
||||
"rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"),
|
||||
"rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
|
||||
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
|
||||
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
||||
"user": await import("../src/pages/api/user/index.ts"),
|
||||
"user/self": await import("../src/pages/api/user/self.ts"),
|
||||
"verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"),
|
||||
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
|
||||
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
|
||||
"verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
|
||||
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
||||
"aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"),
|
||||
"aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"),
|
||||
"aufnahme/[id]/unterlagen": await import("../src/pages/api/aufnahme/[id]/unterlagen.ts"),
|
||||
"objekt/[id]": await import("../src/pages/api/objekt/[id]/index.ts"),
|
||||
})
|
||||
@@ -124,7 +124,7 @@ let lightTheme = Astro.cookies.get("theme")?.value === "light";
|
||||
client:load
|
||||
/>
|
||||
|
||||
<article class="box px-6 py-5 h-screen">
|
||||
<article class="box px-6 py-5 h-full">
|
||||
<slot />
|
||||
</article>
|
||||
</main>
|
||||
|
||||
@@ -85,13 +85,13 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
let energieVerbrauchWarmwasser_1 = 0;
|
||||
let energieVerbrauchWarmwasser_2 = 0;
|
||||
|
||||
if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 != 0) {
|
||||
if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 != 0 && ausweis.anteil_warmwasser_1 !== null) {
|
||||
|
||||
// Wenn Warmwasser enthalten und Anteil bekannt
|
||||
energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_warmwasser_1 || 0) / 100);
|
||||
energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
|
||||
|
||||
} else if (ausweis.warmwasser_enthalten && ausweis.anteil_warmwasser_1 == 0){
|
||||
} else if (ausweis.warmwasser_enthalten && (ausweis.anteil_warmwasser_1 == 0 || ausweis.anteil_warmwasser_1 === null)) {
|
||||
if (aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre)" || aufnahme.gebaeudetyp == "Krankenhäuser (ohne Forschung und Lehre) & teilstationäre Versorgung" || aufnahme.gebaeudetyp == "Schwimmhallen") {
|
||||
energieVerbrauchWarmwasser_1 = energieVerbrauchGesamt_1 * 0.5;
|
||||
energieVerbrauchWarmwasser_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_warmwasser_2 || 0) / 100);
|
||||
@@ -107,8 +107,14 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
energieVerbrauchWarmwasser_2 = 0;
|
||||
}
|
||||
|
||||
let kuehlungsZuschlag_1: number = 0, kuehlungsZuschlag_2: number = 0;
|
||||
if (aufnahme.kuehlung) {
|
||||
let kuehlungsZuschlag_1: number = 0, kuehlungsZuschlag_2: number = 0; let kuehlungsZuschlag = 0;
|
||||
if (aufnahme.kuehlung === "1" && aufnahme.kuehlung !== null) {
|
||||
|
||||
kuehlungsZuschlag = 6 * nutzflaeche * 3;
|
||||
}
|
||||
if (ausweis.kuehlung_enthalten && ausweis.kuehlung_enthalten !== null)
|
||||
{
|
||||
|
||||
kuehlungsZuschlag_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_kuehlung_1 || 0) / 100);
|
||||
kuehlungsZuschlag_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_kuehlung_2 || 0) / 100);
|
||||
}
|
||||
@@ -168,7 +174,7 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
let co2EmissionenKuehlungsZuschlag_1 = endEnergieVerbrauchKuehlungsZuschlag_1 * brennstoff_1.coe;
|
||||
let co2EmissionenKuehlungsZuschlag_2 = endEnergieVerbrauchKuehlungsZuschlag_2 * brennstoff_2.coe;
|
||||
|
||||
let endEnergieVerbrauchGesamt = endEnergieVerbrauch_1 + endEnergieVerbrauch_2 + endEnergieVerbrauchLeerstandsZuschlag;
|
||||
let endEnergieVerbrauchGesamt = endEnergieVerbrauch_1 + endEnergieVerbrauch_2 + endEnergieVerbrauchLeerstandsZuschlag + (kuehlungsZuschlag / (3 * nutzflaeche));
|
||||
let primaerEnergieVerbrauchGesamt = primaerEnergieVerbrauch_1 + primaerEnergieVerbrauch_2 + primaerEnergieVerbrauchLeerstandsZuschlag + primaerEnergieVerbrauchStrom;
|
||||
let co2EmissionenGesamt = co2Emissionen_1 + co2Emissionen_2 + co2EmissionenLeerstandsZuschlag + co2EmissionenStrom;
|
||||
|
||||
@@ -180,6 +186,7 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
brennstoff_2,
|
||||
kuehlungsZuschlag_1 : Math.round(kuehlungsZuschlag_1),
|
||||
kuehlungsZuschlag_2: Math.round(kuehlungsZuschlag_2),
|
||||
kuehlungsZuschlag: Math.round(kuehlungsZuschlag),
|
||||
durchschnittsKlimafaktor : Math.round(durchschnittsKlimafaktor * 100) / 100,
|
||||
Klimafaktor_1 : klimafaktoren[0],
|
||||
Klimafaktor_2 : klimafaktoren[1],
|
||||
|
||||
@@ -116,7 +116,7 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016(
|
||||
energieVerbrauchHeizung_2 * durchschnittsKlimafaktor;
|
||||
|
||||
let kuehlungsZuschlag = 0;
|
||||
if (aufnahme.kuehlung) {
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
kuehlungsZuschlag = 6 * 3 * energetischeNutzflaeche;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
const marginY = 150;
|
||||
|
||||
benutzer = benutzer || {
|
||||
firma: "Max Mustermann GmbH",
|
||||
vorname: "Max",
|
||||
name: "Mustermann",
|
||||
adresse: "Musterstraße 123",
|
||||
@@ -53,7 +54,7 @@ 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.vorname} ${benutzer.name}</text>
|
||||
<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>
|
||||
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
||||
|
||||
@@ -4,7 +4,6 @@ import { Enums } from "#lib/server/prisma.js";
|
||||
import * as fs from "fs"
|
||||
import moment from "moment";
|
||||
import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib";
|
||||
import { addCheckMark } from "./utils/checkbox.js";
|
||||
import { addText } from "./utils/text.js";
|
||||
import { addAnsichtsausweisLabel, addDatumGEG, addRegistriernummer } from "./utils/helpers.js";
|
||||
import { getS3File } from "#lib/s3.js";
|
||||
@@ -103,7 +102,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
})
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, {
|
||||
pages[3].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 299,
|
||||
size: 10
|
||||
@@ -112,30 +111,73 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
|
||||
if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) {
|
||||
addCheckMark(pages[0], 213, height - 334)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 342,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) {
|
||||
addCheckMark(pages[0], 213, height - 345)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 353,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) {
|
||||
addCheckMark(pages[0], 355, height - 334)
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 342,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) {
|
||||
addCheckMark(pages[0], 355, height - 345)
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 353,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
// Kühlung
|
||||
if (aufnahme.kuehlung) {
|
||||
addCheckMark(pages[0], 213, height - 362.5)
|
||||
} else {
|
||||
addCheckMark(pages[0], 355, height - 373.5)
|
||||
if (aufnahme.kuehlung === "1" && aufnahme.kuehlung !== null) {
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 370.5,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) {
|
||||
addCheckMark(pages[0], 213, height - 406)
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung) {
|
||||
addCheckMark(pages[0], 213, height - 417)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 414,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung || ausweis.ausstellgrund === Enums.Ausstellgrund.Verkauf) {
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 425,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Modernisierung) {
|
||||
addCheckMark(pages[0], 344.5, height - 406)
|
||||
pages[0].drawText("x", {
|
||||
x: 345.5,
|
||||
y: height - 414,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Sonstiges) {
|
||||
addCheckMark(pages[0], 463, height - 417)
|
||||
pages[0].drawText("x", {
|
||||
x: 464,
|
||||
y: height - 425,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
// Aushangpflicht
|
||||
// addCheckMark(pages[0], 463, height - 406)
|
||||
@@ -161,11 +203,21 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
}
|
||||
}
|
||||
|
||||
// Checkmark Angabe energetische Qualität des Gebäudes.
|
||||
addCheckMark(pages[0], 40, height - 550)
|
||||
// Checkmark Verbrauchsausweis.
|
||||
pages[0].drawText("x", {
|
||||
x: 41,
|
||||
y: height - 558,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
|
||||
// Datenerhebung durch Eigentümer
|
||||
addCheckMark(pages[0], 295, height - 580)
|
||||
pages[0].drawText("x", {
|
||||
x: 296.5,
|
||||
y: height - 587.5,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
|
||||
// Ausstellungsdatum
|
||||
pages[0].drawText(moment().format("DD.MM.YYYY"), {
|
||||
@@ -186,7 +238,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
// Stempel und Unterschrift
|
||||
if (ausweis.ausgestellt || !vorschau) {
|
||||
const stempel = await pdf.embedPng(fs.readFileSync(new URL("../../../public/pdf/images/stempel-unterschrift.png", import.meta.url), "base64"));
|
||||
const stempelHeight = 60
|
||||
const stempelHeight = 65
|
||||
|
||||
pages[0].drawImage(stempel, {
|
||||
x: 450,
|
||||
@@ -200,10 +252,10 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
// Aussteller
|
||||
const aussteller = await pdf.embedPng(fs.readFileSync(new URL("../../../public/pdf/images/aussteller.png", import.meta.url), "base64"));
|
||||
pages[0].drawImage(aussteller, {
|
||||
x: 40,
|
||||
y: height - 750,
|
||||
width: 100,
|
||||
height: 50
|
||||
x: 260,
|
||||
y: height - 755,
|
||||
width: 130,
|
||||
height: 65
|
||||
})
|
||||
|
||||
|
||||
@@ -216,10 +268,10 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
const pfeilNachOben = await pdf.embedPng(fs.readFileSync(new URL("../../../public/images/pfeil-nach-oben.png", import.meta.url), "base64"))
|
||||
|
||||
// Wir müssen den berechneten Wert zwischen 0 und 1000 als Wert zwischen 0 und 1 festlegen
|
||||
const endenergieverbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / 1000
|
||||
const stromVerbrauchTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.endEnergieVerbrauchStrom || 0)) / 1000
|
||||
const vergleichsWertWaermeTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.vergleichsWertWaerme || 0)) / 1000
|
||||
const vergleichsWertStromTranslationPercentage = Math.min(1000, Math.max(0, berechnungen?.vergleichsWertStrom || 0)) / 1000
|
||||
const endenergieverbrauchTranslationPercentage = Math.min((berechnungen?.vergleichsWertWaerme * 2), Math.max(0, berechnungen?.endEnergieVerbrauchGesamt || 0)) / (berechnungen?.vergleichsWertWaerme * 2)
|
||||
const stromVerbrauchTranslationPercentage = Math.min((berechnungen?.vergleichsWertStrom * 2), Math.max(0, berechnungen?.endEnergieVerbrauchStrom || 0)) / (berechnungen?.vergleichsWertStrom * 2)
|
||||
const vergleichsWertWaermeTranslationPercentage = Math.min((berechnungen?.vergleichsWertWaerme * 2), Math.max(0, berechnungen?.vergleichsWertWaerme || 0)) / (berechnungen?.vergleichsWertWaerme * 2)
|
||||
const vergleichsWertStromTranslationPercentage = Math.min((berechnungen?.vergleichsWertStrom * 2), Math.max(0, berechnungen?.vergleichsWertStrom || 0)) / (berechnungen?.vergleichsWertStrom * 2)
|
||||
|
||||
const minTranslation = 78
|
||||
const maxTranslation = 512
|
||||
@@ -244,15 +296,64 @@ 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,
|
||||
y: height - 241,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText(vergleichswertWaermeText2, {
|
||||
x: 295,
|
||||
y: height - 241,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText(MaxvergleichsWertWaermeText, {
|
||||
x: vergleichsWertWaermeTranslationX * 2 - 78,
|
||||
y: height - 241,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText("0", {
|
||||
x: 85,
|
||||
y: height - 385,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText(vergleichswertStromText2, {
|
||||
x: 295,
|
||||
y: height - 385,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
page.drawText(MaxvergleichswertStromText, {
|
||||
x: vergleichsWertStromTranslationX * 2 - 78,
|
||||
y: height - 385,
|
||||
size: 13,
|
||||
font: bold
|
||||
})
|
||||
|
||||
const endEnergieVerbrauchGesamtText = `${berechnungen?.endEnergieVerbrauchGesamt.toString()}kWh/(m²a)`;
|
||||
const stromVerbrauchGesamtText = `${berechnungen?.endEnergieVerbrauchStrom.toString()}kWh/(m²a)`;
|
||||
const vergleichswertWaermeText = `${berechnungen?.vergleichsWertWaerme.toString()}kWh/(m²a)`
|
||||
const vergleichswertStromText = `${berechnungen?.vergleichsWertStrom.toString()}kWh/(m²a)`
|
||||
|
||||
if (endenergieverbrauchTranslationPercentage > 0.5) {
|
||||
page.drawText("Endenergieverbrauch Wärme", {
|
||||
x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch", 10),
|
||||
x: endenergieverbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Wärme", 10),
|
||||
y: height - 191,
|
||||
size: 10
|
||||
})
|
||||
@@ -279,7 +380,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
if (vergleichsWertWaermeTranslationPercentage > 0.5) {
|
||||
page.drawText("Vergleichswert Wärme", {
|
||||
x: vergleichsWertWaermeTranslationX - margin - font.widthOfTextAtSize("Vergleichswert", 10),
|
||||
x: vergleichsWertWaermeTranslationX - margin - font.widthOfTextAtSize("Vergleichswert Wärme", 10),
|
||||
y: height - 275,
|
||||
size: 10
|
||||
})
|
||||
@@ -318,9 +419,9 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
height: 30
|
||||
})
|
||||
|
||||
if (endenergieverbrauchTranslationPercentage > 0.5) {
|
||||
if (stromVerbrauchTranslationPercentage > 0.5) {
|
||||
page.drawText("Endenergieverbrauch Strom", {
|
||||
x: stromVerbrauchTranslationX - margin - font.widthOfTextAtSize("Primärenergieverbrauch", 10),
|
||||
x: stromVerbrauchTranslationX - margin - font.widthOfTextAtSize("Endenergieverbrauch Strom", 10),
|
||||
y: height - 335,
|
||||
size: 10
|
||||
})
|
||||
@@ -347,7 +448,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
if (vergleichsWertWaermeTranslationPercentage > 0.5) {
|
||||
page.drawText("Vergleichswert Strom", {
|
||||
x: vergleichsWertStromTranslationX - margin - font.widthOfTextAtSize("Vergleichswert", 10),
|
||||
x: vergleichsWertStromTranslationX - margin - font.widthOfTextAtSize("Vergleichswert Strom", 10),
|
||||
y: height - 420,
|
||||
size: 10
|
||||
})
|
||||
@@ -376,35 +477,75 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
addEnergieverbrauchSkalaPfeile(pages[2])
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
addCheckMark(pages[2], 41, height - 293)
|
||||
pages[2].drawText("x", {
|
||||
x: 42,
|
||||
y: height - 301,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.kuehlung_enthalten) {
|
||||
addCheckMark(pages[2], 41, height - 305)
|
||||
pages[2].drawText("x", {
|
||||
x: 42,
|
||||
y: height - 313,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.stromverbrauch_enthaelt_heizung) {
|
||||
addCheckMark(pages[2], 41, height - 456)
|
||||
pages[2].drawText("x", {
|
||||
x: 42,
|
||||
y: height - 464,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.stromverbrauch_enthaelt_warmwasser) {
|
||||
addCheckMark(pages[2], 131, height - 456)
|
||||
pages[2].drawText("x", {
|
||||
x: 132,
|
||||
y: height - 464,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.stromverbrauch_enthaelt_lueftung) {
|
||||
addCheckMark(pages[2], 218, height - 456)
|
||||
pages[2].drawText("x", {
|
||||
x: 219,
|
||||
y: height - 464,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.stromverbrauch_enthaelt_beleuchtung) {
|
||||
addCheckMark(pages[2], 281, height - 456)
|
||||
pages[2].drawText("x", {
|
||||
x: 282,
|
||||
y: height - 464,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.stromverbrauch_enthaelt_kuehlung) {
|
||||
addCheckMark(pages[2], 422, height - 456)
|
||||
pages[2].drawText("x", {
|
||||
x: 423,
|
||||
y: height - 464,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.stromverbrauch_enthaelt_sonstige) {
|
||||
addCheckMark(pages[2], 492, height - 456)
|
||||
pages[2].drawText("x", {
|
||||
x: 493,
|
||||
y: height - 464,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
addText(pages[2], berechnungen?.primaerEnergieVerbrauchGesamt.toString() || "", 475, height - 637, 10, font)
|
||||
@@ -498,7 +639,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
const addVerbrauch = addVerbrauchGenerator();
|
||||
|
||||
if (!ausweis.warmwasser_enthalten) {
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
// Mit Warmwasserzuschlag
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
@@ -506,7 +647,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
ausweis.brennstoff_1 || "",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(),
|
||||
"0",
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
berechnungen?.endEnergieVerbrauchKuehlungsZuschlag_1,
|
||||
Math.round(berechnungen?.energieVerbrauchHeizung_1 || 0).toString(),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString(),
|
||||
@@ -545,7 +686,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
|
||||
// TODO
|
||||
if (!ausweis.warmwasser_enthalten) {
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
/**
|
||||
* Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m²
|
||||
* @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
@@ -592,7 +733,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
}
|
||||
}
|
||||
|
||||
if (aufnahme.kuehlung) {
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
/**
|
||||
* Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m²
|
||||
* Primärenergiefaktor Strom
|
||||
@@ -605,9 +746,9 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
"",
|
||||
// TODO
|
||||
// berechnungen?.primaerfaktorww.toString(),
|
||||
Math.round(berechnungen?.kuehlungsZuschlag_1 || 0).toString(),
|
||||
"0",
|
||||
0,
|
||||
"",
|
||||
"",
|
||||
Math.round(berechnungen?.kuehlungsZuschlag || 0),
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import { Enums } from "#lib/server/prisma.js";
|
||||
import * as fs from "fs"
|
||||
import moment from "moment";
|
||||
import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib";
|
||||
import { addCheckMark } from "./utils/checkbox.js";
|
||||
import { addText } from "./utils/text.js";
|
||||
import { addAnsichtsausweisLabel, addDatumGEG, addRegistriernummer } from "./utils/helpers.js";
|
||||
import { getS3File } from "#lib/s3.js";
|
||||
@@ -12,6 +11,7 @@ import { endEnergieVerbrauchVerbrauchsausweis_2016_Server } from "#lib/Berechnun
|
||||
|
||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||
|
||||
|
||||
export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, vorschau = true) {
|
||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/GEG24_Wohngebaeude_ohne_pfeile.pdf", import.meta.url), "base64");
|
||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||
@@ -28,6 +28,18 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
const font = await pdf.embedFont(StandardFonts.Helvetica)
|
||||
const bold = await pdf.embedFont(StandardFonts.HelveticaBold)
|
||||
|
||||
|
||||
for (let i = 0; i < pages.length; i++) {
|
||||
const page = pages[i];
|
||||
if (vorschau) {
|
||||
addAnsichtsausweisLabel(page, font)
|
||||
}
|
||||
addDatumGEG(page, font)
|
||||
if (i !== pages.length - 1) {
|
||||
addRegistriernummer(page, font, ausweis.registriernummer || "")
|
||||
}
|
||||
}
|
||||
|
||||
pages[0].drawText(`ID: ${ausweis.id || ""}`, {
|
||||
x: 211,
|
||||
y: height - 112.5,
|
||||
@@ -40,9 +52,34 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
size: 10
|
||||
})
|
||||
|
||||
const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
|
||||
|
||||
if (bild) {
|
||||
const file = await getS3File("ibc-images", `${bild.id}.jpg`);
|
||||
|
||||
if (file) {
|
||||
let image: PDFImage;
|
||||
image = await pdf.embedJpg(file)
|
||||
pages[0].drawImage(image, {
|
||||
x: 460.5,
|
||||
y: height - 289,
|
||||
width: 111,
|
||||
height: 138
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pages[0].drawText(objekt.adresse || "", {
|
||||
x: 211,
|
||||
y: height - 194,
|
||||
y: height - 188.5,
|
||||
size: 10
|
||||
})
|
||||
|
||||
|
||||
const plzOrt = `${objekt.plz || ""} ${objekt.ort || ""}`
|
||||
pages[0].drawText(plzOrt || "", {
|
||||
x: 211,
|
||||
y: height - 200,
|
||||
size: 10
|
||||
})
|
||||
|
||||
@@ -70,18 +107,36 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
size: 10
|
||||
})
|
||||
|
||||
pages[0].drawText(aufnahme.nutzflaeche?.toString() || "", {
|
||||
pages[0].drawText(Math.round(berechnungen?.energetischeNutzflaeche || 0).toString() || "", {
|
||||
x: 211,
|
||||
y: height - 285,
|
||||
size: 10
|
||||
})
|
||||
|
||||
// Nach 82 aus Wohnfläche ermittelt
|
||||
if (aufnahme.nutzflaeche == 0) {
|
||||
pages[0].drawText("x", {
|
||||
x: 275,
|
||||
y: height - 285,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 298.5,
|
||||
size: 10
|
||||
})
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 299,
|
||||
size: 10
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
@@ -91,6 +146,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
}
|
||||
|
||||
|
||||
|
||||
const erneuerbareEnergienVerwendung = []
|
||||
|
||||
if (ausweis.alternative_heizung) {
|
||||
@@ -115,69 +171,91 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
size: 8
|
||||
})
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 299,
|
||||
size: 10
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) {
|
||||
addCheckMark(pages[0], 213, height - 347)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 355,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) {
|
||||
addCheckMark(pages[0], 213, height - 358)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 366,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) {
|
||||
addCheckMark(pages[0], 355, height - 347)
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 355,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) {
|
||||
addCheckMark(pages[0], 355, height - 358)
|
||||
pages[0].drawText("x", {
|
||||
x: 356,
|
||||
y: height - 366,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
// Kühlung
|
||||
if (aufnahme.kuehlung) {
|
||||
addCheckMark(pages[0], 213, height - 375.5)
|
||||
} else {
|
||||
addCheckMark(pages[0], 355, height - 386.5)
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
pages[0].drawText("x", {
|
||||
x: 213,
|
||||
y: height - 383.5,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) {
|
||||
addCheckMark(pages[0], 213, height - 419)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 427,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung || ausweis.ausstellgrund === Enums.Ausstellgrund.Verkauf) {
|
||||
addCheckMark(pages[0], 213, height - 430)
|
||||
pages[0].drawText("x", {
|
||||
x: 214,
|
||||
y: height - 438,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Modernisierung) {
|
||||
addCheckMark(pages[0], 344.5, height - 419)
|
||||
pages[0].drawText("x", {
|
||||
x: 345.5,
|
||||
y: height - 427,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Sonstiges) {
|
||||
addCheckMark(pages[0], 463, height - 419)
|
||||
}
|
||||
|
||||
const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
|
||||
|
||||
if (bild) {
|
||||
const file = await getS3File("ibc-images", `${bild.id}.jpg`);
|
||||
|
||||
if (file) {
|
||||
let image: PDFImage;
|
||||
image = await pdf.embedJpg(file)
|
||||
pages[0].drawImage(image, {
|
||||
x: 460.5,
|
||||
y: height - 289,
|
||||
width: 111,
|
||||
height: 138
|
||||
pages[0].drawText("x", {
|
||||
x: 464,
|
||||
y: height - 427,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Nach 82 aus Wohnfläche ermittelt
|
||||
if (aufnahme.flaeche == 0) {
|
||||
addCheckMark(pages[0], 274, height - 277)
|
||||
}
|
||||
|
||||
// Checkmark Angabe energetische Qualität des Gebäudes.
|
||||
addCheckMark(pages[0], 43, height - 560)
|
||||
// Checkmark Angabe Verbrauchsausweis
|
||||
pages[0].drawText("x", {
|
||||
x: 44,
|
||||
y: height - 568,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
|
||||
// Datenerhebung durch Eigentümer
|
||||
addCheckMark(pages[0], 298, height - 590)
|
||||
pages[0].drawText("x", {
|
||||
x: 299,
|
||||
y: height - 598,
|
||||
size: 10,
|
||||
font: bold
|
||||
})
|
||||
|
||||
// Ausstellungsdatum
|
||||
pages[0].drawText(moment().format("DD.MM.YYYY"), {
|
||||
@@ -198,7 +276,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
// Stempel und Unterschrift
|
||||
if (!vorschau) {
|
||||
const stempel = await pdf.embedPng(fs.readFileSync(new URL("../../../public/pdf/images/stempel-unterschrift.png", import.meta.url), "base64"));
|
||||
const stempelHeight = 60
|
||||
const stempelHeight = 65
|
||||
|
||||
pages[0].drawImage(stempel, {
|
||||
x: 450,
|
||||
@@ -212,10 +290,10 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
const aussteller = await pdf.embedPng(fs.readFileSync(new URL("../../../public/pdf/images/aussteller.png", import.meta.url), "base64"));
|
||||
|
||||
pages[0].drawImage(aussteller, {
|
||||
x: 40,
|
||||
y: height - 770,
|
||||
width: 100,
|
||||
height: 50
|
||||
x: 260,
|
||||
y: height - 775,
|
||||
width: 130,
|
||||
height: 65
|
||||
})
|
||||
|
||||
|
||||
@@ -326,7 +404,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
}
|
||||
}
|
||||
|
||||
addEnergieverbrauchSkalaPfeile(pages[2])
|
||||
|
||||
|
||||
// CO2 Emissionen
|
||||
pages[2].drawText(berechnungen?.co2EmissionenGesamt.toString() || "", {
|
||||
@@ -336,6 +414,8 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
size: 10
|
||||
})
|
||||
|
||||
addEnergieverbrauchSkalaPfeile(pages[2])
|
||||
|
||||
// Endenergieverbrauch
|
||||
pages[2].drawText(berechnungen?.endEnergieVerbrauchGesamt.toString() || "", {
|
||||
x: 455,
|
||||
@@ -501,7 +581,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
}
|
||||
}
|
||||
|
||||
if (aufnahme.kuehlung) {
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
/**
|
||||
* Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m²
|
||||
* Primärenergiefaktor Strom
|
||||
@@ -593,16 +673,5 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
addEmpfehlung(empfehlung.anlagenteil, empfehlung.description, true, empfehlung.amortisationszeit, empfehlung.kosten)
|
||||
}
|
||||
|
||||
for (let i = 0; i < pages.length; i++) {
|
||||
const page = pages[i];
|
||||
if (vorschau) {
|
||||
addAnsichtsausweisLabel(page, font)
|
||||
}
|
||||
addDatumGEG(page, font)
|
||||
if (i !== pages.length - 1) {
|
||||
addRegistriernummer(page, font, ausweis.registriernummer || "")
|
||||
}
|
||||
}
|
||||
|
||||
return pdf.save();
|
||||
}
|
||||
@@ -122,7 +122,7 @@ export async function createInvoice(
|
||||
},
|
||||
title: "Rechnung",
|
||||
introduction:
|
||||
"Ihren Energieausweis (Ausweis ID {ausweis.id}) stellen wir Ihnen hiermit in Rechnung",
|
||||
`Ihren Energieausweis (Ausweis ID ${ausweis.id}) stellen wir Ihnen hiermit in Rechnung`,
|
||||
remark: "Vielen Dank für Ihren Einkauf.",
|
||||
};
|
||||
|
||||
|
||||
@@ -1016,7 +1016,8 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
|
||||
|
||||
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen}
|
||||
<!-- Verbrauchsausweis Wohnen [altes System: $ausweis->anteil_warmwasser_1 < 6 OR $ausweis->anteil_warmwasser_1 > 40] -->
|
||||
{#if (ausweis.anteil_warmwasser_1 < 6) || (ausweis.anteil_warmwasser_1 > 40)}
|
||||
{#if (ausweis.anteil_warmwasser_1 !== null)}
|
||||
{#if ((ausweis.anteil_warmwasser_1 < 6) && (ausweis.anteil_warmwasser_1 != 0)) || (ausweis.anteil_warmwasser_1 > 40)}
|
||||
<div class="pruefpunkt">
|
||||
<input type="checkbox" name="pruefpunkt_anteil_warmwasser" bind:checked={ausweis.pruefpunkt_anteil_warmwasser} required/>
|
||||
<div class="text-left">
|
||||
@@ -1025,6 +1026,7 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
{/if}
|
||||
{#if ausweisart === Enums.Ausweisart.BedarfsausweisWohnen}
|
||||
<!-- Zusätzlich beim Bedarfsausweis [altes System: $ausweis->wohnflaeche < $ausweis->energetische_nutzfläche] -->
|
||||
{#if ausweis.flaeche < ausweis.nutzflaeche}
|
||||
|
||||
@@ -67,9 +67,11 @@ export const GET = defineApiRoute({
|
||||
|
||||
const rechnung = await prisma.rechnung.findFirst({
|
||||
where: {
|
||||
verbrauchsausweis_wohnen: {
|
||||
id: id_ausweis,
|
||||
},
|
||||
OR: [
|
||||
{ bedarfsausweis_wohnen: { id: id_ausweis } },
|
||||
{ verbrauchsausweis_wohnen: { id: id_ausweis } },
|
||||
{ verbrauchsausweis_gewerbe: { id: id_ausweis } }
|
||||
]
|
||||
},
|
||||
orderBy: {
|
||||
erstellt_am: "desc",
|
||||
@@ -220,18 +222,6 @@ fax 040 · 209339859
|
||||
</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>
|
||||
@@ -264,7 +254,7 @@ fax 040 · 209339859
|
||||
subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`,
|
||||
html,
|
||||
attachments: [{
|
||||
filename: `ID_${ausweis.id}_Ansichtsausweis.pdf`,
|
||||
filename: `ID_${ausweis.id}_Energieausweis.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(pdfAusweis),
|
||||
contentType: "application/pdf",
|
||||
|
||||
@@ -23,13 +23,16 @@ const totalPages = await prisma.objekt.count({
|
||||
} : {}
|
||||
})
|
||||
|
||||
const objekte = await prisma.objekt.findMany({
|
||||
let objekte = []
|
||||
if (id) {
|
||||
objekte = await prisma.objekt.findMany({
|
||||
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
||||
benutzer: {
|
||||
id: user.id
|
||||
},
|
||||
} : {
|
||||
...(id ? {OR: [
|
||||
...(id ? {
|
||||
OR: [
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
@@ -86,7 +89,72 @@ const objekte = await prisma.objekt.findMany({
|
||||
},
|
||||
take: 25,
|
||||
skip: (page - 1) * 25
|
||||
})
|
||||
})
|
||||
} else {
|
||||
objekte = await prisma.objekt.findMany({
|
||||
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
||||
benutzer: {
|
||||
id: user.id
|
||||
},
|
||||
} : {
|
||||
OR: [
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_gewerbe: {
|
||||
some: {
|
||||
ausgestellt: false,
|
||||
bestellt: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_wohnen: {
|
||||
some: {
|
||||
ausgestellt: false,
|
||||
bestellt: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
bedarfsausweise_wohnen: {
|
||||
some: {
|
||||
ausgestellt: false,
|
||||
bestellt: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}]
|
||||
},
|
||||
orderBy: {
|
||||
erstellungsdatum: "desc"
|
||||
},
|
||||
include: {
|
||||
aufnahmen: {
|
||||
include: {
|
||||
bilder: true,
|
||||
unterlagen: true,
|
||||
bedarfsausweise_wohnen: true,
|
||||
verbrauchsausweise_gewerbe: true,
|
||||
verbrauchsausweise_wohnen: true
|
||||
}
|
||||
}
|
||||
},
|
||||
take: 25,
|
||||
skip: (page - 1) * 25
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
---
|
||||
|
||||
<UserLayout title="Objekte" {user}>
|
||||
|
||||
37
src/testing/ausweise-bw-fix-ausgestellt.ts
Normal file
37
src/testing/ausweise-bw-fix-ausgestellt.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
|
||||
let start = 1;
|
||||
let limit = 10;
|
||||
|
||||
const existing_bedarfsausweiswohnen_list = await prisma.bedarfsausweisWohnen.findMany({
|
||||
where: {
|
||||
rechnung_id: null
|
||||
}
|
||||
});
|
||||
|
||||
for (const ausweis of existing_bedarfsausweiswohnen_list) {
|
||||
if (ausweis.bestellt == true && ausweis.benutzer_id != "USCTJ2VV"){
|
||||
console.log(
|
||||
'ID:' + ausweis.id +
|
||||
' Reg.Nr:' + ausweis.registriernummer +
|
||||
' Rechnung_id: ' + ausweis.rechnung_id +
|
||||
' Bestellt: ' + ausweis.bestellt +
|
||||
' Ausgestellt: ' + ausweis.ausgestellt +
|
||||
' Ausgestellt am: ' + ausweis.ausstellungsdatum
|
||||
);
|
||||
|
||||
await prisma.bedarfsausweisWohnen.update({
|
||||
where: {
|
||||
id: ausweis.id
|
||||
},
|
||||
data: {
|
||||
bestellt: false,
|
||||
ausgestellt: false,
|
||||
ausstellungsdatum: null
|
||||
}
|
||||
});
|
||||
|
||||
// if (start >= limit) break;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
52
src/testing/ausweise-fix-rechnungsid.ts
Normal file
52
src/testing/ausweise-fix-rechnungsid.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
import Papa from "papaparse"
|
||||
import * as fs from "fs";
|
||||
import { fileURLToPath } from "url";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
|
||||
const path = fileURLToPath(new URL("./rechnungen.csv", import.meta.url));
|
||||
|
||||
if (!fs.existsSync(path)) {
|
||||
throw new Error(`${path} existiert nicht.`)
|
||||
}
|
||||
|
||||
const file = fs.createReadStream(path, "utf8");
|
||||
Papa.parse(file, {
|
||||
header: true,
|
||||
async complete(results, file) {
|
||||
let i = 0;
|
||||
for (const rechnung of results.data as any) {
|
||||
i++
|
||||
if (i % 1000 === 0) {
|
||||
console.log(`Processed ${i} of ${results.data.length}, ${Math.round(i / results.data.length * 100)}%`)
|
||||
}
|
||||
const existing_rechnung = await prisma.rechnung.findFirst({
|
||||
where: {
|
||||
alte_id: parseInt(rechnung.id)
|
||||
}
|
||||
})
|
||||
|
||||
if (existing_rechnung) {
|
||||
const existing_bedarfsausweiswohnen = await prisma.bedarfsausweisWohnen.findFirst({
|
||||
where: {
|
||||
alte_ausweis_id: parseInt(rechnung.ausweis_id)
|
||||
}
|
||||
})
|
||||
|
||||
if (existing_bedarfsausweiswohnen){
|
||||
if (existing_bedarfsausweiswohnen.rechnung_id != existing_rechnung.id){
|
||||
console.log('Rechnungsnummer weicht ab. Alte Ausweis Id:'+ rechnung.ausweis_id + ': ' + existing_bedarfsausweiswohnen.rechnung_id + ' vs ' + existing_rechnung.id);
|
||||
//Todo: Rechnungsid updaten
|
||||
} else {
|
||||
//console.log('Rechnungsnummer Abgleich ok. Alte Ausweis Id:'+ rechnung.ausweis_id + ': ' + existing_bedarfsausweiswohnen.rechnung_id + ' vs ' + existing_rechnung.id);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log('Rechnung existiert nicht: '+ parseInt(rechnung.id));
|
||||
}
|
||||
|
||||
//if (i > 10000) break;
|
||||
}
|
||||
}
|
||||
});
|
||||
37
src/testing/ausweise-vg-fix-ausgestellt.ts
Normal file
37
src/testing/ausweise-vg-fix-ausgestellt.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
|
||||
let start = 1;
|
||||
let limit = 10;
|
||||
|
||||
const existing_verbauchsauweisgewerbe_list = await prisma.verbrauchsausweisGewerbe.findMany({
|
||||
where: {
|
||||
rechnung_id: null
|
||||
}
|
||||
});
|
||||
|
||||
for (const ausweis of existing_verbauchsauweisgewerbe_list) {
|
||||
if (ausweis.bestellt == true && ausweis.benutzer_id != "USCTJ2VV"){
|
||||
console.log(
|
||||
'ID:' + ausweis.id +
|
||||
' Reg.Nr:' + ausweis.registriernummer +
|
||||
' Rechnung_id: ' + ausweis.rechnung_id +
|
||||
' Bestellt: ' + ausweis.bestellt +
|
||||
' Ausgestellt: ' + ausweis.ausgestellt +
|
||||
' Ausgestellt am: ' + ausweis.ausstellungsdatum
|
||||
);
|
||||
|
||||
await prisma.verbrauchsausweisGewerbe.update({
|
||||
where: {
|
||||
id: ausweis.id
|
||||
},
|
||||
data: {
|
||||
bestellt: false,
|
||||
ausgestellt: false,
|
||||
ausstellungsdatum: null
|
||||
}
|
||||
});
|
||||
|
||||
// if (start >= limit) break;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
37
src/testing/ausweise-vw-fix-ausgestellt.ts
Normal file
37
src/testing/ausweise-vw-fix-ausgestellt.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
|
||||
let start = 1;
|
||||
let limit = 10;
|
||||
|
||||
const existing_verbauchsausweiswohnen_list = await prisma.verbrauchsausweisWohnen.findMany({
|
||||
where: {
|
||||
rechnung_id: null
|
||||
}
|
||||
});
|
||||
|
||||
for (const ausweis of existing_verbauchsausweiswohnen_list) {
|
||||
if (ausweis.bestellt == true && ausweis.benutzer_id != "USCTJ2VV"){
|
||||
console.log(
|
||||
'ID:' + ausweis.id +
|
||||
' Reg.Nr:' + ausweis.registriernummer +
|
||||
' Rechnung_id: ' + ausweis.rechnung_id +
|
||||
' Bestellt: ' + ausweis.bestellt +
|
||||
' Ausgestellt: ' + ausweis.ausgestellt +
|
||||
' Ausgestellt am: ' + ausweis.ausstellungsdatum
|
||||
);
|
||||
|
||||
await prisma.verbrauchsausweisWohnen.update({
|
||||
where: {
|
||||
id: ausweis.id
|
||||
},
|
||||
data: {
|
||||
bestellt: false,
|
||||
ausgestellt: false,
|
||||
ausstellungsdatum: null
|
||||
}
|
||||
});
|
||||
|
||||
// if (start >= limit) break;
|
||||
start++;
|
||||
}
|
||||
}
|
||||
46
src/testing/nutzer-fix-alteid.ts
Normal file
46
src/testing/nutzer-fix-alteid.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
import Papa from "papaparse"
|
||||
import * as fs from "fs";
|
||||
import { fileURLToPath } from "url";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
|
||||
const path = fileURLToPath(new URL("./users.csv", import.meta.url));
|
||||
|
||||
if (!fs.existsSync(path)) {
|
||||
throw new Error(`${path} existiert nicht.`)
|
||||
}
|
||||
|
||||
const file = fs.createReadStream(path, "utf8");
|
||||
Papa.parse(file, {
|
||||
header: true,
|
||||
async complete(results, file) {
|
||||
let i = 0;
|
||||
for (const user of results.data as any) {
|
||||
i++
|
||||
if (i % 100 === 0) {
|
||||
//console.log(`Processed ${i} of ${results.data.length}, ${Math.round(i / results.data.length * 100)}%`)
|
||||
}
|
||||
const existing = await prisma.benutzer.findFirst({
|
||||
where: {
|
||||
email: user.email
|
||||
}
|
||||
})
|
||||
|
||||
if (existing) {
|
||||
if (existing.alte_id == null){
|
||||
console.log('User: ' + user.email + ' fehlt alte id ('+user.id+')');
|
||||
await prisma.benutzer.update({
|
||||
where: {
|
||||
email: user.email
|
||||
},
|
||||
data: {
|
||||
alte_id: parseInt(user.id)
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -19,7 +19,7 @@ Papa.parse(file, {
|
||||
let i = 0;
|
||||
for (const rechnung of results.data as any) {
|
||||
i++
|
||||
if (i % 50 === 0) {
|
||||
if (i % 500 === 0) {
|
||||
console.log(`Processed ${i} of ${results.data.length}, ${Math.round(i / results.data.length * 100)}%`)
|
||||
}
|
||||
const existing = await prisma.rechnung.findFirst({
|
||||
@@ -29,7 +29,7 @@ Papa.parse(file, {
|
||||
})
|
||||
|
||||
if (existing) {
|
||||
console.log(`Rechnung für ${rechnung.id} existiert bereits.`);
|
||||
//console.log(`Rechnung für ${rechnung.id} existiert bereits.`);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -166,6 +166,7 @@ Papa.parse(file, {
|
||||
await prisma.rechnung.create({
|
||||
data
|
||||
});
|
||||
console.log('User: ' + rechnung.user_id + ' Rechnung:' + rechnung.id);
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user