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"),
|
||||
"verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
|
||||
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
||||
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.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"),
|
||||
})
|
||||
@@ -108,7 +108,7 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis:
|
||||
}
|
||||
|
||||
let kuehlungsZuschlag_1: number = 0, kuehlungsZuschlag_2: number = 0;
|
||||
if (aufnahme.kuehlung) {
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
kuehlungsZuschlag_1 = energieVerbrauchGesamt_1 * ((ausweis.anteil_kuehlung_1 || 0) / 100);
|
||||
kuehlungsZuschlag_2 = energieVerbrauchGesamt_2 * ((ausweis.anteil_kuehlung_2 || 0) / 100);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -216,10 +216,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 +244,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 +328,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 +367,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 +396,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
|
||||
})
|
||||
|
||||
@@ -135,7 +135,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
}
|
||||
|
||||
// Kühlung
|
||||
if (aufnahme.kuehlung) {
|
||||
if (aufnahme.kuehlung === "1") {
|
||||
addCheckMark(pages[0], 213, height - 375.5)
|
||||
} else {
|
||||
addCheckMark(pages[0], 355, height - 386.5)
|
||||
@@ -501,7 +501,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
|
||||
|
||||
@@ -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.",
|
||||
};
|
||||
|
||||
|
||||
@@ -264,7 +264,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",
|
||||
|
||||
39
src/testing/ausweise-fix-rechnungsid.ts
Normal file
39
src/testing/ausweise-fix-rechnungsid.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import moment from "moment";
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
import * as fs from "fs";
|
||||
import { fileURLToPath } from "url";
|
||||
import { hashPassword } from "#lib/password.js";
|
||||
import Papa from "papaparse";
|
||||
import { generatePrefixedId } from "#lib/db.js";
|
||||
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
|
||||
import { tryCatch } from "#lib/tryCatch.js";
|
||||
import { createBrotliDecompress } from "zlib";
|
||||
|
||||
const path = fileURLToPath(new URL("./ausweise.csv.br", import.meta.url)); // .br for Brotli file
|
||||
|
||||
if (!fs.existsSync(path)) {
|
||||
throw new Error(`${path} existiert nicht.`);
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
const brotliStream = fs.createReadStream(path).pipe(createBrotliDecompress());
|
||||
|
||||
Papa.parse(brotliStream, {
|
||||
header: true,
|
||||
async complete(results, file) {
|
||||
for (const dataset of results.data as any) {
|
||||
const existing = await prisma.verbrauchsausweisWohnen.findFirst({
|
||||
where: {
|
||||
alte_ausweis_id: parseInt(dataset.id)
|
||||
}
|
||||
});
|
||||
|
||||
if (existing) {
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(dataset.id);
|
||||
// do something with dataset...
|
||||
}
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user