Neue Datenbank eingebunden

This commit is contained in:
Moritz Utcke
2023-05-10 19:40:22 +04:00
parent 724f3ff546
commit 33c8a1d447
26 changed files with 483 additions and 631 deletions

View File

@@ -27,7 +27,7 @@
<hr class="trenner_form_100" />
</div>
<ImageGrid max={1} bind:images />
<ImageGrid max={1} bind:images bind:ausweis />
</div>
</div>

View File

@@ -1,10 +1,11 @@
<script lang="ts">
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
import { Gebaeude } from "src/lib/Gebaeude";
import HelpLabel from "~/components/HelpLabel.svelte";
export let ausweis: Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
export let gebaeude: Gebaeude;
$: ausweis = gebaeude.ausweis || new Verbrauchsausweis();
</script>
<div class="GRB">
@@ -96,7 +97,7 @@
type="number"
required
autocomplete="off"
bind:value={ausweis.baujahr_gebaeude}
bind:value={gebaeude.baujahr}
/>
</div>
</div>
@@ -112,12 +113,12 @@
<input
id="IGanzahl"
name="IGanzahl"
class="form-control input-md zahlen"
class=" "
type="text"
required
autocomplete="off"
data-msg="Pflichtfeld"
bind:value={ausweis.anzahl_einheiten}
bind:value={gebaeude.einheiten}
maxlength="3"
/>
</div>
@@ -137,9 +138,9 @@
<select
id="IGsan"
name="IGsan"
class="form-control"
class=""
required
bind:value={ausweis.objekt_saniert}
bind:value={gebaeude.saniert}
>
<option disabled>Bitte auswählen</option>
<option value={true}

View File

@@ -1,15 +1,16 @@
<script lang="ts">
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import HelpLabel from "../HelpLabel.svelte";
import HeizungImage from "./HeizungImage.svelte";
import AusweisPreviewContainer from "./AusweisPreviewContainer.svelte";
import DaemmungImage from "./DaemmungImage.svelte";
import FensterImage from "./FensterImage.svelte";
import Label from "../Label.svelte";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
import { Gebaeude } from "src/lib/Gebaeude";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
export let ausweis: Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
export let gebaeude: Gebaeude;
$: ausweis = gebaeude.ausweis || new Verbrauchsausweis()
</script>
@@ -29,7 +30,7 @@
><input
type="checkbox"
name="IGheizungsanlage1"
bind:checked={ausweis.versorgungssysteme[0]}
bind:checked={gebaeude.versorgungssysteme[0]}
value="ZH"
/>Zentral/Etage</label
>
@@ -39,7 +40,7 @@
><input
type="checkbox"
name="IGheizungsanlage2"
bind:checked={ausweis.versorgungssysteme[1]}
bind:checked={gebaeude.versorgungssysteme[1]}
value="EO"
/>Einzelöfen</label
>
@@ -49,7 +50,7 @@
><input
type="checkbox"
name="IGheizungsanlage3"
bind:checked={ausweis.versorgungssysteme[2]}
bind:checked={gebaeude.versorgungssysteme[2]}
value="DH"
/>Durchlauferhitzer</label
>
@@ -59,7 +60,7 @@
><input
type="checkbox"
name="IGheizungsanlage4"
bind:checked={ausweis.versorgungssysteme[3]}
bind:checked={gebaeude.versorgungssysteme[3]}
value="SK"
/>Standardkessel</label
>
@@ -69,7 +70,7 @@
><input
type="checkbox"
name="IGheizungsanlage5"
bind:checked={ausweis.versorgungssysteme[4]}
bind:checked={gebaeude.versorgungssysteme[4]}
value="SSWW"
/>Solarsystem für Warmwasser</label
>
@@ -79,7 +80,7 @@
><input
type="checkbox"
name="IGheizungsanlage6"
bind:checked={ausweis.versorgungssysteme[5]}
bind:checked={gebaeude.versorgungssysteme[5]}
value="WP"
/>Wärmepumpe</label
>
@@ -89,7 +90,7 @@
><input
type="checkbox"
name="IGheizungsanlage7"
bind:checked={ausweis.versorgungssysteme[6]}
bind:checked={gebaeude.versorgungssysteme[6]}
value="NK"
/>Niedertemperaturkessel</label
>
@@ -99,7 +100,7 @@
><input
type="checkbox"
name="IGheizungsanlage8"
bind:checked={ausweis.versorgungssysteme[7]}
bind:checked={gebaeude.versorgungssysteme[7]}
value="BWK"
/>Brennwertkessel</label
>
@@ -109,7 +110,7 @@
><input
type="checkbox"
name="IGheizungsanlage9"
bind:checked={ausweis.versorgungssysteme[8]}
bind:checked={gebaeude.versorgungssysteme[8]}
value="WRGD"
/>Warmwasserrohre gedämmt</label
>
@@ -119,7 +120,7 @@
><input
type="checkbox"
name="IGheizungsanlage10"
bind:checked={ausweis.versorgungssysteme[9]}
bind:checked={gebaeude.versorgungssysteme[9]}
value="HRGD"
/>Heizungsrohre gedämmt</label
>
@@ -129,7 +130,7 @@
><input
type="checkbox"
name="IGheizungsanlage11"
bind:checked={ausweis.versorgungssysteme[10]}
bind:checked={gebaeude.versorgungssysteme[10]}
value="ZK"
/>Zirkulation</label
>
@@ -139,7 +140,7 @@
><input
type="checkbox"
name="IGheizungsanlage12"
bind:checked={ausweis.versorgungssysteme[11]}
bind:checked={gebaeude.versorgungssysteme[11]}
value="RTR"
/>Raumtemperaturregler</label
>
@@ -149,7 +150,7 @@
<hr />
<HeizungImage />
<HeizungImage bind:ausweis />
<hr />
@@ -168,7 +169,7 @@
><input
type="checkbox"
name="IGfensterdach1"
bind:checked={ausweis.fenster_dach[0]}
bind:checked={gebaeude.fenster_dach[0]}
value="EG"
/>Einfachglas</label
>
@@ -178,7 +179,7 @@
><input
type="checkbox"
name="IGfensterdach2"
bind:checked={ausweis.fenster_dach[1]}
bind:checked={gebaeude.fenster_dach[1]}
value="DF"
/>Doppelverglasung</label
>
@@ -188,7 +189,7 @@
><input
type="checkbox"
name="IGfensterdach3"
bind:checked={ausweis.fenster_dach[2]}
bind:checked={gebaeude.fenster_dach[2]}
value="IVG"
/>Isolierverglasung</label
>
@@ -198,7 +199,7 @@
><input
type="checkbox"
name="IGfensterdach4"
bind:checked={ausweis.fenster_dach[3]}
bind:checked={gebaeude.fenster_dach[3]}
value="PHF"
/>Dreifachverglasung</label
>
@@ -208,7 +209,7 @@
><input
type="checkbox"
name="IGfensterdach5"
bind:checked={ausweis.fenster_dach[4]}
bind:checked={gebaeude.fenster_dach[4]}
value="FD"
/>Alle Fenster dicht</label
>
@@ -218,7 +219,7 @@
><input
type="checkbox"
name="IGfensterdach6"
bind:checked={ausweis.fenster_dach[5]}
bind:checked={gebaeude.fenster_dach[5]}
value="FTUD"
/>Fenster teilweise undicht</label
>
@@ -228,7 +229,7 @@
><input
type="checkbox"
name="IGfensterdach7"
bind:checked={ausweis.fenster_dach[6]}
bind:checked={gebaeude.fenster_dach[6]}
value="TD"
/>Alle Türen dicht</label
>
@@ -238,7 +239,7 @@
><input
type="checkbox"
name="IGfensterdach8"
bind:checked={ausweis.fenster_dach[7]}
bind:checked={gebaeude.fenster_dach[7]}
value="TUD"
/>Türen teilweise undicht</label
>
@@ -248,7 +249,7 @@
><input
type="checkbox"
name="IGfensterdach9"
bind:checked={ausweis.fenster_dach[8]}
bind:checked={gebaeude.fenster_dach[8]}
value="RKD"
/>Rollladenkästen gedämmt, luftdicht</label
>
@@ -258,7 +259,7 @@
<hr />
<FensterImage />
<FensterImage bind:ausweis />
<hr />
@@ -280,7 +281,7 @@
><input
type="checkbox"
name="IGwaermedaemmung1"
bind:checked={ausweis.daemmung[0]}
bind:checked={gebaeude.daemmung[0]}
value="AWD"
/>Außenwand gedämmt</label
>
@@ -290,7 +291,7 @@
><input
type="checkbox"
name="IGwaermedaemmung2"
bind:checked={ausweis.daemmung[1]}
bind:checked={gebaeude.daemmung[1]}
value="KWD"
/>Kelleraußenwand gedämmt</label
>
@@ -300,7 +301,7 @@
><input
type="checkbox"
name="IGwaermedaemmung3"
bind:checked={ausweis.daemmung[2]}
bind:checked={gebaeude.daemmung[2]}
value="KDD"
/>Kellerdecke gedämmt</label
>
@@ -310,7 +311,7 @@
><input
type="checkbox"
name="IGwaermedaemmung4"
bind:checked={ausweis.daemmung[3]}
bind:checked={gebaeude.daemmung[3]}
value="DGD"
/>Dachgeschoss gedämmt</label
>
@@ -320,7 +321,7 @@
><input
type="checkbox"
name="IGwaermedaemmung5"
bind:checked={ausweis.daemmung[4]}
bind:checked={gebaeude.daemmung[4]}
value="OGDDW"
/>Oberste Geschossdecke gedämmt</label
>
@@ -330,7 +331,7 @@
><input
type="checkbox"
name="IGwaermedaemmung6"
bind:checked={ausweis.daemmung[5]}
bind:checked={gebaeude.daemmung[5]}
value="OGDD"
/>Oberste Geschossdecke min. 12cm gedämmt</label
>
@@ -340,7 +341,7 @@
<hr />
<DaemmungImage />
<DaemmungImage bind:ausweis />
<hr />

