Bugfixes im Zuge der Datenbank Umstellung

This commit is contained in:
Moritz Utcke
2024-02-25 11:45:30 +07:00
parent b3aa49e0a9
commit 61c36f6b78
35 changed files with 425 additions and 1130 deletions

View File

@@ -1,13 +1,22 @@
---
import moment from "moment";
import Checkbox from "#components/Checkbox.svelte";
import DatenblattFooter from "#components/DatenblattFooter.svelte";
import DatenblattHeader from "#components/DatenblattHeader.svelte";
import PDFLayout from "#layouts/PDFLayout.astro";
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database/client";
import {
GebaeudeStammdaten,
VerbrauchsausweisWohnen,
prisma,
} from "@ibcornelsen/database/server";
import { generate } from "@pdfme/generator";
import VerbrauchsausweisWohnen2016Template from "../../data/templates/verbrauchsausweis-wohnen-2016.json";
import { convertAusweisData } from "#lib/AusweisData";
import { variable } from "#lib/pdf/plugins/variables";
import { text, image } from "@pdfme/schemas"
const base64 = Astro.url.searchParams.get("base64");
let ausweis: (Partial<VerbrauchsausweisWohnen> & { gebaeude_stammdaten: Partial<GebaeudeStammdaten> }) | null = null;
let ausweis:
| (Partial<VerbrauchsausweisWohnen> & {
gebaeude_stammdaten: Partial<GebaeudeStammdaten>;
})
| null = null;
if (base64) {
const buffer = Buffer.from(base64, "base64");
const json = buffer.toString("utf-8");
@@ -33,494 +42,22 @@ if (!ausweis) {
return Astro.redirect("/404");
}
const gebaeude = ausweis.gebaeude_stammdaten;
const pdf = await generate({
template: VerbrauchsausweisWohnen2016Template,
plugins: { text, image, variable },
inputs: [convertAusweisData(ausweis)],
options: {
author: "IB Cornelsen",
creationDate: new Date(),
creator: "IB Cornelsen",
language: "de",
title: "Verbrauchsausweis Wohnen 2016",
},
});
return new Response(pdf, {
headers: {
"Content-Type": "application/pdf",
},
});
---
<PDFLayout title="Datenblatt">
<div class="flex flex-col gap-20">
<div class="flex flex-col gap-4">
<DatenblattHeader />
<div class="px-12 py-20 flex flex-col gap-2">
<div class="flex flex-row justify-between items-center">
<h2>Datenblatt Energieausweis</h2>
<h2>Ausweis ID:</h2>
</div>
<h3>Gebäudedaten:</h3>
<p>
Adresse: {gebaeude.adresse}, {
gebaeude.plz
}
{gebaeude.ort}
</p>
<div class="flex justify-between">
<Checkbox checked={ausweis.ausstellgrund == "Neubau"}>
Neubau
</Checkbox>
<Checkbox
checked={ausweis.ausstellgrund == "Vermietung" ||
ausweis.ausstellgrund == "Verkauf"}
>
Vermietung/Verkauf
</Checkbox>
<Checkbox
checked={ausweis.ausstellgrund == "Modernisierung"}
>
Modernisierung
</Checkbox>
<Checkbox checked={ausweis.ausstellgrund == "Sonstiges"}>
Sonstiges
</Checkbox>
</div>
<div class="flex justify-between gap-4">
<table>
<tbody
><tr>
<td>Baujahr Gebäude:</td>
<td
>{
gebaeude.baujahr_gebaeude
}</td
>
</tr>
<tr>
<td>Baujahr Heizung:</td>
<td
>{
gebaeude.baujahr_heizung
}</td
>
</tr>
<tr>
<td>Wohnfläche:</td>
<td>{gebaeude.flaeche}</td>
</tr>
<tr>
<td>Lüftungskonzept:</td>
<td>{gebaeude.lueftung}</td>
</tr>
<tr>
<td>Gebäudetyp:</td>
<td
>{
gebaeude.gebaeudetyp
}</td
>
</tr></tbody
>
</table>
<table>
<tbody
><tr>
<td>Dachgeschoss:</td>
<td
>{
gebaeude.dachgeschoss
? "Beheizt"
: gebaeude
.dachgeschoss
? "Unbeheizt"
: "Nicht Vorhanden"
}</td
>
</tr>
<tr>
<td>Beheizter Keller:</td>
<td>{ausweis.keller_beheizt ? "Ja" : "Nein"}</td
>
</tr>
<tr>
<td>Wohnungen:</td>
<td>{gebaeude.einheiten}</td>
</tr>
<tr>
<td>Anlage zur Kühlung:</td>
<td>{ausweis.wird_gekuehlt ? "Ja" : "Nein"}</td>
</tr>
<tr>
<td>Leerstand:</td>
<td>{gebaeude.leerstand}%</td
>
</tr></tbody
>
</table>
</div>
<div class="flex flex-row gap-8">
<div class="flex flex-col">
<h2>Heizverbrauch</h2>
<div class="flex flex-row justify-between gap-4">
<p>
Von: {
moment(ausweis.startdatum).format("MM.YYYY")
}
</p>
<p>
Bis: {
moment(ausweis.startdatum)
.add("1", "year")
.format("MM.YYYY")
}
</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>
Von: {
moment(ausweis.startdatum)
.add("1", "year")
.format("MM.YYYY")
}
</p>
<p>
Bis: {
moment(ausweis.startdatum)
.add("2", "years")
.format("MM.YYYY")
}
</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>
Von: {
moment(ausweis.startdatum)
.add("2", "years")
.format("MM.YYYY")
}
</p>
<p>
Bis: {
moment(ausweis.startdatum)
.add("3", "years")
.format("MM.YYYY")
}
</p>
</div>
</div>
<div class="flex flex-col">
<h2>{ausweis.brennstoff_1}</h2>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.verbrauch_1}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.verbrauch_2}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.verbrauch_3}</p>
<p>{ausweis.einheit_1}</p>
</div>
</div>
</div>
<div class="flex flex-row gap-8">
<div class="flex flex-col">
<h2>Heizverbrauch (Heizwert)</h2>
<div class="flex flex-row justify-between gap-4">
<p>
Von: {
moment(ausweis.startdatum).format("MM.YYYY")
}
</p>
<p>
Bis: {
moment(ausweis.startdatum)
.add("1", "year")
.format("MM.YYYY")
}
</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>
Von: {
moment(ausweis.startdatum)
.add("1", "year")
.format("MM.YYYY")
}
</p>
<p>
Bis: {
moment(ausweis.startdatum)
.add("2", "years")
.format("MM.YYYY")
}
</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>
Von: {
moment(ausweis.startdatum)
.add("2", "years")
.format("MM.YYYY")
}
</p>
<p>
Bis: {
moment(ausweis.startdatum)
.add("3", "years")
.format("MM.YYYY")
}
</p>
</div>
</div>
<div class="flex flex-col">
<h2>{ausweis.brennstoff_1}</h2>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.verbrauch_1}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.verbrauch_2}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.verbrauch_3}</p>
<p>{ausweis.einheit_1}</p>
</div>
</div>
</div>
<p>
Warmwasser enthalten: {
ausweis.warmwasser_enthalten ? "Ja" : "Nein"
}
</p>
</div>
<DatenblattFooter />
</div>
<div class="flex flex-col gap-4">
<DatenblattHeader />
<div class="px-12 py-20 flex flex-col gap-2">
<h2>Modernisierungsstand</h2>
<h3>Heizungsanlage</h3>
<div class="grid grid-cols-3">
<Checkbox
checked={gebaeude.zentralheizung ||
false}
>
Zentral/Etage
</Checkbox>
<Checkbox
checked={gebaeude.einzelofen ||
false}
>
Einzelöfen
</Checkbox>
<Checkbox
checked={gebaeude
.durchlauf_erhitzer || false}
>
Durchlauferhitzer
</Checkbox>
<Checkbox
checked={gebaeude.standard_kessel ||
false}
>
Standardkessel
</Checkbox>
<Checkbox
checked={gebaeude
.solarsystem_warmwasser || false}
>
Solarsystem für Warmwasser
</Checkbox>
<Checkbox
checked={gebaeude.waermepumpe ||
false}
>
Wärmepumpe
</Checkbox>
<Checkbox
checked={gebaeude
.niedertemperatur_kessel || false}
>
Niedertemperaturkessel
</Checkbox>
<Checkbox
checked={gebaeude.brennwert_kessel ||
false}
>
Brennwertkessel/Therme
</Checkbox>
<Checkbox
checked={gebaeude
.warmwasser_rohre_gedaemmt || false}
>
Warmwasserrohre gedämmt
</Checkbox>
<Checkbox
checked={gebaeude
.heizungsrohre_gedaemmt || false}
>
Heizungsrohre gedämmt
</Checkbox>
<Checkbox
checked={gebaeude.zirkulation ||
false}
>
Zirkulation
</Checkbox>
<Checkbox
checked={gebaeude
.raum_temperatur_regler || false}
>
Raumtemperraturregler
</Checkbox>
</div>
<h3>Fenster/Dachfenster/Türen</h3>
<div class="grid grid-cols-3">
<Checkbox
checked={gebaeude
.einfach_verglasung || false}
>
Einfachglas
</Checkbox>
<Checkbox
checked={gebaeude
.doppel_verglasung || false}
>
Doppelverglasung
</Checkbox>
<Checkbox
checked={gebaeude
.isolier_verglasung || false}
>
Isolierverglasung
</Checkbox>
<Checkbox
checked={gebaeude
.dreifach_verglasung || false}
>
Dreifachverglasung
</Checkbox>
<Checkbox
checked={gebaeude.fenster_dicht ||
false}
>
Alle Fenster dicht
</Checkbox>
<Checkbox
checked={gebaeude
.fenster_teilweise_undicht || false}
>
Fenster teilweise undicht
</Checkbox>
<Checkbox
checked={gebaeude.tueren_dicht ||
false}
>
Alle Türen dicht
</Checkbox>
<Checkbox
checked={gebaeude.tueren_undicht ||
false}
>
Türen teilweise undicht
</Checkbox>
<Checkbox
checked={gebaeude
.rolllaeden_kaesten_gedaemmt || false}
>
Rolladenkästen gedämmt
</Checkbox>
</div>
<h3>Wärmedämmung</h3>
<div class="grid grid-cols-2">
<Checkbox
checked={gebaeude
.aussenwand_gedaemmt || false}
>
Außenwand gedämmt
</Checkbox>
<Checkbox
checked={gebaeude
.keller_wand_gedaemmt || false}
>
Kelleraußenwand gedämmt
</Checkbox>
<Checkbox
checked={gebaeude
.keller_decke_gedaemmt || false}
>
Kellerdecke gedämmt
</Checkbox>
<Checkbox
checked={gebaeude
.dachgeschoss_gedaemmt || false}
>
Dachgeschoss gedämmt
</Checkbox>
<Checkbox
checked={gebaeude
.oberste_geschossdecke_gedaemmt || false}
>
Oberste Geschossdecke gedämmt
</Checkbox>
<Checkbox
checked={gebaeude
.oberste_geschossdecke_min_12cm_gedaemmt || false}
>
Oberste Geschossdecke min. 12cm gedämmt
</Checkbox>
</div>
<Checkbox checked={true}>
Die Angaben sind richtig und entsprechen dem aktuellen
Stand.
</Checkbox>
<Checkbox checked={true}>
Ich habe die AGB gelesen und akzeptiert.
</Checkbox>
<p>
Die Angaben auf diesem Datenblatt wurden uns übermittelt und
werden zur Berechnung und Ausstellung des Ausweises
herangezogen.
</p>
</div>
<DatenblattFooter />
</div>
</div>
</PDFLayout>
<style is:global>
table {
@apply w-full h-full;
}
td > table td {
@apply px-0 py-0 border-t-0 border-b-0;
}
td:has(table) {
@apply p-0;
}
td > table td:first-child {
@apply border-l-0;
}
td > table td:last-child {
@apply border-r-0;
}
td {
@apply border border-black px-1 text-xs py-0.5;
}
td:not(:first-child) {
@apply bg-white;
}
h2 {
@apply font-bold text-sm;
}
p,
label {
@apply text-xs;
}
.box {
@apply border-4 border-pdf-yellow-bright bg-pdf-yellow-light rounded-lg;
}
.box > * {
@apply px-1 py-0.5;
}
</style>