Überarbeitung Verbrauchsausweis+ Berechnung
This commit is contained in:
67
README.md
67
README.md
@@ -1,17 +1,10 @@
|
||||
[![Contributors][contributors-shield]][contributors-url]
|
||||
[![Forks][forks-shield]][forks-url]
|
||||
[![Stargazers][stars-shield]][stars-url]
|
||||
[![Issues][issues-shield]][issues-url]
|
||||
[![MIT License][license-shield]][license-url]
|
||||
|
||||
<!-- PROJECT LOGO -->
|
||||
<br />
|
||||
<div align="center">
|
||||
<a href="https://github.com/IBCornelsen/database">
|
||||
<img src="images/logo.png" alt="Logo" width="80" height="80">
|
||||
<a href="https://github.com/IBCornelsen/online-energieausweis">
|
||||
<img src="public/images/header/logo-big.png" alt="Logo" width="240" height="80">
|
||||
</a>
|
||||
|
||||
<h3 align="center">IBC Online Energieausweis</h3>
|
||||
<h3 align="center">IBCornelsen Online Energieausweis</h3>
|
||||
|
||||
<p align="center">
|
||||
Online Energieausweis erstellen - IBCornelsen
|
||||
@@ -19,11 +12,11 @@
|
||||
<a href="https://docs.ibcornelsen.de/storage/"><strong>Dokumentation »</strong></a>
|
||||
<br />
|
||||
<br />
|
||||
<a href="https://github.com/IBCornelsen/database">Demo</a>
|
||||
<a href="https://github.com/IBCornelsen/online-energieausweis">Demo</a>
|
||||
·
|
||||
<a href="https://github.com/IBCornelsen/database/issues">Bug gefunden?</a>
|
||||
<a href="https://github.com/IBCornelsen/online-energieausweis/issues">Bug gefunden?</a>
|
||||
·
|
||||
<a href="https://github.com/IBCornelsen/database/issues">Feature Anfordern</a>
|
||||
<a href="https://github.com/IBCornelsen/online-energieausweis/issues">Feature Anfordern</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -38,13 +31,9 @@
|
||||
|
||||
## Beschreibung
|
||||
|
||||
Dies ist das Repository für die Datenbank des IBCornelsen. Eine Demo kann direkt über GitHub heruntergeladen und mit **Docker** gestartet werden.
|
||||
Dies ist das Repository für das Online-Energieausweis Projekt des IBCornelsen. Eine Demo kann direkt über GitHub heruntergeladen und mit **Docker** gestartet werden.
|
||||
|
||||
Momentan arbeiten wir an der Umsetzung einer neuen, verbesserten Datenbankstruktur die aktuelle Probleme mit Hinsicht auf die Skalierung unserer Architektur lösen wird.
|
||||
|
||||
Hier eine Veranschaulichung:
|
||||
|
||||

