@@ -137,16 +147,27 @@ import HelpLabel from "../HelpLabel.astro";
name="IGsan"
class="form-control"
required
- data-msg="Pflichtfeld"
+ bind:value={sanitationStatus}
>
-
-
+
-
-
\ No newline at end of file
+
+
+
\ No newline at end of file
diff --git a/src/components/Ausweis/DaemmungImage.astro b/src/components/Ausweis/DaemmungImage.svelte
similarity index 100%
rename from src/components/Ausweis/DaemmungImage.astro
rename to src/components/Ausweis/DaemmungImage.svelte
diff --git a/src/components/Ausweis/FensterImage.astro b/src/components/Ausweis/FensterImage.svelte
similarity index 100%
rename from src/components/Ausweis/FensterImage.astro
rename to src/components/Ausweis/FensterImage.svelte
diff --git a/src/components/Ausweis/HeizungImage.astro b/src/components/Ausweis/HeizungImage.svelte
similarity index 95%
rename from src/components/Ausweis/HeizungImage.astro
rename to src/components/Ausweis/HeizungImage.svelte
index c77d2f9f..40bb67fd 100644
--- a/src/components/Ausweis/HeizungImage.astro
+++ b/src/components/Ausweis/HeizungImage.svelte
@@ -1,6 +1,6 @@
-
+
WICHTIG:
diff --git a/src/components/Ausweis/Hilfe.astro b/src/components/Ausweis/Hilfe.astro
deleted file mode 100644
index e8f0edda..00000000
--- a/src/components/Ausweis/Hilfe.astro
+++ /dev/null
@@ -1,41 +0,0 @@
----
-import HelpLabel from "../HelpLabel.astro";
-
----
-
-Wir helfen Ihnen bei der Eingabe. Kurze Fragen zum Formular oder der Ausweisart werden kostenfrei telefonisch beantwortet (bis 5min). Bitte kontaktieren Sie uns unter 040/209339850. Gerne nehmen wir Ihnen die Arbeit ab - Fordern Sie unseren Offline Service an und klicken auf -Hilfe anfordern-
-
-
-
-
-
-
- Gerne helfen wir Ihnen wenn Sie nicht weiterkommen oder Fragen haben. Kurze Fragen zum Formular oder der Ausweisart werden kostenfrei telefonisch unter 040/209339850 beantwortet (bis 5min). Sollten Sie Unterstützung bei der Erstellung benötgen oder lieber die Arbeit von unserem Ingenieurbüro erledigen lassen, bieten wir Ihnen folgende Hilfen an. Bitte treffen Sie Ihre Auswahl und klicken auf weiter:
-
Verbrauchsausweis offline für 180 € inkl. MwSt. (Sie schicken uns 3 Verbrauchsabrechnungen zu)
-
-
-
-
Bedarfsausweis offline für 290 € inkl. MwSt. (Sie schicken uns Grundriss- und Ansichtspläne zu)
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/components/Ausweis/Hilfe.svelte b/src/components/Ausweis/Hilfe.svelte
new file mode 100644
index 00000000..3bcdc54d
--- /dev/null
+++ b/src/components/Ausweis/Hilfe.svelte
@@ -0,0 +1,74 @@
+
+
+
+
+
+ {#if showHelp}
+
+
+ Gerne helfen wir Ihnen wenn Sie nicht weiterkommen oder Fragen
+ haben. Kurze Fragen zum Formular oder der Ausweisart werden
+ kostenfrei telefonisch unter 040/209339850 beantwortet (bis 5min). Sollten Sie Unterstützung bei der Erstellung
+ benötgen oder lieber die Arbeit von unserem Ingenieurbüro erledigen
+ lassen, bieten wir Ihnen folgende Hilfen an. Bitte treffen Sie Ihre
+ Auswahl und klicken auf weiter:
+
\ No newline at end of file
diff --git a/src/components/Ausweis/ProgressBar.astro b/src/components/Ausweis/Progressbar.svelte
similarity index 89%
rename from src/components/Ausweis/ProgressBar.astro
rename to src/components/Ausweis/Progressbar.svelte
index 93fed638..463faafa 100644
--- a/src/components/Ausweis/ProgressBar.astro
+++ b/src/components/Ausweis/Progressbar.svelte
@@ -1,10 +1,6 @@
----
-export type Props = {
- progress: number
-}
-
-const { progress } = Astro.props;
----
+
-
- Bitte geben Sie drei zusammenhängende Verbrauchsjahre der
- Heizungsanlage ein. Wenn eine weitere Heizquelle vorhanden sein
- sollte geben Sie diese rechts bei 'zusätzliche Heizquelle' ein.
-
-
-
-
-
-
- Wenn eine zusätzliche Heizquelle vorhanden geben Sie hier drei
- zusammenhängende Verbrauchsjahre ein. Es sollen die gleichen
- Verbrauchszeiträume wie bei der primären Heizung verwendet
- werden.
-
-
-
-
-
- Heizöl: Flüssiger Brennstoff; Heizöl wird aus schwer entflammbaren
- Anteilen des Erdöls hergestellt.
- Erdgas H, Erdgas L: Brennbares Naturgas das in unterirdischen
- Lagerstätten vorkommt. Erdgas H hat im Vergleich zu Erdgas L einen
- leicht höheren Methangehalt, und daher einen etwas besseren Brennwert.
- Flüssiggas: Meist Propan, Butan und deren Gemische, die bei
- Raumtemperatur unter vergleichsweise geringem Druck flüssig bleiben.
- Braunkohle: Durch Druck und Luftabschluss von organischen
- Substanzen entstandenes, bräunlich-schwarzes Sedimentgestein.
- Holz-Pellets: Stäbchenförmige Pellets die vollständig oder
- überwiegend aus Holz oder Sägenebenprodukten hergestellt werden.
- Holzhackschnitzel: Mit schneidenden Werkzeugen zerkleinertes
- Holz.
- Nahwärme, Fernwärme: Versorgung von thermischer Energie über
- wärmegedämmte Rohrsysteme. Die Wärme wird dabei örtlich von Heizwerken
- produziert oder besteht aus Prozesswärme von BHKW's. Im Unterschied
- zu Fernwärme wird Nahwärme in kleineren Einheiten dezentral realisiert.
- Strommix: Heizen mit Strom (Nachtspeicher).
- Koks: Stark kohlenstoffhaltiger Brennstoff.
-
-
-
-
-
-
-
-
- Bitte geben Sie die Einheit ein. Erdgas wird meist auf der
- Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in Litern
- vor. Pellets oder Brennholz in SRm (Schüttraummetern).
-
-
+
+ Wenn eine zusätzliche Heizquelle vorhanden geben Sie hier drei
+ zusammenhängende Verbrauchsjahre ein. Es sollen die gleichen
+ Verbrauchszeiträume wie bei der primären Heizung verwendet
+ werden.
+
+
+
+
+
+
+ Heizöl: Flüssiger Brennstoff; Heizöl wird aus schwer
+ entflammbaren Anteilen des Erdöls hergestellt.
+ Erdgas H, Erdgas L: Brennbares Naturgas das in
+ unterirdischen Lagerstätten vorkommt. Erdgas H hat im Vergleich
+ zu Erdgas L einen leicht höheren Methangehalt, und daher einen
+ etwas besseren Brennwert.
+ Flüssiggas: Meist Propan, Butan und deren Gemische, die
+ bei Raumtemperatur unter vergleichsweise geringem Druck flüssig
+ bleiben.
+ Braunkohle: Durch Druck und Luftabschluss von organischen
+ Substanzen entstandenes, bräunlich-schwarzes Sedimentgestein.
+ Holz-Pellets: Stäbchenförmige Pellets die vollständig
+ oder überwiegend aus Holz oder Sägenebenprodukten hergestellt
+ werden.
+ Holzhackschnitzel: Mit schneidenden Werkzeugen
+ zerkleinertes Holz.
+ Nahwärme, Fernwärme: Versorgung von thermischer Energie
+ über wärmegedämmte Rohrsysteme. Die Wärme wird dabei örtlich von
+ Heizwerken produziert oder besteht aus Prozesswärme von BHKW's.
+ Im Unterschied zu Fernwärme wird Nahwärme in kleineren Einheiten
+ dezentral realisiert.
+ Strommix: Heizen mit Strom (Nachtspeicher).
+ Koks: Stark kohlenstoffhaltiger Brennstoff.
+
+
+
+
+
+
+
+
+ Bitte geben Sie die Einheit ein. Erdgas wird meist auf der
+ Abrechnung in kWh ausgewiesen. Heizöl liegt meistens in Litern
+ vor. Pellets oder Brennholz in SRm (Schüttraummetern).
+
+
{title}
diff --git a/src/components/Label.svelte b/src/components/Label.svelte
new file mode 100644
index 00000000..ae687cb1
--- /dev/null
+++ b/src/components/Label.svelte
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte b/src/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte
new file mode 100644
index 00000000..b63efda2
--- /dev/null
+++ b/src/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte
@@ -0,0 +1,823 @@
+
+
+
+
+
Verbrauchsausweis erstellen - 45€
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Verbrauchsausweis/energyPerformanceCalculation.ts b/src/components/Verbrauchsausweis/energyPerformanceCalculation.ts
new file mode 100644
index 00000000..6b011e5b
--- /dev/null
+++ b/src/components/Verbrauchsausweis/energyPerformanceCalculation.ts
@@ -0,0 +1,39 @@
+
+/**
+ *
+ * @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;
+}
+
+function convertEnergyConsumptionToKWh(consumption: number, conversionFactor: number, calorificValueFactor: number): number {
+ return (consumption * conversionFactor) / calorificValueFactor;
+}
diff --git a/src/components/Verbrauchsausweis/index.ts b/src/components/Verbrauchsausweis/index.ts
new file mode 100644
index 00000000..e2d49acd
--- /dev/null
+++ b/src/components/Verbrauchsausweis/index.ts
@@ -0,0 +1 @@
+export { default as VerbrauchsausweisContent } from "./VerbrauchsausweisContent.svelte"
\ No newline at end of file
diff --git a/src/layouts/AusweisLayout.astro b/src/layouts/AusweisLayout.astro
index 1433329a..39107da9 100644
--- a/src/layouts/AusweisLayout.astro
+++ b/src/layouts/AusweisLayout.astro
@@ -101,7 +101,7 @@ const schema = JSON.stringify({
min-height: 100vh;
}
- button, .button {
+ button, .button, button[type="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;
color: #fff !important;
}
@@ -110,11 +110,15 @@ const schema = JSON.stringify({
@apply text-xl font-medium mt-6 mb-4;
}
- input {
- @apply py-2 px-4 w-full outline-none text-lg text-slate-800 border;
+ input, select, textarea {
+ @apply py-1.5 px-2.5 rounded-lg w-full outline-none text-base text-slate-800 border;
+ }
+
+ input:disabled, input:read-only, select:disabled {
+ @apply bg-gray-200 border-gray-300;
}
input:disabled {
- @apply bg-gray-100 border-gray-300;
+ text-indent: -9999px;
}
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index 12203746..8484783b 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -112,7 +112,7 @@ const schema = JSON.stringify({
}
input {
- @apply py-2 px-4 w-full outline-none text-lg text-slate-800 border;
+ @apply py-1 px-2 w-full rounded-lg outline-none text-lg text-slate-800 border;
}
label {
diff --git a/src/lib/Klimafaktoren/getClimateFactor.ts b/src/lib/Klimafaktoren/getClimateFactor.ts
new file mode 100644
index 00000000..085add1c
--- /dev/null
+++ b/src/lib/Klimafaktoren/getClimateFactor.ts
@@ -0,0 +1,29 @@
+import moment, { Moment } from "moment";
+import { db } from "../shared";
+
+export async function getClimateFactor(dates: Moment[], zip: string): Promise {
+ const formattedDates = dates.map(date => {
+ let d = moment(date).format("MM_YYYY");
+ return `d_${d} as ${d}`
+ });
+
+ if (dates.length == 0) {
+ return null;
+ }
+ if (zip.length !== 5 && zip.length !== 4) {
+ return null;
+ }
+
+ let result;
+ try {
+ result = await db("climate_factors").select(formattedDates).where("zip", zip).first();
+ } catch(e) {
+ return null;
+ }
+
+ if (!result) {
+ return null;
+ }
+
+ return result;
+}
\ No newline at end of file
diff --git a/src/lib/Klimafaktoren/index.ts b/src/lib/Klimafaktoren/index.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/lib/shared.ts b/src/lib/shared.ts
index d3c21152..db24ef35 100644
--- a/src/lib/shared.ts
+++ b/src/lib/shared.ts
@@ -4,8 +4,8 @@ export function dbOpen(): Knex {
const db = knex({
client: 'pg',
connection: {
- host : '127.0.0.1',
- port : 5436,
+ host : process.env.DB_CONNECTION,
+ port : Number(process.env.DB_PORT),
user : 'main',
password : 'hHMP8cd^N3SnzGRR',
database : 'main'
diff --git a/src/pages/api/climate_factor/index.ts b/src/pages/api/climate_factor/index.ts
new file mode 100644
index 00000000..70bd64e4
--- /dev/null
+++ b/src/pages/api/climate_factor/index.ts
@@ -0,0 +1,54 @@
+import type { APIRoute } from "astro";
+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 }) {
+ const body = Object.fromEntries(new URLSearchParams(request.url.split("?")[1]))
+
+ if (!body.start || !body.end) {
+ return MissingPropertyError(["start", "end"]);
+ }
+
+ let accuracy = body.accuracy || "months";
+
+ if (accuracy !== "months" && accuracy !== "years") {
+ return error(["Accuracy must be either 'months' or 'years'."])
+ }
+
+ if (!body.zip) {
+ return error(["Invalid ZIP Code, must be 4 or 5 characters long."])
+ }
+
+ let start = moment(body.start);
+ let end = moment(body.end);
+
+ if (!start.isValid()) {
+ return error(["Invalid start date given."]);
+ }
+
+ if (!end.isValid()) {
+ return error(["Invalid end date given."]);
+ }
+
+ if (start.isSameOrAfter(end)) {
+ return error(["Start date not before end date."])
+ }
+
+ const intervals = [];
+
+ let currentDate = start.clone();
+ while (currentDate.isSameOrBefore(end)) {
+ let copy = currentDate.clone();
+ intervals.push(copy);
+ currentDate.add(1, accuracy);
+ }
+
+ const climateFactors = await getClimateFactor(intervals, body.zip);
+
+ if (!climateFactors) {
+ return ActionFailedError();
+ }
+
+ return success(climateFactors);
+}
\ No newline at end of file
diff --git a/src/pages/verbrauchsausweis/erstellen.astro b/src/pages/verbrauchsausweis/erstellen.astro
new file mode 100644
index 00000000..bd041097
--- /dev/null
+++ b/src/pages/verbrauchsausweis/erstellen.astro
@@ -0,0 +1,3 @@
+---
+console.log(Object.fromEntries(new URLSearchParams(await Astro.request.text())))
+---
\ No newline at end of file
diff --git a/src/pages/verbrauchsausweis/index.astro b/src/pages/verbrauchsausweis/index.astro
index cad8cfbb..5304bab1 100644
--- a/src/pages/verbrauchsausweis/index.astro
+++ b/src/pages/verbrauchsausweis/index.astro
@@ -1,15 +1,6 @@
---
-import PerformanceScore from "~/components/Ausweis/PerformanceScore.svelte";
-import ProgressBar from "~/components/Ausweis/ProgressBar.astro";
-import Hilfe from "~/components/Ausweis/Hilfe.astro";
import AusweisLayout from "~/layouts/AusweisLayout.astro";
-import HelpLabel from "~/components/HelpLabel.astro";
-import Verbrauch from "~/components/Ausweis/Verbrauch.astro";
-import Ausweisart from "~/components/Ausweis/Ausweisart.astro";
-import HeizungImage from "~/components/Ausweis/HeizungImage.astro";
-import FensterImage from "~/components/Ausweis/FensterImage.astro";
-import DaemmungImage from "~/components/Ausweis/DaemmungImage.astro";
-import AusweisPreviewContainer from "~/components/Ausweis/AusweisPreviewContainer.astro";
+import VerbrauchsausweisContent from "~/components/Verbrauchsausweis/VerbrauchsausweisContent.svelte";
/**
* include('scripts/dbcon.php');
ini_set('session.cookie_secure', "1");
@@ -59,879 +50,5 @@ if ($_SESSION["username"] == TEST_USER_NAME) {
---
-
-
-
Verbrauchsausweis erstellen - 45€
-
-
-
-
-
-
-
+
-
-
diff --git a/src/pages/verbrauchsausweis/kaufabschluss.astro b/src/pages/verbrauchsausweis/kaufabschluss.astro
index 0c882a7e..12a0f225 100644
--- a/src/pages/verbrauchsausweis/kaufabschluss.astro
+++ b/src/pages/verbrauchsausweis/kaufabschluss.astro
@@ -1,5 +1,5 @@
---
-import ProgressBar from "~/components/Ausweis/ProgressBar.astro";
+import ProgressBar from "~/components/Ausweis/Progressbar.svelte";
import PerformanceScore from "~/components/Ausweis/PerformanceScore.svelte";
import AusweisLayout from "~/layouts/AusweisLayout.astro";
import PriceContainer from "~/components/Kaufabschluss/PriceContainer.svelte";
diff --git a/src/pages/verbrauchsausweis/kundendaten.astro b/src/pages/verbrauchsausweis/kundendaten.astro
index 6c19b003..6a8032e9 100644
--- a/src/pages/verbrauchsausweis/kundendaten.astro
+++ b/src/pages/verbrauchsausweis/kundendaten.astro
@@ -1,7 +1,7 @@
---
import PerformanceScore from "~/components/Ausweis/PerformanceScore.svelte";
-import ProgressBar from "~/components/Ausweis/ProgressBar.astro";
-import HelpLabel from "~/components/HelpLabel.astro";
+import ProgressBar from "~/components/Ausweis/Progressbar.svelte";
+import HelpLabel from "~/components/HelpLabel.svelte";
import AusweisLayout from "~/layouts/AusweisLayout.astro";
---