Bugfixes
This commit is contained in:
2
Makefile
2
Makefile
@@ -68,4 +68,4 @@ prod: install-dependencies prisma-studio backup-database-cronjob
|
|||||||
|
|
||||||
backup-database-cronjob:
|
backup-database-cronjob:
|
||||||
- pm2 delete daily-db-backup
|
- pm2 delete daily-db-backup
|
||||||
pm2 start backup-database.bash --name "daily-db-backup" --cron "0 0 * * *"
|
pm2 start bash --name "daily-db-backup" --cron "0 0 * * *" -- backup-database.bash
|
||||||
4
bun.lock
4
bun.lock
@@ -18,7 +18,7 @@
|
|||||||
"@trpc/client": "^10.45.2",
|
"@trpc/client": "^10.45.2",
|
||||||
"@trpc/server": "^10.45.2",
|
"@trpc/server": "^10.45.2",
|
||||||
"astro": "^4.16.17",
|
"astro": "^4.16.17",
|
||||||
"astro-typesafe-api": "^0.2.2",
|
"astro-typesafe-api": "^0.2.4",
|
||||||
"body-scroll-lock": "^4.0.0-beta.0",
|
"body-scroll-lock": "^4.0.0-beta.0",
|
||||||
"buffer": "^6.0.3",
|
"buffer": "^6.0.3",
|
||||||
"bun": "^1.2.5",
|
"bun": "^1.2.5",
|
||||||
@@ -915,7 +915,7 @@
|
|||||||
|
|
||||||
"astro": ["astro@4.16.18", "", { "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.1", "@astrojs/markdown-remark": "5.3.0", "@astrojs/telemetry": "3.1.0", "@babel/core": "^7.26.0", "@babel/plugin-transform-react-jsx": "^7.25.9", "@babel/types": "^7.26.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.3", "@types/babel__core": "^7.20.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.1.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^0.7.2", "cssesc": "^3.0.0", "debug": "^4.3.7", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.5.4", "esbuild": "^0.21.5", "estree-walker": "^3.0.3", "fast-glob": "^3.3.2", "flattie": "^1.1.1", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "html-escaper": "^3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.14", "magicast": "^0.3.5", "micromatch": "^4.0.8", "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "ora": "^8.1.1", "p-limit": "^6.1.0", "p-queue": "^8.0.1", "preferred-pm": "^4.0.0", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.6.3", "shiki": "^1.23.1", "tinyexec": "^0.3.1", "tsconfck": "^3.1.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "vite": "^5.4.11", "vitefu": "^1.0.4", "which-pm": "^3.0.0", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-G7zfwJt9BDHEZwlaLNvjbInIw2hPryyD654314KV/XT34pJU6SfN1S+mWa8RAkALcZNJnJXCJmT3JXLQStD3Lw=="],
|
"astro": ["astro@4.16.18", "", { "dependencies": { "@astrojs/compiler": "^2.10.3", "@astrojs/internal-helpers": "0.4.1", "@astrojs/markdown-remark": "5.3.0", "@astrojs/telemetry": "3.1.0", "@babel/core": "^7.26.0", "@babel/plugin-transform-react-jsx": "^7.25.9", "@babel/types": "^7.26.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.1.3", "@types/babel__core": "^7.20.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "boxen": "8.0.1", "ci-info": "^4.1.0", "clsx": "^2.1.1", "common-ancestor-path": "^1.0.1", "cookie": "^0.7.2", "cssesc": "^3.0.0", "debug": "^4.3.7", "deterministic-object-hash": "^2.0.2", "devalue": "^5.1.1", "diff": "^5.2.0", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^1.5.4", "esbuild": "^0.21.5", "estree-walker": "^3.0.3", "fast-glob": "^3.3.2", "flattie": "^1.1.1", "github-slugger": "^2.0.0", "gray-matter": "^4.0.3", "html-escaper": "^3.0.3", "http-cache-semantics": "^4.1.1", "js-yaml": "^4.1.0", "kleur": "^4.1.5", "magic-string": "^0.30.14", "magicast": "^0.3.5", "micromatch": "^4.0.8", "mrmime": "^2.0.0", "neotraverse": "^0.6.18", "ora": "^8.1.1", "p-limit": "^6.1.0", "p-queue": "^8.0.1", "preferred-pm": "^4.0.0", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.6.3", "shiki": "^1.23.1", "tinyexec": "^0.3.1", "tsconfck": "^3.1.4", "unist-util-visit": "^5.0.0", "vfile": "^6.0.3", "vite": "^5.4.11", "vitefu": "^1.0.4", "which-pm": "^3.0.0", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "zod": "^3.23.8", "zod-to-json-schema": "^3.23.5", "zod-to-ts": "^1.2.0" }, "optionalDependencies": { "sharp": "^0.33.3" }, "bin": { "astro": "astro.js" } }, "sha512-G7zfwJt9BDHEZwlaLNvjbInIw2hPryyD654314KV/XT34pJU6SfN1S+mWa8RAkALcZNJnJXCJmT3JXLQStD3Lw=="],
|
||||||
|
|
||||||
"astro-typesafe-api": ["astro-typesafe-api@0.2.2", "", { "dependencies": { "es-codec": "^0.5.0", "globby": "^14.0.2" }, "peerDependencies": { "astro": "^4.16.17", "typescript": "^5.0.0", "zod": "^3.24.1" }, "bin": { "astro-typesafe-api": "src/cli.ts" } }, "sha512-SEHV2iPyIrdpYdYb0mIN1WmcvC61bvsCQqb/X+R4EOcFjuozJ9fJhSiFGxJMvNoxJ9S3P3GKLyDnxXvFlKq0mw=="],
|
"astro-typesafe-api": ["astro-typesafe-api@0.2.4", "", { "dependencies": { "es-codec": "^0.5.0", "globby": "^14.0.2" }, "peerDependencies": { "astro": "^4.16.17", "typescript": "^5.0.0", "zod": "^3.24.1" }, "bin": { "astro-typesafe-api": "src/cli.ts" } }, "sha512-KiAw7+QJyuzz606GSkeaTdav8vttDUEYVaFAdVRlDuSvUdhcYsJB14zHkMe6ZSMfRNBQRxaMZBgPgEtWb1mf1w=="],
|
||||||
|
|
||||||
"async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="],
|
"async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="],
|
||||||
|
|
||||||
|
|||||||
@@ -11,31 +11,31 @@ export const createCaller = createCallerFactory({
|
|||||||
"admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
|
"admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
|
||||||
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
|
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
|
||||||
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
|
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
|
||||||
|
"bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
|
||||||
|
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
|
||||||
|
"aufnahme": await import("../src/pages/api/aufnahme/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"),
|
||||||
"auth/access-token": await import("../src/pages/api/auth/access-token.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/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
|
||||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
|
||||||
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
"ausweise": await import("../src/pages/api/ausweise/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"),
|
|
||||||
"bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
|
|
||||||
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.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"),
|
|
||||||
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
|
||||||
"geg-nachweis-wohnen/[id]": await import("../src/pages/api/geg-nachweis-wohnen/[id].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"),
|
"geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.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"),
|
||||||
|
"bilder/[id]": await import("../src/pages/api/bilder/[id].ts"),
|
||||||
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
||||||
|
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
||||||
"rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"),
|
"rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"),
|
||||||
"rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
|
"rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
|
||||||
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
|
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
|
||||||
|
"verbrauchsausweis-gewerbe/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"),
|
||||||
|
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
|
||||||
"user": await import("../src/pages/api/user/index.ts"),
|
"user": await import("../src/pages/api/user/index.ts"),
|
||||||
"user/self": await import("../src/pages/api/user/self.ts"),
|
"user/self": await import("../src/pages/api/user/self.ts"),
|
||||||
"verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
|
"verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"),
|
||||||
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.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"),
|
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
|
||||||
"aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.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]": await import("../src/pages/api/aufnahme/[id]/index.ts"),
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ import * as fs from "fs"
|
|||||||
import { PDFDocument, StandardFonts } from "pdf-lib";
|
import { PDFDocument, StandardFonts } from "pdf-lib";
|
||||||
import { xml2pdf } from "./elements/xml2pdf.js";
|
import { xml2pdf } from "./elements/xml2pdf.js";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { Enums, Heizungsstatus } from "#lib/server/prisma.js";
|
import { Enums, Heizungsstatus, Rechnung } from "#lib/server/prisma.js";
|
||||||
import { copyPage } from "./utils/copyPage.js";
|
import { copyPage } from "./utils/copyPage.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Server.js";
|
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016_Server.js";
|
||||||
|
|
||||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||||
|
|
||||||
export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) {
|
export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, rechnung: Rechnung | null, bilder: BildClient[]) {
|
||||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||||
const page3 = copyPage(pdf.getPages()[0]);
|
const page3 = copyPage(pdf.getPages()[0]);
|
||||||
@@ -32,14 +32,6 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
|
|||||||
const marginX = 60;
|
const marginX = 60;
|
||||||
const marginY = 150;
|
const marginY = 150;
|
||||||
|
|
||||||
benutzer = benutzer || {
|
|
||||||
vorname: "Max",
|
|
||||||
name: "Mustermann",
|
|
||||||
adresse: "Musterstraße 123",
|
|
||||||
plz: "12345",
|
|
||||||
ort: "Beispielhausen"
|
|
||||||
};
|
|
||||||
|
|
||||||
const translateHeizungsstatus: Record<Heizungsstatus, string> = {
|
const translateHeizungsstatus: Record<Heizungsstatus, string> = {
|
||||||
BEHEIZT: "beheizt",
|
BEHEIZT: "beheizt",
|
||||||
NICHT_VORHANDEN: "nicht vorhanden",
|
NICHT_VORHANDEN: "nicht vorhanden",
|
||||||
@@ -70,9 +62,10 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
|
|||||||
}
|
}
|
||||||
|
|
||||||
const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}">
|
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">${rechnung?.versand_empfaenger}</text>
|
||||||
<text size="12" lineHeight="14">${benutzer.adresse}</text>
|
<text size="12" lineHeight="14">${rechnung?.versand_zusatzzeile}</text>
|
||||||
<text size="12" lineHeight="14">${benutzer.plz} ${benutzer.ort}</text>
|
<text size="12" lineHeight="14">${rechnung?.versand_strasse}</text>
|
||||||
|
<text size="12" lineHeight="14">${rechnung?.versand_plz} ${rechnung?.versand_ort}</text>
|
||||||
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
||||||
<text size="12" font="bold">Datenblatt Energieausweis</text>
|
<text size="12" font="bold">Datenblatt Energieausweis</text>
|
||||||
<text size="12">Ausweis ID: ${ausweis.id}</text>
|
<text size="12">Ausweis ID: ${ausweis.id}</text>
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
import { AufnahmeClient, BildClient, ObjektClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js";
|
|
||||||
import * as fs from "fs"
|
import * as fs from "fs"
|
||||||
import { PDFDocument, StandardFonts } from "pdf-lib";
|
import { PDFDocument, StandardFonts } from "pdf-lib";
|
||||||
import { xml2pdf } from "./elements/xml2pdf.js";
|
import { xml2pdf } from "./elements/xml2pdf.js";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { Enums, Heizungsstatus } from "#lib/server/prisma.js";
|
import { Enums, Heizungsstatus, Rechnung } from "#lib/server/prisma.js";
|
||||||
import { copyPage } from "./utils/copyPage.js";
|
import { copyPage } from "./utils/copyPage.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweis_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Server.js";
|
import { endEnergieVerbrauchVerbrauchsausweis_2016_Server } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016_Server.js";
|
||||||
|
|
||||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||||
|
|
||||||
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) {
|
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, rechnung: Rechnung | null, bilder: BildClient[]) {
|
||||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||||
const page3 = copyPage(pdf.getPages()[0]);
|
const page3 = copyPage(pdf.getPages()[0]);
|
||||||
@@ -34,15 +33,6 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
|||||||
const marginX = 60;
|
const marginX = 60;
|
||||||
const marginY = 150;
|
const marginY = 150;
|
||||||
|
|
||||||
benutzer = benutzer || {
|
|
||||||
firma: "Max Mustermann GmbH",
|
|
||||||
vorname: "Max",
|
|
||||||
name: "Mustermann",
|
|
||||||
adresse: "Musterstraße 123",
|
|
||||||
plz: "12345",
|
|
||||||
ort: "Beispielhausen"
|
|
||||||
};
|
|
||||||
|
|
||||||
const translateHeizungsstatus: Record<Heizungsstatus, string> = {
|
const translateHeizungsstatus: Record<Heizungsstatus, string> = {
|
||||||
BEHEIZT: "beheizt",
|
BEHEIZT: "beheizt",
|
||||||
NICHT_VORHANDEN: "nicht vorhanden",
|
NICHT_VORHANDEN: "nicht vorhanden",
|
||||||
@@ -54,9 +44,10 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
|||||||
const id = ausweis.id;
|
const id = ausweis.id;
|
||||||
|
|
||||||
const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}">
|
const layout = xml2pdf(`<layout height="${pages[0].getHeight()}" width="${pages[0].getWidth()}" marginTop="150" marginLeft="${marginX}" marginRight="${marginX}">
|
||||||
<text size="12" lineHeight="14">${benutzer.firma}</text>
|
<text size="12" lineHeight="14">${rechnung?.versand_empfaenger}</text>
|
||||||
<text size="12" lineHeight="14">${benutzer.adresse}</text>
|
<text size="12" lineHeight="14">${rechnung?.versand_zusatzzeile}</text>
|
||||||
<text size="12" lineHeight="14">${benutzer.plz} ${benutzer.ort}</text>
|
<text size="12" lineHeight="14">${rechnung?.versand_strasse}</text>
|
||||||
|
<text size="12" lineHeight="14">${rechnung?.versand_plz} ${rechnung?.versand_ort}</text>
|
||||||
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
<flex direction="row" justify="space-between" marginTop="55" width="${innerWidth}">
|
||||||
<text size="12" font="bold">Datenblatt Energieausweis</text>
|
<text size="12" font="bold">Datenblatt Energieausweis</text>
|
||||||
<text size="12">Ausweis ID: ${id}</text>
|
<text size="12">Ausweis ID: ${id}</text>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVer
|
|||||||
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
||||||
import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js";
|
import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js";
|
||||||
import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js";
|
import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js";
|
||||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
import { Enums, prisma, Rechnung } from "#lib/server/prisma.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gibt den richtigen Prisma Adapter für die Ausweisart basierend auf der UID zurück, oder null bei einer falschen UID.
|
* Gibt den richtigen Prisma Adapter für die Ausweisart basierend auf der UID zurück, oder null bei einer falschen UID.
|
||||||
@@ -49,15 +49,15 @@ export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient
|
|||||||
* Gibt das richtige Datenblatt basierend auf der Ausweisart zurück.
|
* Gibt das richtige Datenblatt basierend auf der Ausweisart zurück.
|
||||||
* @param ausweis
|
* @param ausweis
|
||||||
*/
|
*/
|
||||||
export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromId(ausweis.id)) {
|
export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, rechnung: Rechnung, ausweisart = getAusweisartFromId(ausweis.id)) {
|
||||||
if (!ausweisart) {
|
if (!ausweisart) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||||
return await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder)
|
return await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, rechnung, bilder)
|
||||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||||
return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder)
|
return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, rechnung, bilder)
|
||||||
}
|
}
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export async function getVerbrauchsausweisWohnenKomplett(id: string) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
rechnung: true
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -54,6 +55,7 @@ export async function getVerbrauchsausweisGewerbeKomplett(id: string) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
rechnung: true
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -82,6 +84,7 @@ export async function getBedarfsausweisWohnenKomplett(id: string) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
rechnung: true
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
Enums,
|
Enums,
|
||||||
Objekt,
|
Objekt,
|
||||||
prisma,
|
prisma,
|
||||||
|
Rechnung,
|
||||||
VerbrauchsausweisGewerbe,
|
VerbrauchsausweisGewerbe,
|
||||||
VerbrauchsausweisWohnen,
|
VerbrauchsausweisWohnen,
|
||||||
} from "#lib/server/prisma.js";
|
} from "#lib/server/prisma.js";
|
||||||
@@ -50,7 +51,8 @@ export const GET = defineApiRoute({
|
|||||||
objekt: Objekt & {
|
objekt: Objekt & {
|
||||||
benutzer: Benutzer | null;
|
benutzer: Benutzer | null;
|
||||||
};
|
};
|
||||||
};
|
},
|
||||||
|
rechnung: Rechnung
|
||||||
})
|
})
|
||||||
| null = null;
|
| null = null;
|
||||||
|
|
||||||
@@ -131,7 +133,8 @@ export const GET = defineApiRoute({
|
|||||||
ausweis.aufnahme,
|
ausweis.aufnahme,
|
||||||
ausweis.aufnahme.objekt,
|
ausweis.aufnahme.objekt,
|
||||||
ausweis.aufnahme.bilder,
|
ausweis.aufnahme.bilder,
|
||||||
ausweis.aufnahme.objekt.benutzer
|
ausweis.aufnahme.objekt.benutzer,
|
||||||
|
ausweis.rechnung
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: Das ist immer noch scheiße, LexOffice ist doof
|
// TODO: Das ist immer noch scheiße, LexOffice ist doof
|
||||||
|
|||||||
@@ -194,9 +194,7 @@ export const GET = defineApiRoute({
|
|||||||
.Registriernummer,
|
.Registriernummer,
|
||||||
kontrolldatei_angefragt: result
|
kontrolldatei_angefragt: result
|
||||||
.DatenregistraturResult
|
.DatenregistraturResult
|
||||||
.WEB_Service_Antwort.Datendatei
|
.WEB_Service_Antwort.Datendatei == 0 ? false : true,
|
||||||
? true
|
|
||||||
: false,
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,10 @@ if (id) {
|
|||||||
unterlagen: true,
|
unterlagen: true,
|
||||||
bedarfsausweise_wohnen: true,
|
bedarfsausweise_wohnen: true,
|
||||||
verbrauchsausweise_gewerbe: true,
|
verbrauchsausweise_gewerbe: true,
|
||||||
verbrauchsausweise_wohnen: true
|
verbrauchsausweise_wohnen: true,
|
||||||
|
bedarfsausweise_gewerbe: true,
|
||||||
|
geg_nachweise_gewerbe: true,
|
||||||
|
geg_nachweise_wohnen: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -145,7 +148,10 @@ if (id) {
|
|||||||
unterlagen: true,
|
unterlagen: true,
|
||||||
bedarfsausweise_wohnen: true,
|
bedarfsausweise_wohnen: true,
|
||||||
verbrauchsausweise_gewerbe: true,
|
verbrauchsausweise_gewerbe: true,
|
||||||
verbrauchsausweise_wohnen: true
|
verbrauchsausweise_wohnen: true,
|
||||||
|
bedarfsausweise_gewerbe: true,
|
||||||
|
geg_nachweise_gewerbe: true,
|
||||||
|
geg_nachweise_wohnen: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,11 +2,11 @@ import { BenutzerClient, getAusweisartFromId, VerbrauchsausweisGewerbeClient, Ve
|
|||||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||||
import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js";
|
import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js";
|
||||||
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
||||||
import { Aufnahme, Benutzer, Bild, Enums, Objekt, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
|
import { Aufnahme, Benutzer, Bild, Enums, Objekt, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
|
||||||
import { APIRoute } from "astro";
|
import { APIRoute } from "astro";
|
||||||
import { createCaller } from "src/astro-typesafe-api-caller.js";
|
import { createCaller } from "src/astro-typesafe-api-caller.js";
|
||||||
import { getS3File } from "#lib/s3.js";
|
import { getS3File } from "#lib/s3.js";
|
||||||
import { getAufnahme, getBilder, getObjekt, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db.js";
|
import { getAufnahme, getBilder, getObjekt, getRechnung, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db.js";
|
||||||
import { getCurrentUser } from "#lib/server/user.js";
|
import { getCurrentUser } from "#lib/server/user.js";
|
||||||
|
|
||||||
export const GET: APIRoute = async (Astro) => {
|
export const GET: APIRoute = async (Astro) => {
|
||||||
@@ -21,8 +21,8 @@ export const GET: APIRoute = async (Astro) => {
|
|||||||
let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | null = null;
|
let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | null = null;
|
||||||
let aufnahme: Aufnahme = {} as Aufnahme;
|
let aufnahme: Aufnahme = {} as Aufnahme;
|
||||||
let objekt: Objekt = {} as Objekt;
|
let objekt: Objekt = {} as Objekt;
|
||||||
let user: Benutzer = {} as Benutzer;
|
|
||||||
let bilder: Bild[] = []
|
let bilder: Bild[] = []
|
||||||
|
let rechnung: Rechnung | null = null;
|
||||||
|
|
||||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||||
ausweis = await getVerbrauchsausweisWohnen(ausweis_id)
|
ausweis = await getVerbrauchsausweisWohnen(ausweis_id)
|
||||||
@@ -43,15 +43,19 @@ export const GET: APIRoute = async (Astro) => {
|
|||||||
|
|
||||||
user = await getCurrentUser(Astro)
|
user = await getCurrentUser(Astro)
|
||||||
|
|
||||||
|
if (ausweis.rechnung_id) {
|
||||||
|
rechnung = await getRechnung(ausweis.rechnung_id)
|
||||||
|
}
|
||||||
|
|
||||||
let pdf: Uint8Array<ArrayBufferLike> | null = null;
|
let pdf: Uint8Array<ArrayBufferLike> | null = null;
|
||||||
if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) {
|
if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) {
|
||||||
const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray
|
const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray
|
||||||
// Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren.
|
// Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren.
|
||||||
pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Datenblatt.pdf`)
|
pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Datenblatt.pdf`)
|
||||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||||
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder);
|
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, rechnung, bilder);
|
||||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||||
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder);
|
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, rechnung, bilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response(pdf, {
|
return new Response(pdf, {
|
||||||
@@ -65,31 +69,17 @@ export const POST: APIRoute = async (Astro) => {
|
|||||||
const body = await Astro.request.text();
|
const body = await Astro.request.text();
|
||||||
const params = new URLSearchParams(body);
|
const params = new URLSearchParams(body);
|
||||||
|
|
||||||
const caller = createCaller(Astro);
|
|
||||||
|
|
||||||
const ausweis = JSON.parse(params.get("ausweis") || "{}");
|
const ausweis = JSON.parse(params.get("ausweis") || "{}");
|
||||||
const aufnahme = JSON.parse(params.get("aufnahme") || "{}");
|
const aufnahme = JSON.parse(params.get("aufnahme") || "{}");
|
||||||
const objekt = JSON.parse(params.get("objekt") || "{}");
|
const objekt = JSON.parse(params.get("objekt") || "{}");
|
||||||
const bilder = JSON.parse(params.get("bilder") || "{}");
|
const bilder = JSON.parse(params.get("bilder") || "{}");
|
||||||
const ausweisart: Enums.Ausweisart = JSON.parse(params.get("ausweisart") || "")
|
const ausweisart: Enums.Ausweisart = JSON.parse(params.get("ausweisart") || "")
|
||||||
|
|
||||||
let user: BenutzerClient = {};
|
|
||||||
|
|
||||||
try {
|
|
||||||
user = await caller.user.self.GET.fetch(undefined, {
|
|
||||||
headers: {
|
|
||||||
Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
let pdf: Uint8Array<ArrayBufferLike> | null = null;
|
let pdf: Uint8Array<ArrayBufferLike> | null = null;
|
||||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||||
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, user, bilder);
|
pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, null, bilder);
|
||||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||||
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, user, bilder);
|
pdf = await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, null, bilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response(pdf, {
|
return new Response(pdf, {
|
||||||
|
|||||||
52
wipe-database.bash
Normal file
52
wipe-database.bash
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Config
|
||||||
|
CONTAINER_NAME="online-energieausweis-database-1"
|
||||||
|
DB_USER="main"
|
||||||
|
DB_NAME="main"
|
||||||
|
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
|
||||||
|
FILE_NAME="backup-$TIMESTAMP.sql.br"
|
||||||
|
|
||||||
|
REQUIRED_CONFIRMATION='Ja, ich möchte alle Daten unwiderruflich löschen.'
|
||||||
|
|
||||||
|
echo "⚠️ WARNUNG: Diese Aktion wird alle Tabellen und Einträge in der Datenbank vollständig löschen!"
|
||||||
|
echo "Um fortzufahren, tippe exakt: \"$REQUIRED_CONFIRMATION\""
|
||||||
|
echo
|
||||||
|
read -p "> " USER_CONFIRMATION
|
||||||
|
|
||||||
|
if [[ "$USER_CONFIRMATION" != "$REQUIRED_CONFIRMATION" ]]; then
|
||||||
|
echo "❌ Falsche Eingabe. Abbruch."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📦 Backup wird erstellt..."
|
||||||
|
docker exec -t "$CONTAINER_NAME" pg_dumpall -c -U "$DB_USER" | brotli > "$FILE_NAME"
|
||||||
|
echo "✅ Backup abgeschlossen: $FILE_NAME"
|
||||||
|
|
||||||
|
echo "🧨 Alle Daten aus allen Tabellen werden gelöscht..."
|
||||||
|
|
||||||
|
# Generate and run TRUNCATE statements for all tables in the public schema
|
||||||
|
docker exec -i "$CONTAINER_NAME" psql -U "$DB_USER" "$DB_NAME" <<'EOSQL'
|
||||||
|
DO $$
|
||||||
|
DECLARE
|
||||||
|
r RECORD;
|
||||||
|
sql TEXT := '';
|
||||||
|
BEGIN
|
||||||
|
FOR r IN
|
||||||
|
SELECT tablename
|
||||||
|
FROM pg_tables
|
||||||
|
WHERE schemaname = 'public'
|
||||||
|
LOOP
|
||||||
|
sql := sql || FORMAT('TRUNCATE TABLE public.%I CASCADE;', r.tablename);
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
EXECUTE sql;
|
||||||
|
END
|
||||||
|
$$;
|
||||||
|
EOSQL
|
||||||
|
|
||||||
|
echo "✅ Alle Tabellen gelöscht und Schema zurückgesetzt."
|
||||||
|
|
||||||
|
echo "🚀 Datenbankbereinigung abgeschlossen."
|
||||||
Reference in New Issue
Block a user