View File

@@ -1,7 +1,11 @@
<script lang="ts">
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import ImageGrid from "../ImageGrid.svelte";;
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
let images: (File & { data: string })[] = [];
export let ausweis: Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
</script>
<div class="grid grid-cols-2 gap-4">
@@ -54,6 +58,6 @@
Energieausweis!<br />
<strong>Bitte laden Sie hier mind. 2 Bilder hoch:</strong>
</p>
<ImageGrid max={4} bind:images></ImageGrid>
<ImageGrid max={4} bind:images bind:ausweis></ImageGrid>
</div>
</div>

View File

@@ -1,7 +1,11 @@
<script lang="ts">
import ImageGrid from "../ImageGrid.svelte";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import ImageGrid from "../ImageGrid.svelte";;
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
let images: (File & { data: string })[] = [];
export let ausweis: Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
</script>
<div class="grid grid-cols-2 gap-4">
@@ -51,6 +55,6 @@
Energieausweis!<br />
<strong>Bitte laden Sie hier mind. 1 Bild hoch:</strong>
</p>
<ImageGrid max={4} bind:images></ImageGrid>
<ImageGrid max={4} bind:images bind:ausweis></ImageGrid>
</div>
</div>

View File

@@ -1,6 +1,11 @@
<script lang="ts">
import ImageGrid from "../ImageGrid.svelte";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import ImageGrid from "../ImageGrid.svelte";;
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
let images: (File & { data: string })[] = [];
export let ausweis: Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
</script>
<div class="grid grid-cols-2 gap-4">
@@ -57,6 +62,6 @@
Ihrem Energieausweis!<br />
<strong>Bitte laden Sie hier mind. 1 Bild hoch:</strong>
</p>
<ImageGrid max={4} bind:images />
<ImageGrid max={4} bind:images bind:ausweis />
</div>
</div>

View File

@@ -37,7 +37,7 @@
<div>
<label>Anrede *</label>
<div>
<select name="Aanrede" class="form-control">
<select name="Aanrede" class="">
<option>bitte auswählen</option>
<option value="Herr">Herr</option>
<option value="Frau">Frau</option>
@@ -62,7 +62,7 @@
<label>Telefon</label>
<input
name="Atelefon"
class="zahlen"
class=""
type="text"
/>
</div>
@@ -131,7 +131,7 @@
<label>Telefon</label>
<input
name="Rtelefon"
class="zahlen"
class=""
type="text"
/>
</div>

View File

@@ -205,7 +205,7 @@
<div class="column">
<span>bis</span>
<input
class="form-control"
class=""
value={moment(ausweis.energieverbrauch_zeitraum)
.add("1", "year")
.format("MM.Y")}
@@ -215,7 +215,7 @@
<div class="column">
<span>bis</span>
<input
class="form-control"
class=""
value={moment(ausweis.energieverbrauch_zeitraum)
.add("2", "years")
.format("MM.Y")}
@@ -225,7 +225,7 @@
<div class="column">
<span>bis</span>
<input
class="form-control"
class=""
value={moment(ausweis.energieverbrauch_zeitraum)
.add("3", "years")
.format("MM.Y")}

View File

