BIN
persistent/images/haken.png
Normal file
BIN
persistent/images/haken.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 256 B |
40586
public/images/dashboard/DatenblattHaken.svg
Normal file
40586
public/images/dashboard/DatenblattHaken.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 10 MiB |
40596
public/images/dashboard/DatenblattKreuz.svg
Normal file
40596
public/images/dashboard/DatenblattKreuz.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 10 MiB |
@@ -12,12 +12,12 @@ export const createCaller = createCallerFactory({
|
||||
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
|
||||
"admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||
"auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"),
|
||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||
"bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"),
|
||||
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
|
||||
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
||||
"bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||
"bilder/[id]": await import("../src/pages/api/bilder/[id].ts"),
|
||||
|
||||
@@ -21,9 +21,15 @@
|
||||
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||
export let aufnahme: AufnahmeKomplettClient;
|
||||
export let rechnung: RechnungClient;
|
||||
export let rechnung: RechnungClient | null;
|
||||
export let objekt: Objekt;
|
||||
export let benutzer: BenutzerClient;
|
||||
import { FileText } from "radix-svelte-icons";
|
||||
import NotificationProvider from "#components/NotificationProvider/NotificationProvider.svelte";
|
||||
import DashboardNotification from "./DashboardNotification.svelte";
|
||||
import { notifications } from "#components/NotificationProvider/shared.js";
|
||||
import { Bell } from "radix-svelte-icons";
|
||||
import { A13BerechnungRechnerischeLaufzeitHeizung } from "#lib/Berechnungen/BedarfsausweisWohnen/A13BerechnungRechnerischeLaufzeitHeizung.js";
|
||||
const progress = ausweis.ausgestellt ? 100 : ausweis.bestellt ? 66 : 33;
|
||||
|
||||
const ausweisart = getAusweisartFromId(ausweis.id);
|
||||
@@ -218,6 +224,17 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex flex-row flex-wrap items-center gap-2">
|
||||
{#if ausweis.ausgestellt}
|
||||
<span class="bg-green-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Ausgestellt</span>
|
||||
{:else if ausweis.bestellt}
|
||||
<span class="bg-primary px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Bestellt</span>
|
||||
{:else}
|
||||
{#if ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe}
|
||||
<span class="bg-red-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Angefordert</span>
|
||||
{:else}
|
||||
<span class="bg-red-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Gespeichert</span>
|
||||
{/if}
|
||||
{/if}
|
||||
<div class="text-lg font-semibold">
|
||||
{#if ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen}
|
||||
Verbrauchsausweis Wohnen
|
||||
@@ -232,27 +249,15 @@
|
||||
{:else if ausweisart == Enums.Ausweisart.BedarfsausweisGewerbe}
|
||||
Bedarfsausweis Gewerbe
|
||||
{/if}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge badge-accent font-semibold text-black text-m">
|
||||
{#if ausweis.ausweistyp === Enums.AusweisTyp.Beratung || ausweis.ausweistyp === Enums.AusweisTyp.BeratungXL}
|
||||
(Beratung)
|
||||
mit Beratung
|
||||
{:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline || ausweis.ausweistyp === Enums.AusweisTyp.OfflineXL}
|
||||
(Offline)
|
||||
Offline
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
{#if ausweis.ausgestellt}
|
||||
<span class="bg-green-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Ausgestellt</span>
|
||||
{:else if ausweis.bestellt}
|
||||
<span class="bg-primary px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Bestellt</span>
|
||||
{:else}
|
||||
{#if ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe}
|
||||
<span class="bg-red-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Gespeichert</span>
|
||||
{:else}
|
||||
<span class="bg-red-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Angefordert</span>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
<div class="badge badge-accent font-semibold text-black text-m">{objekt.adresse}</div>
|
||||
<div class="mb-4 flex flex-row items-center gap-4">
|
||||
<div class="w-full border rounded-lg my-2">
|
||||
<div class="bg-green-600 h-4 rounded-lg" class:bg-red-600={progress == 33} class:bg-primary={progress == 66} style="width: {progress}%;"></div>
|
||||
@@ -261,17 +266,16 @@
|
||||
>{progress}%</span
|
||||
>
|
||||
</div>
|
||||
{#if ausweis.bestellt}
|
||||
{#if ausweis.ausweistyp === Enums.AusweisTyp.Beratung || ausweis.ausweistyp === Enums.AusweisTyp.BeratungXL}
|
||||
<p class="text-sm font-semibold">Sie haben Hilfe zu diesem Ausweis angefordert. Sie werden innerhalb der nächsten 48 Stunden über die hinterlegte Telefonnummer vom IB Cornelsen kontaktiert.</p>
|
||||
{:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline || ausweis.ausweistyp === Enums.AusweisTyp.OfflineXL}
|
||||
<p class="text-sm font-semibold">Sie haben die offline Variant zu diesem Ausweis angefordert. Bitte übermitteln Sie uns die letzten drei Jahre der Energieabrechnungen Ihres Energieversorgers.</p>
|
||||
{:else if !ausweis.ausgestellt}
|
||||
<p class="text-sm font-semibold">Der Ausweis wurde von Ihnen freigegeben und befindet sich in Prüfung vom IB Cornelsen</p>
|
||||
{/if}
|
||||
{/if}
|
||||
{#await calculations then calculations}
|
||||
<div class="flex flex-col gap-2">
|
||||
<div class="flex flex-col mb-4">
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>Erstellungsdatum</span>
|
||||
<span class="font-bold text-base-content"
|
||||
>{moment(aufnahme.erstellungsdatum).format(
|
||||
"DD.MM.YYYY"
|
||||
)}</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>Energieverbrauch</span>
|
||||
<span class="font-bold text-base-content"
|
||||
@@ -284,14 +288,6 @@
|
||||
>{calculations?.co2EmissionenGesamt}Kg/A</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>Erstellungsdatum</span>
|
||||
<span class="font-bold text-base-content"
|
||||
>{moment(aufnahme.erstellungsdatum).format(
|
||||
"DD.MM.YYYY"
|
||||
)}</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>Baujahr</span>
|
||||
<span
|
||||
@@ -309,16 +305,37 @@
|
||||
: "N/A"}</span
|
||||
>
|
||||
</div>
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>ID</span>
|
||||
<span class="font-bold text-base-content"
|
||||
>{id}</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
{/await}
|
||||
|
||||
<div class="flex flex-row justify-end items-center gap-4 mt-4">
|
||||
|
||||
<div class="flex flex-row justify-start items-center mb-4">
|
||||
<a
|
||||
class="p-1 rounded-lg hover:bg-gray-200 mr-2 border-2 border-gray-300"
|
||||
title="PDF Herunterladen"
|
||||
target="_blank"
|
||||
href="/pdf/ansichtsausweis?id={ausweis.id}"
|
||||
>
|
||||
{#if ausweis.ausgestellt}
|
||||
<img src="../../images/dashboard/AusweisHaken.svg" width="65" alt="Energieausweis">
|
||||
{:else}
|
||||
<img src="../../images/dashboard/AusweisKreuz.svg" width="65" alt="Energieausweis">
|
||||
{/if}
|
||||
</a>
|
||||
<a
|
||||
class="p-1 rounded-lg hover:bg-gray-200 border-2 border-gray-300"
|
||||
title="PDF Herunterladen"
|
||||
target="_blank"
|
||||
href="/pdf/datenblatt?id={ausweis.id}"
|
||||
>
|
||||
{#if ausweis.ausgestellt}
|
||||
<img src="../../images/dashboard/DatenblattHaken.svg" width="65" alt="Energieausweis">
|
||||
{:else}
|
||||
<img src="../../images/dashboard/DatenblattKreuz.svg" width="65" alt="Energieausweis">
|
||||
{/if}
|
||||
</a>
|
||||
|
||||
<div class="flex flex-col gap-2 justify-end items-center ml-4">
|
||||
{#if !ausweis.storniert && !ausweis.ausgestellt}
|
||||
<!--
|
||||
<a
|
||||
@@ -392,25 +409,238 @@
|
||||
<button class="button text-sm" title="Stornieren" on:click={stornieren}>S</button>
|
||||
<button class="button text-sm" title="Registriernummer anfordern" on:click={registriernummer}>R</button>
|
||||
{/if}
|
||||
|
||||
<a
|
||||
class="p-2 rounded-lg hover:bg-gray-200"
|
||||
title="PDF Herunterladen"
|
||||
target="_blank"
|
||||
href="/pdf/ansichtsausweis?id={ausweis.id}"
|
||||
>
|
||||
<img src="/images/ausweis.webp" width="32" alt="Energieausweis">
|
||||
</a>
|
||||
<a
|
||||
class="p-2 rounded-lg hover:bg-gray-200"
|
||||
title="PDF Herunterladen"
|
||||
target="_blank"
|
||||
href="/pdf/datenblatt?id={ausweis.id}"
|
||||
>
|
||||
<img src="/images/datenblatt.webp" width="32" alt="Datenblatt">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-8">
|
||||
{#if ausweis.bestellt}
|
||||
{#if ausweis.ausweistyp === Enums.AusweisTyp.Beratung || ausweis.ausweistyp === Enums.AusweisTyp.BeratungXL}
|
||||
<p class="text-sm">Sie haben Hilfe zu diesem Ausweis angefordert. Sie werden <span class="font-bold">innerhalb der nächsten 48 Stunden</span> über die hinterlegte Telefonnummer vom IB Cornelsen kontaktiert.</p>
|
||||
{:else if ausweis.ausweistyp === Enums.AusweisTyp.Offline || ausweis.ausweistyp === Enums.AusweisTyp.OfflineXL}
|
||||
<p class="text-sm">Sie haben die offline Variant zu diesem Ausweis angefordert. Bitte <span class="font-bold">übermitteln Sie uns die letzten drei Jahre der Energieabrechnungen</span> Ihres Energieversorgers.</p>
|
||||
{:else if !ausweis.ausgestellt}
|
||||
<p class="text-sm">Der Ausweis wurde von Ihnen freigegeben und befindet sich <span class="font-bold">in Prüfung durch IB Cornelsen</span></p>
|
||||
{/if}
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="relative bg-base-200 border border-base-300 rounded-lg p-4 mr-4">
|
||||
<div class="card-body">
|
||||
<div class="flex flex-row flex-wrap items-center gap-2">
|
||||
|
||||
<div class="text-lg font-semibold">{aufnahme.gebaeudetyp}
|
||||
{#if (aufnahme.einheiten > 0 && aufnahme.einheiten !== null)}
|
||||
mit {aufnahme.einheiten} Wohneinheiten
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Gebäude (Bj {aufnahme.baujahr_gebaeude})</span> mit
|
||||
{#if aufnahme.flaeche > 0 && aufnahme.flaeche !== null}
|
||||
{aufnahme.flaeche} m² Wohnfläche
|
||||
sowie
|
||||
{/if}
|
||||
{aufnahme.nutzflaeche} m² energetische Nutzfläche. Als Ausstellgrund wurde {ausweis.ausstellgrund} angegeben.
|
||||
{aufnahme.gebaeudeteil === "Wohnen"
|
||||
? "Die eingegebenen Daten beziehen sich auf den Wohnteil eines gemischt genutzten Gebäudes."
|
||||
: "Die eingegebenen Daten beziehen sich auf das gesamte Gebäude."}
|
||||
{aufnahme.saniert ? "Das Gebäude ist in unsaniertem Zustand." : "Das Gebäude ist in saniertem Zustand."}
|
||||
</div>
|
||||
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Gebäudestrom</span> der Jahre vom
|
||||
{moment(ausweis.startdatum).format("MM.YYYY")} bis {moment(ausweis.startdatum).add("3", "years").format("MM.YYYY")} beträgt
|
||||
{ausweis.strom_1} kWh, {ausweis.strom_2} kWh und {ausweis.strom_3} kWh.
|
||||
Im Stromverbrauch enthalten sind
|
||||
{ausweis.stromverbrauch_enthealt_heizung ? "Heizung, " : ""}
|
||||
{ausweis.stromverbrauch_enthaelt_warmwasser ? "Warmwasser, " : ""}
|
||||
{ausweis.stromverbrauch_enthaelt_lueftung ? "Lüftung, " : ""}
|
||||
{ausweis.stromverbrauch_enthaelt_beleuchtung ? "Beleuchtung, " : ""}
|
||||
{ausweis.stromverbrauch_enthaelt_kuehlung ? "Kühlung, " : ""}
|
||||
{#if ausweis.stromverbrauch_sonstig !== null}
|
||||
sowie {ausweis.stromverbrauch_enthaelt_sonstige}.
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Heizung (Bj {aufnahme.baujahr_heizung})</span> wird mit {ausweis.brennstoff_1} betrieben. Die Verbräuche vom
|
||||
{moment(ausweis.startdatum).format("MM.YYYY")} bis {moment(ausweis.startdatum).add("3", "years").format("MM.YYYY")} betragen
|
||||
{ausweis.verbrauch_1} {ausweis.einheit_1}, {ausweis.verbrauch_2} {ausweis.einheit_1} und {ausweis.verbrauch_3} {ausweis.einheit_1}.
|
||||
{#if ausweis.zusaetzliche_heizquelle} -
|
||||
Eine weitere Heizung wird mit {ausweis.brennstoff_2} betrieben mit den Verbräuchen {ausweis.verbrauch_4} {ausweis.einheit_2}, {ausweis.verbrauch_5}
|
||||
{ausweis.einheit_2} und {ausweis.verbrauch_6} {ausweis.einheit_2}.
|
||||
{/if}
|
||||
</div>
|
||||
<div class="text-sm">
|
||||
{#if ausweis.anteil_warmwasser_1 !== null && ausweis.anteil_warmwasser_1 > 0}
|
||||
{#if aufnahme.solarsystem_warmwasser}
|
||||
Da ein Solarsystem für Warmwasser vorhanden ist,
|
||||
wurde ein Warmwasseranteil von {ausweis.anteil_warmwasser_1 * 0.6}% berücksichtigt.
|
||||
{:else}
|
||||
Es wurde ein Warmwasseranteil von {ausweis.anteil_warmwasser_1}% berücksichtigt.
|
||||
{/if}
|
||||
{:else}
|
||||
{#if aufnahme.solarsystem_warmwasser}
|
||||
Da ein Solarsystem für Warmwasser vorhanden ist, wurde ein reduzierter Warmwasserzuschlag von 12 kWh/m²a angesetzt.
|
||||
{:else}
|
||||
Es wurde ein Warmwasserzuschlag von 20 kWh/m²a angesetzt.
|
||||
{/if}
|
||||
{/if}
|
||||
{#if !ausweis.alternative_heizung && !ausweis.alternative_warmwasser && !ausweis.alternative_lueftung && !ausweis.alternative_kuehlung}
|
||||
Alternative Energieversorgung wird nicht verwendet
|
||||
{:else}
|
||||
Alternative Energieversorgung wird verwendet für {ausweis.alternative_heizung ? "Heizung, " : ""}{ausweis.alternative_warmwasser ? "Warmwasser, " : ""}{ausweis.alternative_lueftung ? "Lüftung, " : ""}{ausweis.alternative_kuehlung ? "Kühlung, " : ""}
|
||||
{/if}.
|
||||
Der Leerstand beträgt {aufnahme.leerstand}%. Das Gebäude verfügt über eine
|
||||
{#if aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung}
|
||||
Fensterlüftung
|
||||
{:else if aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung}
|
||||
Schachtlüftung
|
||||
{:else if aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung}
|
||||
Lüftungsanlage mit Wärmerückgewinnung
|
||||
{:else if aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung}
|
||||
Lüftungsanlage ohne Wärmerückgewinnung
|
||||
{/if}
|
||||
{#if ausweis.kuehlung_enthalten && ausweis.kuehlung_entahlten !== null}
|
||||
und wird thermisch gekühlt.
|
||||
{:else if aufnahme.kuehlung === "1" && aufnahme.kuhlung !== null}
|
||||
und wird gekühlt.
|
||||
{:else}
|
||||
und wird nicht gekühlt.
|
||||
{/if}
|
||||
</div>
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Heizung: </span>
|
||||
{aufnahme.zentralheizung ? "Zentral/Etagenheizung, " : ""}
|
||||
{aufnahme.einzelofen ? "Einzelofen, " : ""}
|
||||
{aufnahme.waermepumpe ? "Wärmepumpe, " : ""}
|
||||
{aufnahme.niedertemperatur_kessel ? "Niedertemperaturkessel, " : ""}
|
||||
{aufnahme.standard_kessel ? "Standardkessel, " : ""}
|
||||
{aufnahme.durchlauf_erhitzer ? "Durchlauferhitzer, " : ""}
|
||||
{aufnahme.solarsystem_warmwasser ? "Solarsystem für Warmwasser, " : ""}
|
||||
{aufnahme.waermepumpe ? "Wärmepumpe, " : ""}
|
||||
{aufnahme.brennwert_kessel ? "Brennwertkessel, " : ""}
|
||||
{aufnahme.standard_kessel ? "Standardkessel, " : ""}
|
||||
{aufnahme.warmwasser_rohre_gedaemmt ? "Warmwasserrohre gedämmt, " : ""}
|
||||
{aufnahme.heizungsrohre_gedaemmt ? "Heizungsrohre gedämmt, " : ""}
|
||||
{aufnahme.photovoltaik ? "Photovoltaik, " : ""}
|
||||
{aufnahme.raum_temperatur_regler ? "Raumtemperaturregler, " : ""}
|
||||
{aufnahme.zirkulation ? "Zirkulation, " : ""}
|
||||
</div>
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Fenster: </span>
|
||||
{aufnahme.isolier_verglasung ? "Fenster Isolierglas, " : ""}
|
||||
{aufnahme.dreifach_verglasung ? "Dreifachverglasung, " : ""}
|
||||
{aufnahme.doppel_verglasung ? "Doppelverglasung, " : ""}
|
||||
{aufnahme.einfach_verglasung ? "Einfachverglasung, " : ""}
|
||||
{aufnahme.fenster_dicht ? "Fenster dicht, " : ""}
|
||||
{aufnahme.fenster_teilweise_undicht ? "Fenster teilweise undicht, " : ""}
|
||||
{aufnahme.tueren_undicht ? "Türen undicht, " : ""}
|
||||
{aufnahme.tueren_dicht ? "Türen dicht, " : ""}
|
||||
{aufnahme.rolllaeden_kaesten_gedaemmt ? "Rollladenkästen gedämmt" : ""}
|
||||
</div>
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Dämmung: </span>
|
||||
{aufnahme.dachgeschoss_gedaemmt ? "Dachgeschoss gedämmt, " : ""}
|
||||
{aufnahme.aussenwand_gedaemmt ? "Außenwand gedämmt, " : ""}
|
||||
{aufnahme.keller_decke_gedaemmt ? "Kellerdecke gedämmt, " : ""}
|
||||
{aufnahme.keller_wand_gedaemmt ? "Kellerwand gedämmt, " : ""}
|
||||
{aufnahme.oberste_geschossdecke_gedaemmt ? "oberste Geschossdecke gedämmt, " : ""}
|
||||
{aufnahme.oberste_geschossdecke_min_12cm_gedaemmt ? "oberste Geschossdecke min. 12cm gedämmt, " : ""}
|
||||
{aufnahme.dachgeschoss_min_12cm_gedaemmt ? "Dachgeschoss min. 12cm gedämmt, " : ""}
|
||||
{aufnahme.aussenwand_min_12cm_gedaemmt ? "Außenwand min. 12cm gedämmt" : ""}
|
||||
</div>
|
||||
<div class="text-xs space-y-1 p-2">
|
||||
<span class="font-semibold">Hiermit bestätige ich {benutzer.vorname} {benutzer.name} als Besteller folgende Angaben:</span><br>
|
||||
{#if ausweis.pruefpunkt_heizungsalter}
|
||||
<div>Das Heizungsalter ist jünger als 3 Jahre. Es betrifft einen Heizungstausch ohne energetische Verbesserung.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_verbrauch_niedrig}
|
||||
<div>Ich habe die Verbrauchsangaben kontrolliert. Der niedrige Energiekennwert ist korrekt.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_verbrauch_hoch}
|
||||
<div>Ich habe die Verbrauchsangaben kontrolliert. Der hohe Energiekennwert ist korrekt.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_verbrauch_null}
|
||||
<div>Die eingegebenen Heizverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_verbrauch_abweichung}
|
||||
<div>Die eingegebenen Heizverbräuche sind korrekt und die Abweichung lässt sich begründen.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_wohnflaeche_einheiten}
|
||||
<div>Die Angabe der Wohnfläche ist korrekt und bezieht sich auf das gesamte Gebäude.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_strom_null}
|
||||
<div>Die eingegebenen Stromverbräuche sind korrekt. Alle 3 Felder wurden vollständig eingegeben.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_strom_abweichung}
|
||||
<div>Die eingegebenen Stromverbräuche sind korrekt und die Abweichung lässt sich begründen.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_heizungsanlage}
|
||||
<div>Das Baujahr der Heizungsanlage ist kleiner als das Baujahr des Gebäudes und begründet.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_anteil_warmwasser}
|
||||
<div>Ich habe den Warmwasseranteil nochmal überprüft. Dieser ist korrekt und begründet.</div>
|
||||
{/if}
|
||||
{#if ausweis.pruefpunkt_wohnflaeche}
|
||||
<div>Ich habe die Wohnfläche nochmal überprüft und bestätige die Richtigkeit. Es handelt sich lediglich um die Wohnfläche innerhalb des Gebäudes.</div>
|
||||
{/if}
|
||||
<div>Ich habe die AGB und DSGVO im <a href="/impressum#agb" target="_blank" rel="noopener noreferrer">Impressum</a> gelesen und akzeptiert. Ich bestätige die Richtigkeit der Eingabe.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="relative bg-base-200 border border-base-300 rounded-lg p-4">
|
||||
<div class="card-body">
|
||||
<div class="flex flex-row flex-wrap items-center gap-2">
|
||||
<div class="text-sm">
|
||||
<span class="font-bold">Rechnungsadresse</span><br>
|
||||
{rechnung?.empfaenger},
|
||||
{#if rechnung?.zusatzzeile !== null}
|
||||
{rechnung?.zusatzzeile},
|
||||
{/if}
|
||||
{rechnung?.strasse}, {rechnung?.plz} {rechnung?.ort}
|
||||
</div>
|
||||
<div class="text-sm mb-2">
|
||||
<span class="font-bold">Versandadresse</span><br>
|
||||
{rechnung?.versand_empfaenger},
|
||||
{#if rechnung?.versand_zusatzzeile !== null}
|
||||
{rechnung?.versand_zusatzzeile},
|
||||
{/if}
|
||||
{rechnung?.versand_strasse}, {rechnung?.versand_plz} {rechnung?.versand_ort}
|
||||
</div>
|
||||
<div class="text-lg font-semibold">Unterlagen</div>
|
||||
<div class="text-sm">
|
||||
<a href="" target="_blank" class="text-black flex flex-row items-center gap-2 bg-base-200 rounded-lg p-1"><FileText size={24}></FileText>Grundrissplan_O....pdf</a>
|
||||
<a href="" target="_blank" class="text-black flex flex-row items-center gap-2 bg-base-200 rounded-lg p-1"><FileText size={24}></FileText>Grundrissplan_OG....pdf</a>
|
||||
<a href="" target="_blank" class="text-black flex flex-row items-center gap-2 bg-base-200 rounded-lg p-1"><FileText size={24}></FileText>Grundrissplan_OG....pdf</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="dropdown dropdown-top items-end absolute bottom-4 right-4 z-50">
|
||||
<div class="indicator">
|
||||
{#if Object.keys($notifications).length > 0}
|
||||
<span class="indicator-item badge badge-accent text-xs"
|
||||
>{Object.keys($notifications).length}</span
|
||||
>
|
||||
{/if}
|
||||
<button
|
||||
tabindex="0"
|
||||
class="hover:bg-gray-200 p-3 rounded-lg"
|
||||
>
|
||||
<Bell size={24} />
|
||||
</button>
|
||||
</div>
|
||||
<ul
|
||||
class="dropdown-content mb-2 border border-base-300 z-10 menu py-4 px-0 bg-base-200 rounded-box w-80"
|
||||
>
|
||||
<NotificationProvider component={DashboardNotification} />
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<dialog bind:this={hilfeModal} class="modal">
|
||||
@@ -450,3 +680,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<style lang="postcss">
|
||||
|
||||
*{@apply font-sans
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -44,14 +44,119 @@
|
||||
<div class="flex flex-col gap-2 mt-0 md:mt-8 px-0">
|
||||
<a class="button-tab" href="/dashboard">
|
||||
<Reader width={22} height={22} />
|
||||
Vorgänge
|
||||
</a>
|
||||
<a class="button-tab" href="/dashboard">
|
||||
<Reader width={22} height={22} />
|
||||
Inbox
|
||||
Ausweise
|
||||
</a>
|
||||
|
||||
<hr class="border-gray-600" />
|
||||
|
||||
Besteller
|
||||
|
||||
<div class="flex flex-row mb-4">
|
||||
<div class="item-center mr-4">
|
||||
<img src="../../images/profile-placeholder.svg" alt="profile icon" width="40" height="40" />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
MIchael Makler
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
Eigentümer oder im Auftrag
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
<!-- Soll für den Aussteller sichtbar sein -->
|
||||
Telefon {benutzer.telefon}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="border-gray-600" />
|
||||
|
||||
<!--
|
||||
Mitwirkende
|
||||
|
||||
<div class="flex flex-row mb-1">
|
||||
<div class="item-center mr-4">
|
||||
<img src="../../images/profile-placeholder.svg" alt="profile icon" width="40" height="40" />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
Ernie Energieberater
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
Energieberater
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-row mb-1">
|
||||
<div class="item-center mr-4">
|
||||
<img src="../../images/profile-placeholder.svg" alt="profile icon" width="40" height="40" />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
Peter Planer
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
Architekt
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-row mb-1">
|
||||
<div class="item-center mr-4">
|
||||
<img src="../../images/profile-placeholder.svg" alt="profile icon" width="40" height="40" />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
Hans Meier
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
Eigentümer
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="border-gray-600" />
|
||||
|
||||
Experten in der Nähe
|
||||
|
||||
<div class="flex flex-row mb-1">
|
||||
<div class="item-center mr-4">
|
||||
<img src="../../images/profile-placeholder.svg" alt="profile icon" width="40" height="40" />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
Thorsten Maas
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
Energieberater
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-row mb-1">
|
||||
<div class="item-center mr-4">
|
||||
<img src="../../images/profile-placeholder.svg" alt="profile icon" width="40" height="40" />
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
Herbert Holm
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
Gutachter
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="border-gray-600" />
|
||||
|
||||
<div class="flex justify-end mt-2 mb-2">
|
||||
<button class="button flex flex-row rounded-lg gap-2 bg-secondary text-white text-center">
|
||||
Einladen
|
||||
</button>
|
||||
</div>
|
||||
-->
|
||||
|
||||
{#if benutzer.rolle === "ADMIN"}
|
||||
<li>
|
||||
<details class="[&_.caret]:open:rotate-180" open>
|
||||
@@ -86,30 +191,8 @@
|
||||
</li>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="mt-10 flex flex-col gap-4 px-8">
|
||||
<div class="flex flex-row justify-between items-center">
|
||||
<ThemeController bind:lightTheme></ThemeController>
|
||||
<div class="dropdown dropdown-top">
|
||||
<div class="indicator">
|
||||
{#if Object.keys($notifications).length > 0}
|
||||
<span class="indicator-item badge badge-accent text-xs"
|
||||
>{Object.keys($notifications).length}</span
|
||||
>
|
||||
{/if}
|
||||
<button
|
||||
tabindex="0"
|
||||
class="hover:bg-gray-200 p-3 rounded-lg"
|
||||
>
|
||||
<Bell size={24} />
|
||||
</button>
|
||||
</div>
|
||||
<ul
|
||||
class="dropdown-content mb-2 border border-base-300 z-10 menu py-4 px-0 bg-base-200 rounded-box w-80"
|
||||
>
|
||||
<NotificationProvider component={DashboardNotification} />
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="items-end bottom-4 right-4 z-50 mt-4">
|
||||
<div class="flex flex-row justify-end items-end">
|
||||
<a
|
||||
href="/dashboard/einstellungen"
|
||||
class="hover:bg-gray-200 p-3 rounded-lg"
|
||||
@@ -118,12 +201,6 @@
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="divider px-8"></div>
|
||||
<a
|
||||
href="/dashboard/einstellungen"
|
||||
class="hover:bg-gray-200 no-animation focus:shadow-none justify-start py-4 h-auto px-8 rounded-none w-full flex flex-row gap-4"
|
||||
>
|
||||
</a>
|
||||
</aside>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, BildClient, getAusweisartFromId, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, BildClient, getAusweisartFromId, ObjektClient, RechnungClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js";
|
||||
import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js";
|
||||
import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js";
|
||||
import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js";
|
||||
import { Enums, prisma, Rechnung } from "#lib/server/prisma.js";
|
||||
|
||||
|
||||
/**
|
||||
* Gibt den richtigen Prisma Adapter für die Ausweisart basierend auf der UID zurück, oder null bei einer falschen UID.
|
||||
* @param id Die Ausweis UID
|
||||
|
||||
@@ -169,19 +169,19 @@
|
||||
|
||||
<!-- C - Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen -->
|
||||
|
||||
<!-- <Bereich
|
||||
<Bereich
|
||||
bereich="C"
|
||||
title="Berechnungshilfe und Tabelle der Hüllflächen, U-Werte und Gebäudevolumen"
|
||||
><GebaeudeVolumen bind:ausweis /></Bereich
|
||||
> -->
|
||||
>
|
||||
|
||||
<!-- D - Eingabe der Fensterflächen und Konstruktion von Dach, Wänden und Boden -->
|
||||
|
||||
<!-- <Bereich
|
||||
<Bereich
|
||||
bereich="D"
|
||||
title="Eingabe der Fensterflächen und Konstruktion von Dach, Wänden und Boden"
|
||||
><Fensterflaechen bind:ausweis /></Bereich
|
||||
> -->
|
||||
>
|
||||
|
||||
<!-- E - Angabe zu Lüftung und Kühlung -->
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
bind:ausweis
|
||||
{ausweisart}
|
||||
/></Bereich
|
||||
> -->
|
||||
>
|
||||
|
||||
<Bereich bereich="D" title="Gebäudepläne & Unterlagen">
|
||||
<div
|
||||
|
||||
@@ -1,18 +1,24 @@
|
||||
<script lang="ts">
|
||||
import { AufnahmeKomplettClient, BenutzerClient } from "#components/Ausweis/types.js";
|
||||
import AusweisPruefenNotification from "#components/AusweisPruefenNotification.svelte";
|
||||
import Carousel from "#components/Carousel.svelte";
|
||||
import DashboardAusweis from "#components/Dashboard/DashboardAusweis.svelte";
|
||||
import DashboardNachweis from "#components/Dashboard/DashboardNachweis.svelte";
|
||||
import NotificationWrapper from "#components/Notifications/NotificationWrapper.svelte";
|
||||
import { Objekt } from "#lib/client/prisma.js";
|
||||
import { Aufnahme, BedarfsausweisWohnen, Bild, Objekt, Rechnung, Unterlage, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js";
|
||||
import mime from "mime"
|
||||
import { ChevronLeft, ChevronRight, FileText } from "radix-svelte-icons";
|
||||
import { CaretRight, ChevronLeft, ChevronRight, FileText } from "radix-svelte-icons";
|
||||
import CaretLeft from "radix-svelte-icons/src/lib/icons/CaretLeft.svelte";
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let aufnahme: AufnahmeKomplettClient;
|
||||
export let objekt: Objekt;
|
||||
export let ausweis: (VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen) & {
|
||||
rechnung: Rechnung,
|
||||
aufnahme: Aufnahme & {
|
||||
bilder: Bild[],
|
||||
unterlagen: Unterlage[],
|
||||
objekt: Objekt
|
||||
}
|
||||
};
|
||||
export let benutzer: BenutzerClient;
|
||||
export let page: number;
|
||||
export let totalPageCount: number;
|
||||
|
||||
|
||||
let dropdownOpen = false;
|
||||
@@ -22,42 +28,46 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<h1>{objekt.adresse}, {objekt.plz} {objekt.ort}</h1>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="relative mb-6">
|
||||
<div class="justify-between items-center flex flex-row">
|
||||
<div class="text-2xl rounded-lg gap-2 bg-grey-200 text-center">
|
||||
ID: {ausweis.id}
|
||||
</div>
|
||||
<div class="text-2xl">{ausweis.aufnahme.objekt.adresse}, {ausweis.aufnahme.objekt.plz} {ausweis.aufnahme.objekt.ort}</div>
|
||||
<div class="relative">
|
||||
<button class="button flex flex-row rounded-lg gap-2 bg-secondary text-white text-center" on:click={toggleDropdown}>
|
||||
Ausweis erstellen +
|
||||
</button>
|
||||
{#if dropdownOpen}
|
||||
<div class="absolut mt-2 w-56 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5" on:click|stopPropagation on:keydown|stopPropagation on:keyup|stopPropagation>
|
||||
<div class="py-1" role="menu" aria-orientation="vertical" aria-labelledby="options-menu">
|
||||
<a href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?aufnahme={aufnahme.id}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left" role="menuitem">Verbrauchsausweis Wohnen Erstellen</a>
|
||||
<a href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?aufnahme={aufnahme.id}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left" role="menuitem">Verbrauchsausweis Gewerbe Erstellen</a>
|
||||
<a href="/energieausweis-erstellen/bedarfsausweis-wohngebaeude?aufnahme={aufnahme.id}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left" role="menuitem">Bedarfsausweis Erstellen</a>
|
||||
<div class="absolute top-15 left-0 mt-2 w-50 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 z-[9999]" on:click|stopPropagation on:keydown|stopPropagation on:keyup|stopPropagation>
|
||||
<div class="py-1 w-full" role="menu" aria-orientation="vertical" aria-labelledby="options-menu">
|
||||
<a href="/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?aufnahme={ausweis.aufnahme.id}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left" role="menuitem">Verbrauchsausweis<br>Wohnen Erstellen</a>
|
||||
<a href="/energieausweis-erstellen/verbrauchsausweis-gewerbe?aufnahme={ausweis.aufnahme.id}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left" role="menuitem">Verbrauchsausweis<br>Gewerbe Erstellen</a>
|
||||
<a href="/energieausweis-erstellen/bedarfsausweis-wohngebaeude?aufnahme={ausweis.aufnahme.id}" class="block px-4 py-2 text-sm text-gray-700 hover:bg-gray-100 w-full text-left" role="menuitem">Bedarfsausweis<br>Wohnen Erstellen</a>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="my-4 grid grid-cols-1 md:grid-cols-1 lg:grid-cols-1 gap-2">
|
||||
|
||||
<div class="relative bg-gray-100 rounded-md flex justify-center items-center">
|
||||
{#if aufnahme.bilder.length > 0}
|
||||
<Carousel perPage={3}>
|
||||
{#each aufnahme.bilder as bild, i (i)}
|
||||
<img src="/bilder/{bild.id}.jpg" alt={bild.kategorie} class="max-h-[25vh] h-full w-full object-contain">
|
||||
{#if ausweis.aufnahme.bilder.length > 0}
|
||||
<Carousel perPage={4}>
|
||||
{#each ausweis.aufnahme.bilder as bild, i (i)}
|
||||
<img src="/bilder/{bild.id}.jpg" alt={bild.kategorie} class="max-h-[15vh] h-full w-full object-contain">
|
||||
{/each}
|
||||
<span slot="left-control" class="p-2.5 bg-opacity-50 bg-white block rounded-full"><ChevronLeft size={24}></ChevronLeft></span>
|
||||
<span slot="right-control" class="p-2.5 bg-opacity-50 bg-white block rounded-full"><ChevronRight size={24}></ChevronRight></span>
|
||||
</Carousel>
|
||||
{/if}
|
||||
</div>
|
||||
{#if aufnahme.unterlagen.length > 0}
|
||||
{#if ausweis.aufnahme.unterlagen.length > 0}
|
||||
<h3 class="font-semibold">Unterlagen</h3>
|
||||
<div class="grid grid-flow-col gap-4">
|
||||
{#each aufnahme.unterlagen as unterlage}
|
||||
{#each ausweis.aufnahme.unterlagen as unterlage}
|
||||
<a href="/unterlagen/{unterlage.id}.{mime.getExtension(unterlage.mime)}" target="_blank" class="text-black flex flex-row items-center gap-2 bg-base-200 p-2 rounded-lg"><FileText size={32}></FileText> {unterlage.name}</a>
|
||||
{/each}
|
||||
</div>
|
||||
@@ -65,7 +75,34 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div class="my-4 grid grid-cols-[1fr] md:grid-cols-[7fr,16fr,5fr] lg:grid-cols-[7fr,16fr,5fr] min-h-[600px]">
|
||||
<DashboardAusweis {benutzer} {ausweis} aufnahme={ausweis.aufnahme} objekt={ausweis.aufnahme.objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center justify-between">
|
||||
{#if page > 1}
|
||||
<a class="p-2 rounded-lg hover:bg-gray-200 cursor-pointer" href="/dashboard/objekte/{page - 1}">
|
||||
<CaretLeft size={30}></CaretLeft>
|
||||
</a>
|
||||
{:else}
|
||||
<div></div>
|
||||
{/if}
|
||||
<div class="text-lg">Ausweis {page} / {totalPageCount}</div>
|
||||
{#if totalPageCount > page}
|
||||
<a class="p-2 rounded-lg hover:bg-gray-200 cursor-pointer" href="/dashboard/objekte/{page + 1}">
|
||||
<CaretRight size={30}></CaretRight>
|
||||
</a>
|
||||
{:else}
|
||||
<div></div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="fixed bottom-8 right-8 flex flex-col gap-4">
|
||||
<NotificationWrapper></NotificationWrapper>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* TODO: Das kann auch als Tailwind Klasse gemacht werden */
|
||||
.button {
|
||||
padding: 0.5rem 1rem;
|
||||
font-size: 1rem;
|
||||
@@ -73,28 +110,3 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="my-4 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
|
||||
{#each aufnahme.verbrauchsausweise_wohnen as ausweis}
|
||||
<DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
|
||||
{/each}
|
||||
{#each aufnahme.bedarfsausweise_wohnen as ausweis}
|
||||
<DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
|
||||
{/each}
|
||||
{#each aufnahme.verbrauchsausweise_gewerbe as ausweis}
|
||||
<DashboardAusweis {benutzer} {ausweis} {aufnahme} {objekt} rechnung={ausweis.rechnung}></DashboardAusweis>
|
||||
{/each}
|
||||
{#each aufnahme.geg_nachweise_wohnen as nachweis}
|
||||
<DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis>
|
||||
{/each}
|
||||
{#each aufnahme.geg_nachweise_gewerbe as nachweis}
|
||||
<DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis>
|
||||
{/each}
|
||||
{#each aufnahme.bedarfsausweise_gewerbe as nachweis}
|
||||
<DashboardAusweis {benutzer} ausweis={nachweis} {aufnahme} {objekt} rechnung={nachweis.rechnung}></DashboardAusweis>
|
||||
{/each}
|
||||
</div>
|
||||
|
||||
<div class="fixed bottom-8 right-8 flex flex-col gap-4">
|
||||
<NotificationWrapper></NotificationWrapper>
|
||||
</div>
|
||||
@@ -71,36 +71,6 @@
|
||||
<Person size={22} />
|
||||
Profil
|
||||
</Tab>
|
||||
<Tab>
|
||||
<Reader width={22} height={22} />
|
||||
Ausweise
|
||||
</Tab>
|
||||
<Tab>
|
||||
<EnvelopeClosed width={22} height={22} />
|
||||
Kontakt
|
||||
</Tab>
|
||||
<li>
|
||||
<details>
|
||||
<summary class="tab w-full outline-0 hover:outline-0">
|
||||
<Cube width={22} height={22} />
|
||||
Services</summary
|
||||
>
|
||||
<ul>
|
||||
<li>
|
||||
<Tab>
|
||||
<EnvelopeClosed width={22} height={22} />
|
||||
Kontakt
|
||||
</Tab>
|
||||
</li>
|
||||
<li>
|
||||
<Tab>
|
||||
<EnvelopeClosed width={22} height={22} />
|
||||
Kontakt
|
||||
</Tab>
|
||||
</li>
|
||||
</ul>
|
||||
</details>
|
||||
</li>
|
||||
</TabList>
|
||||
<div
|
||||
class="border border-base-300 w-full h-full rounded-lg bg-base-200 p-8"
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
import Pagination from "#components/Pagination.svelte";
|
||||
import { Enums, Objekt } from "#lib/client/prisma.js";
|
||||
|
||||
|
||||
export let user: BenutzerClient;
|
||||
export let objekte: ObjektKomplettClient[];
|
||||
export let page: number;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { TokenType } from "#lib/auth/types.js";
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description:
|
||||
|
||||
@@ -39,31 +39,49 @@ const aufnahme = await prisma.aufnahme.findUnique({
|
||||
bilder: true,
|
||||
unterlagen: true,
|
||||
bedarfsausweise_wohnen: {
|
||||
orderBy: {
|
||||
updated_at: "desc"
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
},
|
||||
verbrauchsausweise_gewerbe: {
|
||||
orderBy: {
|
||||
updated_at: "desc"
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
},
|
||||
verbrauchsausweise_wohnen: {
|
||||
orderBy: {
|
||||
updated_at: "desc"
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
},
|
||||
bedarfsausweise_gewerbe: {
|
||||
orderBy: {
|
||||
updated_at: "desc"
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
},
|
||||
geg_nachweise_gewerbe: {
|
||||
orderBy: {
|
||||
updated_at: "desc"
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
},
|
||||
geg_nachweise_wohnen: {
|
||||
orderBy: {
|
||||
updated_at: "desc"
|
||||
},
|
||||
include: {
|
||||
rechnung: true
|
||||
}
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
---
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
|
||||
import { prisma, Enums } from "#lib/server/prisma";
|
||||
import { createCaller } from "src/astro-typesafe-api-caller";
|
||||
|
||||
const caller = createCaller(Astro)
|
||||
|
||||
const id = Astro.url.searchParams.get("id");
|
||||
|
||||
if (!id) {
|
||||
return Astro.redirect("/dashboard/objekte")
|
||||
}
|
||||
|
||||
const user = await caller.user.self.GET.fetch(undefined, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
}
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
return Astro.redirect("/auth/login")
|
||||
}
|
||||
|
||||
const objekte = await prisma.objekt.findFirst({
|
||||
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
||||
benutzer: {
|
||||
id: user.id
|
||||
},
|
||||
} : {
|
||||
...(id ? {OR: [
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_gewerbe: {
|
||||
some: {
|
||||
id
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_wohnen: {
|
||||
some: {
|
||||
id
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
bedarfsausweise_wohnen: {
|
||||
some: {
|
||||
id
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},]} : {})
|
||||
},
|
||||
orderBy: {
|
||||
erstellungsdatum: "desc"
|
||||
},
|
||||
include: {
|
||||
aufnahmen: {
|
||||
include: {
|
||||
bilder: true,
|
||||
unterlagen: true,
|
||||
bedarfsausweise_wohnen: true,
|
||||
verbrauchsausweise_gewerbe: true,
|
||||
verbrauchsausweise_wohnen: true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
---
|
||||
@@ -2,4 +2,5 @@
|
||||
return Astro.redirect("/dashboard/objekte/1", 301);
|
||||
---
|
||||
|
||||
|
||||
<script></script>
|
||||
@@ -1,168 +1,134 @@
|
||||
---
|
||||
import UserLayout from "#layouts/DashboardLayout.astro";
|
||||
import { Enums, prisma } from "#lib/server/prisma";
|
||||
import DashboardModule from "#modules/Dashboard/DashboardModule.svelte";
|
||||
import { getCurrentUser } from "#lib/server/user";
|
||||
import DashboardAufnahmeModule from "#modules/Dashboard/DashboardAufnahmeModule.svelte";
|
||||
import { getPrismaAusweisAdapter } from "#lib/server/ausweis";
|
||||
|
||||
const params = Astro.params;
|
||||
const page = Number(params.page)
|
||||
|
||||
const page = Number(params.page);
|
||||
|
||||
const id = Astro.url.searchParams.get("id") || undefined;
|
||||
|
||||
const user = await getCurrentUser(Astro)
|
||||
const user = await getCurrentUser(Astro);
|
||||
|
||||
if (!user) {
|
||||
return Astro.redirect("/auth/login")
|
||||
return Astro.redirect("/auth/login");
|
||||
}
|
||||
|
||||
const totalPages = await prisma.objekt.count({
|
||||
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
||||
const totalPageCount = await prisma.aufnahme.count({
|
||||
where:
|
||||
user.rolle === Enums.BenutzerRolle.USER
|
||||
? {
|
||||
benutzer: {
|
||||
id: user.id
|
||||
id: user.id,
|
||||
},
|
||||
}
|
||||
} : {}
|
||||
})
|
||||
: {},
|
||||
});
|
||||
|
||||
let objekte = []
|
||||
if (id) {
|
||||
objekte = await prisma.objekt.findMany({
|
||||
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
||||
benutzer: {
|
||||
id: user.id
|
||||
},
|
||||
} : {
|
||||
...(id ? {
|
||||
OR: [
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_gewerbe: {
|
||||
some: {
|
||||
id: {
|
||||
contains: id
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_wohnen: {
|
||||
some: {
|
||||
id: {
|
||||
contains: id
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
bedarfsausweise_wohnen: {
|
||||
some: {
|
||||
id: {
|
||||
contains: id
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},]} : {})
|
||||
},
|
||||
orderBy: {
|
||||
erstellungsdatum: "desc"
|
||||
if (page < 1 || page > totalPageCount) {
|
||||
return Astro.redirect("/dashboard/objekte/1");
|
||||
}
|
||||
|
||||
let ausweis,
|
||||
result: { id: string; updated_at: Date }[] = [];
|
||||
// Wir fragen den neuesten Ausweis ab
|
||||
// Falls der Nutzer ein Admin ist dann kommt der ganz neueste ansonsten der neueste des eingeloggten Benutzers.
|
||||
if (user.rolle === Enums.BenutzerRolle.USER) {
|
||||
if (id) {
|
||||
const adapter = getPrismaAusweisAdapter(id);
|
||||
ausweis = await adapter?.findUnique({
|
||||
where: {
|
||||
id,
|
||||
benutzer_id: user.id,
|
||||
},
|
||||
include: {
|
||||
aufnahmen: {
|
||||
rechnung: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
bilder: true,
|
||||
unterlagen: true,
|
||||
bedarfsausweise_wohnen: true,
|
||||
verbrauchsausweise_gewerbe: true,
|
||||
verbrauchsausweise_wohnen: true,
|
||||
bedarfsausweise_gewerbe: true,
|
||||
geg_nachweise_gewerbe: true,
|
||||
geg_nachweise_wohnen: true
|
||||
}
|
||||
}
|
||||
objekt: true,
|
||||
},
|
||||
take: 25,
|
||||
skip: (page - 1) * 25
|
||||
})
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
result =
|
||||
await prisma.$queryRaw`SELECT id, updated_at FROM "VerbrauchsausweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
|
||||
SELECT id, updated_at FROM "VerbrauchsausweisGewerbe" WHERE benutzer_id = ${user.id} UNION ALL
|
||||
SELECT id, updated_at FROM "BedarfsausweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
|
||||
SELECT id, updated_at FROM "BedarfsausweisGewerbe" WHERE benutzer_id = ${user.id} UNION ALL
|
||||
SELECT id, updated_at FROM "GEGNachweisWohnen" WHERE benutzer_id = ${user.id} UNION ALL
|
||||
SELECT id, updated_at FROM "GEGNachweisGewerbe" WHERE benutzer_id = ${user.id}
|
||||
ORDER BY updated_at DESC LIMIT 1 OFFSET ${page - 1}`;
|
||||
}
|
||||
} else {
|
||||
objekte = await prisma.objekt.findMany({
|
||||
where: user.rolle === Enums.BenutzerRolle.USER ? {
|
||||
benutzer: {
|
||||
id: user.id
|
||||
},
|
||||
} : {
|
||||
OR: [
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_gewerbe: {
|
||||
some: {
|
||||
ausgestellt: false,
|
||||
bestellt: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
verbrauchsausweise_wohnen: {
|
||||
some: {
|
||||
ausgestellt: false,
|
||||
bestellt: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
aufnahmen: {
|
||||
every: {
|
||||
bedarfsausweise_wohnen: {
|
||||
some: {
|
||||
ausgestellt: false,
|
||||
bestellt: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
}]
|
||||
},
|
||||
orderBy: {
|
||||
erstellungsdatum: "desc"
|
||||
if (id) {
|
||||
const adapter = getPrismaAusweisAdapter(id);
|
||||
ausweis = await adapter?.findUnique({
|
||||
where: {
|
||||
id,
|
||||
},
|
||||
include: {
|
||||
aufnahmen: {
|
||||
rechnung: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
bilder: true,
|
||||
unterlagen: true,
|
||||
bedarfsausweise_wohnen: true,
|
||||
verbrauchsausweise_gewerbe: true,
|
||||
verbrauchsausweise_wohnen: true,
|
||||
bedarfsausweise_gewerbe: true,
|
||||
geg_nachweise_gewerbe: true,
|
||||
geg_nachweise_wohnen: true
|
||||
}
|
||||
}
|
||||
objekt: true,
|
||||
},
|
||||
take: 25,
|
||||
skip: (page - 1) * 25
|
||||
})
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
result =
|
||||
await prisma.$queryRaw`SELECT id, updated_at FROM "VerbrauchsausweisWohnen" UNION ALL
|
||||
SELECT id, updated_at FROM "VerbrauchsausweisGewerbe" UNION ALL
|
||||
SELECT id, updated_at FROM "BedarfsausweisWohnen" UNION ALL
|
||||
SELECT id, updated_at FROM "BedarfsausweisGewerbe" UNION ALL
|
||||
SELECT id, updated_at FROM "GEGNachweisWohnen" UNION ALL
|
||||
SELECT id, updated_at FROM "GEGNachweisGewerbe"
|
||||
ORDER BY updated_at DESC LIMIT 1 OFFSET ${page - 1}`;
|
||||
}
|
||||
}
|
||||
|
||||
if (result.length > 0) {
|
||||
const adapter = getPrismaAusweisAdapter(result[0].id);
|
||||
|
||||
ausweis = await adapter?.findUnique({
|
||||
where: {
|
||||
id: result[0].id,
|
||||
},
|
||||
include: {
|
||||
rechnung: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
bilder: true,
|
||||
unterlagen: true,
|
||||
objekt: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (!ausweis) {
|
||||
return Astro.redirect("/dashboard/objekte/1")
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
<UserLayout title="Objekte" {user}>
|
||||
<DashboardModule {user} {objekte} totalPages={Math.ceil(totalPages / 25)} page={page} {id} client:load />
|
||||
<DashboardAufnahmeModule
|
||||
{ausweis}
|
||||
benutzer={user}
|
||||
{totalPageCount}
|
||||
{page}
|
||||
client:load
|
||||
/>
|
||||
<!-- {!aufnahme ? <p>Keine weiteren Ausweise vorhanden.</p> : <DashboardAufnahmeModule {user} {aufnahme} benutzer={user} objekt={aufnahme.objekt} client:load/>} -->
|
||||
<!-- <DashboardModule {user} {objekte} totalPages={Math.ceil(totalPages / 25)} page={page} {id} client:load /> -->
|
||||
</UserLayout>
|
||||
@@ -16,6 +16,7 @@ export const GET: APIRoute = async (Astro) => {
|
||||
return new Response(null, { status: 404 });
|
||||
}
|
||||
|
||||
|
||||
const ausweisart = getAusweisartFromId(ausweis_id)
|
||||
|
||||
let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | null = null;
|
||||
|
||||
Reference in New Issue
Block a user