Bildupload - UI - Globaler Ausweis
This commit is contained in:
@@ -15,6 +15,7 @@ services:
|
|||||||
- 3000:3000
|
- 3000:3000
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/online-energieausweis
|
- ./:/online-energieausweis
|
||||||
|
- ./node_modules/@ibcornelsen/ui:/online-energieausweis/node_modules/@ibcornelsen/ui
|
||||||
networks:
|
networks:
|
||||||
- postgres
|
- postgres
|
||||||
db:
|
db:
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
import HelpLabel from "~/components/HelpLabel.svelte";
|
import HelpLabel from "~/components/HelpLabel.svelte";
|
||||||
|
|
||||||
export let ausweis: Verbrauchsausweis;
|
export let ausweis: Verbrauchsausweis;
|
||||||
|
|
||||||
|
import UploadImages from "../UploadImages.svelte";
|
||||||
|
|
||||||
|
let images: (File & { data: string })[] = [];
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 p-4 gap-4">
|
<div class="grid grid-cols-2 p-4 gap-4">
|
||||||
@@ -21,27 +25,20 @@
|
|||||||
<hr class="trenner_form_100" />
|
<hr class="trenner_form_100" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group col-md-12">
|
<div class="flex flex-col gap-4">
|
||||||
<div class="row">
|
<UploadImages max={1} bind:images></UploadImages>
|
||||||
<input
|
<div class="grid grid-cols-2 gap-2">
|
||||||
type="file"
|
{#each images as image, i}
|
||||||
class="image_upload"
|
<div class="relative group">
|
||||||
name="general[]"
|
<img src={image.data} alt={image.name} class="h-full rounded-lg border-2 group-hover:contrast-50 object-cover transition-all">
|
||||||
/>
|
<button type="button" class="invisible group-hover:visible absolute left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] rounded-full w-[30px] h-[30px] p-2 bg-[rgba(0,0,0,0.4)]" on:click={() => {
|
||||||
<div
|
delete images[i]
|
||||||
class="form-group col-3 image_container"
|
images = images.filter(x => x);
|
||||||
>
|
}}>
|
||||||
<input
|
R
|
||||||
type="hidden"
|
</button>
|
||||||
id="uploaded_images"
|
|
||||||
name="uploaded_images"
|
|
||||||
value=""
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
|
{/each}
|
||||||
<canvas
|
|
||||||
id="image_canvas"
|
|
||||||
width="500"></canvas>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import UploadImages from "../UploadImages.svelte";
|
||||||
|
|
||||||
|
let images: (File & { data: string })[] = [];
|
||||||
|
</script>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="grid grid-cols-2 gap-4">
|
||||||
<div class="rounded-lg border-4 p-4 bg-white">
|
<div class="rounded-lg border-4 p-4 bg-white">
|
||||||
<input type="file" class="image_upload" name="daemmung[]" multiple />
|
<input type="file" class="image_upload" name="daemmung[]" multiple />
|
||||||
@@ -48,6 +54,21 @@
|
|||||||
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>
|
||||||
<div class="image_container"></div>
|
<div class="flex flex-col gap-4">
|
||||||
|
<UploadImages max={4} bind:images></UploadImages>
|
||||||
|
<div class="grid grid-cols-2 gap-2">
|
||||||
|
{#each images as image, i}
|
||||||
|
<div class="relative group">
|
||||||
|
<img src={image.data} alt={image.name} class="h-full rounded-lg border-2 group-hover:contrast-50 object-cover transition-all">
|
||||||
|
<button type="button" class="invisible group-hover:visible absolute left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] rounded-full w-[30px] h-[30px] p-2 bg-[rgba(0,0,0,0.4)]" on:click={() => {
|
||||||
|
delete images[i]
|
||||||
|
images = images.filter(x => x);
|
||||||
|
}}>
|
||||||
|
R
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import UploadImages from "../UploadImages.svelte";
|
||||||
|
|
||||||
|
let images: (File & { data: string })[] = [];
|
||||||
|
</script>
|
||||||
|
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="grid grid-cols-2 gap-4">
|
||||||
<div class="rounded-lg border-4 p-4 bg-white">
|
<div class="rounded-lg border-4 p-4 bg-white">
|
||||||
<input type="file" class="image_upload" name="fenster[]" multiple />
|
<input type="file" class="image_upload" name="fenster[]" multiple />
|
||||||
@@ -45,6 +51,21 @@
|
|||||||
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>
|
||||||
<div class="image_container"></div>
|
<div class="flex flex-col gap-4">
|
||||||
|
<UploadImages max={4} bind:images></UploadImages>
|
||||||
|
<div class="grid grid-cols-2 gap-2">
|
||||||
|
{#each images as image, i}
|
||||||
|
<div class="relative group">
|
||||||
|
<img src={image.data} alt={image.name} class="h-full rounded-lg border-2 group-hover:contrast-50 object-cover transition-all">
|
||||||
|
<button type="button" class="invisible group-hover:visible absolute left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] rounded-full w-[30px] h-[30px] p-2 bg-[rgba(0,0,0,0.4)]" on:click={() => {
|
||||||
|
delete images[i]
|
||||||
|
images = images.filter(x => x);
|
||||||
|
}}>
|
||||||
|
R
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import UploadImages from "../UploadImages.svelte";
|
||||||
|
|
||||||
|
let images: (File & { data: string })[] = [];
|
||||||
|
</script>
|
||||||
<div class="grid grid-cols-2 gap-4">
|
<div class="grid grid-cols-2 gap-4">
|
||||||
<div class="rounded-lg border-4 p-4 bg-white">
|
<div class="rounded-lg border-4 p-4 bg-white">
|
||||||
<input type="file" class="image_upload" multiple />
|
<input type="file" class="image_upload" multiple />
|
||||||
@@ -52,6 +57,21 @@
|
|||||||
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>
|
||||||
<div class="image_container"></div>
|
<div class="flex flex-col gap-4">
|
||||||
|
<UploadImages max={4} bind:images></UploadImages>
|
||||||
|
<div class="grid grid-cols-2 gap-2">
|
||||||
|
{#each images as image, i}
|
||||||
|
<div class="relative group">
|
||||||
|
<img src={image.data} alt={image.name} class="h-full rounded-lg border-2 group-hover:contrast-50 object-cover transition-all">
|
||||||
|
<button type="button" class="invisible group-hover:visible absolute left-[50%] top-[50%] translate-x-[-50%] translate-y-[-50%] rounded-full w-[30px] h-[30px] p-2 bg-[rgba(0,0,0,0.4)]" on:click={() => {
|
||||||
|
delete images[i]
|
||||||
|
images = images.filter(x => x);
|
||||||
|
}}>
|
||||||
|
R
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<button type="button" on:click={() => (showHelp = !showHelp)}
|
<button type="button" class="button" on:click={() => (showHelp = !showHelp)}
|
||||||
>Hilfe anfordern</button
|
>Hilfe anfordern</button
|
||||||
>
|
>
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
export let verbrauch: number;
|
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
|
||||||
export let primär: number;
|
|
||||||
|
export let ausweis: Verbrauchsausweis;
|
||||||
|
|
||||||
let maxPerformance = 250;
|
let maxPerformance = 250;
|
||||||
|
|
||||||
@@ -32,8 +33,18 @@
|
|||||||
return centeredValue;
|
return centeredValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$: translation_1 = Math.min(100, verbrauch / maxPerformance * 100);
|
|
||||||
$: translation_2 = Math.min(100, primär / maxPerformance * 100);
|
let translation_1 = 0;
|
||||||
|
let translation_2 = 0;
|
||||||
|
$: {
|
||||||
|
(async () => {
|
||||||
|
const endEnergieVerbrauch = (await ausweis.end_energie_verbrauch);
|
||||||
|
const primaerEnergieVerbrauch = (await ausweis.primaer_energie_verbrauch);
|
||||||
|
translation_1 = Math.min(100, endEnergieVerbrauch / maxPerformance * 100)
|
||||||
|
translation_2 = Math.min(100, primaerEnergieVerbrauch / maxPerformance * 100)
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="w-full rounded-lg border border-[#ffcc03] relative p-2">
|
<div class="w-full rounded-lg border border-[#ffcc03] relative p-2">
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import HelpLabel from "../HelpLabel.svelte";
|
import HelpLabel from "../HelpLabel.svelte";
|
||||||
import moment from "moment";
|
import moment, { Moment } from "moment";
|
||||||
import Label from "../Label.svelte";
|
import Label from "../Label.svelte";
|
||||||
import fuelList from "./fuelList";
|
import fuelList from "./fuelList";
|
||||||
|
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
|
||||||
|
|
||||||
let availableYears = [
|
let availableYears = [
|
||||||
2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
|
||||||
@@ -22,42 +23,7 @@
|
|||||||
"Dezember",
|
"Dezember",
|
||||||
];
|
];
|
||||||
|
|
||||||
let month: number = 1;
|
export let ausweis: Verbrauchsausweis;
|
||||||
let year: number = availableYears[0];
|
|
||||||
|
|
||||||
export let additionalHeating: boolean = false;
|
|
||||||
// Verbräuche aller drei Verbrauchsjahre der primären Energiequelle
|
|
||||||
export let energyConsumption: number[] = [0, 0, 0];
|
|
||||||
// Verbräuche aller drei Verbrauchsjahre der sekundären Energiequelle
|
|
||||||
export let additionalEnergyConsumption: number[] = [0, 0, 0];
|
|
||||||
|
|
||||||
export let climateFactors: number[];
|
|
||||||
|
|
||||||
export let conversionFactor: number;
|
|
||||||
|
|
||||||
export let calorificValueFactor: number;
|
|
||||||
|
|
||||||
$: conversionFactor =
|
|
||||||
fuelList.find((x) => {
|
|
||||||
return x.energietraeger == fuel && x.einheit == unit;
|
|
||||||
})?.umrechnungsfaktor || 1;
|
|
||||||
|
|
||||||
$: calorificValueFactor =
|
|
||||||
fuelList.find((x) => {
|
|
||||||
return x.energietraeger == fuel && x.einheit == unit;
|
|
||||||
})?.heizwertfaktor || 1;
|
|
||||||
|
|
||||||
async function fetchClimateFactors() {
|
|
||||||
const url = `/api/climate_factor?start=${month}.01.${year}&end=${month}.01.${
|
|
||||||
year + 2
|
|
||||||
}&accuracy=years&zip=21039`;
|
|
||||||
|
|
||||||
fetch(url)
|
|
||||||
.then((response) => response.json())
|
|
||||||
.then((result) => {
|
|
||||||
climateFactors = Object.values(result.data);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
const fuelMap: Record<string, string[]> = {};
|
const fuelMap: Record<string, string[]> = {};
|
||||||
for (const fuel of fuelList) {
|
for (const fuel of fuelList) {
|
||||||
@@ -65,12 +31,18 @@
|
|||||||
fuelMap[fuel.energietraeger].push(fuel.einheit);
|
fuelMap[fuel.energietraeger].push(fuel.einheit);
|
||||||
}
|
}
|
||||||
|
|
||||||
let fuel: string = fuelList[0].energietraeger;
|
let month: string = "01";
|
||||||
let unit: string = fuelList[0].einheit;
|
let year: string = "2018";
|
||||||
|
|
||||||
|
$: {
|
||||||
|
if (month && year) {
|
||||||
|
ausweis.energieverbrauch_zeitraum = moment(`${month}.01.${year}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="w-full flex flex-col gap-4">
|
<div class="w-full flex flex-col gap-4">
|
||||||
<div class="w-full grid grid-cols-[1fr_1fr_1fr_1fr_1fr] gap-6">
|
<div class="w-full grid grid-cols-[1fr,1fr,1fr,1fr,1fr] gap-6">
|
||||||
<div>
|
<div>
|
||||||
<HelpLabel title="zusätzliche Heizquelle">
|
<HelpLabel title="zusätzliche Heizquelle">
|
||||||
Wenn eine zusätzliche Heizquelle vorhanden geben Sie hier drei
|
Wenn eine zusätzliche Heizquelle vorhanden geben Sie hier drei
|
||||||
@@ -81,7 +53,7 @@
|
|||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="IGzus1verbrauch1"
|
class="IGzus1verbrauch1"
|
||||||
bind:checked={additionalHeating}
|
bind:checked={ausweis.zusaetzliche_heizquelle}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -113,7 +85,7 @@
|
|||||||
<b>Koks:</b> Stark kohlenstoffhaltiger Brennstoff.<br /><br />
|
<b>Koks:</b> Stark kohlenstoffhaltiger Brennstoff.<br /><br />
|
||||||
</HelpLabel>
|
</HelpLabel>
|
||||||
<div>
|
<div>
|
||||||
<select name="energietraeger_1" required bind:value={fuel}>
|
<select name="energietraeger_1" required bind:value={ausweis.energietraeger_1}>
|
||||||
<option>Bitte auswählen</option>
|
<option>Bitte auswählen</option>
|
||||||
{#each Object.keys(fuelMap) as fuel}
|
{#each Object.keys(fuelMap) as fuel}
|
||||||
<option value={fuel}>{fuel}</option>
|
<option value={fuel}>{fuel}</option>
|
||||||
@@ -132,10 +104,10 @@
|
|||||||
<select
|
<select
|
||||||
name="energietraeger_einheit_heizquelle_1"
|
name="energietraeger_einheit_heizquelle_1"
|
||||||
required
|
required
|
||||||
bind:value={unit}
|
bind:value={ausweis.energietraeger_einheit_heizquelle_1}
|
||||||
>
|
>
|
||||||
<option>Bitte auswählen</option>
|
<option>Bitte auswählen</option>
|
||||||
{#each fuelMap[fuel] as unit}
|
{#each (fuelMap.hasOwnProperty(ausweis.energietraeger_1) ? fuelMap[ausweis.energietraeger_1] : []) as unit}
|
||||||
<option value={unit}>{unit}</option>
|
<option value={unit}>{unit}</option>
|
||||||
{/each}
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
@@ -147,11 +119,14 @@
|
|||||||
<div>
|
<div>
|
||||||
<select
|
<select
|
||||||
name="energietraeger_2"
|
name="energietraeger_2"
|
||||||
disabled={!additionalHeating}
|
bind:value={ausweis.energietraeger_2}
|
||||||
|
disabled={!ausweis.zusaetzliche_heizquelle}
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
<option> Bitte auswählen</option>
|
<option> Bitte auswählen</option>
|
||||||
<!-- TODO: Energieträger aus Datenbank holen -->
|
{#each Object.keys(fuelMap) as fuel}
|
||||||
|
<option value={fuel}>{fuel}</option>
|
||||||
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -161,15 +136,14 @@
|
|||||||
<div>
|
<div>
|
||||||
<select
|
<select
|
||||||
name="energietraeger_einheit_heizquelle_2"
|
name="energietraeger_einheit_heizquelle_2"
|
||||||
disabled={!additionalHeating}
|
disabled={!ausweis.zusaetzliche_heizquelle}
|
||||||
|
bind:value={ausweis.energietraeger_einheit_heizquelle_2}
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
<option>Bitte auswählen</option>
|
<option>Bitte auswählen</option>
|
||||||
<option value="kWh"> kWh</option>
|
{#each (fuelMap.hasOwnProperty(ausweis.energietraeger_2) ? fuelMap[ausweis.energietraeger_2] : []) as unit}
|
||||||
<option value="m³">m³</option>
|
<option value={unit}>{unit}</option>
|
||||||
<option value="l">l</option>
|
{/each}
|
||||||
<option value="kg">kg</option>
|
|
||||||
<option value="SRm"> SRm</option>
|
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -183,7 +157,6 @@
|
|||||||
name="energieverbrauch_zeitraum_monat"
|
name="energieverbrauch_zeitraum_monat"
|
||||||
class="rounded-tr-none rounded-br-none w-full m-0"
|
class="rounded-tr-none rounded-br-none w-full m-0"
|
||||||
bind:value={month}
|
bind:value={month}
|
||||||
on:change={fetchClimateFactors}
|
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
<option>auswählen</option>
|
<option>auswählen</option>
|
||||||
@@ -196,7 +169,6 @@
|
|||||||
name="energieverbrauch_zeitraum_jahr"
|
name="energieverbrauch_zeitraum_jahr"
|
||||||
class="rounded-tl-none rounded-bl-none w-full m-0"
|
class="rounded-tl-none rounded-bl-none w-full m-0"
|
||||||
bind:value={year}
|
bind:value={year}
|
||||||
on:change={fetchClimateFactors}
|
|
||||||
required
|
required
|
||||||
>
|
>
|
||||||
<option>auswählen</option>
|
<option>auswählen</option>
|
||||||
@@ -209,7 +181,7 @@
|
|||||||
<span>von</span>
|
<span>von</span>
|
||||||
<input
|
<input
|
||||||
class="klima"
|
class="klima"
|
||||||
value={moment(`${month}.01.${year}`)
|
value={moment(ausweis.energieverbrauch_zeitraum)
|
||||||
.add("1", "year")
|
.add("1", "year")
|
||||||
.format("MM.Y")}
|
.format("MM.Y")}
|
||||||
readonly
|
readonly
|
||||||
@@ -219,7 +191,7 @@
|
|||||||
<span>von</span>
|
<span>von</span>
|
||||||
<input
|
<input
|
||||||
class="klima"
|
class="klima"
|
||||||
value={moment(`${month}.01.${year}`)
|
value={moment(ausweis.energieverbrauch_zeitraum)
|
||||||
.add("2", "years")
|
.add("2", "years")
|
||||||
.format("MM.Y")}
|
.format("MM.Y")}
|
||||||
readonly
|
readonly
|
||||||
@@ -231,7 +203,7 @@
|
|||||||
<span>bis</span>
|
<span>bis</span>
|
||||||
<input
|
<input
|
||||||
class="form-control"
|
class="form-control"
|
||||||
value={moment(`${month}.01.${year}`)
|
value={moment(ausweis.energieverbrauch_zeitraum)
|
||||||
.add("1", "year")
|
.add("1", "year")
|
||||||
.format("MM.Y")}
|
.format("MM.Y")}
|
||||||
readonly
|
readonly
|
||||||
@@ -241,7 +213,7 @@
|
|||||||
<span>bis</span>
|
<span>bis</span>
|
||||||
<input
|
<input
|
||||||
class="form-control"
|
class="form-control"
|
||||||
value={moment(`${month}.01.${year}`)
|
value={moment(ausweis.energieverbrauch_zeitraum)
|
||||||
.add("2", "years")
|
.add("2", "years")
|
||||||
.format("MM.Y")}
|
.format("MM.Y")}
|
||||||
readonly
|
readonly
|
||||||
@@ -251,7 +223,7 @@
|
|||||||
<span>bis</span>
|
<span>bis</span>
|
||||||
<input
|
<input
|
||||||
class="form-control"
|
class="form-control"
|
||||||
value={moment(`${month}.01.${year}`)
|
value={moment(ausweis.energieverbrauch_zeitraum)
|
||||||
.add("3", "years")
|
.add("3", "years")
|
||||||
.format("MM.Y")}
|
.format("MM.Y")}
|
||||||
readonly
|
readonly
|
||||||
@@ -264,7 +236,7 @@
|
|||||||
<input
|
<input
|
||||||
name="energieverbrauch_1_heizquelle_1"
|
name="energieverbrauch_1_heizquelle_1"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={energyConsumption[0]}
|
bind:value={ausweis.energieverbrauch_1_heizquelle_1}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -273,7 +245,7 @@
|
|||||||
<input
|
<input
|
||||||
name="energieverbrauch_2_heizquelle_1"
|
name="energieverbrauch_2_heizquelle_1"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={energyConsumption[1]}
|
bind:value={ausweis.energieverbrauch_2_heizquelle_1}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -282,7 +254,7 @@
|
|||||||
<input
|
<input
|
||||||
name="energieverbrauch_3_heizquelle_1"
|
name="energieverbrauch_3_heizquelle_1"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={energyConsumption[2]}
|
bind:value={ausweis.energieverbrauch_3_heizquelle_1}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -293,8 +265,8 @@
|
|||||||
<input
|
<input
|
||||||
name="energieverbrauch_1_heizquelle_2"
|
name="energieverbrauch_1_heizquelle_2"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={additionalEnergyConsumption[0]}
|
bind:value={ausweis.energieverbrauch_1_heizquelle_2}
|
||||||
disabled={!additionalHeating}
|
disabled={!ausweis.zusaetzliche_heizquelle}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
@@ -302,8 +274,8 @@
|
|||||||
<input
|
<input
|
||||||
name="energieverbrauch_2_heizquelle_2"
|
name="energieverbrauch_2_heizquelle_2"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={additionalEnergyConsumption[1]}
|
bind:value={ausweis.energieverbrauch_2_heizquelle_2}
|
||||||
disabled={!additionalHeating}
|
disabled={!ausweis.zusaetzliche_heizquelle}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
@@ -311,8 +283,8 @@
|
|||||||
<input
|
<input
|
||||||
name="energieverbrauch_3_heizquelle_2"
|
name="energieverbrauch_3_heizquelle_2"
|
||||||
type="number"
|
type="number"
|
||||||
bind:value={additionalEnergyConsumption[2]}
|
bind:value={ausweis.energieverbrauch_3_heizquelle_2}
|
||||||
disabled={!additionalHeating}
|
disabled={!ausweis.zusaetzliche_heizquelle}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
58
src/components/UploadImages.svelte
Normal file
58
src/components/UploadImages.svelte
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let max: number = 2;
|
||||||
|
|
||||||
|
// Array of base64 encoded images read into the input.
|
||||||
|
export let images: (File & { data: string })[] = [];
|
||||||
|
|
||||||
|
function getAllImages(this: HTMLInputElement) {
|
||||||
|
const files = this.files || [];
|
||||||
|
|
||||||
|
if (images.length == max) {
|
||||||
|
this.value = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == max) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = (ev) => {
|
||||||
|
if (reader.readyState != reader.DONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!reader.result) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
images.push({ ...file, data: reader.result as string } as (File & { data: string }));
|
||||||
|
images = images;
|
||||||
|
|
||||||
|
if (i == (Math.min(files.length, max) - 1)) {
|
||||||
|
this.value = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.readAsDataURL(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if max > 1}
|
||||||
|
<input type="file" multiple on:change={getAllImages} />
|
||||||
|
{:else}
|
||||||
|
<input type="file" on:change={getAllImages} />
|
||||||
|
{/if}
|
||||||
@@ -10,33 +10,14 @@
|
|||||||
import FensterImage from "~/components/Ausweis/FensterImage.svelte";
|
import FensterImage from "~/components/Ausweis/FensterImage.svelte";
|
||||||
import DaemmungImage from "~/components/Ausweis/DaemmungImage.svelte";
|
import DaemmungImage from "~/components/Ausweis/DaemmungImage.svelte";
|
||||||
import AusweisPreviewContainer from "~/components/Ausweis/AusweisPreviewContainer.svelte";
|
import AusweisPreviewContainer from "~/components/Ausweis/AusweisPreviewContainer.svelte";
|
||||||
import { calculateEnergyPerformanceScore } from "./energyPerformanceCalculation";
|
|
||||||
import ZipSearch from "../ZIPSearch.svelte";
|
import ZipSearch from "../ZIPSearch.svelte";
|
||||||
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
|
import { Verbrauchsausweis } from "src/lib/Ausweis/Verbrauchsausweis";
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
const ausweis = new Verbrauchsausweis();
|
let ausweis = new Verbrauchsausweis();
|
||||||
|
|
||||||
let conversionFactor: number = 0;
|
console.log(ausweis);
|
||||||
let calorificValueFactor: number = 0;
|
|
||||||
|
|
||||||
let energyConsumption = [0, 0, 0];
|
|
||||||
let additionalEnergyConsumption = [0, 0, 0];
|
|
||||||
let climateFactors = [0, 0, 0];
|
|
||||||
|
|
||||||
let area = 0;
|
|
||||||
let energyPerformance = 0;
|
|
||||||
|
|
||||||
$: {
|
|
||||||
energyPerformance = calculateEnergyPerformanceScore(
|
|
||||||
energyConsumption,
|
|
||||||
additionalEnergyConsumption,
|
|
||||||
ausweis.anteil_warmwasser_1,
|
|
||||||
climateFactors,
|
|
||||||
area * (ausweis.keller_beheizt ? 1.35 : 1.2),
|
|
||||||
conversionFactor,
|
|
||||||
calorificValueFactor
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let needsRequirementCertificate: boolean = false;
|
let needsRequirementCertificate: boolean = false;
|
||||||
|
|
||||||
@@ -56,11 +37,19 @@
|
|||||||
ausweis.objekt_saniert = true;
|
ausweis.objekt_saniert = true;
|
||||||
ausweis.anzahl_einheiten = 1;
|
ausweis.anzahl_einheiten = 1;
|
||||||
ausweis.ausstellgrund = "Vermietung";
|
ausweis.ausstellgrund = "Vermietung";
|
||||||
energyConsumption = [15000, 14000, 16000];
|
ausweis.energieverbrauch_1_heizquelle_1 = 15000;
|
||||||
area = 152;
|
ausweis.energieverbrauch_2_heizquelle_1 = 14000;
|
||||||
|
ausweis.energieverbrauch_3_heizquelle_1 = 16000;
|
||||||
|
ausweis.wohnflaeche = 152;
|
||||||
ausweis.keller_beheizt = true;
|
ausweis.keller_beheizt = true;
|
||||||
|
ausweis.energietraeger_1 = "Erdgas H"
|
||||||
|
ausweis.energietraeger_einheit_heizquelle_1 = "kWh"
|
||||||
ausweis.warmwasser_enthalten = true;
|
ausweis.warmwasser_enthalten = true;
|
||||||
ausweis.anteil_warmwasser_1 = 18;
|
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";
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -71,8 +60,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<PerformanceScore
|
<PerformanceScore
|
||||||
verbrauch={energyPerformance}
|
bind:ausweis={ausweis}
|
||||||
primär={energyPerformance * 1.1}
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -84,7 +72,7 @@
|
|||||||
<a class="button" href="/speichern">Später Weitermachen</a>
|
<a class="button" href="/speichern">Später Weitermachen</a>
|
||||||
<div class="flex gap-4">
|
<div class="flex gap-4">
|
||||||
<Hilfe />
|
<Hilfe />
|
||||||
<button on:click={automatischAusfüllen}
|
<button on:click={automatischAusfüllen} type="button" class="button"
|
||||||
>Automatisch Ausfüllen</button
|
>Automatisch Ausfüllen</button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@@ -151,6 +139,7 @@
|
|||||||
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}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -196,7 +185,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={area}
|
bind:value={ausweis.wohnflaeche}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -240,12 +229,7 @@
|
|||||||
|
|
||||||
<div class="GRB">
|
<div class="GRB">
|
||||||
<Verbrauch
|
<Verbrauch
|
||||||
bind:additionalHeating={ausweis.zusaetzliche_heizquelle}
|
bind:ausweis={ausweis}
|
||||||
bind:energyConsumption
|
|
||||||
bind:additionalEnergyConsumption
|
|
||||||
bind:climateFactors
|
|
||||||
bind:conversionFactor
|
|
||||||
bind:calorificValueFactor
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -283,7 +267,7 @@
|
|||||||
<input
|
<input
|
||||||
name="IGwarmwasser"
|
name="IGwarmwasser"
|
||||||
maxlength="2"
|
maxlength="2"
|
||||||
type="text"
|
type="number"
|
||||||
bind:value={ausweis.anteil_warmwasser_1}
|
bind:value={ausweis.anteil_warmwasser_1}
|
||||||
disabled={!ausweis.warmwasser_enthalten}
|
disabled={!ausweis.warmwasser_enthalten}
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
@@ -299,9 +283,10 @@
|
|||||||
<input
|
<input
|
||||||
name="IGwarmwasser2"
|
name="IGwarmwasser2"
|
||||||
maxlength="3"
|
maxlength="3"
|
||||||
type="text"
|
type="number"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
disabled={!ausweis.zusaetzliche_heizquelle}
|
bind:value={ausweis.anteil_warmwasser_2}
|
||||||
|
disabled={!ausweis.zusaetzliche_heizquelle || !ausweis.warmwasser_enthalten}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -319,6 +304,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGversorgungssysteme1"
|
name="IGversorgungssysteme1"
|
||||||
|
bind:checked={ausweis.energiequelle_2_nutzung[0]}
|
||||||
value="Heizung"
|
value="Heizung"
|
||||||
/>Heizung</label
|
/>Heizung</label
|
||||||
>
|
>
|
||||||
@@ -326,6 +312,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGversorgungssysteme2"
|
name="IGversorgungssysteme2"
|
||||||
|
bind:checked={ausweis.energiequelle_2_nutzung[1]}
|
||||||
value="Warmwasser"
|
value="Warmwasser"
|
||||||
/>Warmwasser</label
|
/>Warmwasser</label
|
||||||
>
|
>
|
||||||
@@ -333,6 +320,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGversorgungssysteme3"
|
name="IGversorgungssysteme3"
|
||||||
|
bind:checked={ausweis.energiequelle_2_nutzung[2]}
|
||||||
value="Lüftung"
|
value="Lüftung"
|
||||||
/>Lüftung</label
|
/>Lüftung</label
|
||||||
>
|
>
|
||||||
@@ -340,6 +328,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGversorgungssysteme4"
|
name="IGversorgungssysteme4"
|
||||||
|
bind:checked={ausweis.energiequelle_2_nutzung[3]}
|
||||||
value="Kühlung"
|
value="Kühlung"
|
||||||
/>Kühlung</label
|
/>Kühlung</label
|
||||||
>
|
>
|
||||||
@@ -509,6 +498,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage1"
|
name="IGheizungsanlage1"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[0]}
|
||||||
value="ZH"
|
value="ZH"
|
||||||
/>Zentral/Etage</label
|
/>Zentral/Etage</label
|
||||||
>
|
>
|
||||||
@@ -518,6 +508,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage2"
|
name="IGheizungsanlage2"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[1]}
|
||||||
value="EO"
|
value="EO"
|
||||||
/>Einzelöfen</label
|
/>Einzelöfen</label
|
||||||
>
|
>
|
||||||
@@ -527,6 +518,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage3"
|
name="IGheizungsanlage3"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[2]}
|
||||||
value="DH"
|
value="DH"
|
||||||
/>Durchlauferhitzer</label
|
/>Durchlauferhitzer</label
|
||||||
>
|
>
|
||||||
@@ -536,6 +528,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage4"
|
name="IGheizungsanlage4"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[3]}
|
||||||
value="SK"
|
value="SK"
|
||||||
/>Standardkessel</label
|
/>Standardkessel</label
|
||||||
>
|
>
|
||||||
@@ -545,6 +538,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage5"
|
name="IGheizungsanlage5"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[4]}
|
||||||
value="SSWW"
|
value="SSWW"
|
||||||
/>Solarsystem für Warmwasser</label
|
/>Solarsystem für Warmwasser</label
|
||||||
>
|
>
|
||||||
@@ -554,6 +548,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage6"
|
name="IGheizungsanlage6"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[5]}
|
||||||
value="WP"
|
value="WP"
|
||||||
/>Wärmepumpe</label
|
/>Wärmepumpe</label
|
||||||
>
|
>
|
||||||
@@ -563,6 +558,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage7"
|
name="IGheizungsanlage7"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[6]}
|
||||||
value="NK"
|
value="NK"
|
||||||
/>Niedertemperaturkessel</label
|
/>Niedertemperaturkessel</label
|
||||||
>
|
>
|
||||||
@@ -572,6 +568,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage8"
|
name="IGheizungsanlage8"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[7]}
|
||||||
value="BWK"
|
value="BWK"
|
||||||
/>Brennwertkessel</label
|
/>Brennwertkessel</label
|
||||||
>
|
>
|
||||||
@@ -581,6 +578,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage9"
|
name="IGheizungsanlage9"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[8]}
|
||||||
value="WRGD"
|
value="WRGD"
|
||||||
/>Warmwasserrohre gedämmt</label
|
/>Warmwasserrohre gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -590,6 +588,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage10"
|
name="IGheizungsanlage10"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[9]}
|
||||||
value="HRGD"
|
value="HRGD"
|
||||||
/>Heizungsrohre gedämmt</label
|
/>Heizungsrohre gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -599,6 +598,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage11"
|
name="IGheizungsanlage11"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[10]}
|
||||||
value="ZK"
|
value="ZK"
|
||||||
/>Zirkulation</label
|
/>Zirkulation</label
|
||||||
>
|
>
|
||||||
@@ -608,6 +608,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGheizungsanlage12"
|
name="IGheizungsanlage12"
|
||||||
|
bind:checked={ausweis.versorgungssysteme[11]}
|
||||||
value="RTR"
|
value="RTR"
|
||||||
/>Raumtemperaturregler</label
|
/>Raumtemperaturregler</label
|
||||||
>
|
>
|
||||||
@@ -637,6 +638,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach1"
|
name="IGfensterdach1"
|
||||||
|
bind:checked={ausweis.fenster_dach[0]}
|
||||||
value="EG"
|
value="EG"
|
||||||
/>Einfachglas</label
|
/>Einfachglas</label
|
||||||
>
|
>
|
||||||
@@ -646,6 +648,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach2"
|
name="IGfensterdach2"
|
||||||
|
bind:checked={ausweis.fenster_dach[1]}
|
||||||
value="DF"
|
value="DF"
|
||||||
/>Doppelverglasung</label
|
/>Doppelverglasung</label
|
||||||
>
|
>
|
||||||
@@ -655,6 +658,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach3"
|
name="IGfensterdach3"
|
||||||
|
bind:checked={ausweis.fenster_dach[2]}
|
||||||
value="IVG"
|
value="IVG"
|
||||||
/>Isolierverglasung</label
|
/>Isolierverglasung</label
|
||||||
>
|
>
|
||||||
@@ -664,6 +668,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach4"
|
name="IGfensterdach4"
|
||||||
|
bind:checked={ausweis.fenster_dach[3]}
|
||||||
value="PHF"
|
value="PHF"
|
||||||
/>Dreifachverglasung</label
|
/>Dreifachverglasung</label
|
||||||
>
|
>
|
||||||
@@ -673,6 +678,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach5"
|
name="IGfensterdach5"
|
||||||
|
bind:checked={ausweis.fenster_dach[4]}
|
||||||
value="FD"
|
value="FD"
|
||||||
/>Alle Fenster dicht</label
|
/>Alle Fenster dicht</label
|
||||||
>
|
>
|
||||||
@@ -682,6 +688,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach6"
|
name="IGfensterdach6"
|
||||||
|
bind:checked={ausweis.fenster_dach[5]}
|
||||||
value="FTUD"
|
value="FTUD"
|
||||||
/>Fenster teilweise undicht</label
|
/>Fenster teilweise undicht</label
|
||||||
>
|
>
|
||||||
@@ -691,6 +698,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach7"
|
name="IGfensterdach7"
|
||||||
|
bind:checked={ausweis.fenster_dach[6]}
|
||||||
value="TD"
|
value="TD"
|
||||||
/>Alle Türen dicht</label
|
/>Alle Türen dicht</label
|
||||||
>
|
>
|
||||||
@@ -700,6 +708,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach8"
|
name="IGfensterdach8"
|
||||||
|
bind:checked={ausweis.fenster_dach[7]}
|
||||||
value="TUD"
|
value="TUD"
|
||||||
/>Türen teilweise undicht</label
|
/>Türen teilweise undicht</label
|
||||||
>
|
>
|
||||||
@@ -709,6 +718,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGfensterdach9"
|
name="IGfensterdach9"
|
||||||
|
bind:checked={ausweis.fenster_dach[8]}
|
||||||
value="RKD"
|
value="RKD"
|
||||||
/>Rollladenkästen gedämmt, luftdicht</label
|
/>Rollladenkästen gedämmt, luftdicht</label
|
||||||
>
|
>
|
||||||
@@ -743,6 +753,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGwaermedaemmung1"
|
name="IGwaermedaemmung1"
|
||||||
|
bind:checked={ausweis.daemmung[0]}
|
||||||
value="AWD"
|
value="AWD"
|
||||||
/>Außenwand gedämmt</label
|
/>Außenwand gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -752,6 +763,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGwaermedaemmung2"
|
name="IGwaermedaemmung2"
|
||||||
|
bind:checked={ausweis.daemmung[1]}
|
||||||
value="KWD"
|
value="KWD"
|
||||||
/>Kelleraußenwand gedämmt</label
|
/>Kelleraußenwand gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -761,6 +773,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGwaermedaemmung3"
|
name="IGwaermedaemmung3"
|
||||||
|
bind:checked={ausweis.daemmung[2]}
|
||||||
value="KDD"
|
value="KDD"
|
||||||
/>Kellerdecke gedämmt</label
|
/>Kellerdecke gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -770,6 +783,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGwaermedaemmung4"
|
name="IGwaermedaemmung4"
|
||||||
|
bind:checked={ausweis.daemmung[3]}
|
||||||
value="DGD"
|
value="DGD"
|
||||||
/>Dachgeschoss gedämmt</label
|
/>Dachgeschoss gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -779,6 +793,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGwaermedaemmung5"
|
name="IGwaermedaemmung5"
|
||||||
|
bind:checked={ausweis.daemmung[4]}
|
||||||
value="OGDDW"
|
value="OGDDW"
|
||||||
/>Oberste Geschossdecke gedämmt</label
|
/>Oberste Geschossdecke gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -788,6 +803,7 @@
|
|||||||
><input
|
><input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name="IGwaermedaemmung6"
|
name="IGwaermedaemmung6"
|
||||||
|
bind:checked={ausweis.daemmung[5]}
|
||||||
value="OGDD"
|
value="OGDD"
|
||||||
/>Oberste Geschossdecke min. 12cm gedämmt</label
|
/>Oberste Geschossdecke min. 12cm gedämmt</label
|
||||||
>
|
>
|
||||||
@@ -810,7 +826,7 @@
|
|||||||
|
|
||||||
<div class="flex flex-row justify-between">
|
<div class="flex flex-row justify-between">
|
||||||
<Hilfe />
|
<Hilfe />
|
||||||
<button formnovalidate>Weiter</button>
|
<button class="button">Weiter</button>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param energyConsumption Ein Array aus allen Verbräuchen der drei Verbrauchsjahre für die primäre Energiequelle
|
|
||||||
* @param additionalEnergyConsumption Ein Array aus allen Verbräuchen der drei Verbrauchsjahre für die sekundäre Energiequelle
|
|
||||||
* @param waterHeatingPortion Der Anteil den Warmwasser am Energieverbrauch ausgemacht hat
|
|
||||||
* @param climateFactors Ein Array aus drei Klimafaktoren für die Verbrauchsjahre
|
|
||||||
* @param area Die Nutzfläche des Gebäudes
|
|
||||||
* @param conversionFactor Der Umrechnungsfaktor des Energieträgers
|
|
||||||
* @param calorificValueFactor Der Heizwertfaktor des Energieträgers
|
|
||||||
* @returns Den Performance Wert den das Gebäude erzielt hat.
|
|
||||||
*/
|
|
||||||
export function calculateEnergyPerformanceScore(
|
|
||||||
energyConsumption: number[],
|
|
||||||
additionalEnergyConsumption: number[],
|
|
||||||
waterHeatingPortion: number,
|
|
||||||
climateFactors: number[],
|
|
||||||
area: number,
|
|
||||||
conversionFactor: number,
|
|
||||||
calorificValueFactor: number
|
|
||||||
): number {
|
|
||||||
// Alle Werte müssen in kWh umgerechnet werden.
|
|
||||||
let energyConsumptionKWh = energyConsumption.map((x) => convertEnergyConsumptionToKWh(x, conversionFactor, calorificValueFactor))
|
|
||||||
let additionalEnergyConsumptionKWh = additionalEnergyConsumption.map((x) => convertEnergyConsumptionToKWh(x, conversionFactor, calorificValueFactor))
|
|
||||||
let heatingPortion = 1 - (waterHeatingPortion / 100);
|
|
||||||
|
|
||||||
|
|
||||||
return (heatingPortion * (energyConsumptionKWh[0] + additionalEnergyConsumptionKWh[0]) * climateFactors[0] +
|
|
||||||
(waterHeatingPortion / 100) * (energyConsumptionKWh[0] + additionalEnergyConsumptionKWh[0]) +
|
|
||||||
heatingPortion * (energyConsumptionKWh[1] + additionalEnergyConsumptionKWh[1]) * climateFactors[1] +
|
|
||||||
(waterHeatingPortion / 100) * (energyConsumptionKWh[1] + additionalEnergyConsumptionKWh[1]) +
|
|
||||||
heatingPortion * (energyConsumptionKWh[2] + additionalEnergyConsumptionKWh[2]) * climateFactors[2] +
|
|
||||||
(waterHeatingPortion / 100) * (energyConsumptionKWh[2] + additionalEnergyConsumptionKWh[2])) /
|
|
||||||
3 /
|
|
||||||
(area || 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function convertEnergyConsumptionToKWh(consumption: number, conversionFactor: number, calorificValueFactor: number): number {
|
|
||||||
return (consumption * conversionFactor) / calorificValueFactor;
|
|
||||||
}
|
|
||||||
@@ -101,7 +101,7 @@ const schema = JSON.stringify({
|
|||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
button, .button, button[type="button"] {
|
.button {
|
||||||
@apply px-8 py-2 bg-secondary rounded-lg text-white font-medium hover:shadow-lg transition-all hover:underline active:bg-blue-900 text-center;
|
@apply px-8 py-2 bg-secondary rounded-lg text-white font-medium hover:shadow-lg transition-all hover:underline active:bg-blue-900 text-center;
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
|
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 fuelList from "~/components/Ausweis/fuelList";
|
||||||
|
import { BitChecker } from "../BitChecker";
|
||||||
|
|
||||||
export enum AusweisType {
|
export enum AusweisType {
|
||||||
VERBRAUCHSAUSWEIS,
|
VERBRAUCHSAUSWEIS,
|
||||||
@@ -15,40 +19,13 @@ export enum Lueftungskonzept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type Ausweisart = "VA" | "BA" | "VANW";
|
export type Ausweisart = "VA" | "BA" | "VANW";
|
||||||
export type Ausstellgrund = "Vermietung" | "Neubau" | "Verkauf" | "Modernisierung" | "Sonstiges";
|
export type Ausstellgrund =
|
||||||
|
| "Vermietung"
|
||||||
|
| "Neubau"
|
||||||
|
| "Verkauf"
|
||||||
|
| "Modernisierung"
|
||||||
|
| "Sonstiges";
|
||||||
|
|
||||||
class BitChecker {
|
|
||||||
public value: number;
|
|
||||||
|
|
||||||
constructor(number: number) {
|
|
||||||
this.value = number;
|
|
||||||
}
|
|
||||||
|
|
||||||
public isSet(bitIndex: number): boolean {
|
|
||||||
const bitMask = 1 << bitIndex;
|
|
||||||
return (this.value & bitMask) !== 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public set(index: number): number {
|
|
||||||
if (!this.isSet(index)) {
|
|
||||||
this.value += 2 ** index;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public off(index: number) {
|
|
||||||
if (this.isSet(index)) {
|
|
||||||
this.value -= 2 ** index;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public valueOf(): number {
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
export class Verbrauchsausweis {
|
export class Verbrauchsausweis {
|
||||||
@@ -70,7 +47,7 @@ export class Verbrauchsausweis {
|
|||||||
public erstellungsdatum: Date = new Date();
|
public erstellungsdatum: Date = new Date();
|
||||||
public ausstellgrund: Ausstellgrund = "Vermietung";
|
public ausstellgrund: Ausstellgrund = "Vermietung";
|
||||||
|
|
||||||
public energieverbrauch_zeitraum: Date = new Date();
|
public energieverbrauch_zeitraum: Moment = moment();
|
||||||
public energieverbrauch_1_heizquelle_1: number = 0;
|
public energieverbrauch_1_heizquelle_1: number = 0;
|
||||||
public energieverbrauch_2_heizquelle_1: number = 0;
|
public energieverbrauch_2_heizquelle_1: number = 0;
|
||||||
public energieverbrauch_3_heizquelle_1: number = 0;
|
public energieverbrauch_3_heizquelle_1: number = 0;
|
||||||
@@ -98,11 +75,13 @@ export class Verbrauchsausweis {
|
|||||||
public leerstand: number = 0;
|
public leerstand: number = 0;
|
||||||
public images: string[] = [];
|
public images: string[] = [];
|
||||||
|
|
||||||
public versorgungssysteme: number = 0;
|
public versorgungssysteme: boolean[] = BitChecker(0);
|
||||||
public fenster_dach: number = 0;
|
public fenster_dach: boolean[] = BitChecker(0);
|
||||||
public energiequelle_2_nutzung: BitChecker = new BitChecker(0);
|
public energiequelle_2_nutzung: boolean[] = BitChecker(0);
|
||||||
public daemmung: number = 0;
|
public daemmung: boolean[] = BitChecker(0);
|
||||||
public energetische_nutzfläche: number = 0;
|
public get energetische_nutzfläche(): number {
|
||||||
|
return this.wohnflaeche * (this.keller_beheizt ? 1.35 : 1.2);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bedarfsausweis spezifische Eigenschaften
|
* Bedarfsausweis spezifische Eigenschaften
|
||||||
@@ -181,14 +160,24 @@ export class Verbrauchsausweis {
|
|||||||
|
|
||||||
const json = JSON.parse(text.toString());
|
const json = JSON.parse(text.toString());
|
||||||
return json;
|
return json;
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async endEnergieVerbrauch(): Promise<number> {
|
public get primaer_energie_verbrauch(): Promise<number> {
|
||||||
const date = this.energieverbrauch_zeitraum
|
return (async () => {
|
||||||
|
const Endenergieverbrauch = await this.end_energie_verbrauch;
|
||||||
|
|
||||||
|
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
|
||||||
|
|
||||||
|
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
|
public get end_energie_verbrauch(): Promise<number> {
|
||||||
|
return (async () => {
|
||||||
|
const date = this.energieverbrauch_zeitraum;
|
||||||
const klimafaktoren = await getKlimafaktorenClient(
|
const klimafaktoren = await getKlimafaktorenClient(
|
||||||
date,
|
date,
|
||||||
this.objekt_plz
|
this.objekt_plz
|
||||||
@@ -196,46 +185,21 @@ export class Verbrauchsausweis {
|
|||||||
|
|
||||||
// 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 [umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] = [
|
let brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
|
||||||
1, 1, 1, 1,
|
let brennstoff_2 = getHeizwertfaktorClient(this.energietraeger_2, this.energietraeger_einheit_heizquelle_2);
|
||||||
];
|
|
||||||
let [umrechnungsfaktor_1, primaerfaktor_1, heizwertfaktor_1, coe_1] = [
|
|
||||||
1, 1, 1, 1,
|
|
||||||
];
|
|
||||||
if (this.energietraeger_1 && this.energietraeger_einheit_heizquelle_1) {
|
|
||||||
[umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] =
|
|
||||||
await getHeizwertfaktorClient(
|
|
||||||
this.energietraeger_1,
|
|
||||||
this.energietraeger_einheit_heizquelle_1
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.energietraeger_2 && this.energietraeger_einheit_heizquelle_2) {
|
|
||||||
[umrechnungsfaktor_1, primaerfaktor_1, heizwertfaktor_1, coe_1] =
|
|
||||||
await getHeizwertfaktorClient(
|
|
||||||
this.energietraeger_2,
|
|
||||||
this.energietraeger_einheit_heizquelle_2
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let verbrauch_1_kwh =
|
let verbrauch_1_kwh =
|
||||||
(this.energieverbrauch_1_heizquelle_1 * umrechnungsfaktor) /
|
(this.energieverbrauch_1_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
|
||||||
heizwertfaktor;
|
|
||||||
let verbrauch_2_kwh =
|
let verbrauch_2_kwh =
|
||||||
(this.energieverbrauch_2_heizquelle_1 * umrechnungsfaktor) /
|
(this.energieverbrauch_2_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
|
||||||
heizwertfaktor;
|
|
||||||
let verbrauch_3_kwh =
|
let verbrauch_3_kwh =
|
||||||
(this.energieverbrauch_3_heizquelle_1 * umrechnungsfaktor) /
|
(this.energieverbrauch_3_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
|
||||||
heizwertfaktor;
|
|
||||||
let verbrauch_4_kwh =
|
let verbrauch_4_kwh =
|
||||||
(this.energieverbrauch_1_heizquelle_2 * umrechnungsfaktor_1) /
|
(this.energieverbrauch_1_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
|
||||||
heizwertfaktor_1;
|
|
||||||
let verbrauch_5_kwh =
|
let verbrauch_5_kwh =
|
||||||
(this.energieverbrauch_2_heizquelle_2 * umrechnungsfaktor_1) /
|
(this.energieverbrauch_2_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
|
||||||
heizwertfaktor_1;
|
|
||||||
let verbrauch_6_kwh =
|
let verbrauch_6_kwh =
|
||||||
(this.energieverbrauch_3_heizquelle_2 * umrechnungsfaktor_1) /
|
(this.energieverbrauch_3_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
|
||||||
heizwertfaktor_1;
|
|
||||||
|
|
||||||
let warmwasserZuschlag = 0;
|
let warmwasserZuschlag = 0;
|
||||||
let leerstandsZuschlag = 0;
|
let leerstandsZuschlag = 0;
|
||||||
@@ -259,12 +223,14 @@ export class Verbrauchsausweis {
|
|||||||
durchschnittsKlimafaktor;
|
durchschnittsKlimafaktor;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.energiequelle_2_nutzung.isSet(3)) {
|
if (this.energiequelle_2_nutzung[3]) {
|
||||||
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
|
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
|
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
|
||||||
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
|
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
|
||||||
|
|
||||||
let Energieverbrauchskennwert =
|
let Energieverbrauchskennwert =
|
||||||
(anteil_heizung *
|
(anteil_heizung *
|
||||||
(verbrauch_1_kwh + verbrauch_4_kwh) *
|
(verbrauch_1_kwh + verbrauch_4_kwh) *
|
||||||
@@ -284,6 +250,8 @@ export class Verbrauchsausweis {
|
|||||||
3 /
|
3 /
|
||||||
this.energetische_nutzfläche;
|
this.energetische_nutzfläche;
|
||||||
|
|
||||||
|
|
||||||
return Energieverbrauchskennwert;
|
return Energieverbrauchskennwert;
|
||||||
|
})();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
18
src/lib/BitChecker.ts
Normal file
18
src/lib/BitChecker.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
export function BitChecker(initial: number = 0, length: number = 32): boolean[] {
|
||||||
|
const target: boolean[] = new Array(length).fill(false).map((x, i) => {
|
||||||
|
return (initial & (1 << i)) !== 0 ? true : false
|
||||||
|
});
|
||||||
|
return new Proxy(target, {
|
||||||
|
get(target, property) {
|
||||||
|
if (property == "value") {
|
||||||
|
return target.reduce((a, b, i) => a + (b ? 2 ** i : 0), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Reflect.get(target, property);
|
||||||
|
},
|
||||||
|
|
||||||
|
set(target, property, value) {
|
||||||
|
return Reflect.set(target, property, value);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -1,11 +1,19 @@
|
|||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { memoize } from "./Memoization";
|
import { memoize } from "./Memoization";
|
||||||
|
|
||||||
export const getKlimafaktorenClient = memoize<Promise<number[]>>(async (date: Date, zip: string) => {
|
export const getKlimafaktorenClient = memoize<Promise<[number, number, number]>>(async (date: Date, zip: string) => {
|
||||||
const response = await fetch(`/api/klimafaktoren?date=${moment(date).format("YYYY-MM-DD")}&zip=${zip}`);
|
if (!zip || !date) {
|
||||||
|
return [0, 0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`);
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
|
|
||||||
return json;
|
if (!json.success) {
|
||||||
|
return [0, 0, 0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return Object.values(json.data) as [number, number, number];
|
||||||
});
|
});
|
||||||
|
|
||||||
export const getKlimafaktorenServer = memoize(async (date: Date, zip: string) => {
|
export const getKlimafaktorenServer = memoize(async (date: Date, zip: string) => {
|
||||||
|
|||||||
@@ -1,5 +1,23 @@
|
|||||||
import { memoize } from "../Memoization";
|
import fuelList from "~/components/Ausweis/fuelList";
|
||||||
|
|
||||||
export const getHeizwertfaktorClient = memoize<Promise<[number, number, number, number]>>(async function() {
|
export const getHeizwertfaktorClient = function(energietraeger: string, einheit: string): {
|
||||||
return [1,1,1,1];
|
coe: number,
|
||||||
})
|
energietraeger: string,
|
||||||
|
einheit: string,
|
||||||
|
umrechnungsfaktor: number,
|
||||||
|
primärenergiefaktor: number
|
||||||
|
} {
|
||||||
|
for (const fuel of fuelList) {
|
||||||
|
if (fuel.energietraeger == energietraeger && fuel.einheit == einheit) {
|
||||||
|
return fuel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
coe: 0,
|
||||||
|
energietraeger: "",
|
||||||
|
einheit: "",
|
||||||
|
umrechnungsfaktor: 0,
|
||||||
|
primärenergiefaktor: 0
|
||||||
|
};
|
||||||
|
}
|
||||||
16
src/pages/api/ausweis/verbrauchsausweis.ts
Normal file
16
src/pages/api/ausweis/verbrauchsausweis.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import type { APIRoute } from "astro";
|
||||||
|
import { success } from "src/lib/APIResponse";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Erstellt einen Verbrauchsausweis anhand der gegebenen Daten und trägt ihn in die Datenbank ein.
|
||||||
|
* @param param0
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export const post: APIRoute = async ({ request }) => {
|
||||||
|
const body = await request.json();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return success({});
|
||||||
|
}
|
||||||
@@ -4,10 +4,15 @@ import { ActionFailedError, InvalidDataError, MissingPropertyError, error, succe
|
|||||||
import { getClimateFactor } from "src/lib/Klimafaktoren/getClimateFactor";
|
import { getClimateFactor } from "src/lib/Klimafaktoren/getClimateFactor";
|
||||||
|
|
||||||
export const get: APIRoute = async function({ request }) {
|
export const get: APIRoute = async function({ request }) {
|
||||||
const body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1]))
|
let body;
|
||||||
|
try {
|
||||||
|
body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1]))
|
||||||
|
} catch(e) {
|
||||||
|
return error(["Failed to parse URL"]);
|
||||||
|
}
|
||||||
|
|
||||||
if (!body.start || !body.end) {
|
if (!body.date) {
|
||||||
return MissingPropertyError(["start", "end"]);
|
return MissingPropertyError(["date"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
let accuracy = body.accuracy || "months";
|
let accuracy = body.accuracy || "months";
|
||||||
@@ -20,8 +25,8 @@ export const get: APIRoute = async function({ request }) {
|
|||||||
return error(["Invalid ZIP Code, must be 4 or 5 characters long."])
|
return error(["Invalid ZIP Code, must be 4 or 5 characters long."])
|
||||||
}
|
}
|
||||||
|
|
||||||
let start = moment(body.start);
|
let start = moment(body.date);
|
||||||
let end = moment(body.end);
|
let end = moment(body.date).add("2", "years");
|
||||||
|
|
||||||
if (!start.isValid()) {
|
if (!start.isValid()) {
|
||||||
return error(["Invalid start date given."]);
|
return error(["Invalid start date given."]);
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
import BoxWithHeading from '../components/BoxWithHeading.astro';
|
import {BoxWithHeading} from '@ibcornelsen/ui';
|
||||||
import Widget from '../components/Widget.svelte';
|
import Widget from '../components/Widget.svelte';
|
||||||
import Layout from '../layouts/Layout.astro';
|
import Layout from '../layouts/Layout.astro';
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ layout: ../layouts/Layout.astro
|
|||||||
title: Welcher Energieausweis?
|
title: Welcher Energieausweis?
|
||||||
---
|
---
|
||||||
|
|
||||||
import BoxWithHeading from "~/components/BoxWithHeading.astro";
|
import { BoxWithHeading } from "@ibcornelsen/ui";
|
||||||
import Widget from "~/components/Widget.svelte";
|
import Widget from "~/components/Widget.svelte";
|
||||||
|
|
||||||
# Welcher Energieausweis ist der richtige?
|
# Welcher Energieausweis ist der richtige?
|
||||||
@@ -54,14 +54,14 @@ eingehalten werden müssen.
|
|||||||
---
|
---
|
||||||
|
|
||||||
<BoxWithHeading heading="Folgende Dokumente und Informationen werden für den Bedarfsausweis benötigt:">
|
<BoxWithHeading heading="Folgende Dokumente und Informationen werden für den Bedarfsausweis benötigt:">
|
||||||
- Grundriss- und Ansichtspläne sowie Baubeschreibung.
|
- Grundriss- und Ansichtspläne sowie Baubeschreibung. - Die
|
||||||
- Die wärmeübertragenden Umfassngsflächen wie Dach, Außenwand, Fenster,
|
wärmeübertragenden Umfassngsflächen wie Dach, Außenwand, Fenster,
|
||||||
Kellerdecke bzw. Boden werden aus den Plänen ermittelt.
|
Kellerdecke bzw. Boden werden aus den Plänen ermittelt. - Auch das
|
||||||
- Auch das Gebäudevolumen zur Ermittlung der energetischen Gebäudenutzfläche und die
|
Gebäudevolumen zur Ermittlung der energetischen Gebäudenutzfläche und die
|
||||||
verschiedenen Nutzungszonen werden aus den Plänen erhoben.
|
verschiedenen Nutzungszonen werden aus den Plänen erhoben. - Die verwendete
|
||||||
- Die verwendete Heizungsanlage mit den Wärmeübergabekomponenten (Heizkörper,
|
Heizungsanlage mit den Wärmeübergabekomponenten (Heizkörper,
|
||||||
Fußbodenheizung, etc) sowie Energieträger und Kessel werden aus der Baubeschreibung oder
|
Fußbodenheizung, etc) sowie Energieträger und Kessel werden aus der
|
||||||
aus den Angaben des Bauherren herangezogen.
|
Baubeschreibung oder aus den Angaben des Bauherren herangezogen.
|
||||||
</BoxWithHeading>
|
</BoxWithHeading>
|
||||||
|
|
||||||
Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
|
Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
|
||||||
@@ -105,18 +105,17 @@ Anforderungen für Nichtwohngebäude eingehalten werden müssen.
|
|||||||
---
|
---
|
||||||
|
|
||||||
<BoxWithHeading heading="Folgende Dokumente und Informationen werden für den Bedarfsausweis benötigt:">
|
<BoxWithHeading heading="Folgende Dokumente und Informationen werden für den Bedarfsausweis benötigt:">
|
||||||
- Grundriss- und Ansichtspläne sowie Baubeschreibung.
|
- Grundriss- und Ansichtspläne sowie Baubeschreibung. - Die
|
||||||
- Die wärmeübertragenden Umfassngsflächen wie Dach, Außenwand, Fenster,
|
wärmeübertragenden Umfassngsflächen wie Dach, Außenwand, Fenster,
|
||||||
Kellerdecke bzw. Boden werden aus den Plänen ermittelt.
|
Kellerdecke bzw. Boden werden aus den Plänen ermittelt. - Auch das
|
||||||
- Auch das Gebäudevolumen zur Ermittlung der energetischen Gebäudenutzfläche und
|
Gebäudevolumen zur Ermittlung der energetischen Gebäudenutzfläche und die
|
||||||
die verschiedenen Nutzungszonen werden aus den Plänen erhoben.
|
verschiedenen Nutzungszonen werden aus den Plänen erhoben. - Die verwendete
|
||||||
- Die verwendete Heizungsanlage mit den Wärmeübergabekomponenten (Heizkörper,
|
Heizungsanlage mit den Wärmeübergabekomponenten (Heizkörper,
|
||||||
Fußbodenheizung, etc) sowie Energieträger und Kessel werden aus der
|
Fußbodenheizung, etc) sowie Energieträger und Kessel werden aus der
|
||||||
Baubeschreibung oder aus den Angaben des Bauherren herangezogen.
|
Baubeschreibung oder aus den Angaben des Bauherren herangezogen. -
|
||||||
- Anlagentechnik zu Kühlung und Lüftung der entsprechenden Nutzungszonen müssen
|
Anlagentechnik zu Kühlung und Lüftung der entsprechenden Nutzungszonen
|
||||||
definiert sein.
|
müssen definiert sein. - Die verwendete Beleuchtung der verschiedenen
|
||||||
- Die verwendete Beleuchtung der verschiedenen Nutzungszonen wird ebenfalls
|
Nutzungszonen wird ebenfalls herangezogen
|
||||||
herangezogen
|
|
||||||
</BoxWithHeading>
|
</BoxWithHeading>
|
||||||
|
|
||||||
Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
|
Sollten Sie den Bedarfsausweis nur für Vermietung und Verkauf benötigen, dann
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/** @type {import('tailwindcss').Config} */
|
/** @type {import('tailwindcss').Config} */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
|
content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}","./node_modules/@ibcornelsen/ui/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
|
||||||
theme: {
|
theme: {
|
||||||
extend: {
|
extend: {
|
||||||
colors: {
|
colors: {
|
||||||
|
|||||||
Reference in New Issue
Block a user