Neue Datenbank eingebunden
This commit is contained in:
@@ -5,7 +5,7 @@ RUN npm i -g pnpm
|
||||
|
||||
WORKDIR /online-energieausweis
|
||||
COPY ./package.json ./
|
||||
RUN pnpm install --prod
|
||||
COPY . .
|
||||
RUN pnpm install --prod
|
||||
|
||||
CMD ["pnpm", "run", "build:production"]
|
||||
@@ -5,10 +5,10 @@ services:
|
||||
container_name: online-energieausweis
|
||||
command: pnpm run dev --host
|
||||
links:
|
||||
- db:database
|
||||
- db
|
||||
environment:
|
||||
PORT: 3000
|
||||
DB_CONNECTION: database
|
||||
DB_CONNECTION: "db"
|
||||
DB_PORT: 5432
|
||||
NODE_ENV: "development"
|
||||
ports:
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
<hr class="trenner_form_100" />
|
||||
</div>
|
||||
|
||||
<ImageGrid max={1} bind:images />
|
||||
<ImageGrid max={1} bind:images bind:ausweis />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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 />
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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")}
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 = "";
|
||||
|
||||
@@ -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 />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<input
|
||||
name={name}
|
||||
id={name}
|
||||
class="zahlen"
|
||||
class=""
|
||||
type="number"
|
||||
required
|
||||
readonly={readonly}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
})();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
export class Ausweis {
|
||||
public static fromUID(uid: string) {
|
||||
|
||||
}
|
||||
|
||||
public static fromPrivateId(id: number) {
|
||||
|
||||
}
|
||||
}
|
||||
25
src/lib/Energiekennwerte.ts
Normal file
25
src/lib/Energiekennwerte.ts
Normal 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
37
src/lib/Gebaeude.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
});
|
||||
};
|
||||
};
|
||||
@@ -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,
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
BIN
uploads/17693546-b281-40f2-a7b8-dcd4159245e4.jpg
Normal file
BIN
uploads/17693546-b281-40f2-a7b8-dcd4159245e4.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 MiB |
Reference in New Issue
Block a user