Bugfixes, Kundendaten, Datenbank Anpassung

This commit is contained in:
Moritz Utcke
2024-01-10 15:09:30 +07:00
parent ee5133b3f8
commit b20b857a7d
60 changed files with 737 additions and 1647 deletions

View File

@@ -1,23 +1,42 @@
---
import { changeLanguage } from "i18next";
import moment from "moment";
import { Ausweis } from "src/lib/Ausweis";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import Checkbox from "#components/Checkbox.svelte";
import PDFHeader from "#components/PDF/PDFHeader.svelte";
import PDFSectionHeader from "#components/PDF/PDFSectionHeader.svelte";
import PDFLayout from "#layouts/PDFLayout.astro";
import { VerbrauchsausweisWohnen, GebaeudeStammdaten, prisma } from "@ibcornelsen/database";
changeLanguage("de");
const base64 = Astro.url.searchParams.get("base64");
if (!base64) {
return Astro.redirect("/404");
let ausweis: (Partial<VerbrauchsausweisWohnen> & { gebaeude_stammdaten: Partial<GebaeudeStammdaten> }) | null = null;
if (base64) {
const buffer = Buffer.from(base64, "base64");
const json = buffer.toString("utf-8");
ausweis = JSON.parse(json);
} else {
const uidAusweis = Astro.url.searchParams.get("ausweis_uid");
if (!uidAusweis) {
return Astro.redirect("/404");
}
ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
where: {
uid: uidAusweis,
},
include: {
gebaeude_stammdaten: true,
},
});
}
const ausweis = Verbrauchsausweis.fromBase64(base64);
if (!ausweis) {
return Astro.redirect("/404");
return Astro.redirect("/404");
}
const gebaeude = ausweis.gebaeude_stammdaten;
---
<PDFLayout title="Ansichtsausweis">
@@ -45,30 +64,30 @@ if (!ausweis) {
<table>
<tr>
<td>Gebäudetyp</td>
<td>{ausweis.objekt_typ}</td>
<td>{gebaeude.gebaeudetyp}</td>
</tr>
<tr>
<td>Adresse</td>
<td>{ausweis.objekt_strasse}</td>
<td>{gebaeude.adresse}</td>
</tr>
<tr>
<td>Gebäudeteil</td>
<td>{ausweis.objekt_gebaeudeteil}</td>
<td>{gebaeude.gebaeudeteil}</td>
</tr>
<tr>
<td>Baujahr Gebäude ³</td>
<td>{ausweis.baujahr_gebaeude}</td>
<td>{gebaeude.baujahr_gebaeude}</td>
</tr>
<tr>
<td
>Baujahr Wärmeerzeuger <sup>3</sup>
<sup>4</sup></td
>
<td>{ausweis.baujahr_anlage}</td>
<td>{gebaeude.baujahr_heizung}</td>
</tr>
<tr>
<td>Anzahl Wohnungen</td>
<td>{ausweis.anzahl_einheiten}</td>
<td>{gebaeude.einheiten}</td>
</tr>
<tr>
<td>Gebäudenutzfläche (A<sub>N</sub>)</td>

View File

@@ -1,120 +1,212 @@
---
import { changeLanguage } from "i18next";
import moment from "moment";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import { Dachgeschoss } from "src/lib/Ausweis/types";
import Checkbox from "#components/Checkbox.svelte";
import DatenblattFooter from "#components/DatenblattFooter.svelte";
import DatenblattHeader from "#components/DatenblattHeader.svelte";
import PDFHeader from "#components/PDF/PDFHeader.svelte";
import PDFSectionHeader from "#components/PDF/PDFSectionHeader.svelte";
import PDFLayout from "#layouts/PDFLayout.astro";
changeLanguage("de");
import { GebaeudeStammdaten, VerbrauchsausweisWohnen, prisma } from "@ibcornelsen/database";
const base64 = Astro.url.searchParams.get("base64");
if (!base64) {
return Astro.redirect("/404");
let ausweis: (Partial<VerbrauchsausweisWohnen> & { gebaeude_stammdaten: Partial<GebaeudeStammdaten> }) | null = null;
if (base64) {
const buffer = Buffer.from(base64, "base64");
const json = buffer.toString("utf-8");
ausweis = JSON.parse(json);
} else {
const uidAusweis = Astro.url.searchParams.get("ausweis_uid");
if (!uidAusweis) {
return Astro.redirect("/404");
}
ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
where: {
uid: uidAusweis,
},
include: {
gebaeude_stammdaten: true,
},
});
}
const ausweis = Verbrauchsausweis.fromBase64(base64);
if (!ausweis) {
return Astro.redirect("/404");
return Astro.redirect("/404");
}
const gebaeude = ausweis.gebaeude_stammdaten;
---
<PDFLayout title="Datenblatt">
<div class="flex flex-col gap-20">
<div class="flex flex-col gap-4">
<DatenblattHeader></DatenblattHeader>
<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>
<h2>Ausweis ID:</h2>
</div>
<h3>Gebäudedaten:</h3>
<p>Adresse: {ausweis.objekt_strasse}, {ausweis.objekt_plz} {ausweis.objekt_ort}</p>
<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>
<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>{ausweis.baujahr_gebaeude}</td>
</tr>
<tr>
<td>Baujahr Heizung:</td>
<td>{ausweis.baujahr_anlage}</td>
</tr>
<tr>
<td>Wohnfläche:</td>
<td>{ausweis.wohnflaeche}</td>
</tr>
<tr>
<td>Lüftungskonzept:</td>
<td>{ausweis.lueftungskonzept}</td>
</tr>
<tr>
<td>Gebäudetyp:</td>
<td>{ausweis.objekt_typ}</td>
</tr></tbody>
<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>{ausweis.dachgeschoss == Dachgeschoss.BEHEIZT ? "Beheizt" : (ausweis.dachgeschoss == Dachgeschoss.UNBEHEIZT ? "Unbeheizt" : "Nicht Vorhanden")}</td>
</tr>
<tr>
<td>Beheizter Keller:</td>
<td>{ausweis.keller_beheizt ? "Ja" : "Nein"}</td>
</tr>
<tr>
<td>Wohnungen:</td>
<td>{ausweis.anzahl_einheiten}</td>
</tr>
<tr>
<td>Anlage zur Kühlung:</td>
<td>{ausweis.wird_gekuehlt ? "Ja" : "Nein"}</td>
</tr>
<tr>
<td>Leerstand:</td>
<td>{ausweis.leerstand}%</td>
</tr></tbody>
<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.energieverbrauch_zeitraum).format("MM.YYYY")}</p>
<p>Bis: {moment(ausweis.energieverbrauch_zeitraum).add("1", "year").format("MM.YYYY")}</p>
<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.energieverbrauch_zeitraum).add("1", "year").format("MM.YYYY")}</p>
<p>Bis: {moment(ausweis.energieverbrauch_zeitraum).add("2", "years").format("MM.YYYY")}</p>
<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.energieverbrauch_zeitraum).add("2", "years").format("MM.YYYY")}</p>
<p>Bis: {moment(ausweis.energieverbrauch_zeitraum).add("3", "years").format("MM.YYYY")}</p>
<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.energietraeger_1}</h2>
<h2>{ausweis.brennstoff_1}</h2>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.energieverbrauch_1_heizquelle_1}</p>
<p>{ausweis.energietraeger_einheit_heizquelle_1}</p>
<p>{ausweis.verbrauch_1}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.energieverbrauch_2_heizquelle_1}</p>
<p>{ausweis.energietraeger_einheit_heizquelle_1}</p>
<p>{ausweis.verbrauch_2}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.energieverbrauch_3_heizquelle_1}</p>
<p>{ausweis.energietraeger_einheit_heizquelle_1}</p>
<p>{ausweis.verbrauch_3}</p>
<p>{ausweis.einheit_1}</p>
</div>
</div>
</div>
@@ -122,85 +214,266 @@ if (!ausweis) {
<div class="flex flex-col">
<h2>Heizverbrauch (Heizwert)</h2>
<div class="flex flex-row justify-between gap-4">
<p>Von: {moment(ausweis.energieverbrauch_zeitraum).format("MM.YYYY")}</p>
<p>Bis: {moment(ausweis.energieverbrauch_zeitraum).add("1", "year").format("MM.YYYY")}</p>
<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.energieverbrauch_zeitraum).add("1", "year").format("MM.YYYY")}</p>
<p>Bis: {moment(ausweis.energieverbrauch_zeitraum).add("2", "years").format("MM.YYYY")}</p>
<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.energieverbrauch_zeitraum).add("2", "years").format("MM.YYYY")}</p>
<p>Bis: {moment(ausweis.energieverbrauch_zeitraum).add("3", "years").format("MM.YYYY")}</p>
<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.energietraeger_1}</h2>
<h2>{ausweis.brennstoff_1}</h2>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.energieverbrauch_1_heizquelle_1}</p>
<p>{ausweis.energietraeger_einheit_heizquelle_1}</p>
<p>{ausweis.verbrauch_1}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.energieverbrauch_2_heizquelle_1}</p>
<p>{ausweis.energietraeger_einheit_heizquelle_1}</p>
<p>{ausweis.verbrauch_2}</p>
<p>{ausweis.einheit_1}</p>
</div>
<div class="flex flex-row justify-between gap-4">
<p>{ausweis.energieverbrauch_3_heizquelle_1}</p>
<p>{ausweis.energietraeger_einheit_heizquelle_1}</p>
<p>{ausweis.verbrauch_3}</p>
<p>{ausweis.einheit_1}</p>
</div>
</div>
</div>
<p>Warmwasser enthalten: {ausweis.warmwasser_enthalten ? "Ja" : "Nein"}</p>
<p>
Warmwasser enthalten: {
ausweis.warmwasser_enthalten ? "Ja" : "Nein"
}
</p>
</div>
<DatenblattFooter></DatenblattFooter>
<DatenblattFooter />
</div>
<div class="flex flex-col gap-4">
<DatenblattHeader></DatenblattHeader>
<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={ausweis.versorgungssysteme[0]}>Zentral/Etage</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[1]}>Einzelöfen</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[2]}>Durchlauferhitzer</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[3]}>Standardkessel</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[4]}>Solarsystem für Warmwasser</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[5]}>Wärmepumpe</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[6]}>Niedertemperaturkessel</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[7]}>Brennwertkessel/Therme</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[8]}>Warmwasserrohre gedämmt</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[9]}>Heizungsrohre gedämmt</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[10]}>Zirkulation</Checkbox>
<Checkbox checked={ausweis.versorgungssysteme[11]}>Raumtemperraturregler</Checkbox>
<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={ausweis.fenster_dach[0]}>Einfachglas</Checkbox>
<Checkbox checked={ausweis.fenster_dach[1]}>Doppelverglasung</Checkbox>
<Checkbox checked={ausweis.fenster_dach[2]}>Isolierverglasung</Checkbox>
<Checkbox checked={ausweis.fenster_dach[3]}>Dreifachverglasung</Checkbox>
<Checkbox checked={ausweis.fenster_dach[4]}>Alle Fenster dicht</Checkbox>
<Checkbox checked={ausweis.fenster_dach[5]}>Fenster teilweise undicht</Checkbox>
<Checkbox checked={ausweis.fenster_dach[6]}>Alle Türen dicht</Checkbox>
<Checkbox checked={ausweis.fenster_dach[7]}>Türen teilweise undicht</Checkbox>
<Checkbox checked={ausweis.fenster_dach[8]}>Rolladenkästen gedämmt</Checkbox>
<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={ausweis.daemmung[0]}>Außenwand gedämmt</Checkbox>
<Checkbox checked={ausweis.daemmung[1]}>Kelleraußenwand gedämmt</Checkbox>
<Checkbox checked={ausweis.daemmung[2]}>Kellerdecke gedämmt</Checkbox>
<Checkbox checked={ausweis.daemmung[3]}>Dachgeschoss gedämmt</Checkbox>
<Checkbox checked={ausweis.daemmung[4]}>Oberste Geschossdecke gedämmt</Checkbox>
<Checkbox checked={ausweis.daemmung[5]}>Oberste Geschossdecke min. 12cm gedämmt</Checkbox>
<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>
<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></DatenblattFooter>
<DatenblattFooter />
</div>
</div>
</PDFLayout>