|
||||
Momentan arbeiten wir an der generellen Struktur, um eine problemlose Skalierung unserer Services gewährleisten zu können.
|
||||
|
||||
### Anforderungen
|
||||
|
||||
@@ -54,32 +43,33 @@ Für dieses Projekt benötigst du:
|
||||
|
||||
* docker
|
||||
* Installationsanleitungen für **docker** kannst du [hier](https://docs.docker.com/engine/install/) finden.
|
||||
* NodeJS
|
||||
* Downloads für Node stehen [hier](https://nodejs.org/en) zur Verfügung.
|
||||
* Einen Package Manger deiner Wahl, du kannst **NPM**, **pNPM** oder auch **Yarn** verwenden. Wir empfehlen **pNPM** da er in den meisten Situationen schneller ist und dabei das gleiche Feature Set wie **NPM** bietet.
|
||||
* Einen Package Manger deiner Wahl, du kannst **NPM**, **pNPM** oder auch **Yarn** verwenden. Wir empfehlen allerdings **bun** aufgrund der verbesserten Geschwindigkeit und dem gelieferten Feature Set, da **bun** sowohl einen Package Manager als auch einen Task Runner beinhaltet.
|
||||
* Installationsanleitungen für **bun** kannst du [hier](https://bun.sh/) finden.
|
||||
|
||||
### Installation
|
||||
|
||||
1. Klone das Repository
|
||||
|
||||
```sh
|
||||
git clone https://github.com/IBCornelsen/database.git
|
||||
```
|
||||
```sh
|
||||
git clone https://github.com/IBCornelsen/online-energieausweis
|
||||
```
|
||||
|
||||
2. Führe `docker-compose` aus.
|
||||
|
||||
```bash
|
||||
docker-compose up --build
|
||||
```
|
||||
```bash
|
||||
docker-compose up --build
|
||||
```
|
||||
|
||||
3. Öffne `localhost:3000` in deinem Browser.
|
||||
|
||||
## Nächste Schritte
|
||||
|
||||
* [ ] Verteilte Datenbankstruktur
|
||||
* [ ] Funktionierender Checkout Flow
|
||||
* [ ] Performance Optimierungen
|
||||
* [ ] Umstieg auf PostgreSQL
|
||||
* [ ] Umzug der alten Daten
|
||||
* [ ] Automatische Tests
|
||||
* [ ] Dokumentation
|
||||
|
||||
See the [open issues](https://github.com/IBCornelsen/database/issues) for a full list of proposed features (and known issues).
|
||||
Siehe alle [offenen issues](https://github.com/IBCornelsen/online-energieausweis/issues) für eine Liste der vorgeschlagenen Features (und bekannten Probleme).
|
||||
|
||||
## Beiträge zu unserer Arbeit
|
||||
|
||||
@@ -99,15 +89,4 @@ Veröffentlicht unter der GPL-3.0 Lizenz. Siehe `LICENSE` für mehr Information.
|
||||
|
||||
IBCornelsen - [info@ibcornelsen.de](mailto://info@ibcornelsen.de)
|
||||
|
||||
Organisation: [https://github.com/IBCornelsen/database](https://github.com/IBCornelsen/database)
|
||||
|
||||
[contributors-shield]: https://img.shields.io/github/contributors/IBCornelsen/database.svg?style=for-the-badge
|
||||
[contributors-url]: https://github.com/IBCornelsen/database/graphs/contributors
|
||||
[forks-shield]: https://img.shields.io/github/forks/IBCornelsen/database.svg?style=for-the-badge
|
||||
[forks-url]: https://github.com/IBCornelsen/database/network/members
|
||||
[stars-shield]: https://img.shields.io/github/stars/IBCornelsen/database.svg?style=for-the-badge
|
||||
[stars-url]: https://github.com/IBCornelsen/database/stargazers
|
||||
[issues-shield]: https://img.shields.io/github/issues/IBCornelsen/database.svg?style=for-the-badge
|
||||
[issues-url]: https://github.com/IBCornelsen/database/issues
|
||||
[license-shield]: https://img.shields.io/github/license/IBCornelsen/database.svg?style=for-the-badge
|
||||
[license-url]: https://github.com/IBCornelsen/database/blob/master/LICENSE
|
||||
Organisation: [https://github.com/IBCornelsen](https://github.com/IBCornelsen)
|
||||
112
package.json
112
package.json
@@ -1,58 +1,58 @@
|
||||
{
|
||||
"name": "online-energieausweis",
|
||||
"version": "0.0.1",
|
||||
"license": "GPL V3.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "bun --bun astro dev",
|
||||
"build": "bun --bun astro build",
|
||||
"preview": "bun --bun astro preview",
|
||||
"astro": "astro",
|
||||
"test:e2e": "cypress run",
|
||||
"test:unit": "vitest",
|
||||
"format": "prettier --write .",
|
||||
"build:production": "astro build && bun --bun server.js",
|
||||
"i18n:generate": "bunx astro-i18next generate"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^0.18.4",
|
||||
"@astrojs/node": "^5.1.4",
|
||||
"@astrojs/svelte": "^2.2.0",
|
||||
"@astrojs/tailwind": "^3.1.3",
|
||||
"@ibcornelsen/ui": "^0.0.2",
|
||||
"@mollie/api-client": "^3.7.0",
|
||||
"astro": "^2.5.1",
|
||||
"astro-i18next": "1.0.0-beta.21",
|
||||
"cookiejs": "^2.1.2",
|
||||
"esbuild": "^0.18.17",
|
||||
"express": "^4.18.2",
|
||||
"flag-icons": "^6.9.2",
|
||||
"i18next": "^23.4.1",
|
||||
"i18next-fs-backend": "^2.1.5",
|
||||
"i18next-http-backend": "^2.2.1",
|
||||
"jimp": "^0.22.8",
|
||||
"jwt-simple": "^0.5.6",
|
||||
"katex": "^0.16.7",
|
||||
"knex": "^2.4.2",
|
||||
"moment": "^2.29.4",
|
||||
"pg": "^8.11.0",
|
||||
"sass": "^1.62.1",
|
||||
"svelte": "^3.59.1",
|
||||
"svelte-preprocess": "^5.0.3",
|
||||
"tailwindcss": "^3.3.2",
|
||||
"uuid": "^9.0.0",
|
||||
"vite-tsconfig-paths": "^4.2.0",
|
||||
"zod": "^3.21.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/uuid": "^9.0.1",
|
||||
"@typescript-eslint/eslint-plugin": "^5.59.6",
|
||||
"@typescript-eslint/parser": "^5.59.6",
|
||||
"eslint": "~8.15.0",
|
||||
"eslint-config-prettier": "8.1.0",
|
||||
"prettier": "^2.8.8",
|
||||
"typescript": "^4.9.5",
|
||||
"vitest": "^0.29.8"
|
||||
}
|
||||
"name": "online-energieausweis",
|
||||
"version": "0.0.1",
|
||||
"license": "GPL V3.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "bun --bun astro dev",
|
||||
"build": "bun --bun astro build",
|
||||
"preview": "bun --bun astro preview",
|
||||
"astro": "astro",
|
||||
"test:e2e": "cypress run",
|
||||
"test:unit": "bun test",
|
||||
"format": "prettier --write .",
|
||||
"build:production": "astro build && bun --bun server.js",
|
||||
"i18n:generate": "bunx astro-i18next generate"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@astrojs/mdx": "^0.18.4",
|
||||
"@astrojs/node": "^5.1.4",
|
||||
"@astrojs/svelte": "^2.2.0",
|
||||
"@astrojs/tailwind": "^3.1.3",
|
||||
"@ibcornelsen/ui": "^0.0.2",
|
||||
"@mollie/api-client": "^3.7.0",
|
||||
"astro": "^2.5.1",
|
||||
"astro-i18next": "1.0.0-beta.21",
|
||||
"bun": "^1.0.2",
|
||||
"cookiejs": "^2.1.2",
|
||||
"esbuild": "^0.18.17",
|
||||
"express": "^4.18.2",
|
||||
"flag-icons": "^6.9.2",
|
||||
"i18next": "^23.4.1",
|
||||
"i18next-fs-backend": "^2.1.5",
|
||||
"i18next-http-backend": "^2.2.1",
|
||||
"jimp": "^0.22.8",
|
||||
"jwt-simple": "^0.5.6",
|
||||
"katex": "^0.16.7",
|
||||
"knex": "^2.4.2",
|
||||
"moment": "^2.29.4",
|
||||
"pg": "^8.11.0",
|
||||
"sass": "^1.62.1",
|
||||
"svelte": "^3.59.1",
|
||||
"svelte-preprocess": "^5.0.3",
|
||||
"tailwindcss": "^3.3.2",
|
||||
"uuid": "^9.0.0",
|
||||
"vite-tsconfig-paths": "^4.2.0",
|
||||
"zod": "^3.21.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/uuid": "^9.0.1",
|
||||
"@typescript-eslint/eslint-plugin": "^5.59.6",
|
||||
"@typescript-eslint/parser": "^5.59.6",
|
||||
"eslint": "~8.15.0",
|
||||
"eslint-config-prettier": "8.1.0",
|
||||
"prettier": "^2.8.8",
|
||||
"typescript": "^4.9.5"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
let translation_2 = 0;
|
||||
$: {
|
||||
(async () => {
|
||||
const endEnergieVerbrauch = (await ausweis.end_energie_verbrauch);
|
||||
const primaerEnergieVerbrauch = (await ausweis.primaer_energie_verbrauch);
|
||||
const endEnergieVerbrauch = (await ausweis.endEnergieVerbrauch);
|
||||
const primaerEnergieVerbrauch = (await ausweis.primaerEnergieVerbrauch);
|
||||
translation_1 = Math.max(0, Math.min(100, endEnergieVerbrauch / maxPerformance * 100))
|
||||
translation_2 = Math.max(0, Math.min(100, primaerEnergieVerbrauch / maxPerformance * 100))
|
||||
})()
|
||||
|
||||
@@ -32,11 +32,6 @@ export function getAusweis(ausweisart: Ausweisart, initializer?: Ausweis): Auswe
|
||||
} else {
|
||||
throw new Error("Unbekannte Ausweisart.");
|
||||
}
|
||||
|
||||
if (initializer) {
|
||||
ausweis.ausstellgrund = initializer.ausstellgrund;
|
||||
ausweis.ausweisart = initializer.ausweisart;
|
||||
}
|
||||
|
||||
return ausweis;
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import moment from "moment";
|
||||
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 {
|
||||
public ausweisart: Ausweisart = "VA";
|
||||
@@ -154,8 +152,8 @@ export class Bedarfsausweis {
|
||||
}
|
||||
}
|
||||
|
||||
public get primaer_energie_verbrauch(): number {
|
||||
const Endenergieverbrauch = this.end_energie_verbrauch;
|
||||
public get primaerEnergieBedarf(): number {
|
||||
const Endenergieverbrauch = this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktorClient(
|
||||
this.energietraeger_1,
|
||||
@@ -165,7 +163,7 @@ export class Bedarfsausweis {
|
||||
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
|
||||
}
|
||||
|
||||
public get end_energie_verbrauch(): number {
|
||||
public get endEnergieVerbrauch(): number {
|
||||
let dach_u_wert = 1 / (1 / this.dach_daemmung / 0.04);
|
||||
let aussenwand_u_wert = 1 / (1 / this.aussenwand_daemmung / 0.04);
|
||||
let fussboden_u_wert = 1 / (1 / this.boden_daemmung / 0.04);
|
||||
|
||||
@@ -1,34 +1,46 @@
|
||||
import { getKlimafaktorenClient } from "../Klimafaktoren";
|
||||
import { getHeizwertfaktorClient } from "../server/Heizwertfaktor";
|
||||
import { Ausstellgrund, Ausweisart } from "./types";
|
||||
import { Energiekennwerte } from "../Energiekennwerte";
|
||||
import { Gebaeude } from "../Gebaeude";
|
||||
import { User } from "#lib/User";
|
||||
|
||||
export class Verbrauchsausweis {
|
||||
public ausweisart: Ausweisart = "VA";
|
||||
public ausstellgrund: Ausstellgrund = "Vermietung";
|
||||
public warmwasser_enthalten: boolean = true;
|
||||
public id?: number;
|
||||
public uid?: string;
|
||||
public baujahr_anlage: number[] = [];
|
||||
public gebaeude_stammdaten: Gebaeude = new Gebaeude();
|
||||
public benutzer?: User;
|
||||
public rechnung?: any;
|
||||
public erstellungsdatum: Date = new Date();
|
||||
public ausstellgrund: Ausstellgrund = "Sonstiges";
|
||||
public registriernummer: string = "";
|
||||
public erledigt: boolean = false;
|
||||
public baujahr_heizung: number[] = [];
|
||||
public zusaetzliche_heizquelle: boolean = false;
|
||||
public brennstoff_1: string = "Erdgas";
|
||||
public einheit_1: string = "kWh";
|
||||
public brennstoff_2: string = "Erdgas";
|
||||
public einheit_2: string = "kWh";
|
||||
public startdatum: Date = new Date();
|
||||
public enddatum: Date = new Date();
|
||||
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 warmwasser_enthalten: boolean = false;
|
||||
public anteil_warmwasser_1: number = 0;
|
||||
public anteil_warmwasser_2: number = 0;
|
||||
|
||||
public get energetische_nutzfläche(): number {
|
||||
return (
|
||||
this.gebaeude.wohnflaeche *
|
||||
(this.gebaeude.keller_beheizt ? 1.35 : 1.2)
|
||||
this.gebaeude_stammdaten.wohnflaeche *
|
||||
(this.gebaeude_stammdaten.keller_beheizt ? 1.35 : 1.2)
|
||||
);
|
||||
}
|
||||
|
||||
public regnummer?: string;
|
||||
|
||||
public kennwerte: Energiekennwerte = new Energiekennwerte();
|
||||
public gebaeude: Gebaeude = new Gebaeude();
|
||||
|
||||
public constructor(initializer?: Verbrauchsausweis) {
|
||||
if (initializer) {
|
||||
this.ausweisart = initializer.ausweisart;
|
||||
this.kennwerte = initializer.kennwerte;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static fromBase64(base64: string): Verbrauchsausweis | null {
|
||||
@@ -42,59 +54,59 @@ export class Verbrauchsausweis {
|
||||
}
|
||||
}
|
||||
|
||||
public get primaer_energie_verbrauch(): Promise<number> {
|
||||
public get primaerEnergieBedarf(): Promise<number> {
|
||||
return (async () => {
|
||||
const Endenergieverbrauch = await this.end_energie_verbrauch;
|
||||
const Endenergieverbrauch = await this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktorClient(
|
||||
this.kennwerte.energietraeger_1,
|
||||
this.kennwerte.einheit_1
|
||||
this.brennstoff_1,
|
||||
this.einheit_1
|
||||
);
|
||||
|
||||
return Endenergieverbrauch * brennstoff_1.primärenergiefaktor;
|
||||
})();
|
||||
}
|
||||
|
||||
public get end_energie_verbrauch(): Promise<number> {
|
||||
public get endEnergieVerbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const date = this.kennwerte.zeitraum;
|
||||
const date = this.startdatum;
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
date,
|
||||
this.gebaeude.plz
|
||||
this.gebaeude_stammdaten.plz
|
||||
);
|
||||
|
||||
// Endenergieverbrauch
|
||||
// Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden.
|
||||
let brennstoff_1 = getHeizwertfaktorClient(
|
||||
this.kennwerte.energietraeger_1,
|
||||
this.kennwerte.einheit_1
|
||||
this.brennstoff_1,
|
||||
this.einheit_1
|
||||
);
|
||||
let brennstoff_2 = getHeizwertfaktorClient(
|
||||
this.kennwerte.energietraeger_2,
|
||||
this.kennwerte.einheit_2
|
||||
this.brennstoff_2,
|
||||
this.einheit_2
|
||||
);
|
||||
|
||||
let verbrauch_1_kwh =
|
||||
this.kennwerte.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
|
||||
this.verbrauch_1 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_2_kwh =
|
||||
this.kennwerte.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
|
||||
this.verbrauch_2 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_3_kwh =
|
||||
this.kennwerte.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
|
||||
this.verbrauch_3 * brennstoff_1.umrechnungsfaktor;
|
||||
let verbrauch_4_kwh =
|
||||
this.kennwerte.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
|
||||
this.verbrauch_4 * brennstoff_2.umrechnungsfaktor;
|
||||
let verbrauch_5_kwh =
|
||||
this.kennwerte.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
|
||||
this.verbrauch_5 * brennstoff_2.umrechnungsfaktor;
|
||||
let verbrauch_6_kwh =
|
||||
this.kennwerte.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
|
||||
this.verbrauch_6 * brennstoff_2.umrechnungsfaktor;
|
||||
|
||||
let warmwasserZuschlag = 0;
|
||||
let leerstandsZuschlag = 0;
|
||||
let kuehlungsZuschlag = 0;
|
||||
if (this.kennwerte.anteil_warmwasser_1 == 0) {
|
||||
if (this.anteil_warmwasser_1 == 0) {
|
||||
warmwasserZuschlag = 20 * this.energetische_nutzfläche * 3;
|
||||
}
|
||||
|
||||
if (this.gebaeude.leerstand > 0) {
|
||||
if (this.gebaeude_stammdaten.leerstand > 0) {
|
||||
let durchschnittsKlimafaktor =
|
||||
klimafaktoren.reduce((a, b) => a + b, 0) / 3;
|
||||
|
||||
@@ -105,16 +117,16 @@ export class Verbrauchsausweis {
|
||||
verbrauch_4_kwh +
|
||||
verbrauch_5_kwh +
|
||||
verbrauch_6_kwh) *
|
||||
(this.gebaeude.leerstand / 100)) /
|
||||
(this.gebaeude_stammdaten.leerstand / 100)) /
|
||||
durchschnittsKlimafaktor;
|
||||
}
|
||||
|
||||
if (this.gebaeude.energiequelle_2_nutzung[3]) {
|
||||
if (this.gebaeude_stammdaten.energiequelle_2_nutzung[3]) {
|
||||
kuehlungsZuschlag = 6 * this.energetische_nutzfläche * 3;
|
||||
}
|
||||
|
||||
let anteil_heizung = 1 - this.kennwerte.anteil_warmwasser_1 / 100;
|
||||
let anteil_warmwasser = this.kennwerte.anteil_warmwasser_1 / 100;
|
||||
let anteil_heizung = 1 - this.anteil_warmwasser_1 / 100;
|
||||
let anteil_warmwasser = this.anteil_warmwasser_1 / 100;
|
||||
|
||||
let Energieverbrauchskennwert =
|
||||
(anteil_heizung *
|
||||
|
||||
@@ -148,9 +148,9 @@ export class VerbrauchsausweisGewerbe {
|
||||
}
|
||||
}
|
||||
|
||||
public get primaer_energie_verbrauch(): Promise<number> {
|
||||
public get primaerEnergieBedarf(): Promise<number> {
|
||||
return (async () => {
|
||||
const Endenergieverbrauch = await this.end_energie_verbrauch;
|
||||
const Endenergieverbrauch = await this.endEnergieVerbrauch;
|
||||
|
||||
const brennstoff_1 = getHeizwertfaktorClient(this.energietraeger_1, this.energietraeger_einheit_heizquelle_1);
|
||||
|
||||
@@ -158,7 +158,7 @@ export class VerbrauchsausweisGewerbe {
|
||||
})();
|
||||
}
|
||||
|
||||
public get end_energie_verbrauch(): Promise<number> {
|
||||
public get endEnergieVerbrauch(): Promise<number> {
|
||||
return (async () => {
|
||||
const date = this.energieverbrauch_zeitraum;
|
||||
const klimafaktoren = await getKlimafaktorenClient(
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,12 @@ export const getKlimafaktorenClient = memoize<Promise<[number, number, number]>>
|
||||
return [0, 0, 0];
|
||||
}
|
||||
|
||||
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`);
|
||||
const response = await fetch(`/api/klimafaktor?date=${moment(date).format("YYYY-MM-DD")}&accuracy=years&zip=${zip}`, {
|
||||
method: "GET",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
});
|
||||
const json = await response.json();
|
||||
|
||||
if (!json.success) {
|
||||
|
||||
9
src/lib/client/fetch.ts
Normal file
9
src/lib/client/fetch.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
export async function fetch(resourceUri: string, options?: RequestInit): Promise<any> {
|
||||
const response = await fetch(`/api/${resourceUri}`, options);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Fehler beim Abrufen der Daten.");
|
||||
}
|
||||
|
||||
return response.json();
|
||||
}
|
||||
@@ -1,3 +1,5 @@
|
||||
export async function getKlimafaktorenServer(date: Date, zip: string) {
|
||||
export async function getKlimafaktorenServer(date: Date, zip: string, accuracy: "months" | "years" = "months"): Promise<number[] | null> {
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
21
src/lib/server/fetch.ts
Normal file
21
src/lib/server/fetch.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
/**
|
||||
* Dies ist die Server-Side Implementierung von fetch, die Daten werden direkt vom Server abgerufen.
|
||||
* Dadurch können unnötige Requests vermieden werden.
|
||||
* @date 9/20/2023 - 11:33:30 AM
|
||||
*
|
||||
* @export
|
||||
* @async
|
||||
* @param {string} resourceUri
|
||||
* @param {?RequestInit} [options]
|
||||
* @returns {Promise<any>}
|
||||
*/
|
||||
export async function fetch(resourceUri: string, options?: RequestInit): Promise<any> {
|
||||
const response = await fetch(`http://localhost:3000/api/${resourceUri}`, options);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Fehler beim Abrufen der Daten.");
|
||||
}
|
||||
|
||||
return response.json();
|
||||
}
|
||||
@@ -3,30 +3,26 @@ import moment from "moment";
|
||||
import { ActionFailedError, InvalidDataError, MissingPropertyError, error, success } from "src/lib/APIResponse";
|
||||
import { getClimateFactor } from "src/lib/Klimafaktoren/getClimateFactor";
|
||||
|
||||
export const get: APIRoute = async function({ request }) {
|
||||
let body;
|
||||
try {
|
||||
body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1]))
|
||||
} catch(e) {
|
||||
return error(["Failed to parse URL"]);
|
||||
}
|
||||
export const get: APIRoute = async function({ url }) {
|
||||
const body = url.searchParams;
|
||||
let zip = body.get("zip");
|
||||
|
||||
if (!body.date) {
|
||||
if (!body.get("date")) {
|
||||
return MissingPropertyError(["date"]);
|
||||
}
|
||||
|
||||
let accuracy = body.accuracy || "months";
|
||||
let accuracy = body.get("accuracy") || "months";
|
||||
|
||||
if (accuracy !== "months" && accuracy !== "years") {
|
||||
return error(["Accuracy must be either 'months' or 'years'."])
|
||||
}
|
||||
|
||||
if (!body.zip) {
|
||||
if (!zip) {
|
||||
return error(["Invalid ZIP Code, must be 4 or 5 characters long."])
|
||||
}
|
||||
|
||||
let start = moment(body.date);
|
||||
let end = moment(body.date).add("2", "years");
|
||||
let start = moment(body.get("date"));
|
||||
let end = moment(body.get("date")).add("2", "years");
|
||||
|
||||
if (!start.isValid()) {
|
||||
return error(["Invalid start date given."]);
|
||||
@@ -49,7 +45,7 @@ export const get: APIRoute = async function({ request }) {
|
||||
currentDate.add(1, accuracy);
|
||||
}
|
||||
|
||||
const climateFactors = await getClimateFactor(intervals, body.zip);
|
||||
const climateFactors = await getClimateFactor(intervals, zip);
|
||||
|
||||
if (!climateFactors) {
|
||||
return ActionFailedError();
|
||||
|
||||
18
tests/verbrauchsausweis/end-energie-verbrauch.test.ts
Normal file
18
tests/verbrauchsausweis/end-energie-verbrauch.test.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { test, expect } from "bun:test";
|
||||
import { Verbrauchsausweis } from "#lib/Ausweis/Verbrauchsausweis";
|
||||
|
||||
/**
|
||||
* Wir erstellen einen neuen Verbrauchsausweis um unsere Tests durchzuführen.
|
||||
*/
|
||||
const ausweis = new Verbrauchsausweis();
|
||||
|
||||
ausweis.ausstellgrund = "Vermietung";
|
||||
ausweis.baujahr_heizung = [1998];
|
||||
ausweis.verbrauch_1 = 10000;
|
||||
ausweis.verbrauch_2 = 10000;
|
||||
ausweis.verbrauch_3 = 10000;
|
||||
|
||||
|
||||
test("Endenergieverbrauch", async () => {
|
||||
|
||||
});
|
||||
@@ -1,8 +0,0 @@
|
||||
/// <reference types="vitest" />
|
||||
import { getViteConfig } from "astro/config";
|
||||
|
||||
export default getViteConfig({
|
||||
test: {
|
||||
globals: true,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user