737
dbml/schema.dbml
737
dbml/schema.dbml
@@ -1,737 +0,0 @@
|
|||||||
//// ------------------------------------------------------
|
|
||||||
//// THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY)
|
|
||||||
//// ------------------------------------------------------
|
|
||||||
|
|
||||||
Project "IBCornelsen Database" {
|
|
||||||
database_type: 'PostgreSQL'
|
|
||||||
Note: ''
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Anteilshaber {
|
|
||||||
id Int [pk, increment]
|
|
||||||
benutzer_id Int [not null]
|
|
||||||
rolle String
|
|
||||||
privilegien BigInt
|
|
||||||
uid String [unique, not null]
|
|
||||||
benutzer benutzer [not null]
|
|
||||||
objekt_id Int [not null]
|
|
||||||
objekt Objekt [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table ApiRequests {
|
|
||||||
id Int [pk, increment]
|
|
||||||
date DateTime [default: `now()`, not null]
|
|
||||||
ip String [not null]
|
|
||||||
method String [not null]
|
|
||||||
path String [not null]
|
|
||||||
status Int [not null]
|
|
||||||
responseTime Float [not null]
|
|
||||||
responseSize Int [not null]
|
|
||||||
userAgent String [not null]
|
|
||||||
user_id Int
|
|
||||||
user benutzer
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Aufnahme {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null, note: '@zod.describe("UID der Gebäude Aufnahme")']
|
|
||||||
benutzer_id Int
|
|
||||||
benutzer benutzer
|
|
||||||
ausweisart Ausweisart [note: '@zod.describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen")']
|
|
||||||
gebaeudetyp String [note: '@zod.describe("Art des Gebäudes und seiner primären Nutzungsart")']
|
|
||||||
gebaeudeteil String [note: '@zod.describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil")']
|
|
||||||
baujahr_gebaeude Int[] [not null, note: '@zod.describe("Alle Jahre in denen das Gebäude konstruiert oder grundlegend verändert wurde")']
|
|
||||||
baujahr_heizung Int[] [not null, note: '@zod.describe("Alle Jahre in denen die Heizung eingebaut oder grundlegend verändert wurde")']
|
|
||||||
baujahr_klima Int[] [not null, note: '@zod.describe("Alle Jahre in denen die Klimaanlage eingebaut oder grundlegend verändert wurde")']
|
|
||||||
einheiten Int [note: '@zod.describe("Anzahl der (Wohn)Einheiten im Gebäude")']
|
|
||||||
flaeche Int [note: '@zod.describe("Wohnfläche bei Wohngebäuden, Nutzfläche bei Gewerbegebäuden")']
|
|
||||||
nutzflaeche Int [note: '@zod.describe("(energetische) Nutzfläche des Gebäudes. Bei Gewerbegebäuden entspricht Sie der Nutzfläche")']
|
|
||||||
saniert Boolean [note: '@zod.describe("Falls das Gebäude energetisch saniert ist, sollte dieser Wert auf true stehen")']
|
|
||||||
keller Heizungsstatus [note: '@zod.describe("Ob ein Keller vorhanden, beheizt oder unbeheizt ist")']
|
|
||||||
dachgeschoss Heizungsstatus [note: '@zod.describe("Ob ein Dachgeschoss vorhanden, beheizt oder unbeheizt ist")']
|
|
||||||
lueftung Lueftungskonzept [note: '@zod.describe("Art der Gebäudelüftung")']
|
|
||||||
kuehlung String [note: '@zod.describe("Art der Gebäudekühlung")']
|
|
||||||
leerstand Int [note: '@zod.describe("Prozentualer Leerstand des Gebäudes in einem durchschnittlichen Jahr")']
|
|
||||||
alternative_heizung Boolean [note: '@zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
|
|
||||||
alternative_warmwasser Boolean [note: '@zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
|
|
||||||
alternative_lueftung Boolean [note: '@zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
|
|
||||||
alternative_kuehlung Boolean [note: '@zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")']
|
|
||||||
brennstoff_1 String [note: '@zod.describe("Genutzer Brennstoff der primären Energiequelle")']
|
|
||||||
brennstoff_2 String [note: '@zod.describe("Genutzer Brennstoff der sekundären Energiequelle")']
|
|
||||||
boxpruefung Boolean [default: false]
|
|
||||||
energieeffizienzklasse String [note: '@zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes")']
|
|
||||||
erstellungsdatum DateTime [default: `now()`, note: '@zod.describe("Datum an dem der Kunde den Ausweis erstellt hat")']
|
|
||||||
ausstellungsdatum DateTime [note: '@zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat")']
|
|
||||||
zentralheizung Boolean [note: '@zod.describe("Falls das Gebäude über eine Zentralbeheizung verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
solarsystem_warmwasser Boolean [note: '@zod.describe("Falls das Gebäude über ein Solarsystem für Warmwasser verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
warmwasser_rohre_gedaemmt Boolean [note: '@zod.describe("Falls die Warmwasserrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
niedertemperatur_kessel Boolean [note: '@zod.describe("Falls das Gebäude über einen Niedertemperaturkessel verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
brennwert_kessel Boolean [note: '@zod.describe("Falls das Gebäude über einen Brennwertkessel verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
heizungsrohre_gedaemmt Boolean [note: '@zod.describe("Falls die Heizungsrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
standard_kessel Boolean
|
|
||||||
waermepumpe Boolean [note: '@zod.describe("Falls das Gebäude über eine Wärmepumpe verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
raum_temperatur_regler Boolean [note: '@zod.describe("Falls das Gebäude über einen Raumtemperaturregler verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
photovoltaik Boolean [note: '@zod.describe("Falls das Gebäude über eine Photovoltaikanlage verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
durchlauf_erhitzer Boolean [note: '@zod.describe("Falls das Gebäude über einen Durchlauferhitzer verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
einzelofen Boolean
|
|
||||||
zirkulation Boolean [note: '@zod.describe("Falls das Gebäude über eine Zirkulationspumpe verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
einfach_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes einfach gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
dreifach_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes dreifach gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
fenster_teilweise_undicht Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes teilweise undicht sind, sollte dieser Wert auf true stehen")']
|
|
||||||
doppel_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes doppelt gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
fenster_dicht Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes dicht sind, sollte dieser Wert auf true stehen")']
|
|
||||||
rolllaeden_kaesten_gedaemmt Boolean [note: '@zod.describe("Falls das Gebäude über gedämmte Rolllädenkästen verfügt, sollte dieser Wert auf true stehen")']
|
|
||||||
isolier_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes isolier Verglasung haben, sollte dieser Wert auf true stehen")']
|
|
||||||
tueren_undicht Boolean [note: '@zod.describe("Falls die Türen des Gebäudes undicht sind, sollte dieser Wert auf true stehen")']
|
|
||||||
tueren_dicht Boolean [note: '@zod.describe("Falls die Türen des Gebäudes dicht sind, sollte dieser Wert auf true stehen")']
|
|
||||||
dachgeschoss_gedaemmt Boolean [note: '@zod.describe("Falls das Dachgeschoss des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
keller_decke_gedaemmt Boolean [note: '@zod.describe("Falls die Kellerdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
keller_wand_gedaemmt Boolean [note: '@zod.describe("Falls die Kellerwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
aussenwand_gedaemmt Boolean [note: '@zod.describe("Falls die Außenwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
oberste_geschossdecke_gedaemmt Boolean [note: '@zod.describe("Falls die oberste Geschossdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
aussenwand_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen")']
|
|
||||||
dachgeschoss_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
oberste_geschossdecke_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls die oberste Geschossdecke des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
events Event [not null]
|
|
||||||
bilder Bild [not null]
|
|
||||||
unterlagen Unterlage [not null]
|
|
||||||
bedarfsausweise_wohnen BedarfsausweisWohnen [not null]
|
|
||||||
verbrauchsausweise_gewerbe VerbrauchsausweisGewerbe [not null]
|
|
||||||
verbrauchsausweise_wohnen VerbrauchsausweisWohnen [not null]
|
|
||||||
geg_nachweise_wohnen GEGNachweisWohnen [not null]
|
|
||||||
geg_nachweise_gewerbe GEGNachweisGewerbe [not null]
|
|
||||||
bedarfsausweise_gewerbe BedarfsausweisGewerbe [not null]
|
|
||||||
objekt_id Int [not null]
|
|
||||||
objekt Objekt [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table BedarfsausweisGewerbe {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
|
|
||||||
keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
|
|
||||||
storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
abluftanlage Boolean [default: false]
|
|
||||||
zu_abluftanlage Boolean [default: false]
|
|
||||||
konditionierung_der_zuluft Boolean [default: false]
|
|
||||||
luftheizung Boolean [default: false]
|
|
||||||
hallenheizung Boolean [default: false]
|
|
||||||
dunkelstrahler Boolean [default: false]
|
|
||||||
direktheizung Boolean [default: false]
|
|
||||||
infrarotstrahler Boolean [default: false]
|
|
||||||
fussbodenheizung Boolean [default: false]
|
|
||||||
bauteilaktivierung Boolean [default: false]
|
|
||||||
klimatisierung Boolean [default: false]
|
|
||||||
benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
|
|
||||||
benutzer benutzer
|
|
||||||
aufnahme_id Int [unique, not null]
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
rechnung_id Int [unique]
|
|
||||||
rechnung Rechnung
|
|
||||||
geg_einpreisung_id Int [unique]
|
|
||||||
geg_einpreisung GEGEinpreisung
|
|
||||||
}
|
|
||||||
|
|
||||||
Table BedarfsausweisWohnen {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
benutzer_id Int
|
|
||||||
ausstellgrund Ausstellgrund
|
|
||||||
registriernummer String
|
|
||||||
alternative_heizung Boolean
|
|
||||||
alternative_warmwasser Boolean
|
|
||||||
alternative_lueftung Boolean
|
|
||||||
alternative_kuehlung Boolean
|
|
||||||
anzahl_vollgeschosse Int
|
|
||||||
geschosshoehe Float
|
|
||||||
anzahl_gauben Int
|
|
||||||
breite_gauben Float
|
|
||||||
masse_a Float
|
|
||||||
masse_b Float
|
|
||||||
masse_c Float
|
|
||||||
masse_d Float
|
|
||||||
masse_e Float
|
|
||||||
masse_f Float
|
|
||||||
fensterflaeche_so_sw Float
|
|
||||||
fensterflaeche_nw_no Float
|
|
||||||
aussenwandflaeche_unbeheizt Float
|
|
||||||
dachflaeche Float
|
|
||||||
deckenflaeche Float
|
|
||||||
dach_u_wert Float
|
|
||||||
decke_u_wert Float
|
|
||||||
aussenwand_flaeche Float
|
|
||||||
aussenwand_u_wert Float
|
|
||||||
fussboden_flaeche Float
|
|
||||||
fussboden_u_wert Float
|
|
||||||
volumen Float
|
|
||||||
dicht Boolean
|
|
||||||
fenster_flaeche_1 Float
|
|
||||||
fenster_art_1 Float
|
|
||||||
fenster_flaeche_2 Float
|
|
||||||
fenster_art_2 Float
|
|
||||||
dachfenster_flaeche Float
|
|
||||||
dachfenster_art Float
|
|
||||||
haustuer_flaeche Float
|
|
||||||
haustuer_art Float
|
|
||||||
dach_bauart String
|
|
||||||
decke_bauart String
|
|
||||||
dach_daemmung Float
|
|
||||||
decke_daemmung Float
|
|
||||||
aussenwand_daemmung Float
|
|
||||||
boden_daemmung Float
|
|
||||||
aussenwand_bauart String
|
|
||||||
boden_bauart String
|
|
||||||
warmwasser_verteilung String
|
|
||||||
warmwasser_speicherung String
|
|
||||||
warmwasser_erzeugung String
|
|
||||||
heizung_zentral Boolean
|
|
||||||
heizung_verteilung String
|
|
||||||
heizung_speicherung String
|
|
||||||
waerme_erzeugung_heizung String
|
|
||||||
anteil_zusatzheizung Float
|
|
||||||
kollektor_flaeche Float
|
|
||||||
ausgestellt Boolean [default: false]
|
|
||||||
storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")']
|
|
||||||
beschreibung String
|
|
||||||
kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")']
|
|
||||||
benutzer benutzer
|
|
||||||
rechnung_id Int [unique]
|
|
||||||
rechnung Rechnung
|
|
||||||
aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")']
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table benutzer {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
name String
|
|
||||||
vorname String
|
|
||||||
email String [unique, not null]
|
|
||||||
passwort String [not null]
|
|
||||||
profilbild String
|
|
||||||
plz String
|
|
||||||
ort String
|
|
||||||
adresse String
|
|
||||||
telefon String
|
|
||||||
anrede String
|
|
||||||
rolle BenutzerRolle [not null, default: 'USER']
|
|
||||||
firma String
|
|
||||||
lex_office_id String
|
|
||||||
verified Boolean [not null, default: false]
|
|
||||||
BedarfsausweisWohnen BedarfsausweisWohnen [not null]
|
|
||||||
documenttemplates documenttemplates [not null]
|
|
||||||
objekte Objekt [not null]
|
|
||||||
rechnungen Rechnung [not null]
|
|
||||||
tokens tokens [not null]
|
|
||||||
VerbrauchsausweisGewerbe VerbrauchsausweisGewerbe [not null]
|
|
||||||
VerbrauchsausweisWohnen VerbrauchsausweisWohnen [not null]
|
|
||||||
ApiRequests ApiRequests [not null]
|
|
||||||
RefreshTokens RefreshTokens [not null]
|
|
||||||
aufnahmen Aufnahme [not null]
|
|
||||||
geg_einpreisungen GEGEinpreisung [not null]
|
|
||||||
geg_nachweise_gewerbe GEGNachweisGewerbe [not null]
|
|
||||||
geg_nachweise_wohnen GEGNachweisWohnen [not null]
|
|
||||||
bedarfsausweise_gewerbe BedarfsausweisGewerbe [not null]
|
|
||||||
ErstellteTickets Tickets [not null]
|
|
||||||
BearbeiteteTickets Tickets [not null]
|
|
||||||
events Event [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Bild {
|
|
||||||
id Int [pk, increment]
|
|
||||||
kategorie BilderKategorie [not null]
|
|
||||||
uid String [unique, not null]
|
|
||||||
aufnahme_id Int
|
|
||||||
aufnahme Aufnahme
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Event {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
date DateTime [default: `now()`, not null]
|
|
||||||
title String [not null]
|
|
||||||
description String
|
|
||||||
aufnahme_id Int [not null]
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
benutzer_id Int
|
|
||||||
benutzer benutzer
|
|
||||||
}
|
|
||||||
|
|
||||||
Table GEGEinpreisung {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
empfaenger String
|
|
||||||
strasse String
|
|
||||||
plz String
|
|
||||||
ort String
|
|
||||||
zusatzzeile String
|
|
||||||
telefon String
|
|
||||||
email String
|
|
||||||
abweichende_versand_adresse Boolean [default: false]
|
|
||||||
versand_empfaenger String
|
|
||||||
versand_strasse String
|
|
||||||
versand_plz String
|
|
||||||
versand_ort String
|
|
||||||
versand_zusatzzeile String
|
|
||||||
status Einpreisungsstatus [not null]
|
|
||||||
geg_nachweis_wohnen GEGNachweisWohnen
|
|
||||||
geg_nachweis_gewerbe GEGNachweisGewerbe
|
|
||||||
bedarfsausweis_gewerbe BedarfsausweisGewerbe
|
|
||||||
benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, der diese Einpreisung bekommt.")']
|
|
||||||
benutzer benutzer
|
|
||||||
}
|
|
||||||
|
|
||||||
Table GEGNachweisGewerbe {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
|
|
||||||
keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
|
|
||||||
storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
beschreibung String [note: '@zod.describe("Beschreibung des Bauvorhabens")']
|
|
||||||
benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
|
|
||||||
benutzer benutzer
|
|
||||||
aufnahme_id Int [unique, not null]
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
rechnung_id Int [unique]
|
|
||||||
rechnung Rechnung
|
|
||||||
geg_einpreisung_id Int [unique]
|
|
||||||
geg_einpreisung GEGEinpreisung
|
|
||||||
}
|
|
||||||
|
|
||||||
Table GEGNachweisWohnen {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
|
|
||||||
keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
|
|
||||||
storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
beschreibung String [note: '@zod.describe("Beschreibung des Bauvorhabens")']
|
|
||||||
benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
|
|
||||||
benutzer benutzer
|
|
||||||
aufnahme_id Int [unique, not null]
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
rechnung_id Int [unique]
|
|
||||||
rechnung Rechnung
|
|
||||||
geg_einpreisung_id Int [unique]
|
|
||||||
geg_einpreisung GEGEinpreisung
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Klimafaktoren {
|
|
||||||
id Int [pk, increment]
|
|
||||||
plz String [not null]
|
|
||||||
month Int [not null]
|
|
||||||
year Int [not null]
|
|
||||||
klimafaktor Float [not null, default: 1]
|
|
||||||
|
|
||||||
indexes {
|
|
||||||
(plz, month, year) [unique]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Objekt {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
benutzer_id Int
|
|
||||||
latitude Float
|
|
||||||
longitude Float
|
|
||||||
plz String [note: '@zod.describe("Postleitzahl des Gebäudes")']
|
|
||||||
ort String [note: '@zod.describe("Ort des Gebäudes")']
|
|
||||||
adresse String [note: '@zod.describe("Adresse (Straße und Hausnummer) des Gebäudes")']
|
|
||||||
erstellungsdatum DateTime [default: `now()`]
|
|
||||||
benutzer benutzer
|
|
||||||
aufnahmen Aufnahme [not null]
|
|
||||||
anteilshaber Anteilshaber [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Postleitzahlen {
|
|
||||||
id Int [pk, increment]
|
|
||||||
plz String [not null]
|
|
||||||
stadt String [not null]
|
|
||||||
bundesland String [not null]
|
|
||||||
landkreis String [not null]
|
|
||||||
lat Float [not null]
|
|
||||||
lon Float [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Rechnung {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
benutzer_id Int [not null]
|
|
||||||
empfaenger String
|
|
||||||
strasse String
|
|
||||||
plz String
|
|
||||||
ort String
|
|
||||||
zusatzzeile String
|
|
||||||
telefon String
|
|
||||||
email String
|
|
||||||
abweichende_versand_adresse Boolean [default: false]
|
|
||||||
versand_empfaenger String
|
|
||||||
versand_strasse String
|
|
||||||
versand_plz String
|
|
||||||
versand_ort String
|
|
||||||
versand_zusatzzeile String
|
|
||||||
bezahlmethode Bezahlmethoden [not null]
|
|
||||||
status Rechnungsstatus [not null]
|
|
||||||
services Service[] [not null]
|
|
||||||
ausweistyp AusweisTyp [not null, default: 'Standard']
|
|
||||||
betrag Float [not null]
|
|
||||||
erstellt_am DateTime [default: `now()`, not null]
|
|
||||||
bezahlt_am DateTime
|
|
||||||
storniert_am DateTime
|
|
||||||
transaktions_referenz String [unique]
|
|
||||||
benutzer benutzer [not null]
|
|
||||||
verbrauchsausweis_wohnen VerbrauchsausweisWohnen
|
|
||||||
verbrauchsausweis_gewerbe VerbrauchsausweisGewerbe
|
|
||||||
bedarfsausweis_wohnen BedarfsausweisWohnen
|
|
||||||
bedarfsausweis_gewerbe BedarfsausweisGewerbe
|
|
||||||
geg_nachweis_gewerbe GEGNachweisGewerbe
|
|
||||||
geg_nachweis_wohnen GEGNachweisWohnen
|
|
||||||
}
|
|
||||||
|
|
||||||
Table RefreshTokens {
|
|
||||||
id Int [pk, increment]
|
|
||||||
benutzer_id Int [not null]
|
|
||||||
token String [unique, not null]
|
|
||||||
ip String [not null]
|
|
||||||
expiry DateTime [not null]
|
|
||||||
user benutzer [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Tickets {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
benutzer_id Int
|
|
||||||
created_at DateTime [default: `now()`, not null]
|
|
||||||
updated_at DateTime
|
|
||||||
deleted_at DateTime
|
|
||||||
status TicketStatus [not null, default: 'OFFEN']
|
|
||||||
titel String [not null]
|
|
||||||
beschreibung String [not null]
|
|
||||||
metadata Json
|
|
||||||
email String [not null]
|
|
||||||
bearbeiter_id Int
|
|
||||||
prioritaet Int [default: 0]
|
|
||||||
benutzer benutzer
|
|
||||||
bearbeiter benutzer
|
|
||||||
}
|
|
||||||
|
|
||||||
Table Unterlage {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
name String
|
|
||||||
kategorie String
|
|
||||||
mime String
|
|
||||||
aufnahme_id Int
|
|
||||||
aufnahme Aufnahme
|
|
||||||
}
|
|
||||||
|
|
||||||
Table VerbrauchsausweisGewerbe {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null]
|
|
||||||
benutzer_id Int
|
|
||||||
ausstellgrund Ausstellgrund
|
|
||||||
registriernummer String
|
|
||||||
zusaetzliche_heizquelle Boolean
|
|
||||||
brennstoff_1 String
|
|
||||||
einheit_1 String
|
|
||||||
brennstoff_2 String
|
|
||||||
einheit_2 String
|
|
||||||
startdatum DateTime
|
|
||||||
verbrauch_1 Int
|
|
||||||
verbrauch_2 Int
|
|
||||||
verbrauch_3 Int
|
|
||||||
verbrauch_4 Int
|
|
||||||
verbrauch_5 Int
|
|
||||||
verbrauch_6 Int
|
|
||||||
strom_1 Int
|
|
||||||
strom_2 Int
|
|
||||||
strom_3 Int
|
|
||||||
stromverbrauch_enthaelt_heizung Boolean
|
|
||||||
stromverbrauch_enthaelt_warmwasser Boolean
|
|
||||||
stromverbrauch_enthaelt_lueftung Boolean
|
|
||||||
stromverbrauch_enthaelt_beleuchtung Boolean
|
|
||||||
stromverbrauch_enthaelt_kuehlung Boolean
|
|
||||||
stromverbrauch_enthaelt_sonstige String
|
|
||||||
kuehlung_enthalten Boolean
|
|
||||||
anteil_kuehlung_1 Float
|
|
||||||
anteil_kuehlung_2 Float
|
|
||||||
keller_beheizt Boolean
|
|
||||||
alternative_heizung Boolean
|
|
||||||
alternative_warmwasser Boolean
|
|
||||||
alternative_lueftung Boolean
|
|
||||||
alternative_kuehlung Boolean
|
|
||||||
warmwasser_enthalten Boolean
|
|
||||||
warmwasser_anteil_bekannt Boolean [note: '@zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
anteil_warmwasser_1 Float
|
|
||||||
anteil_warmwasser_2 Float
|
|
||||||
ausgestellt Boolean [default: false]
|
|
||||||
storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")']
|
|
||||||
beschreibung String
|
|
||||||
kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")']
|
|
||||||
created_at DateTime [default: `now()`, not null]
|
|
||||||
updated_at DateTime [not null]
|
|
||||||
benutzer benutzer
|
|
||||||
rechnung_id Int [unique]
|
|
||||||
rechnung Rechnung
|
|
||||||
aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")']
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table VerbrauchsausweisWohnen {
|
|
||||||
id Int [pk, increment]
|
|
||||||
uid String [unique, not null, note: '@zod.describe("UID des Ausweises")']
|
|
||||||
benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")']
|
|
||||||
ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")']
|
|
||||||
registriernummer String [note: '@zod.describe("Die Registriernummer des Ausweises")']
|
|
||||||
zusaetzliche_heizquelle Boolean [note: '@zod.describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen")']
|
|
||||||
einheit_1 String [note: '@zod.describe("Einheit des Energieträgers der primären Heizquelle")']
|
|
||||||
einheit_2 String [note: '@zod.describe("Einheit des Energieträgers der sekundären Heizquelle")']
|
|
||||||
startdatum DateTime
|
|
||||||
verbrauch_1 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im ersten der drei Verbrauchsjahre")']
|
|
||||||
verbrauch_2 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im zweiten der drei Verbrauchsjahre")']
|
|
||||||
verbrauch_3 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im letzten der drei Verbrauchsjahre")']
|
|
||||||
verbrauch_4 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im ersten der drei Verbrauchsjahre")']
|
|
||||||
verbrauch_5 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im zweiten der drei Verbrauchsjahre")']
|
|
||||||
verbrauch_6 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im letzten der drei Verbrauchsjahre")']
|
|
||||||
warmwasser_enthalten Boolean [note: '@zod.describe("Falls Warmwasser im Verbrauchswert enthalten ist, sollte dieser Wert auf true stehen")']
|
|
||||||
warmwasser_anteil_bekannt Boolean [note: '@zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")']
|
|
||||||
keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")']
|
|
||||||
faktorKeller Float [note: '@zod.describe("Der Faktor mit dem die Wohnfläche erhöht wird wenn die beheizte Gesamtfläche (energetische Nutzfläche) unbekannt ist.")']
|
|
||||||
alternative_heizung Boolean [note: '@zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet, sollte dieser Wert auf true stehen.")']
|
|
||||||
alternative_warmwasser Boolean [note: '@zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme (z.B. Solarsystem, Wärmepumpe, etc.) beinhaltet, sollte dieser Wert auf true stehen.")']
|
|
||||||
alternative_lueftung Boolean [note: '@zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")']
|
|
||||||
alternative_kuehlung Boolean [note: '@zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")']
|
|
||||||
anteil_warmwasser_1 Float [note: '@zod.describe("Anteil des Warmwassers am Gesamtverbrauch der primären Energiequelle in Prozent")']
|
|
||||||
anteil_warmwasser_2 Float [note: '@zod.describe("Anteil des Warmwassers am Gesamtverbrauch der sekundären Energiequelle in Prozent")']
|
|
||||||
ausgestellt Boolean [default: false]
|
|
||||||
storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")']
|
|
||||||
prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")']
|
|
||||||
beschreibung String
|
|
||||||
kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")']
|
|
||||||
created_at DateTime [default: `now()`, not null]
|
|
||||||
updated_at DateTime [not null]
|
|
||||||
benutzer benutzer
|
|
||||||
rechnung_id Int [unique]
|
|
||||||
rechnung Rechnung
|
|
||||||
aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")']
|
|
||||||
aufnahme Aufnahme [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table documenttemplates {
|
|
||||||
id Int [pk, increment]
|
|
||||||
name String [not null]
|
|
||||||
shortdescription String [not null]
|
|
||||||
longdescription String [not null]
|
|
||||||
user_id Int [not null]
|
|
||||||
is_private Boolean [not null, default: true]
|
|
||||||
documenttype Int [not null]
|
|
||||||
filename String [not null]
|
|
||||||
created_at DateTime [default: `now()`, not null]
|
|
||||||
updated_at DateTime [default: `now()`, not null]
|
|
||||||
benutzer benutzer [not null]
|
|
||||||
documenttypes documenttypes [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table documenttypes {
|
|
||||||
id Int [pk, increment]
|
|
||||||
name String [not null]
|
|
||||||
shortdescription String [not null]
|
|
||||||
longdescription String [not null]
|
|
||||||
documenttemplates documenttemplates [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Table tokens {
|
|
||||||
id Int [pk, increment]
|
|
||||||
token String [not null]
|
|
||||||
user_id Int [not null]
|
|
||||||
date_created DateTime [default: `now()`, not null]
|
|
||||||
last_used DateTime [default: `now()`, not null]
|
|
||||||
times_used Int [not null, default: 0]
|
|
||||||
permissions Int [not null, default: 0]
|
|
||||||
benutzer benutzer [not null]
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Heizungsstatus {
|
|
||||||
BEHEIZT
|
|
||||||
UNBEHEIZT
|
|
||||||
NICHT_VORHANDEN
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Lueftungskonzept {
|
|
||||||
Fensterlueftung
|
|
||||||
Schachtlueftung
|
|
||||||
LueftungsanlageMitWaermerueckgewinnung
|
|
||||||
LueftungsanlageOhneWaermerueckgewinnung
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum BenutzerRolle {
|
|
||||||
USER
|
|
||||||
ADMIN
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum BilderKategorie {
|
|
||||||
Heizung
|
|
||||||
Fenster
|
|
||||||
Gebaeude
|
|
||||||
Daemmung
|
|
||||||
AnlagenTechnik
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Einpreisungsstatus {
|
|
||||||
open
|
|
||||||
canceled
|
|
||||||
pending
|
|
||||||
expired
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Bezahlmethoden {
|
|
||||||
paypal
|
|
||||||
giropay
|
|
||||||
sofort
|
|
||||||
creditcard
|
|
||||||
rechnung
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Rechnungsstatus {
|
|
||||||
open
|
|
||||||
canceled
|
|
||||||
pending
|
|
||||||
authorized
|
|
||||||
expired
|
|
||||||
failed
|
|
||||||
paid
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum AusweisTyp {
|
|
||||||
Standard
|
|
||||||
Beratung
|
|
||||||
Offline
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum TicketStatus {
|
|
||||||
OFFEN
|
|
||||||
IN_BEARBEITUNG
|
|
||||||
IN_WARTESCHLEIFE
|
|
||||||
GESCHLOSSEN
|
|
||||||
GELOEST
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum UnterlagenKategorie {
|
|
||||||
Grundriss
|
|
||||||
Sonstiges
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Ausstellgrund {
|
|
||||||
Neubau
|
|
||||||
Vermietung
|
|
||||||
Verkauf
|
|
||||||
Modernisierung
|
|
||||||
Sonstiges
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Ausweisart {
|
|
||||||
VerbrauchsausweisWohnen
|
|
||||||
VerbrauchsausweisGewerbe
|
|
||||||
BedarfsausweisWohnen
|
|
||||||
BedarfsausweisGewerbe
|
|
||||||
GEGNachweisWohnen
|
|
||||||
GEGNachweisGewerbe
|
|
||||||
}
|
|
||||||
|
|
||||||
Enum Service {
|
|
||||||
Telefonberatung
|
|
||||||
Aushang
|
|
||||||
Qualitaetsdruck
|
|
||||||
SameDay
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref: Anteilshaber.benutzer_id - benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Anteilshaber.objekt_id > Objekt.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: ApiRequests.user_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Aufnahme.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Aufnahme.objekt_id > Objekt.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisGewerbe.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisGewerbe.rechnung_id - Rechnung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisGewerbe.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisWohnen.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisWohnen.rechnung_id - Rechnung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: BedarfsausweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Bild.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Event.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Event.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGEinpreisung.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisGewerbe.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisGewerbe.rechnung_id - Rechnung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisGewerbe.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisWohnen.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisWohnen.rechnung_id - Rechnung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: GEGNachweisWohnen.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: Objekt.benutzer_id > benutzer.id
|
|
||||||
|
|
||||||
Ref: Rechnung.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: RefreshTokens.benutzer_id > benutzer.id [delete: Cascade]
|
|
||||||
|
|
||||||
Ref: Tickets.benutzer_id > benutzer.id
|
|
||||||
|
|
||||||
Ref: Tickets.bearbeiter_id > benutzer.id
|
|
||||||
|
|
||||||
Ref: Unterlage.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: VerbrauchsausweisGewerbe.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: VerbrauchsausweisGewerbe.rechnung_id - Rechnung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: VerbrauchsausweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: VerbrauchsausweisWohnen.benutzer_id > benutzer.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: VerbrauchsausweisWohnen.rechnung_id - Rechnung.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: VerbrauchsausweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action]
|
|
||||||
|
|
||||||
Ref: documenttemplates.user_id > benutzer.id [delete: Cascade]
|
|
||||||
|
|
||||||
Ref: documenttemplates.documenttype > documenttypes.id [delete: Cascade]
|
|
||||||
|
|
||||||
Ref: tokens.user_id > benutzer.id [delete: No Action]
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
import { api } from "astro-typesafe-api/client";
|
import { api } from "astro-typesafe-api/client";
|
||||||
import Cookies from "js-cookie";
|
import Cookies from "js-cookie";
|
||||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||||
import { Enums, Objekt } from "#lib/client/prisma.js";
|
import { AusweisTyp, Enums, Objekt } from "#lib/client/prisma.js";
|
||||||
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
|
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
|
||||||
import { shortenUID } from "#server/lib/hash.js";
|
import { shortenUID } from "#server/lib/hash.js";
|
||||||
|
|
||||||
@@ -131,19 +131,21 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-row flex-wrap items-center gap-2">
|
<div class="flex flex-row flex-wrap items-center gap-2">
|
||||||
{#if ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen}
|
<div class="text-lg font-semibold">
|
||||||
<div class="text-lg font-semibold">
|
{#if ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen}
|
||||||
Verbrauchsausweis Wohnen
|
Verbrauchsausweis Wohnen
|
||||||
</div>
|
{:else if ausweisart == Enums.Ausweisart.BedarfsausweisWohnen}
|
||||||
{:else if ausweisart == Enums.Ausweisart.BedarfsausweisWohnen}
|
Bedarfsausweis Wohnen
|
||||||
<div class="text-lg font-semibold">
|
{:else if ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
||||||
Bedarfsausweis Wohnen
|
Verbrauchsausweis Gewerbe
|
||||||
</div>
|
{/if}
|
||||||
{:else if ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
|
||||||
<div class="text-lg font-semibold">
|
{#if rechnung.ausweistyp === Enums.AusweisTyp.Beratung}
|
||||||
Verbrauchsausweis Gewerbe
|
(Beratung)
|
||||||
</div>
|
{:else if rechnung.ausweistyp === Enums.AusweisTyp.Offline}
|
||||||
{/if}
|
(Offline)
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
{#if ausweis.ausgestellt}
|
{#if ausweis.ausgestellt}
|
||||||
<span class="bg-green-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Ausgestellt</span>
|
<span class="bg-green-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Ausgestellt</span>
|
||||||
|
|||||||
125
src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts
Normal file
125
src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
import fuelList from "#components/Ausweis/brennstoffListe.js";
|
||||||
|
import { faker } from "@faker-js/faker";
|
||||||
|
import { Enums } from "#lib/client/prisma.js";
|
||||||
|
|
||||||
|
|
||||||
|
import "cypress-file-upload"
|
||||||
|
import moment from "moment";
|
||||||
|
|
||||||
|
describe("Verbrauchsausweis erstellen Schritt 1", () => {
|
||||||
|
it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => {
|
||||||
|
cy.visit("/angebot-anfragen/geg-nachweis-wohnen-anfragen");
|
||||||
|
|
||||||
|
cy.wait(2000);
|
||||||
|
|
||||||
|
// Wir überprüfen, ob alle Ausstelgründe vorhanden sind, diese sollten genau so viele sein wie in der Datenbank vorhanden sind.
|
||||||
|
cy.get("select[data-cy='ausstellgrund']")
|
||||||
|
.select(
|
||||||
|
faker.number.int({
|
||||||
|
min: 1,
|
||||||
|
max: [Enums.Ausstellgrund.Modernisierung, Enums.Ausstellgrund.Neubau].length - 1,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
// Gebäudetyp
|
||||||
|
cy.get("select[name='gebaeudetyp']").then(($dropdown) => {
|
||||||
|
const options = $dropdown.find('option');
|
||||||
|
// Select the option at the random index
|
||||||
|
cy.get("select[name='gebaeudetyp']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Jetzt Füllen wir das Baujahr vom Gebäude aus.
|
||||||
|
cy.get("input[name='baujahr_gebaeude']")
|
||||||
|
.should("have.attr", "type", "number")
|
||||||
|
.type(
|
||||||
|
faker.number.int({ min: 1900, max: 2021 }).toString() +
|
||||||
|
"{enter}",
|
||||||
|
{ delay: 50 }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Jetzt Füllen wir das Baujahr der Heizung aus.
|
||||||
|
cy.get("input[name='baujahr_heizung']")
|
||||||
|
.should("have.attr", "type", "number")
|
||||||
|
.type(
|
||||||
|
faker.number.int({ min: 1900, max: 2021 }).toString() +
|
||||||
|
"{enter}",
|
||||||
|
{ delay: 50 }
|
||||||
|
);
|
||||||
|
|
||||||
|
// Adresse
|
||||||
|
cy.get("input[name='adresse']").type(faker.location.streetAddress());
|
||||||
|
|
||||||
|
// Postleitzahl
|
||||||
|
cy.get("input[name='plz']").type(
|
||||||
|
faker.location.zipCode({
|
||||||
|
format: "#####",
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// TODO: Ort - Dieser wird aus der Datenbank abgefragt, wir müssen also warten, bis der Dropdown da ist.
|
||||||
|
cy.get("[data-cy='plz-container']").find("button").first().click()
|
||||||
|
|
||||||
|
// Nutzflaeche
|
||||||
|
cy.get("input[name='nutzflaeche']")
|
||||||
|
.should("have.attr", "type", "number")
|
||||||
|
.type(faker.number.int({ min: 50, max: 1000 }).toString());
|
||||||
|
|
||||||
|
// Keller
|
||||||
|
cy.get("select[name='keller']").find("option:not([disabled])").should("have.length", (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length).parent().select(faker.number.int({
|
||||||
|
max: Object.values(Enums.Heizungsstatus).length,
|
||||||
|
min: 1
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Dachgeschoss
|
||||||
|
cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length).parent().select(faker.number.int({
|
||||||
|
max: Object.values(Enums.Heizungsstatus).length,
|
||||||
|
min: 1
|
||||||
|
}));
|
||||||
|
|
||||||
|
cy.get("[data-cy='beschreibung']").type(faker.lorem.paragraphs({ min: 2, max: 10 }))
|
||||||
|
|
||||||
|
// Wärmedämmung Bilder
|
||||||
|
cy.get("input[type='file'][name='plaene']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" }).attachFile("images/daemmung/2.jpeg", { subjectType: "input" });
|
||||||
|
cy.get("input[type='file'][name='unterlagen']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" }).attachFile("images/daemmung/2.jpeg", { subjectType: "input" });
|
||||||
|
|
||||||
|
// Jetzt können wir den Verbrauchsausweis erstellen.
|
||||||
|
cy.get("form[data-cy='nachweis'] button[data-cy='weiter']").click({ force: true });
|
||||||
|
|
||||||
|
cy.url().should("contain", "/kundendaten");
|
||||||
|
|
||||||
|
const email = faker.internet.email();
|
||||||
|
const passwort = "test1234";
|
||||||
|
const vorname = faker.person.firstName();
|
||||||
|
const nachname = faker.person.lastName();
|
||||||
|
const telefon = faker.phone.number()
|
||||||
|
|
||||||
|
const strasse = faker.location.streetAddress({ useFullAddress: true })
|
||||||
|
const plz = faker.location.zipCode("#####")
|
||||||
|
|
||||||
|
cy.get("input[name='vorname']").should("have.attr", "type", "text").type(vorname);
|
||||||
|
cy.get("input[name='name']").should("have.attr", "type", "text").type(nachname);
|
||||||
|
cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon);
|
||||||
|
// Rechnung
|
||||||
|
cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`);
|
||||||
|
cy.get("input[name='rechnung_strasse']").should("have.attr", "type", "text").type(strasse);
|
||||||
|
cy.get("input[name='rechnung_plz']").should("have.attr", "type", "text").type(plz);
|
||||||
|
cy.get("[data-cy='plz-container']").children().first().click()
|
||||||
|
cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email);
|
||||||
|
|
||||||
|
cy.get("button[data-cy='bestellen']").click();
|
||||||
|
|
||||||
|
cy.get("a[data-cy='registrieren']").should("be.visible").click();
|
||||||
|
|
||||||
|
// Wir sind jetzt registriert und können uns nun einloggen.
|
||||||
|
// Die Email sollte automatisch eingetragen sein, da wir uns gerade registriert haben.
|
||||||
|
cy.get("form[name='signup'] input[name='vorname']").should("be.visible").should("have.attr", "type", "text").type(vorname);
|
||||||
|
cy.get("form[name='signup'] input[name='nachname']").should("be.visible").should("have.attr", "type", "text").type(nachname);
|
||||||
|
cy.get("form[name='signup'] input[name='email']").should("be.visible").should("have.attr", "type", "email").should("contain.value", email);
|
||||||
|
cy.get("form[name='signup'] input[name='passwort']").should("be.visible").should("have.attr", "type", "password").type(passwort);
|
||||||
|
|
||||||
|
cy.get("form[name='signup'] button[type='submit']").click();
|
||||||
|
cy.get("form[name='login'] button[type='submit']").click();
|
||||||
|
|
||||||
|
cy.url().should("contain", "/einpreisung/success")
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -3,6 +3,7 @@ import {
|
|||||||
Benutzer,
|
Benutzer,
|
||||||
GEGNachweisWohnen,
|
GEGNachweisWohnen,
|
||||||
} from "#lib/client/prisma.js";
|
} from "#lib/client/prisma.js";
|
||||||
|
import { getPaymentSuccessSubject } from "./helpers.js";
|
||||||
|
|
||||||
export async function sendGEGBestellungsMail(
|
export async function sendGEGBestellungsMail(
|
||||||
nachweis: GEGNachweisWohnen,
|
nachweis: GEGNachweisWohnen,
|
||||||
@@ -11,7 +12,8 @@ export async function sendGEGBestellungsMail(
|
|||||||
await transport.sendMail({
|
await transport.sendMail({
|
||||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||||
to: user.email,
|
to: user.email,
|
||||||
subject: `Bestellbestätigung vom IBCornelsen (ID: ${nachweis.uid})`,
|
// subject: getPaymentSuccessSubject(nachweis, ),
|
||||||
|
// TODO
|
||||||
cc: {
|
cc: {
|
||||||
address: user.email || "",
|
address: user.email || "",
|
||||||
name: user.name || "",
|
name: user.name || "",
|
||||||
|
|||||||
32
src/lib/server/mail/helpers.ts
Normal file
32
src/lib/server/mail/helpers.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { shortenUID } from "#server/lib/hash.js";
|
||||||
|
import { BedarfsausweisWohnen, Enums, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "../prisma.js";
|
||||||
|
|
||||||
|
export function getPaymentSuccessSubject(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) {
|
||||||
|
const id = shortenUID(ausweis.uid);
|
||||||
|
|
||||||
|
let subject: string = "";
|
||||||
|
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen (ID: ${id})`
|
||||||
|
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen mit Beratung (ID: ${id})`
|
||||||
|
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen - offline Service (ID: ${id})`
|
||||||
|
}
|
||||||
|
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe (ID: ${id})`
|
||||||
|
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe mit Beratung (ID: ${id})`
|
||||||
|
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe - offline Service (ID: ${id})`
|
||||||
|
}
|
||||||
|
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen (ID: ${id})`
|
||||||
|
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen mit Beratung (ID: ${id})`
|
||||||
|
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||||
|
subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen - offline Service (ID: ${id})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return subject;
|
||||||
|
}
|
||||||
@@ -11,6 +11,7 @@ import { prisma } from "#lib/server/prisma.js";
|
|||||||
import { getAnsichtsausweis } from "../ausweis.js";
|
import { getAnsichtsausweis } from "../ausweis.js";
|
||||||
import Mail from "nodemailer/lib/mailer/index.js";
|
import Mail from "nodemailer/lib/mailer/index.js";
|
||||||
import { shortenUID } from "#server/lib/hash.js";
|
import { shortenUID } from "#server/lib/hash.js";
|
||||||
|
import { getPaymentSuccessSubject } from "./helpers.js";
|
||||||
|
|
||||||
export async function sendInvoiceMail(
|
export async function sendInvoiceMail(
|
||||||
ausweis: VerbrauchsausweisWohnen,
|
ausweis: VerbrauchsausweisWohnen,
|
||||||
@@ -33,6 +34,10 @@ export async function sendInvoiceMail(
|
|||||||
|
|
||||||
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
||||||
|
|
||||||
|
if (!ausweisart) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
const attachments: Mail.Attachment[] = [];
|
const attachments: Mail.Attachment[] = [];
|
||||||
|
|
||||||
const id = shortenUID(ausweis.uid)
|
const id = shortenUID(ausweis.uid)
|
||||||
@@ -65,7 +70,7 @@ export async function sendInvoiceMail(
|
|||||||
attachments,
|
attachments,
|
||||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||||
to: user.email,
|
to: user.email,
|
||||||
subject: `Bestellbestätigung vom IBCornelsen (ID: ${id})`,
|
subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart),
|
||||||
cc: {
|
cc: {
|
||||||
address: rechnung.email || "",
|
address: rechnung.email || "",
|
||||||
name: rechnung.empfaenger || "",
|
name: rechnung.empfaenger || "",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { prisma } from "#lib/server/prisma.js";
|
|||||||
import { getAnsichtsausweis } from "../ausweis.js";
|
import { getAnsichtsausweis } from "../ausweis.js";
|
||||||
import Mail from "nodemailer/lib/mailer/index.js";
|
import Mail from "nodemailer/lib/mailer/index.js";
|
||||||
import { shortenUID } from "#server/lib/hash.js";
|
import { shortenUID } from "#server/lib/hash.js";
|
||||||
|
import { getPaymentSuccessSubject } from "./helpers.js";
|
||||||
|
|
||||||
export async function sendPaymentSuccessMail(
|
export async function sendPaymentSuccessMail(
|
||||||
ausweis: VerbrauchsausweisWohnen,
|
ausweis: VerbrauchsausweisWohnen,
|
||||||
@@ -32,6 +33,11 @@ export async function sendPaymentSuccessMail(
|
|||||||
|
|
||||||
let info: string = "";
|
let info: string = "";
|
||||||
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
||||||
|
|
||||||
|
if (!ausweisart) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const attachments: Mail.Attachment[] = [];
|
const attachments: Mail.Attachment[] = [];
|
||||||
|
|
||||||
const id = shortenUID(ausweis.uid)
|
const id = shortenUID(ausweis.uid)
|
||||||
@@ -63,12 +69,12 @@ export async function sendPaymentSuccessMail(
|
|||||||
info =
|
info =
|
||||||
"Die Erstellung des Bedarfsausweises dauert momentan leider etwas länger. Bitte kontaktieren Sie uns in dringenden Fällen telefonisch (9 - 12 Uhr).";
|
"Die Erstellung des Bedarfsausweises dauert momentan leider etwas länger. Bitte kontaktieren Sie uns in dringenden Fällen telefonisch (9 - 12 Uhr).";
|
||||||
}
|
}
|
||||||
|
|
||||||
await transport.sendMail({
|
await transport.sendMail({
|
||||||
attachments,
|
attachments,
|
||||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||||
to: user.email,
|
to: user.email,
|
||||||
subject: `Bestellbestätigung vom IBCornelsen (ID: ${id})`,
|
subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart),
|
||||||
cc: {
|
cc: {
|
||||||
address: rechnung.email || "",
|
address: rechnung.email || "",
|
||||||
name: rechnung.empfaenger || "",
|
name: rechnung.empfaenger || "",
|
||||||
|
|||||||
@@ -113,7 +113,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form id="formInput-1" name="ausweis" data-test="ausweis" bind:this={form}>
|
<form id="formInput-1" name="ausweis" data-cy="nachweis" bind:this={form}>
|
||||||
<div id="formular-box" class="formular-boxen ring-0">
|
<div id="formular-box" class="formular-boxen ring-0">
|
||||||
<!-- A Prüfung der Ausweisart -->
|
<!-- A Prüfung der Ausweisart -->
|
||||||
|
|
||||||
@@ -144,6 +144,7 @@
|
|||||||
<textarea
|
<textarea
|
||||||
class="rounded-e-none"
|
class="rounded-e-none"
|
||||||
rows="10"
|
rows="10"
|
||||||
|
data-cy="beschreibung"
|
||||||
bind:value={nachweis.beschreibung}
|
bind:value={nachweis.beschreibung}
|
||||||
></textarea>
|
></textarea>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, UUidWithPrefix, Ver
|
|||||||
import { filterAusweise } from "#lib/filters.js";
|
import { filterAusweise } from "#lib/filters.js";
|
||||||
import { omit } from "#lib/helpers.js";
|
import { omit } from "#lib/helpers.js";
|
||||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||||
import { Enums, prisma, VerbrauchsausweisWohnenSchema } from "#lib/server/prisma";
|
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||||
import { defineApiRoute } from "astro-typesafe-api/server";
|
import { defineApiRoute } from "astro-typesafe-api/server";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
@@ -15,12 +15,16 @@ export const GET = defineApiRoute({
|
|||||||
skip: z.number().optional()
|
skip: z.number().optional()
|
||||||
}),
|
}),
|
||||||
async fetch(input, context, user) {
|
async fetch(input, context, user) {
|
||||||
|
if (user.rolle !== Enums.BenutzerRolle.ADMIN) {
|
||||||
|
input.filters = input.filters || {}
|
||||||
|
input.filters["benutzer"] = {
|
||||||
|
uid: user.uid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const ausweise = await prisma.verbrauchsausweisWohnen.findMany({
|
const ausweise = await prisma.verbrauchsausweisWohnen.findMany({
|
||||||
where: {
|
where: {
|
||||||
...input.filters,
|
...input.filters
|
||||||
benutzer: {
|
|
||||||
uid: user.uid
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
include: {
|
include: {
|
||||||
aufnahme: {
|
aufnahme: {
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
---
|
---
|
||||||
return Astro.redirect("/dashboard/admin/ausweise-pruefen/1")
|
return Astro.redirect("/dashboard/admin/ausweise-pruefen/1");
|
||||||
---
|
---
|
||||||
Reference in New Issue
Block a user