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

@@ -5,7 +5,7 @@ RUN npm i -g pnpm
WORKDIR /online-energieausweis WORKDIR /online-energieausweis
COPY ./package.json ./ COPY ./package.json ./
RUN pnpm install --prod
COPY . . COPY . .
RUN pnpm install --prod
CMD ["pnpm", "run", "build:production"] CMD ["pnpm", "run", "build:production"]

View File

@@ -5,10 +5,10 @@ services:
container_name: online-energieausweis container_name: online-energieausweis
command: pnpm run dev --host command: pnpm run dev --host
links: links:
- db:database - db
environment: environment:
PORT: 3000 PORT: 3000
DB_CONNECTION: database DB_CONNECTION: "db"
DB_PORT: 5432 DB_PORT: 5432
NODE_ENV: "development" NODE_ENV: "development"
ports: ports:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
import { Moment } from "moment"; import { Bedarfsausweis } from "./Bedarfsausweis";
import { BitChecker } from "../BitChecker"; import { Verbrauchsausweis } from "./Verbrauchsausweis";
import { Dachgeschoss } from "./types"; import { VerbrauchsausweisGewerbe } from "./VerbrauchsausweisGewerbe";
export enum AusweisType { export enum AusweisType {
VERBRAUCHSAUSWEIS, 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 type Lueftungskonzept = "Fensterlüftung" | "Schachtlüftung" | "Lüftungsanlage ohne Wärmerückgewinnung" | "Lüftungsanlage mit Wärmerückgewinnung"
export interface Ausweis { export type Ausweis = Verbrauchsausweis | Bedarfsausweis | VerbrauchsausweisGewerbe;
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;
erstellungsdatum: Date; export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Ausweis {
ausstellgrund: Ausstellgrund; let ausweis;
energieverbrauch_zeitraum: Moment; if (ausweisart == "VA") {
energieverbrauch_1_heizquelle_1: number; ausweis = new Verbrauchsausweis();
energieverbrauch_2_heizquelle_1: number; } else if (ausweisart == "VANW") {
energieverbrauch_3_heizquelle_1: number; ausweis = new VerbrauchsausweisGewerbe();
energieverbrauch_1_heizquelle_2: number; } else if (ausweisart == "BA") {
energieverbrauch_2_heizquelle_2: number; ausweis = new Bedarfsausweis();
energieverbrauch_3_heizquelle_2: number; } else {
throw new Error("Unbekannte Ausweisart.");
}
energietraeger_einheit_heizquelle_1: string; if (initializer) {
energietraeger_einheit_heizquelle_2: string; ausweis.ausstellgrund = initializer.ausstellgrund;
energietraeger_1: string; ausweis.ausweisart = initializer.ausweisart;
energietraeger_2: string; }
anteil_warmwasser_1: number; return ausweis;
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;
} }

View File

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

View File

@@ -1,214 +1,31 @@
import { Moment } from "moment";
import { getKlimafaktorenClient } from "../Klimafaktoren"; import { getKlimafaktorenClient } from "../Klimafaktoren";
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor"; import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
import moment from "moment"; import { Ausstellgrund, Ausweisart } from "./types";
import { BitChecker } from "../BitChecker"; import { Energiekennwerte } from "../Energiekennwerte";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types"; import { Gebaeude } from "../Gebaeude";
import { Ausweis } from "./Ausweis";
export class Verbrauchsausweis {
export class Verbrauchsausweis implements Ausweis {
public ausweisart: Ausweisart = "VA"; 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 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 { 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)
);
}
/** public regnummer?: string;
* 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;
// VANW public kennwerte: Energiekennwerte = new Energiekennwerte();
public gebaeude: Gebaeude = new Gebaeude();
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 constructor() {} 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 { public static fromBase64(base64: string): Verbrauchsausweis | null {
try { try {
const text = Buffer.from(base64, "base64"); const text = Buffer.from(base64, "base64");
@@ -224,7 +41,10 @@ export class Verbrauchsausweis implements Ausweis {
return (async () => { return (async () => {
const Endenergieverbrauch = await this.end_energie_verbrauch; 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; return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
})(); })();
@@ -232,38 +52,44 @@ export class Verbrauchsausweis implements Ausweis {
public get end_energie_verbrauch(): Promise<number> { public get end_energie_verbrauch(): Promise<number> {
return (async () => { return (async () => {
const date = this.energieverbrauch_zeitraum; const date = this.kennwerte.zeitraum;
const klimafaktoren = await getKlimafaktorenClient( const klimafaktoren = await getKlimafaktorenClient(
date, date,
this.objekt_plz this.gebaeude.plz
); );
// Endenergieverbrauch // Endenergieverbrauch
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. // 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_1 = getHeizwertfaktorClient(
let brennstoff_2 = getHeizwertfaktorClient(this.energietraeger_2, this.energietraeger_einheit_heizquelle_2); this.kennwerte.energietraeger_1,
this.kennwerte.einheit_1
);
let brennstoff_2 = getHeizwertfaktorClient(
this.kennwerte.energietraeger_2,
this.kennwerte.einheit_2
);
let verbrauch_1_kwh = let verbrauch_1_kwh =
(this.energieverbrauch_1_heizquelle_1 * brennstoff_1.umrechnungsfaktor) this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
let verbrauch_2_kwh = let verbrauch_2_kwh =
(this.energieverbrauch_2_heizquelle_1 * brennstoff_1.umrechnungsfaktor) this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
let verbrauch_3_kwh = let verbrauch_3_kwh =
(this.energieverbrauch_3_heizquelle_1 * brennstoff_1.umrechnungsfaktor) this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
let verbrauch_4_kwh = let verbrauch_4_kwh =
(this.energieverbrauch_1_heizquelle_2 * brennstoff_2.umrechnungsfaktor) this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
let verbrauch_5_kwh = let verbrauch_5_kwh =
(this.energieverbrauch_2_heizquelle_2 * brennstoff_2.umrechnungsfaktor) this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
let verbrauch_6_kwh = let verbrauch_6_kwh =
(this.energieverbrauch_3_heizquelle_2 * brennstoff_2.umrechnungsfaktor) this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
let warmwasserZuschlag = 0; let warmwasserZuschlag = 0;
let leerstandsZuschlag = 0; let leerstandsZuschlag = 0;
let kuehlungsZuschlag = 0; let kuehlungsZuschlag = 0;
if (this.anteil_warmwasser_1 == 0) { if (this.kennwerte.anteil_warmwasser_1 == 0) {
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3; warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
} }
if (this.leerstand > 0) { if (this.gebaeude.leerstand > 0) {
let durchschnittsKlimafaktor = let durchschnittsKlimafaktor =
klimafaktoren.reduce((a, b) => a + b, 0) / 3; klimafaktoren.reduce((a, b) => a + b, 0) / 3;
@@ -274,17 +100,16 @@ export class Verbrauchsausweis implements Ausweis {
verbrauch_4_kwh + verbrauch_4_kwh +
verbrauch_5_kwh + verbrauch_5_kwh +
verbrauch_6_kwh) * verbrauch_6_kwh) *
(this.leerstand / 100)) / (this.gebaeude.leerstand / 100)) /
durchschnittsKlimafaktor; durchschnittsKlimafaktor;
} }
if (this.energiequelle_2_nutzung[3]) { if (this.gebaeude.energiequelle_2_nutzung[3]) {
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3; kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
} }
let anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100;
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100; let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100;
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
let Energieverbrauchskennwert = let Energieverbrauchskennwert =
(anteil_heizung * (anteil_heizung *
@@ -305,7 +130,6 @@ export class Verbrauchsausweis implements Ausweis {
3 / 3 /
this.energetische_nutzfläche; this.energetische_nutzfläche;
return Energieverbrauchskennwert; return Energieverbrauchskennwert;
})(); })();
} }

View File

@@ -5,9 +5,10 @@ import moment from "moment";
import { BitChecker } from "../BitChecker"; import { BitChecker } from "../BitChecker";
import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types"; import { Ausstellgrund, Ausweisart, Dachgeschoss, Lueftungskonzept } from "./types";
import { Ausweis } from "./Ausweis"; import { Ausweis } from "./Ausweis";
import { Energiekennwerte } from "../Energiekennwerte";
export class VerbrauchsausweisGewerbe implements Ausweis { export class VerbrauchsausweisGewerbe {
public ausweisart: Ausweisart = "VA"; public ausweisart: Ausweisart = "VA";
public id: number = 0; public id: number = 0;
public user_id: number = 0; public user_id: number = 0;
@@ -131,6 +132,9 @@ export class VerbrauchsausweisGewerbe implements Ausweis {
public email: string = ""; public email: string = "";
public telefonnummer: string = ""; public telefonnummer: string = "";
public gebaeude_uid?: string;
public kennwerte: Energiekennwerte = new Energiekennwerte();
public constructor() {} public constructor() {}
public static fromBase64(base64: string): VerbrauchsausweisGewerbe | null { 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"; import { z } from "zod";
const AusweisUploadChecker = z.object({ 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(), gebaeude: z.object({
objekt_plz: z.string(), typ: z.string(),
objekt_ort: z.string(), plz: z.string(),
objekt_strasse: z.string(), ort: z.string(),
objekt_gebaeudeteil: z.string(), strasse: z.string(),
objekt_saniert: z.boolean() , gebaeudeteil: z.string(),
baujahr_gebaeude: z.number(), saniert: z.boolean(),
baujahr_anlage: z.number(), baujahr: z.number(),
anzahl_einheiten: 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" kennwerte: z.object({
,"Neubau" zeitraum: z.string(),
, "Verkauf" verbrauch_1: z.number(),
, "Modernisierung" verbrauch_2: z.number(),
, "Sonstiges"]), 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(), gebaeude_uid: z.string().optional(),
energieverbrauch_1_heizquelle_1: z.number(), kennwerte_uid: z.string().optional(),
energieverbrauch_2_heizquelle_1: z.number(), ausweis_uid: z.string().optional(),
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(),
}); });
/** /**
@@ -72,7 +68,7 @@ const AusweisUploadChecker = z.object({
* @returns * @returns
*/ */
export const post: APIRoute = async ({ request }) => { 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); const validation = AusweisUploadChecker.safeParse(body);
@@ -80,43 +76,63 @@ export const post: APIRoute = async ({ request }) => {
return error(validation.error.issues); return error(validation.error.issues);
} }
const result = await db("ausweise").insert(body).returning(["uid", "id"]); let gebaeude, kennwerte, ausweis;
if (!result) { 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(); 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 ActionFailedError();
} }
return success({ 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 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 * as jimp from "jimp";
import { v4 as uuid } from "uuid";
import { z } from "zod"; import { z } from "zod";
import * as path from "path"; import * as path from "path";
import { db } from "src/lib/shared";
const ImageUploadChecker = z.object({ const ImageUploadChecker = z.object({
data: z.string(), data: z.string(),
name: z.string() name: z.string(),
gebaeude_uid: z.string().optional(),
kategorie: z.string(),
}); });
/** /**
@@ -16,12 +23,12 @@ const ImageUploadChecker = z.object({
* @returns * @returns
*/ */
export const put: APIRoute = async ({ request }) => { 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) { if (!validation.success) {
return error(result.error.issues); return error(validation.error.issues);
} }
const image = Buffer.from(body.data, "base64url"); const image = Buffer.from(body.data, "base64url");
@@ -29,16 +36,47 @@ export const put: APIRoute = async ({ request }) => {
let jimpResult; let jimpResult;
try { try {
jimpResult = await jimp.read(image); jimpResult = await jimp.read(image);
} catch(e) { } catch (e) {
return ActionFailedError(); return ActionFailedError();
} }
const uid = uuid(); let gebaeude;
const location = path.join(uid); 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({ 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 AusweisLayout from "~/layouts/AusweisLayout.astro";
import VerbrauchsausweisContent from "~/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte"; import VerbrauchsausweisContent from "~/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte";
/** import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
* include('scripts/dbcon.php'); import { db } from "src/lib/shared";
ini_set('session.cookie_secure', "1"); import { Gebaeude } from "src/lib/Gebaeude";
ini_set('session.cookie_httponly', "1"); import { Energiekennwerte } from "src/lib/Energiekennwerte";
ini_set('session.cookie_samesite', 'None'); import { Ausweis, getAusweis } from "src/lib/Ausweis/Ausweis";
session_start();
if ($_GET['recode'] != '') { let gebaeude = new Gebaeude();
$_SESSION['recode'] = $_GET['recode']; if (Astro.cookies.has("ausweis_uid")) {
} const uid = Astro.cookies.get("ausweis_uid").value;
if ($_GET['anlass'] != '') { let result = await db<{ gebaeude: Gebaeude, kennwerte: Energiekennwerte, ausweis: Ausweis}>("gebaeude")
$_SESSION['IGanlass'] = $_GET['anlass']; .select([
} db.raw("(json_agg(gebaeude)->0) AS gebaeude"),
if ($_GET['san'] != '') { db.raw("(json_agg(energiekennwerte)->0) AS kennwerte"),
$_SESSION['IGsan'] = $_GET['san']; db.raw("(json_agg(energieausweise)->0) AS ausweis"),
} ])
if ($_GET['eid'] != '' or $_POST['eid'] != '') { .leftJoin(
include("transfer/fetchsp.php"); "energiekennwerte",
} "energiekennwerte.gebaeude_id",
?> "gebaeude.id"
)
.leftJoin(
"energieausweise",
"energieausweise.gebaeude_id",
"gebaeude.id"
)
.where("gebaeude.uid", uid)
.groupBy("gebaeude.id")
.first();
<?php if (result) {
$checkArt = $_SESSION['ausweisarte']; gebaeude = new Gebaeude(result.gebaeude);
gebaeude.ausweis = getAusweis(result.ausweis.ausweisart, result.ausweis);
switch ($checkArt) { gebaeude.ausweis.gebaeude = gebaeude;
gebaeude.ausweis.kennwerte = new Energiekennwerte(result.kennwerte);
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;
} }
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"> <AusweisLayout title="Verbrauchsausweis erstellen">
<VerbrauchsausweisContent client:load></VerbrauchsausweisContent> <VerbrauchsausweisContent client:load gebaeude={gebaeude} />
</AusweisLayout> </AusweisLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB