Bildupload - UI - Globaler Ausweis
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import { Moment } from "moment";
|
||||
import { getKlimafaktorenClient } from "../Klimafaktoren";
|
||||
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
|
||||
import moment from "moment";
|
||||
import fuelList from "~/components/Ausweis/fuelList";
|
||||
import { BitChecker } from "../BitChecker";
|
||||
|
||||
export enum AusweisType {
|
||||
VERBRAUCHSAUSWEIS,
|
||||
@@ -15,40 +19,13 @@ export enum Lueftungskonzept {
|
||||
}
|
||||
|
||||
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 {
|
||||
@@ -70,7 +47,7 @@ export class Verbrauchsausweis {
|
||||
public erstellungsdatum: Date = new Date();
|
||||
public ausstellgrund: Ausstellgrund = "Vermietung";
|
||||
|
||||
public energieverbrauch_zeitraum: Date = new Date();
|
||||
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;
|
||||
@@ -98,11 +75,13 @@ export class Verbrauchsausweis {
|
||||
public leerstand: number = 0;
|
||||
public images: string[] = [];
|
||||
|
||||
public versorgungssysteme: number = 0;
|
||||
public fenster_dach: number = 0;
|
||||
public energiequelle_2_nutzung: BitChecker = new BitChecker(0);
|
||||
public daemmung: number = 0;
|
||||
public energetische_nutzfläche: 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 get energetische_nutzfläche(): number {
|
||||
return this.wohnflaeche * (this.keller_beheizt ? 1.35 : 1.2);
|
||||
};
|
||||
|
||||
/**
|
||||
* Bedarfsausweis spezifische Eigenschaften
|
||||
@@ -181,109 +160,98 @@ export class Verbrauchsausweis {
|
||||
|
||||
const json = JSON.parse(text.toString());
|
||||
return json;
|
||||
|
||||
} catch(e) {
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public async endEnergieVerbrauch(): Promise<number> {
|
||||
const date = this.energieverbrauch_zeitraum
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
date,
|
||||
this.objekt_plz
|
||||
);
|
||||
public get primaer_energie_verbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const Endenergieverbrauch = await this.end_energie_verbrauch;
|
||||
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
let [umrechnungsfaktor, primaerfaktor, heizwertfaktor, coe] = [
|
||||
1, 1, 1, 1,
|
||||
];
|
||||
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
|
||||
);
|
||||
}
|
||||
const brennstoff_1 = 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
|
||||
);
|
||||
}
|
||||
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
|
||||
})();
|
||||
}
|
||||
|
||||
let verbrauch_1_kwh =
|
||||
(this.energieverbrauch_1_heizquelle_1 * umrechnungsfaktor) /
|
||||
heizwertfaktor;
|
||||
let verbrauch_2_kwh =
|
||||
(this.energieverbrauch_2_heizquelle_1 * umrechnungsfaktor) /
|
||||
heizwertfaktor;
|
||||
let verbrauch_3_kwh =
|
||||
(this.energieverbrauch_3_heizquelle_1 * umrechnungsfaktor) /
|
||||
heizwertfaktor;
|
||||
let verbrauch_4_kwh =
|
||||
(this.energieverbrauch_1_heizquelle_2 * umrechnungsfaktor_1) /
|
||||
heizwertfaktor_1;
|
||||
let verbrauch_5_kwh =
|
||||
(this.energieverbrauch_2_heizquelle_2 * umrechnungsfaktor_1) /
|
||||
heizwertfaktor_1;
|
||||
let verbrauch_6_kwh =
|
||||
(this.energieverbrauch_3_heizquelle_2 * umrechnungsfaktor_1) /
|
||||
heizwertfaktor_1;
|
||||
public get end_energie_verbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const date = this.energieverbrauch_zeitraum;
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
date,
|
||||
this.objekt_plz
|
||||
);
|
||||
|
||||
let warmwasserZuschlag = 0;
|
||||
let leerstandsZuschlag = 0;
|
||||
let kuehlungsZuschlag = 0;
|
||||
if (this.anteil_warmwasser_1 == 0) {
|
||||
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
|
||||
}
|
||||
// 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);
|
||||
|
||||
if (this.leerstand > 0) {
|
||||
let durchschnittsKlimafaktor =
|
||||
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
|
||||
let verbrauch_1_kwh =
|
||||
(this.energieverbrauch_1_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
|
||||
let verbrauch_2_kwh =
|
||||
(this.energieverbrauch_2_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
|
||||
let verbrauch_3_kwh =
|
||||
(this.energieverbrauch_3_heizquelle_1 * brennstoff_1.umrechnungsfaktor)
|
||||
let verbrauch_4_kwh =
|
||||
(this.energieverbrauch_1_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
|
||||
let verbrauch_5_kwh =
|
||||
(this.energieverbrauch_2_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
|
||||
let verbrauch_6_kwh =
|
||||
(this.energieverbrauch_3_heizquelle_2 * brennstoff_2.umrechnungsfaktor)
|
||||
|
||||
leerstandsZuschlag =
|
||||
((verbrauch_1_kwh +
|
||||
verbrauch_2_kwh +
|
||||
verbrauch_3_kwh +
|
||||
verbrauch_4_kwh +
|
||||
verbrauch_5_kwh +
|
||||
verbrauch_6_kwh) *
|
||||
(this.leerstand / 100)) /
|
||||
durchschnittsKlimafaktor;
|
||||
}
|
||||
let warmwasserZuschlag = 0;
|
||||
let leerstandsZuschlag = 0;
|
||||
let kuehlungsZuschlag = 0;
|
||||
if (this.anteil_warmwasser_1 == 0) {
|
||||
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
|
||||
}
|
||||
|
||||
if (this.energiequelle_2_nutzung.isSet(3)) {
|
||||
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
|
||||
}
|
||||
if (this.leerstand > 0) {
|
||||
let durchschnittsKlimafaktor =
|
||||
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
|
||||
|
||||
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
|
||||
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
|
||||
let Energieverbrauchskennwert =
|
||||
(anteil_heizung *
|
||||
(verbrauch_1_kwh + verbrauch_4_kwh) *
|
||||
klimafaktoren[0] +
|
||||
anteil_warmwasser * (verbrauch_1_kwh + verbrauch_4_kwh) +
|
||||
anteil_heizung *
|
||||
(verbrauch_2_kwh + verbrauch_5_kwh) *
|
||||
klimafaktoren[1] +
|
||||
anteil_warmwasser * (verbrauch_2_kwh + verbrauch_5_kwh) +
|
||||
anteil_heizung *
|
||||
(verbrauch_3_kwh + verbrauch_6_kwh) *
|
||||
klimafaktoren[2] +
|
||||
anteil_warmwasser * (verbrauch_3_kwh + verbrauch_6_kwh) +
|
||||
warmwasserZuschlag +
|
||||
leerstandsZuschlag +
|
||||
kuehlungsZuschlag) /
|
||||
3 /
|
||||
this.energetische_nutzfläche;
|
||||
leerstandsZuschlag =
|
||||
((verbrauch_1_kwh +
|
||||
verbrauch_2_kwh +
|
||||
verbrauch_3_kwh +
|
||||
verbrauch_4_kwh +
|
||||
verbrauch_5_kwh +
|
||||
verbrauch_6_kwh) *
|
||||
(this.leerstand / 100)) /
|
||||
durchschnittsKlimafaktor;
|
||||
}
|
||||
|
||||
return Energieverbrauchskennwert;
|
||||
if (this.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 Energieverbrauchskennwert =
|
||||
(anteil_heizung *
|
||||
(verbrauch_1_kwh + verbrauch_4_kwh) *
|
||||
klimafaktoren[0] +
|
||||
anteil_warmwasser * (verbrauch_1_kwh + verbrauch_4_kwh) +
|
||||
anteil_heizung *
|
||||
(verbrauch_2_kwh + verbrauch_5_kwh) *
|
||||
klimafaktoren[1] +
|
||||
anteil_warmwasser * (verbrauch_2_kwh + verbrauch_5_kwh) +
|
||||
anteil_heizung *
|
||||
(verbrauch_3_kwh + verbrauch_6_kwh) *
|
||||
klimafaktoren[2] +
|
||||
anteil_warmwasser * (verbrauch_3_kwh + verbrauch_6_kwh) +
|
||||
warmwasserZuschlag +
|
||||
leerstandsZuschlag +
|
||||
kuehlungsZuschlag) /
|
||||
3 /
|
||||
this.energetische_nutzfläche;
|
||||
|
||||
|
||||
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 { memoize } from "./Memoization";
|
||||
|
||||
export const getKlimafaktorenClient = memoize<Promise<number[]>>(async (date: Date, zip: string) => {
|
||||
const response = await fetch(`/api/klimafaktoren?date=${moment(date).format("YYYY-MM-DD")}&zip=${zip}`);
|
||||
export const getKlimafaktorenClient = memoize<Promise<[number, number, number]>>(async (date: Date, zip: string) => {
|
||||
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();
|
||||
|
||||
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) => {
|
||||
|
||||
@@ -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() {
|
||||
return [1,1,1,1];
|
||||
})
|
||||
export const getHeizwertfaktorClient = function(energietraeger: string, einheit: string): {
|
||||
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
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user