@@ -1,12 +1,16 @@
<script lang="ts">
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import UploadImages from "./UploadImages.svelte";
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
export let images: (File & { data: string })[] = [];
export let max: number = 4;
export let ausweis: Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
</script>
<div class="flex flex-col gap-4">
<UploadImages {max} bind:images />
<UploadImages {max} bind:images bind:ausweis />
<div class="grid grid-cols-2 gap-2">
{#each images as image, i}
<div class="relative group">

View File

@@ -1,8 +1,13 @@
<script lang="ts">
import { Bedarfsausweis } from "src/lib/Ausweis/Bedarfsausweis";
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import { VerbrauchsausweisGewerbe } from "src/lib/Ausweis/VerbrauchsausweisGewerbe";
export let max: number = 2;
// Array of base64 encoded images read into the input.
export let images: (File & { data: string })[] = [];
export let ausweis: Verbrauchsausweis | VerbrauchsausweisGewerbe | Bedarfsausweis;
function getAllImages(this: HTMLInputElement) {
const files = this.files || [];
@@ -15,9 +20,6 @@
for (let i = 0; i < files.length; i++) {
const file = files[i];
console.log(file.type);
if ((file.type !== "image/jpeg") && (file.type !== "image/png")) {
i--;
continue;
@@ -55,17 +57,28 @@
ctx.drawImage(image, 0, 0, image.naturalWidth, image.naturalHeight);
// Get the scaled-down data from the canvas in the desired output format and quality
const dataURL = canvas.toDataURL("image/jpeg", 0.75);
const dataURL = canvas.toDataURL("image/jpeg", 0.8);
images.push({ ...file, data: dataURL as string } as (File & { data: string }));
fetch("/api/image", {
method: "PUT",
body: JSON.stringify({
data: dataURL,
name: file.name
data: dataURL.split(';base64,')[1],
name: file.name,
kategorie: "",
gebaeude_uid: ausweis.gebaeude_uid
})
}).then(response => response.json()).then(json => {
if (json.success === false) {
return
}
images.push({ ...file, data: dataURL as string } as (File & { data: string }));
images = images;
ausweis.uid = json.data.gebaeude_uid;
})
images = images;
if (i == (Math.min(files.length, max) - 1)) {
this.value = "";

View File

@@ -10,15 +10,19 @@
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import moment from "moment";
import BilderZusatzsysteme from "../Ausweis/BilderZusatzsysteme.svelte";
import { Gebaeude } from "src/lib/Gebaeude";
let ausweis = new Verbrauchsausweis();
export let gebaeude: Gebaeude;
$: ausweis = gebaeude.ausweis || new Verbrauchsausweis();
let needsRequirementCertificate: boolean = false;
$: needsRequirementCertificate =
(ausweis.baujahr_gebaeude < 1978 &&
ausweis.anzahl_einheiten <= 4 &&
ausweis.objekt_saniert == false &&
(gebaeude.baujahr < 1978 &&
gebaeude.einheiten <= 4 &&
gebaeude.saniert == false &&
(ausweis.ausstellgrund == "Vermietung" ||
ausweis.ausstellgrund == "Sonstiges")) ||
ausweis.ausstellgrund == "Neubau" ||
@@ -26,26 +30,25 @@
ausweis.ausstellgrund == "Verkauf";
function automatischAusfüllen() {
ausweis.baujahr_gebaeude = 1962;
gebaeude.baujahr = 1962;
ausweis.baujahr_anlage = 1974;
ausweis.objekt_saniert = true;
ausweis.anzahl_einheiten = 1;
gebaeude.saniert = true;
gebaeude.einheiten = 1;
ausweis.ausstellgrund = "Vermietung";
ausweis.energieverbrauch_1_heizquelle_1 = 15000;
ausweis.energieverbrauch_2_heizquelle_1 = 14000;
ausweis.energieverbrauch_3_heizquelle_1 = 16000;
ausweis.wohnflaeche = 152;
ausweis.keller_beheizt = true;
ausweis.energietraeger_1 = "Erdgas H";
ausweis.energietraeger_einheit_heizquelle_1 = "kWh";
ausweis.warmwasser_enthalten = true;
ausweis.anteil_warmwasser_1 = 18;
ausweis.energieverbrauch_zeitraum = moment("12.01.2019");
ausweis.objekt_plz = "21039";
ausweis.objekt_ort = "Hamburg";
ausweis.objekt_strasse = "Curslacker Deich 170";
ausweis.objekt_gebaeudeteil = "Gesamtgebäude"
ausweis.upload();
ausweis.kennwerte.verbrauch_1 = 15000;
ausweis.kennwerte.verbrauch_2 = 14000;
ausweis.kennwerte.verbrauch_3 = 16000;
gebaeude.wohnflaeche = 152;
gebaeude.keller_beheizt = true;
ausweis.kennwerte.energietraeger_1 = "Erdgas H";
ausweis.kennwerte.einheit_1 = "kWh";
ausweis.kennwerte.anteil_warmwasser_1 = 18;
ausweis.kennwerte.zeitraum = moment("12.01.2019");
gebaeude.plz = "21039";
gebaeude.ort = "Hamburg";
gebaeude.strasse = "Curslacker Deich 170";
gebaeude.gebaeudeteil = "Gesamtgebäude";
//ausweis.upload();
}
</script>
@@ -78,7 +81,7 @@
<Label>A - Prüfung der Ausweisart</Label>
<Ausweisart bind:ausweis />
<Ausweisart bind:gebaeude />
<div
class="flex flex-col p-4"
@@ -119,13 +122,13 @@
<div>
<input
name="IGstrasse"
class="input-md strasse"
class=" strasse"
type="text"
autocomplete="off"
required
data-msg-minlength="min. 5 Zeichen"
data-msg-maxlength="max. 40 Zeichen"
bind:value={ausweis.objekt_strasse}
bind:value={gebaeude.strasse}
/>
</div>
</div>
@@ -133,8 +136,8 @@
<!-- PLZ -->
<div class="form-group col-md-4 PLZ">
<ZipSearch
bind:zip={ausweis.objekt_plz}
bind:city={ausweis.objekt_ort}
bind:zip={gebaeude.plz}
bind:city={gebaeude.ort}
name="zip"
/>
</div>
@@ -147,9 +150,8 @@
<div>
<input
name="IGort"
class="input-md buchstaben"
readonly={true}
bind:value={ausweis.objekt_ort}
bind:value={gebaeude.ort}
type="text"
/>
</div>
@@ -171,7 +173,7 @@
autocomplete="off"
data-rule-minlength="2"
data-msg-minlength="min. 2 Zeichen"
bind:value={ausweis.wohnflaeche}
bind:value={gebaeude.wohnflaeche}
/>
</div>
</div>
@@ -183,7 +185,7 @@
<select
name="IGkeller"
required
bind:value={ausweis.keller_beheizt}
bind:value={gebaeude.keller_beheizt}
>
<option>Bitte auswählen</option>
<option value={false}>nicht vorhanden</option>
@@ -197,7 +199,7 @@
<div class="form-group col-md-4">
<Label>Dachgeschoss *</Label>
<div>
<select name="IGdach" class="form-control" required>
<select name="IGdach" class="" required>
<option>Bitte auswählen</option>
<option value="dnein">nicht vorhanden</option>
<option value="dub">unbeheizt</option>
@@ -231,7 +233,7 @@
type="checkbox"
class="IGwwbool"
name="IGwwbool"
bind:checked={ausweis.warmwasser_enthalten}
bind:checked={ausweis.kennwerte.warmwasser_enthalten}
/>Warmwasser im Verbrauch enthalten</label
>
</div>
@@ -248,7 +250,7 @@
name="IGwarmwasser"
maxlength="2"
type="number"
bind:value={ausweis.anteil_warmwasser_1}
bind:value={ausweis.kennwerte.anteil_warmwasser_1}
disabled={!ausweis.warmwasser_enthalten}
autocomplete="off"
/>
@@ -265,8 +267,8 @@
maxlength="3"
type="number"
autocomplete="off"
bind:value={ausweis.anteil_warmwasser_2}
disabled={!ausweis.zusaetzliche_heizquelle ||
bind:value={ausweis.kennwerte.anteil_warmwasser_2}
disabled={!ausweis.kennwerte.zusaetzliche_heizquelle ||
!ausweis.warmwasser_enthalten}
/>
</div>
@@ -285,7 +287,7 @@
><input
type="checkbox"
name="IGversorgungssysteme1"
bind:checked={ausweis.energiequelle_2_nutzung[0]}
bind:checked={gebaeude.energiequelle_2_nutzung[0]}
value="Heizung"
/>Heizung</label
>
@@ -293,7 +295,7 @@
><input
type="checkbox"
name="IGversorgungssysteme2"
bind:checked={ausweis.energiequelle_2_nutzung[1]}
bind:checked={gebaeude.energiequelle_2_nutzung[1]}
value="Warmwasser"
/>Warmwasser</label
>
@@ -301,7 +303,7 @@
><input
type="checkbox"
name="IGversorgungssysteme3"
bind:checked={ausweis.energiequelle_2_nutzung[2]}
bind:checked={gebaeude.energiequelle_2_nutzung[2]}
value="Lüftung"
/>Lüftung</label
>
@@ -309,7 +311,7 @@
><input
type="checkbox"
name="IGversorgungssysteme4"
bind:checked={ausweis.energiequelle_2_nutzung[3]}
bind:checked={gebaeude.energiequelle_2_nutzung[3]}
value="Kühlung"
/>Kühlung</label
>
@@ -331,12 +333,7 @@
Bitte wählen Sie hier den Gebäudetyp aus.
</HelpLabel>
<div>
<select
name="IGtyp"
class="form-control"
required
autocomplete="off"
>
<select name="IGtyp" class="" required autocomplete="off">
<option>Bitte auswählen</option>
<option value="Einfamilienhaus">Einfamilienhaus</option>
<option value="Freistehendes Einfamilienhaus"
@@ -375,12 +372,7 @@
'Gewerbe'.
</HelpLabel>
<div>
<select
name="IGteil"
class="form-control"
required
autocomplete="off"
>
<select name="IGteil" class="" required autocomplete="off">
<option>Bitte auswählen</option>
<option value="Gesamtgebäude">Gesamtgebäude</option>
<option value="Wohnen">Wohnen</option>
@@ -397,7 +389,7 @@
<div>
<select
name="IGlueftung"
class="form-control"
class=""
required
autocomplete="off"
>
@@ -423,7 +415,7 @@
<div>
<select
name="IGkuehlung"
class="form-control"
class=""
required
autocomplete="off"
>
@@ -458,7 +450,7 @@
>F - Bitte prüfen Sie hier die Angaben zum Sanierungszustand des
Gebäudes</Label
>
<BilderZusatzsysteme {ausweis} />
<BilderZusatzsysteme {gebaeude} />
<hr />
<div class="flex flex-row justify-between">
<Hilfe />

View File

@@ -138,7 +138,7 @@
<div>
<input
name="IGstrasse"
class="input-md strasse"
class=" strasse"
type="text"
autocomplete="off"
required
@@ -166,7 +166,7 @@
<div>
<input
name="IGort"
class="input-md buchstaben"
readonly={true}
bind:value={ausweis.objekt_ort}
type="text"
@@ -216,7 +216,7 @@
<div class="form-group col-md-4">
<Label>Dachgeschoss *</Label>
<div>
<select name="IGdach" class="form-control" required>
<select name="IGdach" class="" required>
<option>Bitte auswählen</option>
<option value="dnein">nicht vorhanden</option>
<option value="dub">unbeheizt</option>

View File

@@ -48,7 +48,7 @@
<input
name={name}
id={name}
class="zahlen"
class=""
type="number"
required
readonly={readonly}

View File

@@ -1,6 +1,6 @@
import { Moment } from "moment";
import { BitChecker } from "../BitChecker";
import { Dachgeschoss } from "./types";
import { Bedarfsausweis } from "./Bedarfsausweis";
import { Verbrauchsausweis } from "./Verbrauchsausweis";
import { VerbrauchsausweisGewerbe } from "./VerbrauchsausweisGewerbe";
export enum AusweisType {
VERBRAUCHSAUSWEIS,
@@ -18,124 +18,25 @@ export type Ausstellgrund =
export type Lueftungskonzept = "Fensterlüftung" | "Schachtlüftung" | "Lüftungsanlage ohne Wärmerückgewinnung" | "Lüftungsanlage mit Wärmerückgewinnung"
export interface Ausweis {
ausweisart: Ausweisart;
id: number;
user_id: number;
rechnung_adresse: number;
versand_adresse: number;
objekt_typ: string;
objekt_plz: string;
objekt_ort: string;
objekt_strasse: string;
objekt_gebaeudeteil: string;
objekt_saniert: boolean;
baujahr_gebaeude: number;
baujahr_anlage: number;
anzahl_einheiten: number;
export type Ausweis = Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
erstellungsdatum: Date;
ausstellgrund: Ausstellgrund;
export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Ausweis {
let ausweis;
energieverbrauch_zeitraum: Moment;
energieverbrauch_1_heizquelle_1: number;
energieverbrauch_2_heizquelle_1: number;
energieverbrauch_3_heizquelle_1: number;
energieverbrauch_1_heizquelle_2: number;
energieverbrauch_2_heizquelle_2: number;
energieverbrauch_3_heizquelle_2: number;
if (ausweisart == "VA") {
ausweis = new Verbrauchsausweis();
} else if (ausweisart == "VANW") {
ausweis = new VerbrauchsausweisGewerbe();
} else if (ausweisart == "BA") {
ausweis = new Bedarfsausweis();
} else {
throw new Error("Unbekannte Ausweisart.");
}
energietraeger_einheit_heizquelle_1: string;
energietraeger_einheit_heizquelle_2: string;
energietraeger_1: string;
energietraeger_2: string;
anteil_warmwasser_1: number;
anteil_warmwasser_2: number;
uid: string;
wohnflaeche: number;
keller_beheizt: boolean;
dachgeschoss: Dachgeschoss;
zusaetzliche_heizquelle: boolean;
warmwasser_enthalten: boolean;
lueftungskonzept: Lueftungskonzept;
wird_gekuehlt: boolean;
leerstand: number;
images: string[];
versorgungssysteme: boolean[];
fenster_dach: boolean[];
energiequelle_2_nutzung: boolean[];
daemmung: boolean[];
/**
* Bedarfsausweis spezifische Eigenschaften
*/
anzahl_vollgeschosse: number;
geschosshoehe: number;
anzahl_gauben: number;
breite_gauben: number;
masse_a: number;
masse_b: number;
masse_c: number;
masse_d: number;
masse_e: number;
masse_f: number;
fensterflaeche_so_sw: number;
fensterflaeche_nw_no: number;
aussenwandflaeche_unbeheizt: number;
dachflaeche: number;
dach_u_wert: number;
deckenflaeche: number;
decke_u_wert: number;
aussenwand_flaeche: number;
aussenwand_u_wert: number;
fussboden_flaeche: number;
fussboden_u_wert: number;
volumen: number;
dicht: boolean;
fenster_flaeche_1: number;
fenster_art_1: number;
fenster_flaeche_2: number;
fenster_art_2: number;
dachfenster_flaeche: number;
dachfenster_art: number;
haustuer_flaeche: number;
haustuer_art: number;
dach_bauart: string;
dach_daemmung: number;
decke_bauart: string;
decke_daemmung: number;
aussenwand_bauart: string;
aussenwand_daemmung: number;
boden_bauart: string;
boden_daemmung: number;
warmwasser_verteilung: string;
warmwasser_speicherung: string;
warmwasser_erzeugung: string;
heizung_zentral: boolean;
heizung_verteilung: string;
heizung_speicherung: string;
waerme_erzeugung_heizung: string;
anteil_zusatzheizung: number;
kollektor_flaeche: number;
// VANW
vanw_stromverbrauch_enthalten: number;
vanw_stromverbrauch_sonstige: string;
vanw_strom_1: number;
vanw_strom_2: number;
vanw_strom_3: number;
regnummer: string;
erledigt: boolean;
anrede: string;
name: string;
vorname: string;
email: string;
telefonnummer: string;
}
if (initializer) {
ausweis.ausstellgrund = initializer.ausstellgrund;
ausweis.ausweisart = initializer.ausweisart;
}
return ausweis;
}

View File

@@ -5,8 +5,9 @@ import { BitChecker } from "../BitChecker";
import { getHeizungswerte } from "../Heizungswerte";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Energiekennwerte } from "../Energiekennwerte";
export class Bedarfsausweis implements Ausweis {
export class Bedarfsausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -25,7 +26,7 @@ export class Bedarfsausweis implements Ausweis {
public erstellungsdatum: Date = new Date();
public ausstellgrund: Ausstellgrund = "Vermietung";
public energieverbrauch_zeitraum: Moment = moment();
public energieverbrauch_zeitraum: Moment = moment();
public energieverbrauch_1_heizquelle_1: number = 0;
public energieverbrauch_2_heizquelle_1: number = 0;
public energieverbrauch_3_heizquelle_1: number = 0;
@@ -137,6 +138,9 @@ export class Bedarfsausweis implements Ausweis {
// Temporär
public tabellenwerte_aendern: boolean = false;
public gebaeude_uid?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public constructor() {}
public static fromBase64(base64: string): Bedarfsausweis | null {
@@ -150,17 +154,15 @@ export class Bedarfsausweis implements Ausweis {
}
}
public get primaer_energie_verbrauch(): Promise<number> {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
public get primaer_energie_verbrauch(): number {
const Endenergieverbrauch = this.end_energie_verbrauch;
const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1,
this.energietraeger_einheit_heizquelle_1
);
const brennstoff_1 = getHeizwertfaktorClient(
this.energietraeger_1,
this.energietraeger_einheit_heizquelle_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
}
public get end_energie_verbrauch(): number {

View File

@@ -1,214 +1,31 @@
import { Moment } from "moment";
import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import moment from "moment";
import { BitChecker } from "../BitChecker";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Ausstellgrund, Ausweisart } from "./types";
import { Energiekennwerte } from "../Energiekennwerte";
import { Gebaeude } from "../Gebaeude";
export class Verbrauchsausweis implements Ausweis {
export class Verbrauchsausweis {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
public rechnung_adresse: number = 0;
public versand_adresse: number = 0;
public objekt_typ: string = "";
public objekt_plz: string = "";
public objekt_ort: string = "";
public objekt_strasse: string = "";
public objekt_gebaeudeteil: string = "";
public objekt_saniert: boolean = false;
public baujahr_gebaeude: number = 0;
public baujahr_anlage: number = 0;
public anzahl_einheiten: number = 0;
public erstellungsdatum: Date = new Date();
public ausstellgrund: Ausstellgrund = "Vermietung";
public warmwasser_enthalten: boolean = true;
public id?: number;
public uid?: string;
public baujahr_anlage: number = 0;
public energieverbrauch_zeitraum: Moment = moment();
public energieverbrauch_1_heizquelle_1: number = 0;
public energieverbrauch_2_heizquelle_1: number = 0;
public energieverbrauch_3_heizquelle_1: number = 0;
public energieverbrauch_1_heizquelle_2: number = 0;
public energieverbrauch_2_heizquelle_2: number = 0;
public energieverbrauch_3_heizquelle_2: number = 0;
public energietraeger_einheit_heizquelle_1: string = "";
public energietraeger_einheit_heizquelle_2: string = "";
public energietraeger_1: string = "";
public energietraeger_2: string = "";
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
public uid: string = "";
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss: Dachgeschoss = Dachgeschoss.NICHT_VORHANDEN;
public zusaetzliche_heizquelle: boolean = false;
public warmwasser_enthalten: boolean = false;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
public wird_gekuehlt: boolean = false;
public leerstand: number = 0;
public images: string[] = [];
public versorgungssysteme: ReturnType<typeof BitChecker> = BitChecker(0);
public fenster_dach: ReturnType<typeof BitChecker> = BitChecker(0);
public energiequelle_2_nutzung: ReturnType<typeof BitChecker> = BitChecker(0);
public daemmung: ReturnType<typeof BitChecker> = BitChecker(0);
public get energetische_nutzfläche(): number {
return this.wohnflaeche * (this.keller_beheizt ? 1.35 : 1.2);
};
return (
this.gebaeude.wohnflaeche *
(this.gebaeude.keller_beheizt ? 1.35 : 1.2)
);
}
/**
* Bedarfsausweis spezifische Eigenschaften
*/
public anzahl_vollgeschosse: number = 0;
public geschosshoehe: number = 0;
public anzahl_gauben: number = 0;
public breite_gauben: number = 0;
public masse_a: number = 0;
public masse_b: number = 0;
public masse_c: number = 0;
public masse_d: number = 0;
public masse_e: number = 0;
public masse_f: number = 0;
public fensterflaeche_so_sw: number = 0;
public fensterflaeche_nw_no: number = 0;
public aussenwandflaeche_unbeheizt: number = 0;
public dachflaeche: number = 0;
public dach_u_wert: number = 0;
public deckenflaeche: number = 0;
public decke_u_wert: number = 0;
public aussenwand_flaeche: number = 0;
public aussenwand_u_wert: number = 0;
public fussboden_flaeche: number = 0;
public fussboden_u_wert: number = 0;
public volumen: number = 0;
public dicht: boolean = false;
public fenster_flaeche_1: number = 0;
public fenster_art_1: number = 0;
public fenster_flaeche_2: number = 0;
public fenster_art_2: number = 0;
public dachfenster_flaeche: number = 0;
public dachfenster_art: number = 0;
public haustuer_flaeche: number = 0;
public haustuer_art: number = 0;
public dach_bauart: string = "";
public dach_daemmung: number = 0;
public decke_bauart: string = "";
public decke_daemmung: number = 0;
public aussenwand_bauart: string = "";
public aussenwand_daemmung: number = 0;
public boden_bauart: string = "";
public boden_daemmung: number = 0;
public warmwasser_verteilung: string = "";
public warmwasser_speicherung: string = "";
public warmwasser_erzeugung: string = "";
public heizung_zentral: boolean = false;
public heizung_verteilung: string = "";
public heizung_speicherung: string = "";
public waerme_erzeugung_heizung: string = "";
public anteil_zusatzheizung: number = 0;
public kollektor_flaeche: number = 0;
public regnummer?: string;
// VANW
public vanw_stromverbrauch_enthalten: number = 0;
public vanw_stromverbrauch_sonstige: string = "";
public vanw_strom_1: number = 0;
public vanw_strom_2: number = 0;
public vanw_strom_3: number = 0;
public regnummer: string = "";
public erledigt: boolean = false;
public anrede: string = "";
public name: string = "";
public vorname: string = "";
public email: string = "";
public telefonnummer: string = "";
public kennwerte: Energiekennwerte = new Energiekennwerte();
public gebaeude: Gebaeude = new Gebaeude();
public constructor() {}
public async upload() {
const body = this.getUploadBody();
const response = await fetch("/api/ausweis/verbrauchsausweis", {
method: "PUT",
body: JSON.stringify(body)
})
return response;
}
public async save() {
const body = this.getUploadBody();
const response = await fetch("/api/ausweis/verbrauchsausweis", {
method: "POST",
body: JSON.stringify(body)
})
return response;
}
private getUploadBody() {
return {
ausweisart: "VA",
objekt_typ: this.objekt_typ,
objekt_plz: this.objekt_plz,
objekt_ort: this.objekt_ort,
objekt_strasse: this.objekt_strasse,
objekt_gebaeudeteil: this.objekt_gebaeudeteil,
objekt_saniert: this.objekt_saniert,
baujahr_gebaeude: this.baujahr_gebaeude,
baujahr_anlage: this.baujahr_anlage,
anzahl_einheiten: this.anzahl_einheiten,
ausstellgrund: this.ausstellgrund,
energieverbrauch_zeitraum: this.energieverbrauch_zeitraum.toDate(),
energieverbrauch_1_heizquelle_1: this.energieverbrauch_1_heizquelle_1,
energieverbrauch_2_heizquelle_1: this.energieverbrauch_2_heizquelle_1,
energieverbrauch_3_heizquelle_1: this.energieverbrauch_3_heizquelle_1,
energieverbrauch_1_heizquelle_2: this.energieverbrauch_1_heizquelle_2,
energieverbrauch_2_heizquelle_2: this.energieverbrauch_2_heizquelle_2,
energieverbrauch_3_heizquelle_2: this.energieverbrauch_3_heizquelle_2,
energietraeger_einheit_heizquelle_1: this.energietraeger_einheit_heizquelle_1,
energietraeger_einheit_heizquelle_2: this.energietraeger_einheit_heizquelle_2,
energietraeger_1: this.energietraeger_1,
energietraeger_2: this.energietraeger_2,
anteil_warmwasser_1: this.anteil_warmwasser_1,
anteil_warmwasser_2: this.anteil_warmwasser_2,
wohnflaeche: this.wohnflaeche,
keller_beheizt: this.keller_beheizt,
dachgeschoss: this.dachgeschoss,
zusaetzliche_heizquelle: this.zusaetzliche_heizquelle,
warmwasser_enthalten: this.warmwasser_enthalten,
lueftungskonzept: this.lueftungskonzept,
wird_gekuehlt: this.wird_gekuehlt,
leerstand: this.leerstand,
images: this.images,
versorgungssysteme: this.versorgungssysteme.value,
fenster_dach: this.versorgungssysteme.value,
energiequelle_2_nutzung: this.versorgungssysteme.value,
daemmung: this.versorgungssysteme.value,
anrede: this.anrede,
name: this.name,
vorname: this.vorname,
email: this.email,
telefonnummer: this.telefonnummer,
}
}
public static fromBase64(base64: string): Verbrauchsausweis | null {
try {
const text = Buffer.from(base64, "base64");
@@ -224,7 +41,10 @@ export class Verbrauchsausweis implements Ausweis {
return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch;
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
const brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
);
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})();
@@ -232,38 +52,44 @@ export class Verbrauchsausweis implements Ausweis {
public get end_energie_verbrauch(): Promise<number> {
return (async () => {
const date = this.energieverbrauch_zeitraum;
const date = this.kennwerte.zeitraum;
const klimafaktoren = await getKlimafaktorenClient(
date,
this.objekt_plz
this.gebaeude.plz
);
// Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
let brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
let brennstoff_2 = getHeizwertfaktorClient(this.energietraeger_2, this.energietraeger_einheit_heizquelle_2);
let brennstoff_1 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
);
let brennstoff_2 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_2,
this.kennwerte.einheit_2
);
let verbrauch_1_kwh =
(this.energieverbrauch_1_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh =
(this.energieverbrauch_2_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh =
(this.energieverbrauch_3_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh =
(this.energieverbrauch_1_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh =
(this.energieverbrauch_2_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh =
(this.energieverbrauch_3_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0;
if (this.anteil_warmwasser_1 == 0) {
if (this.kennwerte.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
}
if (this.leerstand > 0) {
if (this.gebaeude.leerstand > 0) {
let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
@@ -274,17 +100,16 @@ export class Verbrauchsausweis implements Ausweis {
verbrauch_4_kwh +
verbrauch_5_kwh +
verbrauch_6_kwh) *
(this.leerstand / 100)) /
(this.gebaeude.leerstand / 100)) /
durchschnittsKlimafaktor;
}
if (this.energiequelle_2_nutzung[3]) {
if (this.gebaeude.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
}
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
let anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert =
(anteil_heizung *
@@ -304,7 +129,6 @@ export class Verbrauchsausweis implements Ausweis {
kuehlungsZuschlag) /
3 /
this.energetische_nutzfläche;
return Energieverbrauchskennwert;
})();

View File

@@ -5,9 +5,10 @@ import moment from "moment";
import { BitChecker } from "../BitChecker";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis";
import { Energiekennwerte } from "../Energiekennwerte";
export class VerbrauchsausweisGewerbe implements Ausweis {
export class VerbrauchsausweisGewerbe {
public ausweisart: Ausweisart = "VA";
public id: number = 0;
public user_id: number = 0;
@@ -131,6 +132,9 @@ export class VerbrauchsausweisGewerbe implements Ausweis {
public email: string = "";
public telefonnummer: string = "";
public gebaeude_uid?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public constructor() {}
public static fromBase64(base64: string): VerbrauchsausweisGewerbe | null {

View File

@@ -1,9 +0,0 @@
export class Ausweis {
public static fromUID(uid: string) {
}
public static fromPrivateId(id: number) {
}
}

View File

@@ -0,0 +1,25 @@
import moment, { Moment } from "moment";
export class Energiekennwerte {
public zeitraum: Moment = moment();
public verbrauch_1: number = 0;
public verbrauch_2: number = 0;
public verbrauch_3: number = 0;
public verbrauch_4: number = 0;
public verbrauch_5: number = 0;
public verbrauch_6: number = 0;
public einheit_1: string = "";
public einheit_2: string = "";
public energietraeger_1: string = "";
public energietraeger_2: string = "";
public anteil_warmwasser_1: number = 0;
public anteil_warmwasser_2: number = 0;
public warmwasser_enthalten: boolean = false;
public zusaetzliche_heizquelle: boolean = false;
public constructor(initializer?: Energiekennwerte) {
if (initializer) {
this.zeitraum = initializer.zeitraum;
}
}
}

37
src/lib/Gebaeude.ts Normal file
View File

@@ -0,0 +1,37 @@
import { Ausweis } from "./Ausweis/Ausweis";
import { Dachgeschoss, Lueftungskonzept } from "./Ausweis/types";
import { BitChecker } from "./BitChecker";
export class Gebaeude {
public typ: string = "";
public plz: string = "";
public ort: string = "";
public strasse: string = "";
public gebaeudeteil: string = "";
public saniert: boolean = false;
public baujahr: number = 0;
public einheiten: number = 0;
public wohnflaeche: number = 0;
public keller_beheizt: boolean = false;
public dachgeschoss_beheizt: Dachgeschoss = Dachgeschoss.UNBEHEIZT;
public lueftungskonzept: Lueftungskonzept = "Fensterlüftung";
public wird_gekuehlt: boolean = false;
public leerstand: number = 0;
public versorgungssysteme: boolean[] = BitChecker(0);
public fenster_dach: boolean[] = BitChecker(0);
public energiequelle_2_nutzung: boolean[] = BitChecker(0);
public daemmung: boolean[] = BitChecker(0);
public ausweis?: Ausweis;
public uid?: string;
public constructor(initializer?: Gebaeude) {
if (initializer) {
this.typ = initializer.typ;
this.plz = initializer.plz;
this.ort = initializer.ort;
}
}
}

View File

@@ -4,66 +4,62 @@ import { db } from "src/lib/shared";
import { z } from "zod";
const AusweisUploadChecker = z.object({
ausweisart: z.enum(["VA", "BA", "VANW"]),
ausweis: z.object({
ausweisart: z.enum(["VA", "BA", "VANW"]),
ausstellgrund: z.enum([
"Vermietung",
"Neubau",
"Verkauf",
"Modernisierung",
"Sonstiges",
]),
}),
objekt_typ: z.string(),
objekt_plz: z.string(),
objekt_ort: z.string(),
objekt_strasse: z.string(),
objekt_gebaeudeteil: z.string(),
objekt_saniert: z.boolean() ,
baujahr_gebaeude: z.number(),
baujahr_anlage: z.number(),
anzahl_einheiten: z.number(),
gebaeude: z.object({
typ: z.string(),
plz: z.string(),
ort: z.string(),
strasse: z.string(),
gebaeudeteil: z.string(),
saniert: z.boolean(),
baujahr: z.number(),
einheiten: z.number(),
wohnflaeche: z.number(),
keller_beheizt: z.boolean(),
dachgeschoss_beheizt: z.number(),
lueftungskonzept: z.enum([
"Fensterlüftung",
"Schachtlüftung",
"Lüftungsanlage ohne Wärmerückgewinnung",
"Lüftungsanlage mit Wärmerückgewinnung",
]),
wird_gekuehlt: z.boolean(),
leerstand: z.number(),
versorgungssysteme: z.number(),
fenster_dach: z.number(),
energiequelle_2_nutzung: z.number(),
daemmung: z.number(),
}),
ausstellgrund: z.enum(["Vermietung"
,"Neubau"
, "Verkauf"
, "Modernisierung"
, "Sonstiges"]),
kennwerte: z.object({
zeitraum: z.string(),
verbrauch_1: z.number(),
verbrauch_2: z.number(),
verbrauch_3: z.number(),
verbrauch_4: z.number(),
verbrauch_5: z.number(),
verbrauch_6: z.number(),
einheit_1: z.string(),
einheit_2: z.string(),
energietraeger_1: z.string(),
energietraeger_2: z.string(),
anteil_warmwasser_1: z.number(),
anteil_warmwasser_2: z.number(),
}),
energieverbrauch_zeitraum: z.string(),
energieverbrauch_1_heizquelle_1: z.number(),
energieverbrauch_2_heizquelle_1: z.number(),
energieverbrauch_3_heizquelle_1: z.number(),
energieverbrauch_1_heizquelle_2: z.number(),
energieverbrauch_2_heizquelle_2: z.number(),
energieverbrauch_3_heizquelle_2: z.number(),
energietraeger_einheit_heizquelle_1: z.string(),
energietraeger_einheit_heizquelle_2: z.string(),
energietraeger_1: z.string(),
energietraeger_2: z.string(),
anteil_warmwasser_1: z.number(),
anteil_warmwasser_2: z.number(),
wohnflaeche: z.number(),
keller_beheizt: z.boolean(),
dachgeschoss: z.number(),
zusaetzliche_heizquelle: z.boolean(),
warmwasser_enthalten: z.boolean(),
lueftungskonzept: z.enum([
"Fensterlüftung",
"Schachtlüftung",
"Lüftungsanlage ohne Wärmerückgewinnung",
"Lüftungsanlage mit Wärmerückgewinnung",
]),
wird_gekuehlt: z.boolean(),
leerstand: z.number(),
images: z.array(z.string()),
versorgungssysteme: z.number(),
fenster_dach: z.number(),
energiequelle_2_nutzung: z.number(),
daemmung: z.number(),
anrede: z.string().optional(),
name: z.string().optional(),
vorname: z.string().optional(),
email: z.string().optional(),
telefonnummer: z.string().optional(),
gebaeude_uid: z.string().optional(),
kennwerte_uid: z.string().optional(),
ausweis_uid: z.string().optional(),
});
/**
@@ -72,7 +68,7 @@ const AusweisUploadChecker = z.object({
* @returns
*/
export const post: APIRoute = async ({ request }) => {
const body = await request.json();
const body: z.infer<typeof AusweisUploadChecker> = await request.json();
const validation = AusweisUploadChecker.safeParse(body);
@@ -80,43 +76,63 @@ export const post: APIRoute = async ({ request }) => {
return error(validation.error.issues);
}
const result = await db("ausweise").insert(body).returning(["uid", "id"]);
if (!result) {
let gebaeude, kennwerte, ausweis;
if (body.gebaeude_uid) {
gebaeude = await db("gebaeude")
.update(body.gebaeude)
.where("uid", body.gebaeude_uid)
.returning(["uid", "id"]);
} else {
gebaeude = await db("gebaeude")
.insert(body.gebaeude)
.returning(["uid", "id"]);
}
if (!gebaeude) {
return ActionFailedError();
}
const { uid, id } = result[0];
if (body.kennwerte_uid) {
kennwerte = await db("energiekennwerte")
.update({ ...body.kennwerte, gebaeude_id: gebaeude[0].id })
.where("uid", body.kennwerte_uid)
.returning(["uid", "id"]);
} else {
kennwerte = await db("energiekennwerte")
.insert({ ...body.kennwerte, gebaeude_id: gebaeude[0].id })
.returning(["uid", "id"]);
}
if (!uid || !id) {
if (!kennwerte) {
return ActionFailedError();
}
if (body.ausweis_uid) {
ausweis = await db("energieausweise")
.update({
...body.ausweis,
gebaeude_id: gebaeude[0].id,
energiekennwerte_id: kennwerte[0].id,
})
.where("uid", body.ausweis_uid)
.returning(["uid", "id"]);
} else {
ausweis = await db("energieausweise")
.insert({
...body.ausweis,
gebaeude_id: gebaeude[0].id,
energiekennwerte_id: kennwerte[0].id,
})
.returning(["uid", "id"]);
}
if (!ausweis) {
return ActionFailedError();
}
return success({
uid, id
ausweis: ausweis[0],
kennwerte: kennwerte[0],
gebaeude: gebaeude[0],
});
};
export const put: APIRoute = async ({ request }) => {
const body = await request.json();
const validation = AusweisUploadChecker.safeParse(body);
if (!validation.success) {
return error(validation.error.issues);
}
const result = await db("ausweise").insert(body).returning(["uid", "id"]);
if (!result) {
return ActionFailedError();
}
const { uid, id } = result[0];
if (!uid || !id) {
return ActionFailedError();
}
return success({
uid, id
});
};
};

View File

@@ -1,13 +1,20 @@
import type { APIRoute } from "astro";
import { ActionFailedError, error, success } from "src/lib/APIResponse";
import {
ActionFailedError,
MissingEntityError,
error,
success,
} from "src/lib/APIResponse";
import * as jimp from "jimp";
import { v4 as uuid } from "uuid";
import { z } from "zod";
import * as path from "path";
import { db } from "src/lib/shared";
const ImageUploadChecker = z.object({
data: z.string(),
name: z.string()
name: z.string(),
gebaeude_uid: z.string().optional(),
kategorie: z.string(),
});
/**
@@ -16,29 +23,60 @@ const ImageUploadChecker = z.object({
* @returns
*/
export const put: APIRoute = async ({ request }) => {
const body = await request.json();
const body: z.infer<typeof ImageUploadChecker> = await request.json();
const result = ImageUploadChecker.safeParse(body);
const validation = ImageUploadChecker.safeParse(body);
if (!result.success) {
return error(result.error.issues);
if (!validation.success) {
return error(validation.error.issues);
}
const image = Buffer.from(body.data, "base64url");
let jimpResult;
try {
jimpResult = await jimp.read(image);
} catch(e) {
} catch (e) {
return ActionFailedError();
}
const uid = uuid();
const location = path.join(uid);
let gebaeude;
if (!body.gebaeude_uid) {
gebaeude = await db("gebaeude").insert({}).returning(["uid", "id"]);
jimpResult.quality(0.75).write(location);
if (!gebaeude) {
return ActionFailedError();
}
} else {
gebaeude = await db("gebaeude")
.select("*")
.where("uid", body.gebaeude_uid);
if (!gebaeude) {
return MissingEntityError("gebaeude");
}
}
const result = await db("gebaeude_bilder")
.insert({ gebaeude_id: gebaeude[0].id, kategorie: body.kategorie })
.returning(["uid"]);
if (!result) {
return ActionFailedError();
}
const location = path.join("uploads", `${result[0].uid}.jpg`);
const buffer = await jimpResult.getBufferAsync(jimp.MIME_JPEG)
if (buffer.length > 3_000_000) {
jimpResult.quality(75).write(location);
} else {
jimpResult.write(location);
}
return success({
uid
uid: result[0].uid,
gebaeude_uid: gebaeude[0].uid,
});
};

View File

@@ -1,54 +1,44 @@
---
import AusweisLayout from "~/layouts/AusweisLayout.astro";
import VerbrauchsausweisContent from "~/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte";
/**
* include('scripts/dbcon.php');
ini_set('session.cookie_secure', "1");
ini_set('session.cookie_httponly', "1");
ini_set('session.cookie_samesite', 'None');
session_start();
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
import { db } from "src/lib/shared";
import { Gebaeude } from "src/lib/Gebaeude";
import { Energiekennwerte } from "src/lib/Energiekennwerte";
import { Ausweis, getAusweis } from "src/lib/Ausweis/Ausweis";
if ($_GET['recode'] != '') {
$_SESSION['recode'] = $_GET['recode'];
}
if ($_GET['anlass'] != '') {
$_SESSION['IGanlass'] = $_GET['anlass'];
}
if ($_GET['san'] != '') {
$_SESSION['IGsan'] = $_GET['san'];
}
if ($_GET['eid'] != '' or $_POST['eid'] != '') {
include("transfer/fetchsp.php");
}
?>
let gebaeude = new Gebaeude();
if (Astro.cookies.has("ausweis_uid")) {
const uid = Astro.cookies.get("ausweis_uid").value;
let result = await db<{ gebaeude: Gebaeude, kennwerte: Energiekennwerte, ausweis: Ausweis}>("gebaeude")
.select([
db.raw("(json_agg(gebaeude)->0) AS gebaeude"),
db.raw("(json_agg(energiekennwerte)->0) AS kennwerte"),
db.raw("(json_agg(energieausweise)->0) AS ausweis"),
])
.leftJoin(
"energiekennwerte",
"energiekennwerte.gebaeude_id",
"gebaeude.id"
)
.leftJoin(
"energieausweise",
"energieausweise.gebaeude_id",
"gebaeude.id"
)
.where("gebaeude.uid", uid)
.groupBy("gebaeude.id")
.first();
<?php
$checkArt = $_SESSION['ausweisarte'];
switch ($checkArt) {
case 'VA':
$headART = "Verbrauchsausweis - 45€";
$titleART = "Verbrauchsausweis erstellen · Kaufabschluss";
break;
case 'VANW':
$headART = "Verbrauchsausweis Gewerbe - 65€";
$titleART = "Verbrauchsausweis Gewerbe erstellen · Kaufabschluss";
break;
case 'BA':
$headART = "Bedarfsausweis - 75€";
$titleART = "Bedarfsausweis erstellen · Kaufabschluss";
break;
if (result) {
gebaeude = new Gebaeude(result.gebaeude);
gebaeude.ausweis = getAusweis(result.ausweis.ausweisart, result.ausweis);
gebaeude.ausweis.gebaeude = gebaeude;
gebaeude.ausweis.kennwerte = new Energiekennwerte(result.kennwerte);
}
}
define("TEST_USER_NAME", "user@ib-cornelsen.de");
if ($_SESSION["username"] == TEST_USER_NAME) {
echo "<script type='text/javascript' src='/energieausweis-erstellen/FORM/js/auto-fill-values.js'></script>";
}
?>
*/
---
<AusweisLayout title="Verbrauchsausweis erstellen">
<VerbrauchsausweisContent client:load></VerbrauchsausweisContent>
<VerbrauchsausweisContent client:load gebaeude={gebaeude} />
</AusweisLayout>