721
dbml/schema.dbml
721
dbml/schema.dbml
@@ -1,721 +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]
|
||||
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
|
||||
}
|
||||
|
||||
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
|
||||
GEGNachweisBedarfsausweis
|
||||
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]
|
||||
47
prisma/migrations/20250312191621_gng/migration.sql
Normal file
47
prisma/migrations/20250312191621_gng/migration.sql
Normal file
@@ -0,0 +1,47 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gng-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Rechnung" ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();
|
||||
47
prisma/migrations/20250312191859_/migration.sql
Normal file
47
prisma/migrations/20250312191859_/migration.sql
Normal file
@@ -0,0 +1,47 @@
|
||||
-- AlterTable
|
||||
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Rechnung" ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();
|
||||
@@ -0,0 +1,66 @@
|
||||
-- AlterEnum
|
||||
ALTER TYPE "BilderKategorie" ADD VALUE 'AnlagenTechnik';
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisGewerbe" ADD COLUMN "abluftanlage" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "ausstellgrund" "Ausstellgrund",
|
||||
ADD COLUMN "bauteilaktivierung" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "bestellt" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "direktheizung" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "dunkelstrahler" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "fussbodenheizung" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "hallenheizung" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "infrarotstrahler" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "keller_beheizt" BOOLEAN,
|
||||
ADD COLUMN "klimatisierung" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "konditionierung_der_zuluft" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "luftheizung" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "storniert" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "zu_abluftanlage" BOOLEAN DEFAULT false,
|
||||
ADD COLUMN "zurueckgestellt" BOOLEAN DEFAULT false,
|
||||
ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gng-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Rechnung" ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();
|
||||
62
prisma/migrations/20250312210347_/migration.sql
Normal file
62
prisma/migrations/20250312210347_/migration.sql
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
Warnings:
|
||||
|
||||
- The values [GEGNachweisBedarfsausweis] on the enum `Ausweisart` will be removed. If these variants are still used in the database, this will fail.
|
||||
|
||||
*/
|
||||
-- AlterEnum
|
||||
BEGIN;
|
||||
CREATE TYPE "Ausweisart_new" AS ENUM ('VerbrauchsausweisWohnen', 'VerbrauchsausweisGewerbe', 'BedarfsausweisWohnen', 'BedarfsausweisGewerbe', 'GEGNachweisWohnen', 'GEGNachweisGewerbe');
|
||||
ALTER TABLE "Aufnahme" ALTER COLUMN "ausweisart" TYPE "Ausweisart_new" USING ("ausweisart"::text::"Ausweisart_new");
|
||||
ALTER TYPE "Ausweisart" RENAME TO "Ausweisart_old";
|
||||
ALTER TYPE "Ausweisart_new" RENAME TO "Ausweisart";
|
||||
DROP TYPE "Ausweisart_old";
|
||||
COMMIT;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gng-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Rechnung" ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();
|
||||
@@ -1,16 +1,39 @@
|
||||
model BedarfsausweisGewerbe {
|
||||
id Int @id @default(autoincrement())
|
||||
id Int @id @default(autoincrement())
|
||||
uid String @unique @default(dbgenerated("'bag-' || gen_random_uuid()"))
|
||||
|
||||
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
|
||||
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
|
||||
ausstellgrund Ausstellgrund?
|
||||
/// @zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")
|
||||
keller_beheizt Boolean?
|
||||
|
||||
/// @zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")
|
||||
storniert Boolean? @default(false)
|
||||
/// @zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")
|
||||
bestellt Boolean? @default(false)
|
||||
/// @zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")
|
||||
zurueckgestellt Boolean? @default(false)
|
||||
|
||||
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)
|
||||
|
||||
/// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")
|
||||
benutzer_id Int?
|
||||
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
aufnahme_id Int @unique
|
||||
aufnahme_id Int @unique
|
||||
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
|
||||
rechnung_id Int? @unique
|
||||
rechnung_id Int? @unique
|
||||
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
|
||||
geg_einpreisung_id Int? @unique
|
||||
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
}
|
||||
@@ -4,6 +4,7 @@ enum BilderKategorie {
|
||||
Fenster
|
||||
Gebaeude
|
||||
Daemmung
|
||||
AnlagenTechnik
|
||||
}
|
||||
|
||||
model Bild {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
model GEGNachweisGewerbe {
|
||||
id Int @id @default(autoincrement())
|
||||
uid String @unique @default(dbgenerated("'gnw-' || gen_random_uuid()"))
|
||||
uid String @unique @default(dbgenerated("'gng-' || gen_random_uuid()"))
|
||||
|
||||
/// @zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")
|
||||
ausstellgrund Ausstellgrund?
|
||||
@@ -23,7 +23,7 @@ model GEGNachweisGewerbe {
|
||||
aufnahme_id Int @unique
|
||||
aufnahme Aufnahme @relation(fields: [aufnahme_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
|
||||
rechnung_id Int? @unique
|
||||
rechnung_id Int? @unique
|
||||
rechnung Rechnung? @relation(fields: [rechnung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
geg_einpreisung_id Int? @unique
|
||||
geg_einpreisung GEGEinpreisung? @relation(fields: [geg_einpreisung_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||
|
||||
@@ -53,7 +53,6 @@ enum Ausweisart {
|
||||
BedarfsausweisWohnen
|
||||
BedarfsausweisGewerbe
|
||||
GEGNachweisWohnen
|
||||
GEGNachweisBedarfsausweis
|
||||
GEGNachweisGewerbe
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ export const createCaller = createCallerFactory({
|
||||
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
|
||||
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
||||
"unterlage": await import("../src/pages/api/unterlage.ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
|
||||
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
|
||||
"admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
|
||||
@@ -14,9 +13,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"),
|
||||
"ausweise": await import("../src/pages/api/ausweise/index.ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/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/[uid]": await import("../src/pages/api/bedarfsausweis-gewerbe/[uid].ts"),
|
||||
"bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"),
|
||||
"bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||
"bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"),
|
||||
@@ -29,10 +31,10 @@ export const createCaller = createCallerFactory({
|
||||
"rechnung/anfordern": await import("../src/pages/api/rechnung/anfordern.ts"),
|
||||
"rechnung": await import("../src/pages/api/rechnung/index.ts"),
|
||||
"ticket": await import("../src/pages/api/ticket/index.ts"),
|
||||
"user": await import("../src/pages/api/user/index.ts"),
|
||||
"user/self": await import("../src/pages/api/user/self.ts"),
|
||||
"verbrauchsausweis-gewerbe/[uid]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[uid].ts"),
|
||||
"verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"),
|
||||
"user": await import("../src/pages/api/user/index.ts"),
|
||||
"user/self": await import("../src/pages/api/user/self.ts"),
|
||||
"verbrauchsausweis-wohnen/[uid]": await import("../src/pages/api/verbrauchsausweis-wohnen/[uid].ts"),
|
||||
"verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"),
|
||||
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
|
||||
|
||||
@@ -58,9 +58,4 @@ export function getZodBaseType(schema: ZodType<any>): ZodType<any> {
|
||||
return getZodBaseType(schema._def.schema)
|
||||
}
|
||||
return schema;
|
||||
}
|
||||
|
||||
export const sqids = new Sqids({
|
||||
alphabet: "0123456789abcdefghijklmnopqrstuvw",
|
||||
minLength: 8
|
||||
})
|
||||
}
|
||||
@@ -16,7 +16,11 @@ export async function nachweisSpeichern(
|
||||
) {
|
||||
if (objekt.uid) {
|
||||
await api.objekt._uid.PATCH.fetch({
|
||||
...exclude(objekt, ["uid"])
|
||||
adresse: objekt.adresse,
|
||||
latitude: 0,
|
||||
longitude: 0,
|
||||
ort: objekt.ort,
|
||||
plz: objekt.plz
|
||||
}, {
|
||||
params: {
|
||||
uid: objekt.uid
|
||||
@@ -27,7 +31,11 @@ export async function nachweisSpeichern(
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api.objekt.PUT.fetch({
|
||||
...exclude(objekt, ["uid"])
|
||||
adresse: objekt.adresse,
|
||||
latitude: 0,
|
||||
longitude: 0,
|
||||
ort: objekt.ort,
|
||||
plz: objekt.plz
|
||||
}, {
|
||||
headers: {
|
||||
"Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}`
|
||||
@@ -41,10 +49,58 @@ export async function nachweisSpeichern(
|
||||
|
||||
if (aufnahme.uid) {
|
||||
await api.aufnahme._uid.PATCH.fetch({
|
||||
...exclude(aufnahme, ["uid"]),
|
||||
baujahr_gebaeude: aufnahme.baujahr_gebaeude || [],
|
||||
baujahr_klima: aufnahme.baujahr_klima || [],
|
||||
baujahr_heizung: aufnahme.baujahr_heizung || [],
|
||||
baujahr_klima: aufnahme.baujahr_klima || [],
|
||||
alternative_heizung: aufnahme.alternative_heizung,
|
||||
alternative_kuehlung: aufnahme.alternative_kuehlung,
|
||||
alternative_lueftung: aufnahme.alternative_lueftung,
|
||||
alternative_warmwasser: aufnahme.alternative_warmwasser,
|
||||
aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt,
|
||||
aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt,
|
||||
ausweisart: aufnahme.ausweisart,
|
||||
brennstoff_1: aufnahme.brennstoff_1,
|
||||
brennstoff_2: aufnahme.brennstoff_2,
|
||||
brennwert_kessel: aufnahme.brennwert_kessel,
|
||||
dachgeschoss: aufnahme.dachgeschoss,
|
||||
dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt,
|
||||
dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt,
|
||||
doppel_verglasung: aufnahme.doppel_verglasung,
|
||||
dreifach_verglasung: aufnahme.dreifach_verglasung,
|
||||
durchlauf_erhitzer: aufnahme.durchlauf_erhitzer,
|
||||
einfach_verglasung: aufnahme.einfach_verglasung,
|
||||
einheiten: aufnahme.einheiten,
|
||||
einzelofen: aufnahme.einzelofen,
|
||||
energieeffizienzklasse: aufnahme.energieeffizienzklasse,
|
||||
fenster_dicht: aufnahme.fenster_dicht,
|
||||
fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht,
|
||||
flaeche: aufnahme.flaeche,
|
||||
gebaeudeteil: aufnahme.gebaeudeteil,
|
||||
gebaeudetyp: aufnahme.gebaeudetyp,
|
||||
heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt,
|
||||
isolier_verglasung: aufnahme.isolier_verglasung,
|
||||
keller: aufnahme.keller,
|
||||
keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt,
|
||||
keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt,
|
||||
kuehlung: aufnahme.kuehlung,
|
||||
leerstand: aufnahme.leerstand,
|
||||
lueftung: aufnahme.lueftung,
|
||||
niedertemperatur_kessel: aufnahme.niedertemperatur_kessel,
|
||||
nutzflaeche: aufnahme.nutzflaeche,
|
||||
oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt,
|
||||
oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt,
|
||||
photovoltaik: aufnahme.photovoltaik,
|
||||
raum_temperatur_regler: aufnahme.raum_temperatur_regler,
|
||||
rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt,
|
||||
saniert: aufnahme.saniert,
|
||||
solarsystem_warmwasser: aufnahme.solarsystem_warmwasser,
|
||||
standard_kessel: aufnahme.standard_kessel,
|
||||
tueren_dicht: aufnahme.tueren_dicht,
|
||||
tueren_undicht: aufnahme.tueren_undicht,
|
||||
waermepumpe: aufnahme.waermepumpe,
|
||||
warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt,
|
||||
zentralheizung: aufnahme.zentralheizung,
|
||||
zirkulation: aufnahme.zirkulation
|
||||
}, {
|
||||
params: {
|
||||
uid: aufnahme.uid
|
||||
@@ -55,7 +111,61 @@ export async function nachweisSpeichern(
|
||||
})
|
||||
} else {
|
||||
const { uid } = await api.aufnahme.PUT.fetch({
|
||||
aufnahme,
|
||||
aufnahme: {
|
||||
baujahr_gebaeude: aufnahme.baujahr_gebaeude,
|
||||
baujahr_heizung: aufnahme.baujahr_heizung,
|
||||
alternative_heizung: aufnahme.alternative_heizung,
|
||||
alternative_kuehlung: aufnahme.alternative_kuehlung,
|
||||
alternative_lueftung: aufnahme.alternative_lueftung,
|
||||
alternative_warmwasser: aufnahme.alternative_warmwasser,
|
||||
aussenwand_gedaemmt: aufnahme.aussenwand_gedaemmt,
|
||||
aussenwand_min_12cm_gedaemmt: aufnahme.aussenwand_min_12cm_gedaemmt,
|
||||
ausweisart: aufnahme.ausweisart,
|
||||
baujahr_klima: aufnahme.baujahr_klima,
|
||||
brennstoff_1: aufnahme.brennstoff_1,
|
||||
brennstoff_2: aufnahme.brennstoff_2,
|
||||
brennwert_kessel: aufnahme.brennwert_kessel,
|
||||
dachgeschoss: aufnahme.dachgeschoss,
|
||||
dachgeschoss_gedaemmt: aufnahme.dachgeschoss_gedaemmt,
|
||||
dachgeschoss_min_12cm_gedaemmt: aufnahme.dachgeschoss_min_12cm_gedaemmt,
|
||||
doppel_verglasung: aufnahme.doppel_verglasung,
|
||||
dreifach_verglasung: aufnahme.dreifach_verglasung,
|
||||
durchlauf_erhitzer: aufnahme.durchlauf_erhitzer,
|
||||
einfach_verglasung: aufnahme.einfach_verglasung,
|
||||
einheiten: aufnahme.einheiten,
|
||||
einzelofen: aufnahme.einzelofen,
|
||||
energieeffizienzklasse: aufnahme.energieeffizienzklasse,
|
||||
erstellungsdatum: aufnahme.erstellungsdatum,
|
||||
fenster_dicht: aufnahme.fenster_dicht,
|
||||
fenster_teilweise_undicht: aufnahme.fenster_teilweise_undicht,
|
||||
flaeche: aufnahme.flaeche,
|
||||
gebaeudeteil: aufnahme.gebaeudeteil,
|
||||
gebaeudetyp: aufnahme.gebaeudetyp,
|
||||
heizungsrohre_gedaemmt: aufnahme.heizungsrohre_gedaemmt,
|
||||
isolier_verglasung: aufnahme.isolier_verglasung,
|
||||
keller: aufnahme.keller,
|
||||
keller_decke_gedaemmt: aufnahme.keller_decke_gedaemmt,
|
||||
keller_wand_gedaemmt: aufnahme.keller_wand_gedaemmt,
|
||||
kuehlung: aufnahme.kuehlung,
|
||||
leerstand: aufnahme.leerstand,
|
||||
lueftung: aufnahme.lueftung,
|
||||
niedertemperatur_kessel: aufnahme.niedertemperatur_kessel,
|
||||
nutzflaeche: aufnahme.nutzflaeche,
|
||||
oberste_geschossdecke_gedaemmt: aufnahme.oberste_geschossdecke_gedaemmt,
|
||||
oberste_geschossdecke_min_12cm_gedaemmt: aufnahme.oberste_geschossdecke_min_12cm_gedaemmt,
|
||||
photovoltaik: aufnahme.photovoltaik,
|
||||
raum_temperatur_regler: aufnahme.raum_temperatur_regler,
|
||||
rolllaeden_kaesten_gedaemmt: aufnahme.rolllaeden_kaesten_gedaemmt,
|
||||
saniert: aufnahme.saniert,
|
||||
solarsystem_warmwasser: aufnahme.solarsystem_warmwasser,
|
||||
standard_kessel: aufnahme.standard_kessel,
|
||||
tueren_dicht: aufnahme.tueren_dicht,
|
||||
tueren_undicht: aufnahme.tueren_undicht,
|
||||
waermepumpe: aufnahme.waermepumpe,
|
||||
warmwasser_rohre_gedaemmt: aufnahme.warmwasser_rohre_gedaemmt,
|
||||
zentralheizung: aufnahme.zentralheizung,
|
||||
zirkulation: aufnahme.zirkulation
|
||||
},
|
||||
uid_objekt: objekt.uid
|
||||
}, {
|
||||
headers: {
|
||||
@@ -74,6 +184,9 @@ export async function nachweisSpeichern(
|
||||
} else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) {
|
||||
patchRoute = api["geg-nachweis-gewerbe"]._uid.PATCH
|
||||
putRoute = api["geg-nachweis-gewerbe"].PUT
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
patchRoute = api["bedarfsausweis-gewerbe"]._uid.PATCH
|
||||
putRoute = api["bedarfsausweis-gewerbe"].PUT
|
||||
}
|
||||
|
||||
if (nachweis.uid) {
|
||||
@@ -114,25 +227,4 @@ export async function nachweisSpeichern(
|
||||
uid_aufnahme: aufnahme.uid,
|
||||
uid_objekt: objekt.uid
|
||||
}
|
||||
|
||||
|
||||
// await client.v1.tickets.erstellen.mutate({
|
||||
// titel: "Ausweis konnte nicht gespeichert werden",
|
||||
// beschreibung: e.stack,
|
||||
// email: user.email ?? "",
|
||||
// metadata: JSON.stringify({
|
||||
// ausweis,
|
||||
// }),
|
||||
// });
|
||||
|
||||
// addNotification({
|
||||
// dismissable: false,
|
||||
// message:
|
||||
// "Ausweis konnte nicht gespeichert werden, bitte versuchen sie es erneut.",
|
||||
// subtext:
|
||||
// "Sollte das Problem weiterhin bestehen, kontaktieren sie bitte den Support.",
|
||||
// timeout: 6000,
|
||||
// type: "error",
|
||||
// });
|
||||
return null;
|
||||
}
|
||||
|
||||
110
src/components/Ausweis/AnlagenTechnik.svelte
Normal file
110
src/components/Ausweis/AnlagenTechnik.svelte
Normal file
@@ -0,0 +1,110 @@
|
||||
<script lang="ts">
|
||||
import {
|
||||
AufnahmeClient,
|
||||
ObjektClient,
|
||||
UploadedGebaeudeBild,
|
||||
} from "./types.js";
|
||||
import SanierungsOption from "#components/Ausweis/SanierungsOption.svelte";
|
||||
import AnlagenTechnikImage from "./AnlagenTechnikImage.svelte";
|
||||
import { BedarfsausweisGewerbe } from "#lib/client/prisma.js";
|
||||
|
||||
export let objekt: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let ausweis: BedarfsausweisGewerbe;
|
||||
export let images: UploadedGebaeudeBild[];
|
||||
</script>
|
||||
|
||||
<div
|
||||
id="sanierungszustand"
|
||||
class="bereich-box grid
|
||||
grid-cols-1 gap-x-4 gap-y-2
|
||||
|
||||
sm:grid-cols-1 sm:gap-x-6 sm:gap-y-1
|
||||
md:grid-cols-2 md:gap-x-6 md:gap-y-8
|
||||
|
||||
xl:grid-cols-2 xl:gap-x-8 xl:gap-y-8
|
||||
2xl:grid-cols-3 2xl:gap-x-8 2xl:gap-y-2
|
||||
"
|
||||
>
|
||||
<SanierungsOption
|
||||
label="Abluftanlage"
|
||||
name="abluftanlage"
|
||||
help=""
|
||||
value="AWD"
|
||||
bind:checked={ausweis.abluftanlage}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Zu- und Abluftanlage"
|
||||
name="zu_abluftanlage"
|
||||
help=""
|
||||
value="KWD"
|
||||
bind:checked={ausweis.zu_abluftanlage}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Konditionierung der Zuluft"
|
||||
name="konditionierung_der_zuluft"
|
||||
help=""
|
||||
value="KDD"
|
||||
bind:checked={ausweis.konditionierung_der_zuluft}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Luftheizung"
|
||||
name="luftheizung"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.luftheizung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Hallenheizung"
|
||||
name="hallenheizung"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.hallenheizung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Dunkelstrahler"
|
||||
name="dunkelstrahler"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.dunkelstrahler}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Direktheizung"
|
||||
name="direktheizung"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.direktheizung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Infrarotstrahler"
|
||||
name="infrarotstrahler"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.infrarotstrahler}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Fußbodenheizung"
|
||||
name="fussbodenheizung"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.fussbodenheizung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Bauteilaktivierung"
|
||||
name="bauteilaktivierung"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.bauteilaktivierung}
|
||||
></SanierungsOption>
|
||||
<SanierungsOption
|
||||
label="Klimatisierung"
|
||||
name="klimatisierung"
|
||||
help=""
|
||||
value="DGD"
|
||||
bind:checked={ausweis.klimatisierung}
|
||||
></SanierungsOption>
|
||||
</div>
|
||||
|
||||
<AnlagenTechnikImage bind:images bind:ausweis bind:objekt />
|
||||
<style lang="postcss">
|
||||
</style>
|
||||
39
src/components/Ausweis/AnlagenTechnikImage.svelte
Normal file
39
src/components/Ausweis/AnlagenTechnikImage.svelte
Normal file
@@ -0,0 +1,39 @@
|
||||
<script lang="ts">
|
||||
import ImageGrid from "../ImageGrid.svelte";;
|
||||
import { BedarfsausweisGewerbe, Enums } from "#lib/client/prisma.js";
|
||||
import { BildClient, ObjektClient } from "./types.js";
|
||||
|
||||
export let images: BildClient[] = [];
|
||||
export let ausweis: BedarfsausweisGewerbe;
|
||||
export let objekt: ObjektClient;
|
||||
</script>
|
||||
|
||||
<div class="grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6 p-2 sm:px-0">
|
||||
|
||||
<div class="md:box md:card mb-0 bereich-box">
|
||||
|
||||
|
||||
<div class="font-bold mb-2">
|
||||
<span class="text-red-500">WICHTIG:</span>
|
||||
Bild Upload - Anlagentechnik
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<div>
|
||||
Diese Bilder erscheinen <span class="text-red-500">nicht</span> auf Ihrem
|
||||
Energieausweis!<br />
|
||||
</div>
|
||||
<ImageGrid
|
||||
max={4}
|
||||
min={0}
|
||||
name={"anlagen_technik_image"}
|
||||
kategorie={Enums.BilderKategorie.AnlagenTechnik}
|
||||
bind:images
|
||||
bind:ausweis
|
||||
bind:objekt
|
||||
>
|
||||
TEXT FEHLT
|
||||
</ImageGrid>
|
||||
</div>
|
||||
</div>
|
||||
@@ -24,6 +24,8 @@
|
||||
export let aufnahme: AufnahmeClient;
|
||||
|
||||
export let ausweisart: Enums.Ausweisart;
|
||||
|
||||
export let ausstellgrund: string[] = Object.values(Enums.Ausstellgrund);
|
||||
</script>
|
||||
|
||||
<div id="ausweisart" class="bereich-box grid
|
||||
@@ -47,8 +49,8 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
data-cy="ausstellgrund"
|
||||
>
|
||||
<option disabled selected value={null}>Bitte auswählen</option>
|
||||
{#each Object.entries(Enums.Ausstellgrund) as [name, ausstellgrund]}
|
||||
<option value={ausstellgrund}>{name}</option>
|
||||
{#each ausstellgrund as name}
|
||||
<option value={name}>{name}</option>
|
||||
{/each}
|
||||
</select>
|
||||
|
||||
|
||||
@@ -69,8 +69,8 @@
|
||||
|
||||
loginOverlayHidden = true
|
||||
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) {
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | Awaited<ReturnType<typeof nachweisSpeichern>> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} else {
|
||||
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import ImageGrid from "../ImageGrid.svelte";;
|
||||
import { Enums } from "#lib/client/prisma";
|
||||
import { Enums } from "#lib/client/prisma.js";
|
||||
import { BedarfsausweisWohnenClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "./types.js";
|
||||
|
||||
export let images: UploadedGebaeudeBild[] = [];
|
||||
|
||||
@@ -13,8 +13,9 @@
|
||||
import { api } from "astro-typesafe-api/client";
|
||||
import Cookies from "js-cookie";
|
||||
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 { shortenUID } from "#server/lib/hash.js";
|
||||
|
||||
export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient;
|
||||
export let aufnahme: AufnahmeKomplettClient;
|
||||
@@ -24,6 +25,8 @@
|
||||
|
||||
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
||||
|
||||
const id = shortenUID(ausweis.uid)
|
||||
|
||||
async function ausweisStornieren() {
|
||||
const result = await dialogs.confirm({
|
||||
title: "Ausweis Stornieren",
|
||||
@@ -89,7 +92,7 @@
|
||||
|
||||
</script>
|
||||
|
||||
<div class="relative bg-base-200 border border-base-300 rounded-lg p-4">
|
||||
<div class="relative bg-base-200 border border-base-300 rounded-lg p-4 mr-4">
|
||||
{#if ausweis.storniert}
|
||||
<div
|
||||
class="absolute top-0 left-0 w-full h-full bg-[rgba(0,0,0,0.7)] z-[5] rounded-lg select-none"
|
||||
@@ -128,24 +131,28 @@
|
||||
</ul>
|
||||
</div>
|
||||
<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
|
||||
</div>
|
||||
{:else if ausweisart == Enums.Ausweisart.BedarfsausweisWohnen}
|
||||
<div class="text-lg font-semibold">
|
||||
Bedarfsausweis Wohnen
|
||||
</div>
|
||||
{:else if ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
||||
<div class="text-lg font-semibold">
|
||||
Verbrauchsausweis Gewerbe
|
||||
</div>
|
||||
{/if}
|
||||
{:else if ausweisart == Enums.Ausweisart.BedarfsausweisWohnen}
|
||||
Bedarfsausweis Wohnen
|
||||
{:else if ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
||||
Verbrauchsausweis Gewerbe
|
||||
{/if}
|
||||
|
||||
{#if rechnung.ausweistyp === Enums.AusweisTyp.Beratung}
|
||||
(Beratung)
|
||||
{:else if rechnung.ausweistyp === Enums.AusweisTyp.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-yellow-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Bestellt</span>
|
||||
<span class="bg-primary px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Bestellt</span>
|
||||
{:else}
|
||||
<span class="bg-red-600 px-2 py-0.5 text-sm font-semibold rounded-lg text-white">Gespeichert</span>
|
||||
{/if}
|
||||
</div>
|
||||
<div class="badge badge-accent font-semibold text-black text-m">{objekt.adresse}</div>
|
||||
@@ -202,7 +209,7 @@
|
||||
<div class="flex flex-row justify-between">
|
||||
<span>ID</span>
|
||||
<span class="font-bold text-base-content"
|
||||
>{ausweis.uid}</span
|
||||
>{id}</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<div class="text-lg font-semibold">
|
||||
GEG Nachweis Gewerbe
|
||||
</div>
|
||||
{:else if ausweisart == Enums.Ausweisart.GEGNachweisBedarfsausweis}
|
||||
{:else if ausweisart == Enums.Ausweisart.BedarfsausweisGewerbe}
|
||||
<div class="text-lg font-semibold">
|
||||
Bedarfsausweis Gewerbe
|
||||
</div>
|
||||
|
||||
@@ -79,7 +79,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
<option value="Atrium-Bungalow">Atrium-Bungalow</option>
|
||||
<option value="Winkelbungalow">Winkelbungalow</option>
|
||||
|
||||
{:else if ausweisart==Enums.Ausweisart.VerbrauchsausweisGewerbe}
|
||||
{:else if ausweisart==Enums.Ausweisart.VerbrauchsausweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe}
|
||||
<option value="Verwaltungsgebäude (allgemein)">Verwaltungsgebäude (allgemein)</option>
|
||||
<option value="Parlaments- und Gerichtsgebäude">Parlaments- und Gerichtsgebäude</option>
|
||||
<option value="Ministerien u. Ämter u. Behörden">Ministerien u. Ämter u. Behörden</option>
|
||||
@@ -284,4 +284,4 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8
|
||||
</HelpLabel>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
134
src/cypress/e2e/GEGNachweisGewerbe/erstellen.cy.ts
Normal file
134
src/cypress/e2e/GEGNachweisGewerbe/erstellen.cy.ts
Normal file
@@ -0,0 +1,134 @@
|
||||
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-gewerbe-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);
|
||||
});
|
||||
|
||||
// Sanierungsstatus
|
||||
cy.get("select[name='saniert']").select(
|
||||
Math.random() > 0.5 ? "true" : "false"
|
||||
);
|
||||
|
||||
// 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.origin('https://www.mollie.com', () => {
|
||||
// Jetzt sind wir auf der Mollie Seite, dort wählen wir den "paid" status aus
|
||||
cy.get("input[type='radio'][name='final_state'][value='paid']").check();
|
||||
// Da wird unser Test fehlschlagen, da die localhost domain von Mollie aus nicht erreichbar ist.
|
||||
})
|
||||
});
|
||||
});
|
||||
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")
|
||||
});
|
||||
});
|
||||
@@ -28,6 +28,7 @@ export const BilderKategorie = {
|
||||
Fenster: "Fenster",
|
||||
Gebaeude: "Gebaeude",
|
||||
Daemmung: "Daemmung",
|
||||
AnlagenTechnik: "AnlagenTechnik",
|
||||
} as const;
|
||||
|
||||
export type BilderKategorie = (typeof BilderKategorie)[keyof typeof BilderKategorie];
|
||||
@@ -104,7 +105,6 @@ export const Ausweisart = {
|
||||
BedarfsausweisWohnen: "BedarfsausweisWohnen",
|
||||
BedarfsausweisGewerbe: "BedarfsausweisGewerbe",
|
||||
GEGNachweisWohnen: "GEGNachweisWohnen",
|
||||
GEGNachweisBedarfsausweis: "GEGNachweisBedarfsausweis",
|
||||
GEGNachweisGewerbe: "GEGNachweisGewerbe",
|
||||
} as const;
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ export const AufnahmeSchema = z.object({
|
||||
dachgeschoss_gedaemmt: z.boolean().describe("Falls das Dachgeschoss des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen").nullish(),
|
||||
keller_decke_gedaemmt: z.boolean().describe("Falls die Kellerdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen").nullish(),
|
||||
keller_wand_gedaemmt: z.boolean().describe("Falls die Kellerwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen").nullish(),
|
||||
aussenwand_gedaemmt: z.boolean().describe("Falls die Außenwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen").nullish(),
|
||||
aussenwand_gedaemmt: z.boolean().describe("Falls die Außenwände des Gebäudes ged<EFBFBD><EFBFBD>mmt sind, sollte dieser Wert auf true stehen").nullish(),
|
||||
oberste_geschossdecke_gedaemmt: z.boolean().describe("Falls die oberste Geschossdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen").nullish(),
|
||||
aussenwand_min_12cm_gedaemmt: z.boolean().describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen").nullish(),
|
||||
dachgeschoss_min_12cm_gedaemmt: z.boolean().describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen").nullish(),
|
||||
|
||||
@@ -1,8 +1,25 @@
|
||||
import * as z from "zod"
|
||||
import { Ausstellgrund } from "@prisma/client"
|
||||
|
||||
export const BedarfsausweisGewerbeSchema = z.object({
|
||||
id: z.number().int(),
|
||||
uid: z.string(),
|
||||
ausstellgrund: z.nativeEnum(Ausstellgrund).describe("Ausstellgrund wie z.B. Vermietung oder Verkauf").nullish(),
|
||||
keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(),
|
||||
storniert: z.boolean().describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen").nullish(),
|
||||
bestellt: z.boolean().describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen").nullish(),
|
||||
zurueckgestellt: z.boolean().describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen").nullish(),
|
||||
abluftanlage: z.boolean().nullish(),
|
||||
zu_abluftanlage: z.boolean().nullish(),
|
||||
konditionierung_der_zuluft: z.boolean().nullish(),
|
||||
luftheizung: z.boolean().nullish(),
|
||||
hallenheizung: z.boolean().nullish(),
|
||||
dunkelstrahler: z.boolean().nullish(),
|
||||
direktheizung: z.boolean().nullish(),
|
||||
infrarotstrahler: z.boolean().nullish(),
|
||||
fussbodenheizung: z.boolean().nullish(),
|
||||
bauteilaktivierung: z.boolean().nullish(),
|
||||
klimatisierung: z.boolean().nullish(),
|
||||
benutzer_id: z.number().int().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(),
|
||||
aufnahme_id: z.number().int(),
|
||||
rechnung_id: z.number().int().nullish(),
|
||||
|
||||
@@ -12,7 +12,7 @@ import { PERSISTENT_DIR } from "#lib/server/constants.js";
|
||||
|
||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||
|
||||
export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: UploadedGebaeudeBild[]) {
|
||||
export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) {
|
||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||
const page3 = copyPage(pdf.getPages()[0]);
|
||||
@@ -365,8 +365,6 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa
|
||||
|
||||
if (bild.uid) {
|
||||
image = `<img src="${fileURLToPath(new URL(`${PERSISTENT_DIR}/images/${bild.uid}.jpg`, import.meta.url))}" width="${(pages[2].getWidth() - 120) / 3.1}" height="${(pages[2].getHeight() - marginY * 2) / 4}" />`
|
||||
} else if (bild.data) {
|
||||
image = `<img data="${bild.data}" width="${(pages[2].getWidth() - 120) / 3.1}" height="180" />`
|
||||
}
|
||||
|
||||
if (images.length > 0) {
|
||||
|
||||
@@ -12,7 +12,7 @@ import { PERSISTENT_DIR } from "#lib/server/constants.js";
|
||||
|
||||
/* -------------------------------- Pdf Tools ------------------------------- */
|
||||
|
||||
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: UploadedGebaeudeBild[]) {
|
||||
export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, benutzer: BenutzerClient, bilder: BildClient[]) {
|
||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/Leerseite_Datenblatt.pdf", import.meta.url), "base64");
|
||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||
const page3 = copyPage(pdf.getPages()[0]);
|
||||
@@ -308,8 +308,6 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau
|
||||
|
||||
if (bild.uid) {
|
||||
image = `<img src="${fileURLToPath(new URL(`${PERSISTENT_DIR}/images/${bild.uid}.jpg`, import.meta.url))}" width="${(pages[2].getWidth() - 120) / 3.1}" height="${(pages[2].getHeight() - marginY * 2) / 4}" />`
|
||||
} else if (bild.data) {
|
||||
image = `<img data="${bild.data}" width="${(pages[2].getWidth() - 120) / 3.1}" height="180" />`
|
||||
}
|
||||
|
||||
if (images.length > 0) {
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
import { AufnahmeClient, BenutzerClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js";
|
||||
import { AufnahmeClient, BenutzerClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient } from "#components/Ausweis/types.js";
|
||||
import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js";
|
||||
import { getEmpfehlungen } from "#lib/XML/getEmpfehlungen.js";
|
||||
import { Enums } from "#lib/server/prisma.js";
|
||||
import * as fs from "fs"
|
||||
import moment from "moment";
|
||||
import { PDFDocument, PDFFont, PDFImage, PDFName, PDFNumber, PDFPage, rgb, RotationTypes, StandardFonts, TextAlignment } from "pdf-lib";
|
||||
import { PDFDocument, PDFFont, PDFImage, PDFPage, StandardFonts } from "pdf-lib";
|
||||
import { addCheckMark } from "./utils/checkbox.js";
|
||||
import { addText } from "./utils/text.js";
|
||||
import { addAnsichtsausweisLabel, addDatumGEG } from "./utils/helpers.js";
|
||||
import { PERSISTENT_DIR } from "#lib/server/constants.js";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
|
||||
export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: UploadedGebaeudeBild[], user: BenutzerClient) {
|
||||
export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient) {
|
||||
const VerbrauchsausweisWohnenGEG2024PDF = fs.readFileSync(new URL("../../../public/pdf/templates/GEG24_Nichtwohngebaeude.pdf", import.meta.url), "base64");
|
||||
const pdf = await PDFDocument.load(VerbrauchsausweisWohnenGEG2024PDF)
|
||||
const pages = pdf.getPages()
|
||||
@@ -137,20 +139,15 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
|
||||
|
||||
const gebaeudeBild = bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
|
||||
const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
|
||||
|
||||
if (gebaeudeBild) {
|
||||
let image: PDFImage | null;
|
||||
try {
|
||||
image = await pdf.embedJpg(gebaeudeBild.data)
|
||||
} catch(e) {
|
||||
try {
|
||||
image = await pdf.embedPng(gebaeudeBild.data)
|
||||
} catch(e) {
|
||||
image = null;
|
||||
}
|
||||
}
|
||||
if (image) {
|
||||
if (bild) {
|
||||
const path = `${PERSISTENT_DIR}/images/${bild.uid}.jpg`;
|
||||
|
||||
if (fs.existsSync(path)) {
|
||||
const file = fs.readFileSync(fileURLToPath(new URL(path, import.meta.url)))
|
||||
let image: PDFImage;
|
||||
image = await pdf.embedJpg(file)
|
||||
pages[0].drawImage(image, {
|
||||
x: 460.5,
|
||||
y: height - 289,
|
||||
@@ -469,70 +466,70 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe
|
||||
|
||||
|
||||
// TODO
|
||||
// if (!ausweis.warmwasser_enthalten) {
|
||||
// /**
|
||||
// * Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m²
|
||||
// * @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
// */
|
||||
// addVerbrauch(
|
||||
// moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
// moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
// "Warmwasserzuschlag",
|
||||
// berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
// Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
// Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
// 0,
|
||||
// "0"
|
||||
// );
|
||||
// }
|
||||
if (!ausweis.warmwasser_enthalten) {
|
||||
/**
|
||||
* Dezentrale Warmwasserversorgung - Pauschale Erhöhung um 20kWh/m²
|
||||
* @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
*/
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Warmwasserzuschlag",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(),
|
||||
0,
|
||||
"0"
|
||||
);
|
||||
}
|
||||
|
||||
// if (aufnahme.leerstand && aufnahme.leerstand > 0) {
|
||||
// /**
|
||||
// * Leerstandszuschlag
|
||||
// * @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
// */
|
||||
// if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
|
||||
// addVerbrauch(
|
||||
// moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
// moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
// "Leerstandszuschlag",
|
||||
// berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
// Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
// Math.round((berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
// Math.round((berechnungen?.leerstandsZuschlagHeizung || 0)),
|
||||
// berechnungen?.durchschnittsKlimafaktor.toString()
|
||||
// );
|
||||
// } else {
|
||||
// addVerbrauch(
|
||||
// moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
// moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
// "Leerstandszuschlag",
|
||||
// berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
// Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
// "0",
|
||||
// 0,
|
||||
// berechnungen?.durchschnittsKlimafaktor.toString()
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
if (aufnahme.leerstand && aufnahme.leerstand > 0) {
|
||||
/**
|
||||
* Leerstandszuschlag
|
||||
* @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
*/
|
||||
if (ausweis.warmwasser_enthalten && ausweis.warmwasser_anteil_bekannt) {
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Leerstandszuschlag",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0)),
|
||||
berechnungen?.durchschnittsKlimafaktor.toString()
|
||||
);
|
||||
} else {
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Leerstandszuschlag",
|
||||
berechnungen?.brennstoff_1.primaerenergiefaktor.toString(),
|
||||
Math.round((berechnungen?.leerstandsZuschlagHeizung || 0) + (berechnungen?.leerstandsZuschlagWarmwasser || 0)).toString(),
|
||||
"0",
|
||||
0,
|
||||
berechnungen?.durchschnittsKlimafaktor.toString()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// if (aufnahme.kuehlung) {
|
||||
// /**
|
||||
// * Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m²
|
||||
// * Primärenergiefaktor Strom
|
||||
// * @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
// */
|
||||
// addVerbrauch(
|
||||
// moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
// moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
// "Kühlungszuschlag",
|
||||
// berechnungen?.primaerfaktorww.toString(),
|
||||
// Math.round(berechnungen?.kuehlungsZuschlag || 0).toString(),
|
||||
// "0",
|
||||
// "0",
|
||||
// ""
|
||||
// );
|
||||
// }
|
||||
if (aufnahme.kuehlung) {
|
||||
/**
|
||||
* Kühlungszuschlag - Pauschale Erhöhung um 6kWh/m²
|
||||
* Primärenergiefaktor Strom
|
||||
* @link https://www.bundesanzeiger.de/pub/publication/MRYM4nI84Sdlr0EIvvW?2
|
||||
*/
|
||||
addVerbrauch(
|
||||
moment(ausweis.startdatum).format("MM.YYYY"),
|
||||
moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"),
|
||||
"Kühlungszuschlag",
|
||||
berechnungen?.primaerfaktorww.toString(),
|
||||
Math.round(berechnungen?.kuehlungsZuschlag_1 || 0).toString(),
|
||||
"0",
|
||||
0,
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
/* -------------------------------- Seite 4 -------------------------------- */
|
||||
|
||||
|
||||
@@ -48,40 +48,122 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
}
|
||||
}
|
||||
|
||||
const gebaeudetyp = fillFormField("gebaeudetyp", aufnahme.gebaeudetyp || "")
|
||||
pages[0].drawText(aufnahme.gebaeudetyp || "", {
|
||||
x: 211,
|
||||
y: height - 166,
|
||||
size: 10
|
||||
})
|
||||
|
||||
const adresse = fillFormField("adresse", objekt.adresse || "")
|
||||
|
||||
pages[0].drawText(objekt.adresse || "", {
|
||||
x: 211,
|
||||
y: height - 194,
|
||||
size: 10
|
||||
})
|
||||
|
||||
const gebaeudeteil = fillFormField("gebaeudeteil", aufnahme.gebaeudeteil || "")
|
||||
pages[0].drawText(aufnahme.gebaeudeteil || "", {
|
||||
x: 211,
|
||||
y: height - 214.5,
|
||||
size: 10
|
||||
})
|
||||
|
||||
const baujahr_gebaeude = fillFormField("baujahr_gebaeude", aufnahme.baujahr_gebaeude?.toString())
|
||||
pages[0].drawText(aufnahme.baujahr_gebaeude?.toString() || "", {
|
||||
x: 211,
|
||||
y: height - 229.5,
|
||||
size: 10
|
||||
})
|
||||
|
||||
const baujahr_heizung = fillFormField("baujahr_heizung", aufnahme.baujahr_heizung?.toString())
|
||||
pages[0].drawText(aufnahme.baujahr_heizung?.toString() || "", {
|
||||
x: 211,
|
||||
y: height - 250,
|
||||
size: 10
|
||||
})
|
||||
|
||||
const einheiten = fillFormField("einheiten", (aufnahme.einheiten || 1).toString())
|
||||
pages[0].drawText(aufnahme.einheiten?.toString() || "", {
|
||||
x: 211,
|
||||
y: height - 271.5,
|
||||
size: 10
|
||||
})
|
||||
|
||||
const nutzflaeche = fillFormField("nutzflaeche", `${berechnungen?.energetischeNutzflaeche?.toString()}m²`)
|
||||
pages[0].drawText(aufnahme.nutzflaeche?.toString() || "", {
|
||||
x: 211,
|
||||
y: height - 285,
|
||||
size: 10
|
||||
})
|
||||
|
||||
fillFormField("energietraeger_heizung", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
|
||||
pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 298.5,
|
||||
size: 10
|
||||
})
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
fillFormField("energietraeger_warmwasser", `${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`)
|
||||
pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 312,
|
||||
size: 10
|
||||
})
|
||||
}
|
||||
|
||||
if (aufnahme.durchlauf_erhitzer && !ausweis.warmwasser_enthalten) {
|
||||
fillFormField("energietraeger_warmwasser", "Strommix");
|
||||
|
||||
const erneuerbareEnergienVerwendung = []
|
||||
|
||||
if (ausweis.alternative_heizung) {
|
||||
erneuerbareEnergienVerwendung.push("Heizung")
|
||||
}
|
||||
|
||||
toggleCheck("fensterlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Fensterlueftung)
|
||||
toggleCheck("schachtlueftung", aufnahme.lueftung == Enums.Lueftungskonzept.Schachtlueftung)
|
||||
toggleCheck("lueftungsanlage_ohne_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung)
|
||||
toggleCheck("lueftungsanlage_waermerueckgewinnung", aufnahme.lueftung == Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung)
|
||||
if (ausweis.alternative_kuehlung) {
|
||||
erneuerbareEnergienVerwendung.push("Kühlung")
|
||||
}
|
||||
|
||||
toggleCheck("anlass_neubau", ausweis.ausstellgrund == "Neubau")
|
||||
toggleCheck("anlass_vermietung", ausweis.ausstellgrund == "Vermietung" || ausweis.ausstellgrund == "Verkauf")
|
||||
toggleCheck("anlass_modernisierung", ausweis.ausstellgrund == "Modernisierung")
|
||||
toggleCheck("anlass_sonstiges", ausweis.ausstellgrund == "Sonstiges")
|
||||
if (ausweis.alternative_lueftung) {
|
||||
erneuerbareEnergienVerwendung.push("Lüftung")
|
||||
}
|
||||
|
||||
if (ausweis.alternative_warmwasser) {
|
||||
erneuerbareEnergienVerwendung.push("Warmwasser")
|
||||
}
|
||||
|
||||
pages[0].drawText(erneuerbareEnergienVerwendung.join(", "), {
|
||||
x: 358,
|
||||
y: height - 325,
|
||||
size: 8
|
||||
})
|
||||
|
||||
if (ausweis.warmwasser_enthalten) {
|
||||
pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, {
|
||||
x: 211,
|
||||
y: height - 299,
|
||||
size: 10
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
if (aufnahme.lueftung === Enums.Lueftungskonzept.Fensterlueftung) {
|
||||
addCheckMark(pages[0], 213, height - 347)
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.Schachtlueftung) {
|
||||
addCheckMark(pages[0], 213, height - 358)
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageMitWaermerueckgewinnung) {
|
||||
addCheckMark(pages[0], 355, height - 347)
|
||||
} else if (aufnahme.lueftung === Enums.Lueftungskonzept.LueftungsanlageOhneWaermerueckgewinnung) {
|
||||
addCheckMark(pages[0], 355, height - 358)
|
||||
}
|
||||
|
||||
// Kühlung
|
||||
if (aufnahme.kuehlung) {
|
||||
addCheckMark(pages[0], 213, height - 375.5)
|
||||
} else {
|
||||
addCheckMark(pages[0], 355, height - 386.5)
|
||||
}
|
||||
|
||||
if (ausweis.ausstellgrund === Enums.Ausstellgrund.Neubau) {
|
||||
addCheckMark(pages[0], 213, height - 419)
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Vermietung || ausweis.ausstellgrund === Enums.Ausstellgrund.Verkauf) {
|
||||
addCheckMark(pages[0], 213, height - 430)
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Modernisierung) {
|
||||
addCheckMark(pages[0], 344.5, height - 419)
|
||||
} else if (ausweis.ausstellgrund === Enums.Ausstellgrund.Sonstiges) {
|
||||
addCheckMark(pages[0], 463, height - 419)
|
||||
}
|
||||
|
||||
const bild = bilder && bilder.find(image => image.kategorie === Enums.BilderKategorie.Gebaeude);
|
||||
|
||||
@@ -150,35 +232,6 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne
|
||||
height: 50
|
||||
})
|
||||
|
||||
const erneuerbareEnergienVerwendung = []
|
||||
|
||||
if (ausweis.alternative_heizung) {
|
||||
erneuerbareEnergienVerwendung.push("Heizung")
|
||||
}
|
||||
|
||||
if (ausweis.alternative_kuehlung) {
|
||||
erneuerbareEnergienVerwendung.push("Kühlung")
|
||||
}
|
||||
|
||||
if (ausweis.alternative_lueftung) {
|
||||
erneuerbareEnergienVerwendung.push("Lüftung")
|
||||
}
|
||||
|
||||
if (ausweis.alternative_warmwasser) {
|
||||
erneuerbareEnergienVerwendung.push("Warmwasser")
|
||||
}
|
||||
|
||||
pages[0].drawText(erneuerbareEnergienVerwendung.join(", "), {
|
||||
x: 358,
|
||||
y: height - 337,
|
||||
size: 8
|
||||
})
|
||||
|
||||
// Kühlung
|
||||
if (aufnahme.kuehlung) {
|
||||
addCheckMark(pages[0], 354, height - 376.5)
|
||||
}
|
||||
|
||||
|
||||
/* -------------------------------- Seite 2 -------------------------------- */
|
||||
|
||||
|
||||
@@ -31,9 +31,9 @@ export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient
|
||||
}
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
return await pdfVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user)
|
||||
return await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user)
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
return await pdfVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, bilder, user)
|
||||
return await pdfVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, bilder, user)
|
||||
}
|
||||
|
||||
return null
|
||||
@@ -49,9 +49,9 @@ export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | Ver
|
||||
}
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
return await pdfDatenblattVerbrauchsausweisWohnen(ausweis, aufnahme, objekt, bilder, user)
|
||||
return await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder)
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis, aufnahme, objekt, bilder, user)
|
||||
return await pdfDatenblattVerbrauchsausweisGewerbe(ausweis as VerbrauchsausweisGewerbeClient, aufnahme, objekt, user, bilder)
|
||||
}
|
||||
|
||||
return null
|
||||
|
||||
@@ -13,7 +13,7 @@ export async function sendGEGAnforderungsMail(
|
||||
await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: `GEG Nachweis angefordert beim IBCornelsen (ID: ${nachweis.id})`,
|
||||
subject: `Angebotsanfrage GEG Nachweis - IBCornelsen (ID: ${nachweis.id})`,
|
||||
cc: {
|
||||
address: user.email || "",
|
||||
name: user.name || "",
|
||||
@@ -22,7 +22,7 @@ export async function sendGEGAnforderungsMail(
|
||||
html: `<p>Sehr geehrte/r ${user.vorname} ${user.name},
|
||||
<br>
|
||||
<br>
|
||||
Sie haben einen GEG Nachweis bei uns angefordert.</p>
|
||||
Ihre Angebotsanfrage zum GEG Nachweis ist bei uns eingegangen.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
Benutzer,
|
||||
GEGNachweisWohnen,
|
||||
} from "#lib/client/prisma.js";
|
||||
import { getPaymentSuccessSubject } from "./helpers.js";
|
||||
|
||||
export async function sendGEGBestellungsMail(
|
||||
nachweis: GEGNachweisWohnen,
|
||||
@@ -11,7 +12,8 @@ export async function sendGEGBestellungsMail(
|
||||
await transport.sendMail({
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: `Bestellbestätigung vom IBCornelsen (ID: ${nachweis.uid})`,
|
||||
// subject: getPaymentSuccessSubject(nachweis, ),
|
||||
// TODO
|
||||
cc: {
|
||||
address: user.email || "",
|
||||
name: user.name || "",
|
||||
|
||||
491
src/lib/server/mail/helpers.ts
Normal file
491
src/lib/server/mail/helpers.ts
Normal file
@@ -0,0 +1,491 @@
|
||||
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;
|
||||
}
|
||||
|
||||
export function getPaymentInvoiceBody(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) {
|
||||
const id = shortenUID(ausweis.uid);
|
||||
|
||||
let body: string = "";
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Im Anhang finden Sie den Ansichtsausweis als PDF-Datei. Wir werden den Ausweis nun prüfen und Originalausweis und Rechnung nach Prüfung zuschicken.<br>
|
||||
In der Regel erhalten Sie Ihren Ausweis innerhalb von 24 Stunden. Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
|
||||
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
|
||||
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
}
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Im Anhang finden Sie den Ansichtsausweis als PDF-Datei. Wir werden den Ausweis nun prüfen und Originalausweis und Rechnung nach Prüfung zuschicken.<br>
|
||||
In der Regel erhalten Sie Ihren Ausweis innerhalb von 24 Stunden. Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
|
||||
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
|
||||
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
}
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Im Anhang finden Sie den Ansichtsausweis als PDF-Datei. Wir werden den Ausweis nun prüfen und Originalausweis und Rechnung nach Prüfung zuschicken.<br>
|
||||
Die Erstellung des Bedarfsausweises dauert momentan leider etwas länger. Bitte kontaktieren Sie uns in dringenden Fällen telefonisch (9 - 12 Uhr). Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
|
||||
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
|
||||
Bitte antworten Sie auf diese E-Mail und schicken uns Grundriss- und Ansichtspläne Ihres Gebäudes zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
|
||||
<p>Eine Zahlung wurde noch nicht durchgeführt. Sie erhalten Bankverbindung und Verwendungszweck zusammen mit der Rechnung, sobald ihr Ausweis ausgestellt wurde.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
}
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
|
||||
export function getPaymentSuccessBody(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) {
|
||||
const id = shortenUID(ausweis.uid);
|
||||
|
||||
let body: string = "";
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Im Anhang finden Sie den Ansichtsausweis als PDF-Datei. Wir werden den Ausweis nun prüfen und Originalausweis und Rechnung nach Prüfung zuschicken.<br>
|
||||
In der Regel erhalten Sie Ihren Ausweis innerhalb von 24 Stunden. Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
|
||||
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
|
||||
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
}
|
||||
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Im Anhang finden Sie den Ansichtsausweis als PDF-Datei. Wir werden den Ausweis nun prüfen und Originalausweis und Rechnung nach Prüfung zuschicken.<br>
|
||||
In der Regel erhalten Sie Ihren Ausweis innerhalb von 24 Stunden. Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
|
||||
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
|
||||
Bitte antworten Sie auf diese E-Mail und schicken uns drei aktuelle Heizkostenabrechnungen Ihres Energieversorgers zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
}
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Im Anhang finden Sie den Ansichtsausweis als PDF-Datei. Wir werden den Ausweis nun prüfen und Originalausweis und Rechnung nach Prüfung zuschicken.<br>
|
||||
Die Erstellung des Bedarfsausweises dauert momentan leider etwas länger. Bitte kontaktieren Sie uns in dringenden Fällen telefonisch (9 - 12 Uhr). Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben telefonische Beratung zu Ihrer online Eingabe angefordert.<br>
|
||||
Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und dann die offenen Fragen zu Ihrer Eingabe beantworten.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
} else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) {
|
||||
body = `
|
||||
<p>vielen Dank für Ihre Bestellung. Sie haben unseren offline Service für Ihren Energieausweis angefordert.<br>
|
||||
Bitte antworten Sie auf diese E-Mail und schicken uns Grundriss- und Ansichtspläne Ihres Gebäudes zu. Wir werden Sie innerhalb von 48 Stunden unter der von Ihnen hinterlegten Telefonnummer kontaktieren und die Eingabe in Absprache mit Ihnen durchführen.</p>
|
||||
<p>Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`
|
||||
}
|
||||
}
|
||||
|
||||
return body;
|
||||
}
|
||||
@@ -10,7 +10,9 @@ import {
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { getAnsichtsausweis } from "../ausweis.js";
|
||||
import Mail from "nodemailer/lib/mailer/index.js";
|
||||
import { sqids } from "#client/lib/helpers.js";
|
||||
import { shortenUID } from "#server/lib/hash.js";
|
||||
import { getPaymentSuccessSubject } from "./helpers.js";
|
||||
import { getPaymentInvoiceBody } from "./helpers.js";
|
||||
|
||||
export async function sendInvoiceMail(
|
||||
ausweis: VerbrauchsausweisWohnen,
|
||||
@@ -33,8 +35,15 @@ export async function sendInvoiceMail(
|
||||
|
||||
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
||||
|
||||
if (!ausweisart) {
|
||||
return
|
||||
}
|
||||
|
||||
const attachments: Mail.Attachment[] = [];
|
||||
|
||||
const id = shortenUID(ausweis.uid)
|
||||
|
||||
|
||||
if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
const ansichtsausweis = await getAnsichtsausweis(
|
||||
ausweis,
|
||||
@@ -48,7 +57,7 @@ export async function sendInvoiceMail(
|
||||
if (ansichtsausweis) {
|
||||
attachments.push(
|
||||
{
|
||||
filename: `ID_${ausweis.id}_Ansichtsausweis.pdf`,
|
||||
filename: `ID_${id}_Ansichtsausweis.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(ansichtsausweis),
|
||||
contentType: "application/pdf",
|
||||
@@ -62,61 +71,12 @@ export async function sendInvoiceMail(
|
||||
attachments,
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: `Bestellbestätigung vom IBCornelsen (ID: ${ausweis.id})`,
|
||||
subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart),
|
||||
cc: {
|
||||
address: rechnung.email || "",
|
||||
name: rechnung.empfaenger || "",
|
||||
},
|
||||
bcc: "info@online-energieausweis.org",
|
||||
html: `<p>Sehr geehrte*r ${user.vorname} ${user.name},</p>
|
||||
|
||||
<p>im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. Nachfolgend finden Sie unsere Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.</p>
|
||||
|
||||
<br>
|
||||
<table>
|
||||
<tr><td>Kreditinstitut</td><td>:</td><td>\t Commerzbank AG</td>
|
||||
<tr><td>Empfänger</td><td>:</td><td>\t IB Cornelsen</td>
|
||||
<tr><td>IBAN</td><td>:<td>\t DE81 2004 0000 0348 6008 00</td>
|
||||
<tr><td>BIC</td><td>:</td><td>\t COBADEFFXXX</td>
|
||||
<tr><td>Betrag</td><td>:</td><td>\t <b>${rechnung.betrag}€</b></td>
|
||||
<tr><td>Verwendungszweck</td><td>:</td><td>\t <b>${rechnung.id}</b></td>
|
||||
</table>
|
||||
<br>
|
||||
|
||||
<p>
|
||||
Alternativ können Sie auch direkt online zahlen indem Sie auf den entsprechenden Link klicken:
|
||||
</p>
|
||||
<br>
|
||||
|
||||
<table>
|
||||
<tr><td>Per Einzuglastschrift zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.uid}&p=SEPA'>jetzt per ELV bezahlen</a></td></tr>
|
||||
<tr><td>Per Sofortüberweisung zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.uid}&p=Sofort'>jetzt per Sofortüberweisung bezahlen</a></td></tr>
|
||||
<tr><td>Über PayPal zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.uid}&p=PayPal'>jetzt per Paypal bezahlen</a></td></tr>
|
||||
<tr><td>Per Giropay zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.uid}&p=Giropay'>jetzt per Giropay bezahlen</a></td></tr>
|
||||
<tr><td>Per Visa oder MasterCard zahlen</td> <td>:</td> <td><a href='${BASE_URI}/energieausweis-erstellen/kaufabschluss-fortsetzen?uid=${ausweis.uid}&p=Kreditkarte'>jetzt per Kreditkarte bezahlen</a></td></tr>
|
||||
</table>
|
||||
<br>
|
||||
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`,
|
||||
html: `<p>Sehr geehrte*r ${user.vorname} ${user.name},</p>` + getPaymentInvoiceBody(ausweis, rechnung, ausweisart),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -8,8 +8,10 @@ import {
|
||||
} from "#lib/client/prisma.js";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { getAnsichtsausweis } from "../ausweis.js";
|
||||
import { sqids } from "#client/lib/helpers.js";
|
||||
import Mail from "nodemailer/lib/mailer/index.js";
|
||||
import { shortenUID } from "#server/lib/hash.js";
|
||||
import { getPaymentSuccessSubject } from "./helpers.js";
|
||||
import { getPaymentSuccessBody } from "./helpers.js";
|
||||
|
||||
export async function sendPaymentSuccessMail(
|
||||
ausweis: VerbrauchsausweisWohnen,
|
||||
@@ -32,8 +34,15 @@ export async function sendPaymentSuccessMail(
|
||||
|
||||
let info: string = "";
|
||||
const ausweisart = getAusweisartFromUUID(ausweis.uid);
|
||||
|
||||
if (!ausweisart) {
|
||||
return;
|
||||
}
|
||||
|
||||
const attachments: Mail.Attachment[] = [];
|
||||
|
||||
const id = shortenUID(ausweis.uid)
|
||||
|
||||
if (ausweisart != Enums.Ausweisart.BedarfsausweisWohnen) {
|
||||
const ansichtsausweis = await getAnsichtsausweis(
|
||||
ausweis,
|
||||
@@ -47,7 +56,7 @@ export async function sendPaymentSuccessMail(
|
||||
if (ansichtsausweis) {
|
||||
attachments.push(
|
||||
{
|
||||
filename: `ID_${ausweis.id}_Ansichtsausweis.pdf`,
|
||||
filename: `ID_${id}_Ansichtsausweis.pdf`,
|
||||
encoding: "binary",
|
||||
content: Buffer.from(ansichtsausweis),
|
||||
contentType: "application/pdf",
|
||||
@@ -61,42 +70,17 @@ export async function sendPaymentSuccessMail(
|
||||
info =
|
||||
"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({
|
||||
attachments,
|
||||
from: `"IBCornelsen" <info@online-energieausweis.org>`,
|
||||
to: user.email,
|
||||
subject: `Bestellbestätigung vom IBCornelsen (ID: ${ausweis.id})`,
|
||||
subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart),
|
||||
cc: {
|
||||
address: rechnung.email || "",
|
||||
name: rechnung.empfaenger || "",
|
||||
},
|
||||
bcc: "info@online-energieausweis.org",
|
||||
html: `<p>Sehr geehrte/r ${user.name},
|
||||
<br>
|
||||
<br>
|
||||
vielen Dank für ihre Bestellung. Wir werden Ihnen Originalausweis und Rechnung nach Prüfung zuschicken. ${info} Die Ausstellung erfolgt nach aktuellem GEG und Ihr Ausweis wird beim DIBT registriert.<br><br>
|
||||
Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.</p>
|
||||
<p>
|
||||
Mit freundlichen Grüßen,
|
||||
<br>
|
||||
Dipl.-Ing. Jens Cornelsen
|
||||
<br>
|
||||
<br>
|
||||
|
||||
<strong>IB Cornelsen</strong>
|
||||
<br>
|
||||
Katendeich 5A
|
||||
<br>
|
||||
21035 Hamburg
|
||||
<br>
|
||||
www.online-energieausweis.org
|
||||
<br>
|
||||
<br>
|
||||
|
||||
fon 040 · 209339850
|
||||
<br>
|
||||
fax 040 · 209339859
|
||||
</p>`,
|
||||
html: `<p>Sehr geehrte*r ${user.vorname} ${user.name},</p>` + getPaymentSuccessBody(ausweis, rechnung, ausweisart),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -130,13 +130,11 @@
|
||||
`/energieausweis-erstellen/verbrauchsausweis-gewerbe?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.BedarfsausweisWohnen]:
|
||||
`/energieausweis-erstellen/bedarfsausweis-wohnen?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.BedarfsausweisGewerbe]:
|
||||
`/energieausweis-erstellen/bedarfsausweis-gewerbe?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.GEGNachweisWohnen]:
|
||||
`/angebot-anfragen/geg-nachweis-wohnen-anfragen?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.GEGNachweisGewerbe]:
|
||||
`/angebot-anfragen/geg-nachweis-gewerbe-anfragen?uid=${ausweis.uid}`,
|
||||
[Enums.Ausweisart.GEGNachweisBedarfsausweis]:
|
||||
[Enums.Ausweisart.BedarfsausweisGewerbe]:
|
||||
`/angebot-anfragen/bedarfsausweis-gewerbe-anfragen?uid=${ausweis.uid}`,
|
||||
}[ausweisart];
|
||||
|
||||
@@ -153,27 +151,24 @@
|
||||
}
|
||||
|
||||
if (!await validateAccessTokenClient()) {
|
||||
loginAction = bestellen
|
||||
loginAction = anfordern
|
||||
loginOverlayHidden = false;
|
||||
return
|
||||
}
|
||||
|
||||
loginOverlayHidden = true
|
||||
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | null = null;
|
||||
let result: Awaited<ReturnType<typeof nachweisSpeichern>> | null = null;
|
||||
|
||||
try {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} else {
|
||||
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart)
|
||||
}
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} catch(e) {
|
||||
addNotification({
|
||||
dismissable: true,
|
||||
message: "Ups... Das hat nicht geklappt.",
|
||||
subtext: "Speichern ist fehlgeschlagen, bitte versuchen sie es erneut oder kontaktieren sie unseren Support."
|
||||
})
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -189,7 +184,7 @@
|
||||
versand_plz: $versand_plz,
|
||||
versand_ort: $versand_ort,
|
||||
telefon: $telefon,
|
||||
nachweis_uid: ausweis.uid,
|
||||
nachweis_uid: result.uid_nachweis,
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
@@ -201,7 +196,7 @@
|
||||
// Alle alten Ausweisdateien im localStorage löschen.
|
||||
localStorage.clear();
|
||||
|
||||
window.location.href = `/einpreisung/success?e=${uid}&a=${ausweis.uid}`;
|
||||
window.location.href = `/einpreisung/success?e=${uid}&a=${result.uid_nachweis}`;
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
dismissable: true,
|
||||
@@ -220,9 +215,9 @@
|
||||
|
||||
loginOverlayHidden = true
|
||||
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | null = null;
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | Awaited<ReturnType<typeof nachweisSpeichern>> | null = null;
|
||||
try {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} else {
|
||||
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart)
|
||||
@@ -267,15 +262,15 @@
|
||||
|
||||
loginOverlayHidden = true
|
||||
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) {
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | Awaited<ReturnType<typeof nachweisSpeichern>> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} else {
|
||||
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart)
|
||||
}
|
||||
|
||||
if (result === null) {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
addNotification({
|
||||
dismissable: true,
|
||||
message: "Ups... Das hat nicht geklappt.",
|
||||
@@ -399,7 +394,7 @@
|
||||
|
||||
const gegAnfrage =
|
||||
ausweisart === Enums.Ausweisart.GEGNachweisWohnen ||
|
||||
ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis ||
|
||||
ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe ||
|
||||
ausweisart === Enums.Ausweisart.GEGNachweisGewerbe;
|
||||
|
||||
let loginOverlayHidden = true;
|
||||
@@ -487,7 +482,7 @@
|
||||
<div class="input-standard order-3 md:order-3 xl:order-3">
|
||||
<InputLabel title="Telefonnummer *"></InputLabel>
|
||||
|
||||
<input name="telefon" bind:value={$telefon} type="text" />
|
||||
<input name="telefon" bind:value={$telefon} type="text" required />
|
||||
|
||||
<div class="help-label">
|
||||
<HelpLabel>
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
export let bilder: UploadedGebaeudeBild[];
|
||||
export let ausweistyp: Enums.AusweisTyp;
|
||||
|
||||
if (moment(localStorage.getItem("verbrauchsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at)) {
|
||||
if (!ausweis.updated_at || moment(localStorage.getItem("verbrauchsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at)) {
|
||||
const localStorageAusweis = localStorage.getItem("verbrauchsausweis-wohnen.ausweis");
|
||||
if (localStorageAusweis) {
|
||||
ausweis = JSON.parse(localStorageAusweis)
|
||||
|
||||
233
src/modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte
Normal file
233
src/modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte
Normal file
@@ -0,0 +1,233 @@
|
||||
<script lang="ts">
|
||||
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
|
||||
import {
|
||||
ObjektClient,
|
||||
AufnahmeClient,
|
||||
BenutzerClient,
|
||||
UnterlageClient,
|
||||
GEGNachweisWohnenClient,
|
||||
BildClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import { Enums } from "#lib/client/prisma.js";
|
||||
import Progressbar from "#components/Ausweis/Progressbar.svelte";
|
||||
import FileGrid from "#components/FileGrid.svelte";
|
||||
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
|
||||
import GEGAusweisart from "#components/GEGNachweis/GEGAusweisart.svelte";
|
||||
import SanierungszustandHeizungsanlage from "#components/Ausweis/SanierungszustandHeizungsanlage.svelte";
|
||||
import SanierungszustandFensterTueren from "#components/Ausweis/SanierungszustandFensterTueren.svelte";
|
||||
import SanierungszustandWaermedammung from "#components/Ausweis/SanierungszustandWaermedammung.svelte";
|
||||
import AnlagenTechnik from "#components/Ausweis/AnlagenTechnik.svelte";
|
||||
|
||||
export let nachweis: GEGNachweisWohnenClient;
|
||||
export let objekt: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
export let bilder: BildClient[] = [];
|
||||
export let plaene: UnterlageClient[] = [];
|
||||
export let unterlagen: UnterlageClient[] = [];
|
||||
|
||||
if (Object.keys(nachweis).length === 0) {
|
||||
const localStorageAusweis = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.ausweis"
|
||||
);
|
||||
if (localStorageAusweis) {
|
||||
nachweis = JSON.parse(localStorageAusweis);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(aufnahme).length === 0) {
|
||||
const localStorageAufnahme = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.aufnahme"
|
||||
);
|
||||
if (localStorageAufnahme) {
|
||||
aufnahme = JSON.parse(localStorageAufnahme);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(objekt).length === 0) {
|
||||
const localStorageObjekt = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.objekt"
|
||||
);
|
||||
if (localStorageObjekt) {
|
||||
objekt = JSON.parse(localStorageObjekt);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(bilder).length === 0) {
|
||||
const localStorageBilder = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.bilder"
|
||||
);
|
||||
if (localStorageBilder) {
|
||||
bilder = JSON.parse(localStorageBilder);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(unterlagen).length === 0) {
|
||||
const localStorageUnterlagen = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.unterlagen"
|
||||
);
|
||||
if (localStorageUnterlagen) {
|
||||
unterlagen = JSON.parse(localStorageUnterlagen);
|
||||
}
|
||||
}
|
||||
|
||||
$: {
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.ausweis",
|
||||
JSON.stringify(nachweis)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.aufnahme",
|
||||
JSON.stringify(aufnahme)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.objekt",
|
||||
JSON.stringify(objekt)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.bilder",
|
||||
JSON.stringify(bilder)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.unterlagen",
|
||||
JSON.stringify(unterlagen)
|
||||
);
|
||||
}
|
||||
|
||||
const ausweisart = Enums.Ausweisart.BedarfsausweisGewerbe;
|
||||
const anliegen = "Angebot anfragen";
|
||||
|
||||
let form: HTMLFormElement;
|
||||
let skala: HTMLDivElement;
|
||||
</script>
|
||||
|
||||
<div
|
||||
id="skala"
|
||||
bind:this={skala}
|
||||
class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll"
|
||||
>
|
||||
<Progressbar
|
||||
active={0}
|
||||
{ausweisart}
|
||||
{anliegen}
|
||||
steps={["Gebäudedaten", "Kundendaten", "Anfragebestätigung"]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<form id="formInput-1" name="ausweis" data-test="ausweis" bind:this={form}>
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
<!-- A Prüfung der Ausweisart -->
|
||||
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<GEGAusweisart
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
bind:ausweis={nachweis}
|
||||
{ausweisart}
|
||||
/>
|
||||
</Bereich>
|
||||
|
||||
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
|
||||
|
||||
<Bereich
|
||||
bereich="B"
|
||||
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
|
||||
><GebaeudeDaten bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich
|
||||
bereich="C"
|
||||
title="Angaben zur Heizungsanlage"
|
||||
><SanierungszustandHeizungsanlage bind:ausweis={nachweis} bind:images={bilder} bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich
|
||||
bereich="D"
|
||||
title="Angaben zu Fenster, Dachfenster und Türen"
|
||||
><SanierungszustandFensterTueren bind:ausweis={nachweis} bind:images={bilder} bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich
|
||||
bereich="E"
|
||||
title="Angaben zur Wärmedämmung"
|
||||
><SanierungszustandWaermedammung bind:ausweis={nachweis} bind:images={bilder} bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich
|
||||
bereich="F"
|
||||
title="Angaben zur Wärmedämmung"
|
||||
><AnlagenTechnik bind:ausweis={nachweis} bind:images={bilder} bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich bereich="G" title="Gebäudepläne & Unterlagen">
|
||||
<div
|
||||
class="bereich-box grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6"
|
||||
>
|
||||
<div class="md:box md:card mb-0">
|
||||
<div class="font-bold mb-2">Pläne</div>
|
||||
|
||||
<div>
|
||||
Hier können sie Grundrisspläne, Ansichtspläne und
|
||||
Schnitte hochladen. Die Dateien können entweder im PDF
|
||||
Format oder als Bild hochgeladen werden.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<div>
|
||||
<strong
|
||||
>Bitte laden Sie hier mind. 1 Dokument hoch:</strong
|
||||
>
|
||||
</div>
|
||||
<FileGrid
|
||||
max={Infinity}
|
||||
min={1}
|
||||
name={"plaene"}
|
||||
bind:files={plaene}
|
||||
bind:ausweis={nachweis}
|
||||
bind:objekt
|
||||
></FileGrid>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="bereich-box grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6"
|
||||
>
|
||||
<div class="md:box md:card mb-0">
|
||||
<div class="font-bold mb-2">Unterlagen</div>
|
||||
|
||||
<div>
|
||||
Hier können sie weitere Unterlagen wie z.B.
|
||||
Baugenehmigungen, U-Wert Berechnungen, Anlagentechnik
|
||||
oder ihren alten Energieausweis hochladen. Die Dateien
|
||||
können entweder im PDF Format oder als Bild hochgeladen
|
||||
werden.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<FileGrid
|
||||
max={Infinity}
|
||||
min={0}
|
||||
name={"unterlagen"}
|
||||
bind:files={unterlagen}
|
||||
bind:ausweis={nachweis}
|
||||
bind:objekt
|
||||
></FileGrid>
|
||||
</div>
|
||||
</div>
|
||||
</Bereich>
|
||||
</div>
|
||||
|
||||
<ButtonWeiterHilfe
|
||||
bind:ausweis={nachweis}
|
||||
bind:bilder
|
||||
bind:unterlagen
|
||||
bind:user
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
ausweisart={Enums.Ausweisart.BedarfsausweisGewerbe}
|
||||
{form}
|
||||
{skala}
|
||||
></ButtonWeiterHilfe>
|
||||
</form>
|
||||
@@ -10,87 +10,124 @@
|
||||
GEGNachweisWohnenClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import { Enums } from "#lib/client/prisma";
|
||||
import { Enums } from "#lib/client/prisma.js";
|
||||
import InputLabel from "#components/labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Progressbar from "#components/Ausweis/Progressbar.svelte";
|
||||
import FileGrid from "#components/FileGrid.svelte";
|
||||
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
|
||||
|
||||
|
||||
export let nachweis: GEGNachweisWohnenClient;
|
||||
export let objekt: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
export let bilder: UploadedGebaeudeBild[] = [];
|
||||
export let plaene: UnterlageClient[] =
|
||||
[];
|
||||
export let plaene: UnterlageClient[] = [];
|
||||
export let unterlagen: UnterlageClient[] = [];
|
||||
|
||||
if (Object.keys(nachweis).length === 0) {
|
||||
const localStorageAusweis = localStorage.getItem("ausweis");
|
||||
const localStorageAusweis = localStorage.getItem(
|
||||
"geg-nachweis-gewerbe.ausweis"
|
||||
);
|
||||
if (localStorageAusweis) {
|
||||
nachweis = JSON.parse(localStorageAusweis)
|
||||
nachweis = JSON.parse(localStorageAusweis);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(aufnahme).length === 0) {
|
||||
const localStorageAufnahme = localStorage.getItem("aufnahme");
|
||||
const localStorageAufnahme = localStorage.getItem(
|
||||
"geg-nachweis-gewerbe.aufnahme"
|
||||
);
|
||||
if (localStorageAufnahme) {
|
||||
aufnahme = JSON.parse(localStorageAufnahme)
|
||||
aufnahme = JSON.parse(localStorageAufnahme);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(objekt).length === 0) {
|
||||
const localStorageObjekt = localStorage.getItem("objekt");
|
||||
const localStorageObjekt = localStorage.getItem(
|
||||
"geg-nachweis-gewerbe.objekt"
|
||||
);
|
||||
if (localStorageObjekt) {
|
||||
objekt = JSON.parse(localStorageObjekt)
|
||||
objekt = JSON.parse(localStorageObjekt);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(bilder).length === 0) {
|
||||
const localStorageBilder = localStorage.getItem("bilder");
|
||||
const localStorageBilder = localStorage.getItem(
|
||||
"geg-nachweis-gewerbe.bilder"
|
||||
);
|
||||
if (localStorageBilder) {
|
||||
bilder = JSON.parse(localStorageBilder)
|
||||
bilder = JSON.parse(localStorageBilder);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(unterlagen).length === 0) {
|
||||
const localStorageUnterlagen = localStorage.getItem("unterlagen");
|
||||
const localStorageUnterlagen = localStorage.getItem(
|
||||
"geg-nachweis-gewerbe.unterlagen"
|
||||
);
|
||||
if (localStorageUnterlagen) {
|
||||
unterlagen = JSON.parse(localStorageUnterlagen)
|
||||
unterlagen = JSON.parse(localStorageUnterlagen);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$: {
|
||||
localStorage.setItem("ausweis", JSON.stringify(nachweis))
|
||||
localStorage.setItem("aufnahme", JSON.stringify(aufnahme))
|
||||
localStorage.setItem("objekt", JSON.stringify(objekt))
|
||||
localStorage.setItem("bilder", JSON.stringify(bilder))
|
||||
localStorage.setItem("unterlagen", JSON.stringify(unterlagen))
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-gewerbe.ausweis",
|
||||
JSON.stringify(nachweis)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-gewerbe.aufnahme",
|
||||
JSON.stringify(aufnahme)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-gewerbe.objekt",
|
||||
JSON.stringify(objekt)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-gewerbe.bilder",
|
||||
JSON.stringify(bilder)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-gewerbe.unterlagen",
|
||||
JSON.stringify(unterlagen)
|
||||
);
|
||||
}
|
||||
|
||||
const ausweisart = Enums.Ausweisart.GEGNachweisGewerbe;
|
||||
const anliegen = "Angebot anfragen";
|
||||
|
||||
let skala: HTMLDivElement;
|
||||
let form: HTMLFormElement;
|
||||
</script>
|
||||
|
||||
<div id="skala" class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll">
|
||||
|
||||
<Progressbar active={0} {ausweisart} {anliegen} steps={["Gebäudedaten","Kundendaten","Anfragebestätigung"]} />
|
||||
|
||||
<div
|
||||
id="skala"
|
||||
bind:this={skala}
|
||||
class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll"
|
||||
>
|
||||
<Progressbar
|
||||
active={0}
|
||||
{ausweisart}
|
||||
{anliegen}
|
||||
steps={["Gebäudedaten", "Kundendaten", "Anfragebestätigung"]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<form
|
||||
id="formInput-1"
|
||||
name="ausweis"
|
||||
data-test="ausweis"
|
||||
>
|
||||
<form id="formInput-1" name="ausweis" data-cy="nachweis" bind:this={form}>
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
<!-- A Prüfung der Ausweisart -->
|
||||
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<Ausweisart bind:objekt bind:aufnahme bind:ausweis={nachweis} {ausweisart} />
|
||||
<Ausweisart
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
bind:ausweis={nachweis}
|
||||
{ausweisart}
|
||||
ausstellgrund={[
|
||||
Enums.Ausstellgrund.Neubau,
|
||||
Enums.Ausstellgrund.Modernisierung,
|
||||
]}
|
||||
/>
|
||||
</Bereich>
|
||||
|
||||
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
|
||||
@@ -108,7 +145,12 @@
|
||||
title="Angaben zur Heizung, Lüftung, Energieerezugung, Qualität und Aufbau der Gebäudehülle usw."
|
||||
></InputLabel>
|
||||
|
||||
<textarea class="rounded-e-none" rows="10" bind:value={nachweis.beschreibung}></textarea>
|
||||
<textarea
|
||||
class="rounded-e-none"
|
||||
rows="10"
|
||||
data-cy="beschreibung"
|
||||
bind:value={nachweis.beschreibung}
|
||||
></textarea>
|
||||
|
||||
<div class="help-label">
|
||||
<HelpLabel>
|
||||
@@ -181,14 +223,14 @@
|
||||
</div>
|
||||
|
||||
<ButtonWeiterHilfe
|
||||
bind:ausweis={nachweis}
|
||||
bind:bilder
|
||||
bind:unterlagen
|
||||
bind:user
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
ausweisart={Enums.Ausweisart.GEGNachweisGewerbe}
|
||||
>
|
||||
</ButtonWeiterHilfe>
|
||||
|
||||
bind:ausweis={nachweis}
|
||||
bind:bilder
|
||||
bind:unterlagen
|
||||
bind:user
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
ausweisart={Enums.Ausweisart.GEGNachweisGewerbe}
|
||||
{form}
|
||||
{skala}
|
||||
></ButtonWeiterHilfe>
|
||||
</form>
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
<script lang="ts">
|
||||
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
|
||||
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
|
||||
import {
|
||||
ObjektClient,
|
||||
AufnahmeClient,
|
||||
BenutzerClient,
|
||||
UploadedGebaeudeBild,
|
||||
UnterlageClient,
|
||||
GEGNachweisWohnenClient,
|
||||
BildClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import { Enums } from "#lib/client/prisma.js";
|
||||
@@ -18,57 +17,80 @@
|
||||
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
|
||||
import GEGAusweisart from "#components/GEGNachweis/GEGAusweisart.svelte";
|
||||
|
||||
|
||||
export let nachweis: GEGNachweisWohnenClient;
|
||||
export let objekt: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
export let bilder: UploadedGebaeudeBild[] = [];
|
||||
export let bilder: BildClient[] = [];
|
||||
export let plaene: UnterlageClient[] = [];
|
||||
export let unterlagen: UnterlageClient[] = [];
|
||||
|
||||
if (Object.keys(nachweis).length === 0) {
|
||||
const localStorageAusweis = localStorage.getItem("geg-nachweis-wohnen.ausweis");
|
||||
const localStorageAusweis = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.ausweis"
|
||||
);
|
||||
if (localStorageAusweis) {
|
||||
nachweis = JSON.parse(localStorageAusweis)
|
||||
nachweis = JSON.parse(localStorageAusweis);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(aufnahme).length === 0) {
|
||||
const localStorageAufnahme = localStorage.getItem("geg-nachweis-wohnen.aufnahme");
|
||||
const localStorageAufnahme = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.aufnahme"
|
||||
);
|
||||
if (localStorageAufnahme) {
|
||||
aufnahme = JSON.parse(localStorageAufnahme)
|
||||
aufnahme = JSON.parse(localStorageAufnahme);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(objekt).length === 0) {
|
||||
const localStorageObjekt = localStorage.getItem("geg-nachweis-wohnen.objekt");
|
||||
const localStorageObjekt = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.objekt"
|
||||
);
|
||||
if (localStorageObjekt) {
|
||||
objekt = JSON.parse(localStorageObjekt)
|
||||
objekt = JSON.parse(localStorageObjekt);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(bilder).length === 0) {
|
||||
const localStorageBilder = localStorage.getItem("geg-nachweis-wohnen.bilder");
|
||||
const localStorageBilder = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.bilder"
|
||||
);
|
||||
if (localStorageBilder) {
|
||||
bilder = JSON.parse(localStorageBilder)
|
||||
bilder = JSON.parse(localStorageBilder);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(unterlagen).length === 0) {
|
||||
const localStorageUnterlagen = localStorage.getItem("geg-nachweis-wohnen.unterlagen");
|
||||
const localStorageUnterlagen = localStorage.getItem(
|
||||
"geg-nachweis-wohnen.unterlagen"
|
||||
);
|
||||
if (localStorageUnterlagen) {
|
||||
unterlagen = JSON.parse(localStorageUnterlagen)
|
||||
unterlagen = JSON.parse(localStorageUnterlagen);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$: {
|
||||
localStorage.setItem("geg-nachweis-wohnen.ausweis", JSON.stringify(nachweis))
|
||||
localStorage.setItem("geg-nachweis-wohnen.aufnahme", JSON.stringify(aufnahme))
|
||||
localStorage.setItem("geg-nachweis-wohnen.objekt", JSON.stringify(objekt))
|
||||
localStorage.setItem("geg-nachweis-wohnen.bilder", JSON.stringify(bilder))
|
||||
localStorage.setItem("geg-nachweis-wohnen.unterlagen", JSON.stringify(unterlagen))
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.ausweis",
|
||||
JSON.stringify(nachweis)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.aufnahme",
|
||||
JSON.stringify(aufnahme)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.objekt",
|
||||
JSON.stringify(objekt)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.bilder",
|
||||
JSON.stringify(bilder)
|
||||
);
|
||||
localStorage.setItem(
|
||||
"geg-nachweis-wohnen.unterlagen",
|
||||
JSON.stringify(unterlagen)
|
||||
);
|
||||
}
|
||||
|
||||
const ausweisart = Enums.Ausweisart.GEGNachweisWohnen;
|
||||
@@ -78,23 +100,30 @@
|
||||
let skala: HTMLDivElement;
|
||||
</script>
|
||||
|
||||
<div id="skala" bind:this={skala} class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll">
|
||||
|
||||
<Progressbar active={0} {ausweisart} {anliegen} steps={["Gebäudedaten","Kundendaten","Anfragebestätigung"]} />
|
||||
|
||||
</div>
|
||||
|
||||
<form
|
||||
id="formInput-1"
|
||||
name="ausweis"
|
||||
data-test="ausweis"
|
||||
bind:this={form}
|
||||
<div
|
||||
id="skala"
|
||||
bind:this={skala}
|
||||
class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll"
|
||||
>
|
||||
<Progressbar
|
||||
active={0}
|
||||
{ausweisart}
|
||||
{anliegen}
|
||||
steps={["Gebäudedaten", "Kundendaten", "Anfragebestätigung"]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<form id="formInput-1" name="ausweis" data-cy="nachweis" bind:this={form}>
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
<!-- A Prüfung der Ausweisart -->
|
||||
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<GEGAusweisart bind:objekt bind:aufnahme bind:ausweis={nachweis} {ausweisart} />
|
||||
<GEGAusweisart
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
bind:ausweis={nachweis}
|
||||
{ausweisart}
|
||||
/>
|
||||
</Bereich>
|
||||
|
||||
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
|
||||
@@ -112,7 +141,12 @@
|
||||
title="Angaben zur Heizung, Lüftung, Energieerezugung, Qualität und Aufbau der Gebäudehülle usw."
|
||||
></InputLabel>
|
||||
|
||||
<textarea class="rounded-e-none" rows="10" bind:value={nachweis.beschreibung}></textarea>
|
||||
<textarea
|
||||
class="rounded-e-none"
|
||||
rows="10"
|
||||
data-cy="beschreibung"
|
||||
bind:value={nachweis.beschreibung}
|
||||
></textarea>
|
||||
|
||||
<div class="help-label">
|
||||
<HelpLabel>
|
||||
@@ -185,16 +219,14 @@
|
||||
</div>
|
||||
|
||||
<ButtonWeiterHilfe
|
||||
bind:ausweis={nachweis}
|
||||
bind:bilder
|
||||
bind:unterlagen
|
||||
bind:user
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
ausweisart={Enums.Ausweisart.GEGNachweisWohnen}
|
||||
{form}
|
||||
{skala}
|
||||
>
|
||||
</ButtonWeiterHilfe>
|
||||
|
||||
bind:ausweis={nachweis}
|
||||
bind:bilder
|
||||
bind:unterlagen
|
||||
bind:user
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
ausweisart={Enums.Ausweisart.GEGNachweisWohnen}
|
||||
{form}
|
||||
{skala}
|
||||
></ButtonWeiterHilfe>
|
||||
</form>
|
||||
|
||||
@@ -1 +1,90 @@
|
||||
bedarfsausweis Gewerbe anfragen
|
||||
---
|
||||
import AusweisLayout from "#layouts/AusweisLayoutDaten.astro";
|
||||
import { AufnahmeClient, BildClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient } from "#components/Ausweis/types";
|
||||
import { createCaller } from "src/astro-typesafe-api-caller";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { validateAccessTokenServer } from "#server/lib/validateAccessToken.js";
|
||||
import BedarfsausweisGewerbeModule from "#modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte";
|
||||
|
||||
const uid = Astro.url.searchParams.get("uid");
|
||||
let nachweis: GEGNachweisWohnenClient = {} as GEGNachweisWohnenClient;
|
||||
let aufnahme: AufnahmeClient = {} as AufnahmeClient;
|
||||
let objekt: ObjektClient = {} as ObjektClient;
|
||||
let bilder: BildClient[] = []
|
||||
let unterlagen: UnterlageClient[] = []
|
||||
|
||||
const valid = validateAccessTokenServer(Astro);
|
||||
|
||||
const caller = createCaller(Astro);
|
||||
|
||||
if (uid) {
|
||||
if (!valid) {
|
||||
return Astro.redirect(
|
||||
`/auth/login?redirect=${Astro.url.toString()}`
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
nachweis = await caller["bedarfsausweis-gewerbe"]._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid
|
||||
}
|
||||
});
|
||||
|
||||
aufnahme = await caller.aufnahme._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
objekt = await caller.objekt._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_objekt
|
||||
}
|
||||
})
|
||||
|
||||
bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
unterlagen = await caller.aufnahme._uid.unterlagen.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
if (!nachweis) {
|
||||
// Der Ausweis scheint nicht zu existieren.
|
||||
// Wir leiten auf die generische Ausweisseite ohne UID weiter.
|
||||
return Astro.redirect(
|
||||
"/angebot-anfragen/bedarfsausweis-gewerbe-anfragen"
|
||||
);
|
||||
}
|
||||
} catch(e) {
|
||||
return Astro.redirect(
|
||||
"/angebot-anfragen/bedarfsausweis-gewerbe-anfragen"
|
||||
);
|
||||
}
|
||||
}
|
||||
---
|
||||
|
||||
<AusweisLayout title="Bedarfsausweis Gewerbe anfragen">
|
||||
<BedarfsausweisGewerbeModule client:only {nachweis} {objekt} {aufnahme} {bilder} {unterlagen} />
|
||||
</AusweisLayout>
|
||||
|
||||
@@ -74,17 +74,17 @@ if (uid) {
|
||||
// Der Ausweis scheint nicht zu existieren.
|
||||
// Wir leiten auf die generische Ausweisseite ohne UID weiter.
|
||||
return Astro.redirect(
|
||||
"/angebot-anfragen/geg-nachweis-wohnen-anfragen"
|
||||
"/angebot-anfragen/geg-nachweis-gewerbe-anfragen"
|
||||
);
|
||||
}
|
||||
} catch(e) {
|
||||
return Astro.redirect(
|
||||
"/angebot-anfragen/geg-nachweis-wohnen-anfragen"
|
||||
"/angebot-anfragen/geg-nachweis-gewerbe-anfragen"
|
||||
);
|
||||
}
|
||||
}
|
||||
---
|
||||
|
||||
<AusweisLayout title="GEG Nachweis Wohnen anfragen">
|
||||
<AusweisLayout title="GEG Nachweis Gewerbe anfragen">
|
||||
<GEGNachweisGewerbeModule client:only {nachweis} {objekt} {aufnahme} {bilder} {unterlagen} />
|
||||
</AusweisLayout>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import AusweisLayout from "#layouts/AusweisLayoutDaten.astro";
|
||||
import { AufnahmeClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient, UploadedGebaeudeBild } from "#components/Ausweis/types";
|
||||
import { AufnahmeClient, BildClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient } from "#components/Ausweis/types";
|
||||
import { createCaller } from "src/astro-typesafe-api-caller";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { validateAccessTokenServer } from "#server/lib/validateAccessToken.js";
|
||||
@@ -10,7 +10,7 @@ const uid = Astro.url.searchParams.get("uid");
|
||||
let nachweis: GEGNachweisWohnenClient = {} as GEGNachweisWohnenClient;
|
||||
let aufnahme: AufnahmeClient = {} as AufnahmeClient;
|
||||
let objekt: ObjektClient = {} as ObjektClient;
|
||||
let bilder: UploadedGebaeudeBild[] = []
|
||||
let bilder: BildClient[] = []
|
||||
let unterlagen: UnterlageClient[] = []
|
||||
|
||||
const valid = validateAccessTokenServer(Astro);
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js"
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js"
|
||||
import { AufnahmeSchema, ObjektSchema, prisma } from "#lib/server/prisma.js"
|
||||
import { prisma } from "#lib/server/prisma.js"
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server"
|
||||
import { AufnahmeSchema } from "src/generated/zod/aufnahme.js"
|
||||
import { z } from "zod"
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { AufnahmeClient, ObjektClient, UploadedGebaeudeBild, UUidWithPrefix, Ver
|
||||
import { filterAusweise } from "#lib/filters.js";
|
||||
import { omit } from "#lib/helpers.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 { z } from "zod";
|
||||
|
||||
@@ -15,12 +15,16 @@ export const GET = defineApiRoute({
|
||||
skip: z.number().optional()
|
||||
}),
|
||||
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({
|
||||
where: {
|
||||
...input.filters,
|
||||
benutzer: {
|
||||
uid: user.uid
|
||||
},
|
||||
...input.filters
|
||||
},
|
||||
include: {
|
||||
aufnahme: {
|
||||
|
||||
212
src/pages/api/bedarfsausweis-gewerbe/[uid].ts
Normal file
212
src/pages/api/bedarfsausweis-gewerbe/[uid].ts
Normal file
@@ -0,0 +1,212 @@
|
||||
import { GEGNachweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js";
|
||||
import { exclude } from "#lib/exclude.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { BedarfsausweisGewerbeSchema } from "src/generated/zod/bedarfsausweisgewerbe.js";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
input: BedarfsausweisGewerbeSchema.omit({
|
||||
uid: true,
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
geg_einpreisung_id: true,
|
||||
aufnahme_id: true,
|
||||
}),
|
||||
output: z.void(),
|
||||
headers: {
|
||||
"Authorization": z.string()
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.bedarfsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid: ctx.params.uid,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
await prisma.bedarfsausweisGewerbe.update({
|
||||
where: {
|
||||
uid: ctx.params.uid
|
||||
},
|
||||
data: input
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const DELETE = defineApiRoute({
|
||||
meta: {
|
||||
description: "Storniert einen Nachweis"
|
||||
},
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const { uid } = ctx.params;
|
||||
|
||||
if (!UUidWithPrefix.safeParse(uid).success) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "UID konnte nicht verifiziert werden."
|
||||
})
|
||||
}
|
||||
|
||||
// Wir holen uns den BedarfsNachweis
|
||||
// Dieser MUSS mit dem Nutzer verknüpft sein.
|
||||
const nachweis = await prisma.bedarfsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
}
|
||||
});
|
||||
|
||||
if (!nachweis) {
|
||||
// Falls wir den Nachweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
// Wir dürfen den Nachweis nur stornieren, wenn er noch nicht ausgestellt wurde
|
||||
// Außerdem müssen wir schauen, ob wir Admin oder der Besitzer des Nachweises sind.
|
||||
if ((nachweis.benutzer_id !== user.id) && user.rolle !== "ADMIN") {
|
||||
// Falls der Nachweis nicht dem Nutzer gehört, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "FORBIDDEN",
|
||||
message: "Nachweis gehört nicht dem Nutzer.",
|
||||
});
|
||||
}
|
||||
|
||||
// if (Nachweis.erledigt) {
|
||||
// // Falls der Nachweis bereits ausgestellt wurde, werfen wir einen Fehler
|
||||
// throw new TRPCError({
|
||||
// code: "BAD_REQUEST",
|
||||
// message: "Nachweis wurde bereits ausgestellt.",
|
||||
// });
|
||||
// }
|
||||
|
||||
if (nachweis.storniert) {
|
||||
// Falls der Nachweis bereits storniert ist, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Nachweis wurde bereits storniert.",
|
||||
});
|
||||
}
|
||||
|
||||
await prisma.gEGNachweisWohnen.update({
|
||||
where: {
|
||||
id: nachweis.id
|
||||
},
|
||||
data: {
|
||||
storniert: true
|
||||
}
|
||||
})
|
||||
|
||||
// Wir erstellen ein Event, dass der Nachweis storniert wurde
|
||||
// Dann können wir das in der Historie anzeigen
|
||||
await prisma.event.create({
|
||||
data: {
|
||||
title: "Nachweis storniert",
|
||||
description: ((user.rolle === "ADMIN") && (nachweis.benutzer_id !== user.id)) ? "Nachweis wurde von einem Administrator storniert." : "Nachweis wurde vom Besitzer storniert.",
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id
|
||||
}
|
||||
},
|
||||
aufnahme: {
|
||||
connect: {
|
||||
id: nachweis.aufnahme_id
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt ein spezifisches Gebäude des Benutzers zurück.",
|
||||
tags: ["Gebäude"],
|
||||
headers: {
|
||||
"Authorization": {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
output: BedarfsausweisGewerbeSchema.merge(z.object({
|
||||
uid_aufnahme: UUidWithPrefix,
|
||||
uid_objekt: UUidWithPrefix,
|
||||
uid_benutzer: UUidWithPrefix.optional()
|
||||
})).omit({
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
if (!uid) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Missing uid in request params"
|
||||
})
|
||||
}
|
||||
|
||||
const nachweis = await prisma.bedarfsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
benutzer_id: user.id
|
||||
},
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
},
|
||||
aufnahme: {
|
||||
select: {
|
||||
uid: true,
|
||||
objekt: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!nachweis) {
|
||||
// Falls wir den Nachweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
uid_aufnahme: nachweis.aufnahme.uid,
|
||||
uid_objekt: nachweis.aufnahme.objekt.uid,
|
||||
uid_benutzer: nachweis.benutzer?.uid,
|
||||
...exclude(nachweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"])
|
||||
}
|
||||
},
|
||||
});
|
||||
144
src/pages/api/bedarfsausweis-gewerbe/index.ts
Normal file
144
src/pages/api/bedarfsausweis-gewerbe/index.ts
Normal file
@@ -0,0 +1,144 @@
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { BedarfsausweisGewerbeSchema } from "src/generated/zod/bedarfsausweisgewerbe.js";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
meta: {
|
||||
contentTypes: ["application/json"],
|
||||
description:
|
||||
"Erstellt einen neuen Bedarfsausweis Gewerbe.",
|
||||
tags: ["GEG Nachweis", "Bedarfsausweis Gewerbe"],
|
||||
},
|
||||
input: z.object({
|
||||
nachweis: BedarfsausweisGewerbeSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
uid: true,
|
||||
aufnahme_id: true,
|
||||
geg_einpreisung_id: true,
|
||||
rechnung_id: true
|
||||
}),
|
||||
uid_aufnahme: UUidWithPrefix
|
||||
}),
|
||||
output: z.object({
|
||||
uid: UUidWithPrefix,
|
||||
objekt_uid: UUidWithPrefix,
|
||||
aufnahme_uid: UUidWithPrefix,
|
||||
}),
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
uid: input.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
if (!aufnahme || aufnahme.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "FORBIDDEN",
|
||||
message: "Aufnahme konnte nicht gefunden werden oder gehört nicht zu diesem Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
const nachweis = await prisma.bedarfsausweisGewerbe.create({
|
||||
data: {
|
||||
...input.nachweis,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id,
|
||||
},
|
||||
},
|
||||
aufnahme: {
|
||||
connect: {
|
||||
id: aufnahme.id,
|
||||
},
|
||||
}
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
aufnahme: {
|
||||
select: {
|
||||
uid: true,
|
||||
objekt: {
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
uid: nachweis.uid,
|
||||
objekt_uid: nachweis.aufnahme.objekt.uid,
|
||||
aufnahme_uid: nachweis.aufnahme.uid,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt eine spezifische GEG Nachweis Anfrage des Benutzers zurück.",
|
||||
tags: ["GEG Nachweis"],
|
||||
headers: {
|
||||
Authorization: {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
const nachweis = await prisma.bedarfsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
},
|
||||
include: {
|
||||
benutzer: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
events: {
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
date: "asc",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (
|
||||
!nachweis ||
|
||||
(nachweis.benutzer_id !== null && nachweis.benutzer_id !== user.id)
|
||||
) {
|
||||
// Falls wir den Ausweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "GEG Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return nachweis;
|
||||
},
|
||||
});
|
||||
@@ -1,7 +1,8 @@
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { GEGNachweisGewerbeSchema, GEGNachweisWohnenSchema, prisma } from "#lib/server/prisma";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { GEGNachweisGewerbeSchema } from "src/generated/zod/gegnachweisgewerbe.js";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
@@ -18,6 +19,7 @@ export const PUT = defineApiRoute({
|
||||
uid: true,
|
||||
aufnahme_id: true,
|
||||
geg_einpreisung_id: true,
|
||||
rechnung_id: true
|
||||
}),
|
||||
uid_aufnahme: UUidWithPrefix
|
||||
}),
|
||||
@@ -109,7 +111,6 @@ export const GET = defineApiRoute({
|
||||
benutzer: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
rechnungen: true,
|
||||
events: {
|
||||
include: {
|
||||
benutzer: {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { GEGNachweisWohnenSchema, prisma } from "#lib/server/prisma";
|
||||
import { prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { GEGNachweisWohnenSchema } from "src/generated/zod/gegnachweiswohnen.js";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
@@ -17,7 +18,8 @@ export const PUT = defineApiRoute({
|
||||
benutzer_id: true,
|
||||
uid: true,
|
||||
aufnahme_id: true,
|
||||
geg_einpreisung_id: true
|
||||
geg_einpreisung_id: true,
|
||||
rechnung_id: true
|
||||
}),
|
||||
uid_aufnahme: UUidWithPrefix
|
||||
}),
|
||||
@@ -109,7 +111,6 @@ export const GET = defineApiRoute({
|
||||
benutzer: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
rechnungen: true,
|
||||
events: {
|
||||
include: {
|
||||
benutzer: {
|
||||
|
||||
@@ -140,7 +140,7 @@ function getPaymentDescription(ausweisart: Enums.Ausweisart) {
|
||||
return "Verbrauchsausweis Gewerbegebäude"
|
||||
case "VerbrauchsausweisWohnen":
|
||||
return "Verbrauchsausweis Wohngebäude"
|
||||
case "GEGNachweisBedarfsausweis":
|
||||
case "BedarfsausweisGewerbe":
|
||||
case "GEGNachweisGewerbe":
|
||||
case "GEGNachweisWohnen":
|
||||
return "GEG Nachweis"
|
||||
|
||||
@@ -2,7 +2,7 @@ import { getAusweisartFromUUID, UUidWithPrefix } from "#components/Ausweis/types
|
||||
import { omit } from "#lib/helpers.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { sendGEGAnforderungsMail } from "#lib/server/mail/geg-anfordern.js";
|
||||
import { Enums, prisma } from "#lib/server/prisma.js";
|
||||
import { Enums, GEGNachweisGewerbe, GEGNachweisWohnen, prisma } from "#lib/server/prisma.js";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { GEGEinpreisungSchema } from "src/generated/zod/gegeinpreisung.js";
|
||||
import { z } from "zod";
|
||||
@@ -22,21 +22,41 @@ export const PUT = defineApiRoute({
|
||||
const ausweisart = getAusweisartFromUUID(input.nachweis_uid);
|
||||
|
||||
let einpreisung;
|
||||
let nachweis: GEGNachweisWohnen | GEGNachweisGewerbe;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
const nachweis = await prisma.gEGNachweisWohnen.findUnique({
|
||||
nachweis = await prisma.gEGNachweisWohnen.findUnique({
|
||||
where: {
|
||||
uid: input.nachweis_uid
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) {
|
||||
nachweis = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid: input.nachweis_uid
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
nachweis = await prisma.bedarfsausweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid: input.nachweis_uid
|
||||
}
|
||||
})
|
||||
} else {
|
||||
throw new APIError({
|
||||
"code": "BAD_REQUEST",
|
||||
"message": `Ausweisart wird nicht unterstützt: ${ausweisart}`
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
if (!nachweis || nachweis.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Ausweis existiert nicht oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
if (!nachweis || nachweis.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Ausweis existiert nicht oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
einpreisung = await prisma.gEGEinpreisung.create({
|
||||
data: {
|
||||
...omit(input, ["nachweis_uid"]),
|
||||
@@ -53,16 +73,43 @@ export const PUT = defineApiRoute({
|
||||
}
|
||||
}
|
||||
})
|
||||
await sendGEGAnforderungsMail(nachweis, user)
|
||||
} else {
|
||||
throw new APIError({
|
||||
"code": "BAD_REQUEST",
|
||||
"message": `Ausweisart wird nicht unterstützt: ${ausweisart}`
|
||||
} else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) {
|
||||
einpreisung = await prisma.gEGEinpreisung.create({
|
||||
data: {
|
||||
...omit(input, ["nachweis_uid"]),
|
||||
status: Enums.Einpreisungsstatus.open,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id
|
||||
}
|
||||
},
|
||||
geg_nachweis_gewerbe: {
|
||||
connect: {
|
||||
uid: input.nachweis_uid
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
} else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) {
|
||||
einpreisung = await prisma.gEGEinpreisung.create({
|
||||
data: {
|
||||
...omit(input, ["nachweis_uid"]),
|
||||
status: Enums.Einpreisungsstatus.open,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id
|
||||
}
|
||||
},
|
||||
bedarfsausweis_gewerbe: {
|
||||
connect: {
|
||||
uid: input.nachweis_uid
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
await sendGEGAnforderungsMail(nachweis, user)
|
||||
|
||||
return {
|
||||
uid: einpreisung.uid
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
---
|
||||
return Astro.redirect("/dashboard/admin/ausweise-pruefen/1")
|
||||
return Astro.redirect("/dashboard/admin/ausweise-pruefen/1");
|
||||
---
|
||||
@@ -35,6 +35,6 @@ try {
|
||||
---
|
||||
|
||||
<AusweisLayout title="Kundendaten Aufnehmen - IBCornelsen">
|
||||
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} {ausweistyp} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only></KundendatenModule>
|
||||
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} {ausweistyp} unterlagen={[]} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only></KundendatenModule>
|
||||
</AusweisLayout>
|
||||
|
||||
|
||||
11
src/server/lib/hash.ts
Normal file
11
src/server/lib/hash.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
function murmurHash36(str: string) {
|
||||
let h = 0xdeadbeef;
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
h = Math.imul(h ^ str.charCodeAt(i), 2654435761);
|
||||
}
|
||||
return (h >>> 0).toString(36).toUpperCase().slice(0, 6);
|
||||
}
|
||||
|
||||
export function shortenUID(uid: string) {
|
||||
return murmurHash36(uid);
|
||||
}
|
||||
@@ -165,10 +165,32 @@ export function fakeAufnahmeComplete() {
|
||||
objekt_id: faker.number.int(),
|
||||
};
|
||||
}
|
||||
export function fakeBedarfsausweisGewerbe() {
|
||||
return {
|
||||
ausstellgrund: undefined,
|
||||
keller_beheizt: undefined,
|
||||
};
|
||||
}
|
||||
export function fakeBedarfsausweisGewerbeComplete() {
|
||||
return {
|
||||
id: faker.number.int({ max: 2147483647 }),
|
||||
uid: '[object Object]',
|
||||
ausstellgrund: undefined,
|
||||
keller_beheizt: undefined,
|
||||
storniert: false,
|
||||
bestellt: false,
|
||||
zurueckgestellt: false,
|
||||
abluftanlage: false,
|
||||
zu_abluftanlage: false,
|
||||
konditionierung_der_zuluft: false,
|
||||
luftheizung: false,
|
||||
hallenheizung: false,
|
||||
dunkelstrahler: false,
|
||||
direktheizung: false,
|
||||
infrarotstrahler: false,
|
||||
fussbodenheizung: false,
|
||||
bauteilaktivierung: false,
|
||||
klimatisierung: false,
|
||||
benutzer_id: undefined,
|
||||
aufnahme_id: faker.number.int(),
|
||||
rechnung_id: undefined,
|
||||
@@ -343,13 +365,13 @@ export function fakeBenutzerComplete() {
|
||||
}
|
||||
export function fakeBild() {
|
||||
return {
|
||||
kategorie: faker.helpers.arrayElement([BilderKategorie.Heizung, BilderKategorie.Fenster, BilderKategorie.Gebaeude, BilderKategorie.Daemmung] as const),
|
||||
kategorie: faker.helpers.arrayElement([BilderKategorie.Heizung, BilderKategorie.Fenster, BilderKategorie.Gebaeude, BilderKategorie.Daemmung, BilderKategorie.AnlagenTechnik] as const),
|
||||
};
|
||||
}
|
||||
export function fakeBildComplete() {
|
||||
return {
|
||||
id: faker.number.int({ max: 2147483647 }),
|
||||
kategorie: faker.helpers.arrayElement([BilderKategorie.Heizung, BilderKategorie.Fenster, BilderKategorie.Gebaeude, BilderKategorie.Daemmung] as const),
|
||||
kategorie: faker.helpers.arrayElement([BilderKategorie.Heizung, BilderKategorie.Fenster, BilderKategorie.Gebaeude, BilderKategorie.Daemmung, BilderKategorie.AnlagenTechnik] as const),
|
||||
uid: '[object Object]',
|
||||
aufnahme_id: undefined,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user