diff --git a/.gitignore b/.gitignore index 632a0be9..2f42277a 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/public/pdf/templates/GEG24_Nichtwohngebaeude.pdf b/public/pdf/templates/GEG24_Nichtwohngebaeude.pdf index 476ccc13..8d10fb4b 100644 Binary files a/public/pdf/templates/GEG24_Nichtwohngebaeude.pdf and b/public/pdf/templates/GEG24_Nichtwohngebaeude.pdf differ diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts new file mode 100644 index 00000000..bad30554 --- /dev/null +++ b/src/astro-typesafe-api-caller.ts @@ -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"), +}) \ No newline at end of file diff --git a/src/layouts/DashboardLayout.astro b/src/layouts/DashboardLayout.astro index 5a4ccece..2aca69c2 100644 --- a/src/layouts/DashboardLayout.astro +++ b/src/layouts/DashboardLayout.astro @@ -1,5 +1,5 @@ --- -// import "svelte-ripple-action/ripple.css"; +// import "svelte-ripple-action/ripple.css"; import "../style/global.css"; import "../../svelte-dialogs.config.js"; import DashboardSidebar from "../components/Dashboard/DashboardSidebar.svelte"; @@ -124,7 +124,7 @@ let lightTheme = Astro.cookies.get("theme")?.value === "light"; client:load /> -
+
diff --git a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts index dde2ebb5..117e8359 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts @@ -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], diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts index 60ed6296..7118c5cb 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts @@ -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; } diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts index 4c7d1ab1..9afa1bcf 100644 --- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts @@ -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(` - ${benutzer.vorname} ${benutzer.name} + ${benutzer.firma} ${benutzer.adresse} ${benutzer.plz} ${benutzer.ort} diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index 83632657..312c3f3a 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -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,25 +733,25 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe } } - if (aufnahme.kuehlung) { - /** - * Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m² - * Primärenergiefaktor Strom - * @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"), - "Kühlungszuschlag", - "", - // TODO - // berechnungen?.primaerfaktorww.toString(), - Math.round(berechnungen?.kuehlungsZuschlag_1 || 0).toString(), - "0", - 0, - "" - ); - } + if (aufnahme.kuehlung === "1") { + /** + * Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m² + * Primärenergiefaktor Strom + * @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"), + "Kühlungszuschlag", + "", + // TODO + // berechnungen?.primaerfaktorww.toString(), + "", + "", + Math.round(berechnungen?.kuehlungsZuschlag || 0), + "" + ); + } /* -------------------------------- Seite 4 -------------------------------- */ diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index a5f3c72f..9fc5afb3 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -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) { + pages[0].drawText("x", { + x: 214, + y: height - 355, + size: 10, + font: bold + }) + } else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) { + pages[0].drawText("x", { + x: 214, + y: height - 366, + size: 10, + font: bold + }) + } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) { + pages[0].drawText("x", { + x: 356, + y: height - 355, + size: 10, + font: bold + }) + } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) { + pages[0].drawText("x", { + x: 356, + y: height - 366, + size: 10, + font: bold }) } - - if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) { - addCheckMark(pages[0], 213, height - 347) - } else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) { - addCheckMark(pages[0], 213, height - 358) - } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) { - addCheckMark(pages[0], 355, height - 347) - } else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) { - addCheckMark(pages[0], 355, height - 358) - } - // 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) + pages[0].drawText("x", { + x: 464, + y: height - 427, + size: 10, + font: bold + }) } - 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 - }) - } - } - - // 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(); } \ No newline at end of file diff --git a/src/lib/server/invoice.ts b/src/lib/server/invoice.ts index ae5cc794..ae659d6b 100644 --- a/src/lib/server/invoice.ts +++ b/src/lib/server/invoice.ts @@ -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.", }; diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index dcd27407..dcc639fd 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -1016,7 +1016,8 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center" {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen} - {#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)}
@@ -1024,6 +1025,7 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
{/if} + {/if} {/if} {#if ausweisart === Enums.Ausweisart.BedarfsausweisWohnen} diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts index 07f5861b..068f7520 100644 --- a/src/pages/api/admin/ausstellen.ts +++ b/src/pages/api/admin/ausstellen.ts @@ -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
-

-Alternativ können Sie auch direkt online zahlen indem Sie auf den entsprechenden Link klicken: -

-
- - - - - - - -
Per Einzuglastschrift zahlen : jetzt per ELV bezahlen
Per Sofortüberweisung zahlen : jetzt per Sofortüberweisung bezahlen
Über PayPal zahlen : jetzt per Paypal bezahlen
Per Giropay zahlen : jetzt per Giropay bezahlen
Per Visa oder MasterCard zahlen : jetzt per Kreditkarte bezahlen

@@ -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", diff --git a/src/pages/dashboard/objekte/[page].astro b/src/pages/dashboard/objekte/[page].astro index 455ca2a0..b831e143 100644 --- a/src/pages/dashboard/objekte/[page].astro +++ b/src/pages/dashboard/objekte/[page].astro @@ -23,70 +23,138 @@ const totalPages = await prisma.objekt.count({ } : {} }) -const objekte = await prisma.objekt.findMany({ - where: user.rolle === Enums.BenutzerRolle.USER ? { - benutzer: { - id: user.id +let objekte = [] +if (id) { + objekte = await prisma.objekt.findMany({ + where: user.rolle === Enums.BenutzerRolle.USER ? { + benutzer: { + id: user.id + }, + } : { + ...(id ? { + OR: [ + { + aufnahmen: { + every: { + verbrauchsausweise_gewerbe: { + some: { + id: { + contains: id + } + } + }, + } + } + }, + { + aufnahmen: { + every: { + verbrauchsausweise_wohnen: { + some: { + id: { + contains: id + } + } + }, + } + } + }, + { + aufnahmen: { + every: { + bedarfsausweise_wohnen: { + some: { + id: { + contains: id + } + } + }, + } + } + },]} : {}) }, - } : { - ...(id ? {OR: [ - { - aufnahmen: { - every: { - verbrauchsausweise_gewerbe: { - some: { - id: { - contains: id - } - } - }, - } + orderBy: { + erstellungsdatum: "desc" + }, + include: { + aufnahmen: { + include: { + bilder: true, + unterlagen: true, + bedarfsausweise_wohnen: true, + verbrauchsausweise_gewerbe: true, + verbrauchsausweise_wohnen: true } - }, - { - aufnahmen: { - every: { - verbrauchsausweise_wohnen: { - some: { - id: { - contains: id - } - } - }, - } - } - }, - { - aufnahmen: { - every: { - bedarfsausweise_wohnen: { - some: { - id: { - contains: id - } - } - }, - } - } - },]} : {}) - }, - 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 -}) + }, + 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 + }) +} + + --- diff --git a/src/testing/ausweise-bw-fix-ausgestellt.ts b/src/testing/ausweise-bw-fix-ausgestellt.ts new file mode 100644 index 00000000..00823580 --- /dev/null +++ b/src/testing/ausweise-bw-fix-ausgestellt.ts @@ -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++; + } +} \ No newline at end of file diff --git a/src/testing/ausweise-fix-rechnungsid.ts b/src/testing/ausweise-fix-rechnungsid.ts new file mode 100644 index 00000000..4d9aced7 --- /dev/null +++ b/src/testing/ausweise-fix-rechnungsid.ts @@ -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; + } + } +}); \ No newline at end of file diff --git a/src/testing/ausweise-vg-fix-ausgestellt.ts b/src/testing/ausweise-vg-fix-ausgestellt.ts new file mode 100644 index 00000000..e22d84a2 --- /dev/null +++ b/src/testing/ausweise-vg-fix-ausgestellt.ts @@ -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++; + } +} \ No newline at end of file diff --git a/src/testing/ausweise-vw-fix-ausgestellt.ts b/src/testing/ausweise-vw-fix-ausgestellt.ts new file mode 100644 index 00000000..f803ea57 --- /dev/null +++ b/src/testing/ausweise-vw-fix-ausgestellt.ts @@ -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++; + } +} \ No newline at end of file diff --git a/src/testing/nutzer-fix-alteid.ts b/src/testing/nutzer-fix-alteid.ts new file mode 100644 index 00000000..4eca767c --- /dev/null +++ b/src/testing/nutzer-fix-alteid.ts @@ -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) + } + }); + } + } + + } + } +}); \ No newline at end of file diff --git a/src/testing/rechnungen-umziehen.ts b/src/testing/rechnungen-umziehen.ts index 72c6067c..de56470a 100644 --- a/src/testing/rechnungen-umziehen.ts +++ b/src/testing/rechnungen-umziehen.ts @@ -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;