From 2a47b8f4824547c0706cf8d3b6ef8fccfd182e84 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Thu, 13 Mar 2025 17:12:45 -0300 Subject: [PATCH 1/3] Email Betreff --- src/lib/server/mail/geg-bestellung.ts | 4 ++- src/lib/server/mail/helpers.ts | 32 +++++++++++++++++++ src/lib/server/mail/invoice.ts | 7 +++- src/lib/server/mail/payment-success.ts | 10 ++++-- src/pages/api/ausweise/index.ts | 14 +++++--- .../admin/ausweise-pruefen/index.astro | 2 +- 6 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 src/lib/server/mail/helpers.ts diff --git a/src/lib/server/mail/geg-bestellung.ts b/src/lib/server/mail/geg-bestellung.ts index f6a710ed..342e04a0 100644 --- a/src/lib/server/mail/geg-bestellung.ts +++ b/src/lib/server/mail/geg-bestellung.ts @@ -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" `, to: user.email, - subject: `Bestellbestätigung vom IBCornelsen (ID: ${nachweis.uid})`, + // subject: getPaymentSuccessSubject(nachweis, ), + // TODO cc: { address: user.email || "", name: user.name || "", diff --git a/src/lib/server/mail/helpers.ts b/src/lib/server/mail/helpers.ts new file mode 100644 index 00000000..89c8ee62 --- /dev/null +++ b/src/lib/server/mail/helpers.ts @@ -0,0 +1,32 @@ +import { shortenUID } from "#server/lib/hash.js"; +import { BedarfsausweisWohnen, Enums, Rechnung, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "../prisma.js"; + +export function getPaymentSuccessSubject(ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | BedarfsausweisWohnen, rechnung: Rechnung, ausweisart: Enums.Ausweisart) { + const id = shortenUID(ausweis.uid); + + let subject: string = ""; + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen (ID: ${id})` + if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { + subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen mit Beratung (ID: ${id})` + } else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { + subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Wohnen - offline Service (ID: ${id})` + } + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe (ID: ${id})` + if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { + subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe mit Beratung (ID: ${id})` + } else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { + subject = `Bestellbestätigung vom IB Cornelsen - Verbrauchsausweis Gewerbe - offline Service (ID: ${id})` + } + } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { + subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen (ID: ${id})` + if (rechnung.ausweistyp === Enums.AusweisTyp.Beratung) { + subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen mit Beratung (ID: ${id})` + } else if (rechnung.ausweistyp === Enums.AusweisTyp.Offline) { + subject = `Bestellbestätigung vom IB Cornelsen - Bedarfsausweis Wohnen - offline Service (ID: ${id})` + } + } + + return subject; +} \ No newline at end of file diff --git a/src/lib/server/mail/invoice.ts b/src/lib/server/mail/invoice.ts index 0e387d3e..2ae0816a 100644 --- a/src/lib/server/mail/invoice.ts +++ b/src/lib/server/mail/invoice.ts @@ -11,6 +11,7 @@ import { prisma } from "#lib/server/prisma.js"; import { getAnsichtsausweis } from "../ausweis.js"; import Mail from "nodemailer/lib/mailer/index.js"; import { shortenUID } from "#server/lib/hash.js"; +import { getPaymentSuccessSubject } from "./helpers.js"; export async function sendInvoiceMail( ausweis: VerbrauchsausweisWohnen, @@ -33,6 +34,10 @@ export async function sendInvoiceMail( const ausweisart = getAusweisartFromUUID(ausweis.uid); + if (!ausweisart) { + return + } + const attachments: Mail.Attachment[] = []; const id = shortenUID(ausweis.uid) @@ -65,7 +70,7 @@ export async function sendInvoiceMail( attachments, from: `"IBCornelsen" `, to: user.email, - subject: `Bestellbestätigung vom IBCornelsen (ID: ${id})`, + subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart), cc: { address: rechnung.email || "", name: rechnung.empfaenger || "", diff --git a/src/lib/server/mail/payment-success.ts b/src/lib/server/mail/payment-success.ts index 8c106159..c039c9f4 100644 --- a/src/lib/server/mail/payment-success.ts +++ b/src/lib/server/mail/payment-success.ts @@ -10,6 +10,7 @@ import { prisma } from "#lib/server/prisma.js"; import { getAnsichtsausweis } from "../ausweis.js"; import Mail from "nodemailer/lib/mailer/index.js"; import { shortenUID } from "#server/lib/hash.js"; +import { getPaymentSuccessSubject } from "./helpers.js"; export async function sendPaymentSuccessMail( ausweis: VerbrauchsausweisWohnen, @@ -32,6 +33,11 @@ export async function sendPaymentSuccessMail( let info: string = ""; const ausweisart = getAusweisartFromUUID(ausweis.uid); + + if (!ausweisart) { + return; + } + const attachments: Mail.Attachment[] = []; const id = shortenUID(ausweis.uid) @@ -63,12 +69,12 @@ 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" `, to: user.email, - subject: `Bestellbestätigung vom IBCornelsen (ID: ${id})`, + subject: getPaymentSuccessSubject(ausweis, rechnung, ausweisart), cc: { address: rechnung.email || "", name: rechnung.empfaenger || "", diff --git a/src/pages/api/ausweise/index.ts b/src/pages/api/ausweise/index.ts index 573adb25..e183b74b 100644 --- a/src/pages/api/ausweise/index.ts +++ b/src/pages/api/ausweise/index.ts @@ -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: { diff --git a/src/pages/dashboard/admin/ausweise-pruefen/index.astro b/src/pages/dashboard/admin/ausweise-pruefen/index.astro index 4c3455a3..4eaa6708 100644 --- a/src/pages/dashboard/admin/ausweise-pruefen/index.astro +++ b/src/pages/dashboard/admin/ausweise-pruefen/index.astro @@ -1,3 +1,3 @@ --- -return Astro.redirect("/dashboard/admin/ausweise-pruefen/1") +return Astro.redirect("/dashboard/admin/ausweise-pruefen/1"); --- \ No newline at end of file From 9ad163a469a16258ef3ce79a194ed8858c30544f Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Thu, 13 Mar 2025 17:19:13 -0300 Subject: [PATCH 2/3] Dashboard Ausweistyp --- dbml/schema.dbml | 737 ------------------ .../Dashboard/DashboardAusweis.svelte | 28 +- 2 files changed, 15 insertions(+), 750 deletions(-) delete mode 100644 dbml/schema.dbml diff --git a/dbml/schema.dbml b/dbml/schema.dbml deleted file mode 100644 index a7e5305a..00000000 --- a/dbml/schema.dbml +++ /dev/null @@ -1,737 +0,0 @@ -//// ------------------------------------------------------ -//// THIS FILE WAS AUTOMATICALLY GENERATED (DO NOT MODIFY) -//// ------------------------------------------------------ - -Project "IBCornelsen Database" { - database_type: 'PostgreSQL' - Note: '' -} - -Table Anteilshaber { - id Int [pk, increment] - benutzer_id Int [not null] - rolle String - privilegien BigInt - uid String [unique, not null] - benutzer benutzer [not null] - objekt_id Int [not null] - objekt Objekt [not null] -} - -Table ApiRequests { - id Int [pk, increment] - date DateTime [default: `now()`, not null] - ip String [not null] - method String [not null] - path String [not null] - status Int [not null] - responseTime Float [not null] - responseSize Int [not null] - userAgent String [not null] - user_id Int - user benutzer -} - -Table Aufnahme { - id Int [pk, increment] - uid String [unique, not null, note: '@zod.describe("UID der Gebäude Aufnahme")'] - benutzer_id Int - benutzer benutzer - ausweisart Ausweisart [note: '@zod.describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen")'] - gebaeudetyp String [note: '@zod.describe("Art des Gebäudes und seiner primären Nutzungsart")'] - gebaeudeteil String [note: '@zod.describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil")'] - baujahr_gebaeude Int[] [not null, note: '@zod.describe("Alle Jahre in denen das Gebäude konstruiert oder grundlegend verändert wurde")'] - baujahr_heizung Int[] [not null, note: '@zod.describe("Alle Jahre in denen die Heizung eingebaut oder grundlegend verändert wurde")'] - baujahr_klima Int[] [not null, note: '@zod.describe("Alle Jahre in denen die Klimaanlage eingebaut oder grundlegend verändert wurde")'] - einheiten Int [note: '@zod.describe("Anzahl der (Wohn)Einheiten im Gebäude")'] - flaeche Int [note: '@zod.describe("Wohnfläche bei Wohngebäuden, Nutzfläche bei Gewerbegebäuden")'] - nutzflaeche Int [note: '@zod.describe("(energetische) Nutzfläche des Gebäudes. Bei Gewerbegebäuden entspricht Sie der Nutzfläche")'] - saniert Boolean [note: '@zod.describe("Falls das Gebäude energetisch saniert ist, sollte dieser Wert auf true stehen")'] - keller Heizungsstatus [note: '@zod.describe("Ob ein Keller vorhanden, beheizt oder unbeheizt ist")'] - dachgeschoss Heizungsstatus [note: '@zod.describe("Ob ein Dachgeschoss vorhanden, beheizt oder unbeheizt ist")'] - lueftung Lueftungskonzept [note: '@zod.describe("Art der Gebäudelüftung")'] - kuehlung String [note: '@zod.describe("Art der Gebäudekühlung")'] - leerstand Int [note: '@zod.describe("Prozentualer Leerstand des Gebäudes in einem durchschnittlichen Jahr")'] - alternative_heizung Boolean [note: '@zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")'] - alternative_warmwasser Boolean [note: '@zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")'] - alternative_lueftung Boolean [note: '@zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")'] - alternative_kuehlung Boolean [note: '@zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen")'] - brennstoff_1 String [note: '@zod.describe("Genutzer Brennstoff der primären Energiequelle")'] - brennstoff_2 String [note: '@zod.describe("Genutzer Brennstoff der sekundären Energiequelle")'] - boxpruefung Boolean [default: false] - energieeffizienzklasse String [note: '@zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes")'] - erstellungsdatum DateTime [default: `now()`, note: '@zod.describe("Datum an dem der Kunde den Ausweis erstellt hat")'] - ausstellungsdatum DateTime [note: '@zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat")'] - zentralheizung Boolean [note: '@zod.describe("Falls das Gebäude über eine Zentralbeheizung verfügt, sollte dieser Wert auf true stehen")'] - solarsystem_warmwasser Boolean [note: '@zod.describe("Falls das Gebäude über ein Solarsystem für Warmwasser verfügt, sollte dieser Wert auf true stehen")'] - warmwasser_rohre_gedaemmt Boolean [note: '@zod.describe("Falls die Warmwasserrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")'] - niedertemperatur_kessel Boolean [note: '@zod.describe("Falls das Gebäude über einen Niedertemperaturkessel verfügt, sollte dieser Wert auf true stehen")'] - brennwert_kessel Boolean [note: '@zod.describe("Falls das Gebäude über einen Brennwertkessel verfügt, sollte dieser Wert auf true stehen")'] - heizungsrohre_gedaemmt Boolean [note: '@zod.describe("Falls die Heizungsrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")'] - standard_kessel Boolean - waermepumpe Boolean [note: '@zod.describe("Falls das Gebäude über eine Wärmepumpe verfügt, sollte dieser Wert auf true stehen")'] - raum_temperatur_regler Boolean [note: '@zod.describe("Falls das Gebäude über einen Raumtemperaturregler verfügt, sollte dieser Wert auf true stehen")'] - photovoltaik Boolean [note: '@zod.describe("Falls das Gebäude über eine Photovoltaikanlage verfügt, sollte dieser Wert auf true stehen")'] - durchlauf_erhitzer Boolean [note: '@zod.describe("Falls das Gebäude über einen Durchlauferhitzer verfügt, sollte dieser Wert auf true stehen")'] - einzelofen Boolean - zirkulation Boolean [note: '@zod.describe("Falls das Gebäude über eine Zirkulationspumpe verfügt, sollte dieser Wert auf true stehen")'] - einfach_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes einfach gedämmt sind, sollte dieser Wert auf true stehen")'] - dreifach_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes dreifach gedämmt sind, sollte dieser Wert auf true stehen")'] - fenster_teilweise_undicht Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes teilweise undicht sind, sollte dieser Wert auf true stehen")'] - doppel_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes doppelt gedämmt sind, sollte dieser Wert auf true stehen")'] - fenster_dicht Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes dicht sind, sollte dieser Wert auf true stehen")'] - rolllaeden_kaesten_gedaemmt Boolean [note: '@zod.describe("Falls das Gebäude über gedämmte Rolllädenkästen verfügt, sollte dieser Wert auf true stehen")'] - isolier_verglasung Boolean [note: '@zod.describe("Falls die Fenster des Gebäudes isolier Verglasung haben, sollte dieser Wert auf true stehen")'] - tueren_undicht Boolean [note: '@zod.describe("Falls die Türen des Gebäudes undicht sind, sollte dieser Wert auf true stehen")'] - tueren_dicht Boolean [note: '@zod.describe("Falls die Türen des Gebäudes dicht sind, sollte dieser Wert auf true stehen")'] - dachgeschoss_gedaemmt Boolean [note: '@zod.describe("Falls das Dachgeschoss des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")'] - keller_decke_gedaemmt Boolean [note: '@zod.describe("Falls die Kellerdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")'] - keller_wand_gedaemmt Boolean [note: '@zod.describe("Falls die Kellerwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")'] - aussenwand_gedaemmt Boolean [note: '@zod.describe("Falls die Außenwände des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen")'] - oberste_geschossdecke_gedaemmt Boolean [note: '@zod.describe("Falls die oberste Geschossdecke des Gebäudes gedämmt ist, sollte dieser Wert auf true stehen")'] - aussenwand_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls die Außenwände des Gebäudes mindestens 12cm gedämmt sind, sollte dieser Wert auf true stehen")'] - dachgeschoss_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls das Dachgeschoss des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")'] - oberste_geschossdecke_min_12cm_gedaemmt Boolean [note: '@zod.describe("Falls die oberste Geschossdecke des Gebäudes mindestens 12cm gedämmt ist, sollte dieser Wert auf true stehen")'] - events Event [not null] - bilder Bild [not null] - unterlagen Unterlage [not null] - bedarfsausweise_wohnen BedarfsausweisWohnen [not null] - verbrauchsausweise_gewerbe VerbrauchsausweisGewerbe [not null] - verbrauchsausweise_wohnen VerbrauchsausweisWohnen [not null] - geg_nachweise_wohnen GEGNachweisWohnen [not null] - geg_nachweise_gewerbe GEGNachweisGewerbe [not null] - bedarfsausweise_gewerbe BedarfsausweisGewerbe [not null] - objekt_id Int [not null] - objekt Objekt [not null] -} - -Table BedarfsausweisGewerbe { - id Int [pk, increment] - uid String [unique, not null] - ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")'] - keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")'] - storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")'] - bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")'] - zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")'] - abluftanlage Boolean [default: false] - zu_abluftanlage Boolean [default: false] - konditionierung_der_zuluft Boolean [default: false] - luftheizung Boolean [default: false] - hallenheizung Boolean [default: false] - dunkelstrahler Boolean [default: false] - direktheizung Boolean [default: false] - infrarotstrahler Boolean [default: false] - fussbodenheizung Boolean [default: false] - bauteilaktivierung Boolean [default: false] - klimatisierung Boolean [default: false] - benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")'] - benutzer benutzer - aufnahme_id Int [unique, not null] - aufnahme Aufnahme [not null] - rechnung_id Int [unique] - rechnung Rechnung - geg_einpreisung_id Int [unique] - geg_einpreisung GEGEinpreisung -} - -Table BedarfsausweisWohnen { - id Int [pk, increment] - uid String [unique, not null] - benutzer_id Int - ausstellgrund Ausstellgrund - registriernummer String - alternative_heizung Boolean - alternative_warmwasser Boolean - alternative_lueftung Boolean - alternative_kuehlung Boolean - anzahl_vollgeschosse Int - geschosshoehe Float - anzahl_gauben Int - breite_gauben Float - masse_a Float - masse_b Float - masse_c Float - masse_d Float - masse_e Float - masse_f Float - fensterflaeche_so_sw Float - fensterflaeche_nw_no Float - aussenwandflaeche_unbeheizt Float - dachflaeche Float - deckenflaeche Float - dach_u_wert Float - decke_u_wert Float - aussenwand_flaeche Float - aussenwand_u_wert Float - fussboden_flaeche Float - fussboden_u_wert Float - volumen Float - dicht Boolean - fenster_flaeche_1 Float - fenster_art_1 Float - fenster_flaeche_2 Float - fenster_art_2 Float - dachfenster_flaeche Float - dachfenster_art Float - haustuer_flaeche Float - haustuer_art Float - dach_bauart String - decke_bauart String - dach_daemmung Float - decke_daemmung Float - aussenwand_daemmung Float - boden_daemmung Float - aussenwand_bauart String - boden_bauart String - warmwasser_verteilung String - warmwasser_speicherung String - warmwasser_erzeugung String - heizung_zentral Boolean - heizung_verteilung String - heizung_speicherung String - waerme_erzeugung_heizung String - anteil_zusatzheizung Float - kollektor_flaeche Float - ausgestellt Boolean [default: false] - storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")'] - bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")'] - zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")'] - prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")'] - beschreibung String - kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")'] - benutzer benutzer - rechnung_id Int [unique] - rechnung Rechnung - aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")'] - aufnahme Aufnahme [not null] -} - -Table benutzer { - id Int [pk, increment] - uid String [unique, not null] - name String - vorname String - email String [unique, not null] - passwort String [not null] - profilbild String - plz String - ort String - adresse String - telefon String - anrede String - rolle BenutzerRolle [not null, default: 'USER'] - firma String - lex_office_id String - verified Boolean [not null, default: false] - BedarfsausweisWohnen BedarfsausweisWohnen [not null] - documenttemplates documenttemplates [not null] - objekte Objekt [not null] - rechnungen Rechnung [not null] - tokens tokens [not null] - VerbrauchsausweisGewerbe VerbrauchsausweisGewerbe [not null] - VerbrauchsausweisWohnen VerbrauchsausweisWohnen [not null] - ApiRequests ApiRequests [not null] - RefreshTokens RefreshTokens [not null] - aufnahmen Aufnahme [not null] - geg_einpreisungen GEGEinpreisung [not null] - geg_nachweise_gewerbe GEGNachweisGewerbe [not null] - geg_nachweise_wohnen GEGNachweisWohnen [not null] - bedarfsausweise_gewerbe BedarfsausweisGewerbe [not null] - ErstellteTickets Tickets [not null] - BearbeiteteTickets Tickets [not null] - events Event [not null] -} - -Table Bild { - id Int [pk, increment] - kategorie BilderKategorie [not null] - uid String [unique, not null] - aufnahme_id Int - aufnahme Aufnahme -} - -Table Event { - id Int [pk, increment] - uid String [unique, not null] - date DateTime [default: `now()`, not null] - title String [not null] - description String - aufnahme_id Int [not null] - aufnahme Aufnahme [not null] - benutzer_id Int - benutzer benutzer -} - -Table GEGEinpreisung { - id Int [pk, increment] - uid String [unique, not null] - empfaenger String - strasse String - plz String - ort String - zusatzzeile String - telefon String - email String - abweichende_versand_adresse Boolean [default: false] - versand_empfaenger String - versand_strasse String - versand_plz String - versand_ort String - versand_zusatzzeile String - status Einpreisungsstatus [not null] - geg_nachweis_wohnen GEGNachweisWohnen - geg_nachweis_gewerbe GEGNachweisGewerbe - bedarfsausweis_gewerbe BedarfsausweisGewerbe - benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, der diese Einpreisung bekommt.")'] - benutzer benutzer -} - -Table GEGNachweisGewerbe { - id Int [pk, increment] - uid String [unique, not null] - ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")'] - keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")'] - storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")'] - bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")'] - zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")'] - beschreibung String [note: '@zod.describe("Beschreibung des Bauvorhabens")'] - benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")'] - benutzer benutzer - aufnahme_id Int [unique, not null] - aufnahme Aufnahme [not null] - rechnung_id Int [unique] - rechnung Rechnung - geg_einpreisung_id Int [unique] - geg_einpreisung GEGEinpreisung -} - -Table GEGNachweisWohnen { - id Int [pk, increment] - uid String [unique, not null] - ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")'] - keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")'] - storniert Boolean [default: false, note: '@zod.describe("Falls die Nachweisanfrage storniert wurde, sollte dieser Wert auf true stehen")'] - bestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis bestellt wurde, sollte dieser Wert auf true stehen")'] - zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Nachweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")'] - beschreibung String [note: '@zod.describe("Beschreibung des Bauvorhabens")'] - benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")'] - benutzer benutzer - aufnahme_id Int [unique, not null] - aufnahme Aufnahme [not null] - rechnung_id Int [unique] - rechnung Rechnung - geg_einpreisung_id Int [unique] - geg_einpreisung GEGEinpreisung -} - -Table Klimafaktoren { - id Int [pk, increment] - plz String [not null] - month Int [not null] - year Int [not null] - klimafaktor Float [not null, default: 1] - - indexes { - (plz, month, year) [unique] - } -} - -Table Objekt { - id Int [pk, increment] - uid String [unique, not null] - benutzer_id Int - latitude Float - longitude Float - plz String [note: '@zod.describe("Postleitzahl des Gebäudes")'] - ort String [note: '@zod.describe("Ort des Gebäudes")'] - adresse String [note: '@zod.describe("Adresse (Straße und Hausnummer) des Gebäudes")'] - erstellungsdatum DateTime [default: `now()`] - benutzer benutzer - aufnahmen Aufnahme [not null] - anteilshaber Anteilshaber [not null] -} - -Table Postleitzahlen { - id Int [pk, increment] - plz String [not null] - stadt String [not null] - bundesland String [not null] - landkreis String [not null] - lat Float [not null] - lon Float [not null] -} - -Table Rechnung { - id Int [pk, increment] - uid String [unique, not null] - benutzer_id Int [not null] - empfaenger String - strasse String - plz String - ort String - zusatzzeile String - telefon String - email String - abweichende_versand_adresse Boolean [default: false] - versand_empfaenger String - versand_strasse String - versand_plz String - versand_ort String - versand_zusatzzeile String - bezahlmethode Bezahlmethoden [not null] - status Rechnungsstatus [not null] - services Service[] [not null] - ausweistyp AusweisTyp [not null, default: 'Standard'] - betrag Float [not null] - erstellt_am DateTime [default: `now()`, not null] - bezahlt_am DateTime - storniert_am DateTime - transaktions_referenz String [unique] - benutzer benutzer [not null] - verbrauchsausweis_wohnen VerbrauchsausweisWohnen - verbrauchsausweis_gewerbe VerbrauchsausweisGewerbe - bedarfsausweis_wohnen BedarfsausweisWohnen - bedarfsausweis_gewerbe BedarfsausweisGewerbe - geg_nachweis_gewerbe GEGNachweisGewerbe - geg_nachweis_wohnen GEGNachweisWohnen -} - -Table RefreshTokens { - id Int [pk, increment] - benutzer_id Int [not null] - token String [unique, not null] - ip String [not null] - expiry DateTime [not null] - user benutzer [not null] -} - -Table Tickets { - id Int [pk, increment] - uid String [unique, not null] - benutzer_id Int - created_at DateTime [default: `now()`, not null] - updated_at DateTime - deleted_at DateTime - status TicketStatus [not null, default: 'OFFEN'] - titel String [not null] - beschreibung String [not null] - metadata Json - email String [not null] - bearbeiter_id Int - prioritaet Int [default: 0] - benutzer benutzer - bearbeiter benutzer -} - -Table Unterlage { - id Int [pk, increment] - uid String [unique, not null] - name String - kategorie String - mime String - aufnahme_id Int - aufnahme Aufnahme -} - -Table VerbrauchsausweisGewerbe { - id Int [pk, increment] - uid String [unique, not null] - benutzer_id Int - ausstellgrund Ausstellgrund - registriernummer String - zusaetzliche_heizquelle Boolean - brennstoff_1 String - einheit_1 String - brennstoff_2 String - einheit_2 String - startdatum DateTime - verbrauch_1 Int - verbrauch_2 Int - verbrauch_3 Int - verbrauch_4 Int - verbrauch_5 Int - verbrauch_6 Int - strom_1 Int - strom_2 Int - strom_3 Int - stromverbrauch_enthaelt_heizung Boolean - stromverbrauch_enthaelt_warmwasser Boolean - stromverbrauch_enthaelt_lueftung Boolean - stromverbrauch_enthaelt_beleuchtung Boolean - stromverbrauch_enthaelt_kuehlung Boolean - stromverbrauch_enthaelt_sonstige String - kuehlung_enthalten Boolean - anteil_kuehlung_1 Float - anteil_kuehlung_2 Float - keller_beheizt Boolean - alternative_heizung Boolean - alternative_warmwasser Boolean - alternative_lueftung Boolean - alternative_kuehlung Boolean - warmwasser_enthalten Boolean - warmwasser_anteil_bekannt Boolean [note: '@zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")'] - anteil_warmwasser_1 Float - anteil_warmwasser_2 Float - ausgestellt Boolean [default: false] - storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")'] - bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")'] - zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")'] - prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")'] - beschreibung String - kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")'] - created_at DateTime [default: `now()`, not null] - updated_at DateTime [not null] - benutzer benutzer - rechnung_id Int [unique] - rechnung Rechnung - aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")'] - aufnahme Aufnahme [not null] -} - -Table VerbrauchsausweisWohnen { - id Int [pk, increment] - uid String [unique, not null, note: '@zod.describe("UID des Ausweises")'] - benutzer_id Int [note: '@zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört")'] - ausstellgrund Ausstellgrund [note: '@zod.describe("Ausstellgrund wie z.B. Vermietung oder Verkauf")'] - registriernummer String [note: '@zod.describe("Die Registriernummer des Ausweises")'] - zusaetzliche_heizquelle Boolean [note: '@zod.describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen")'] - einheit_1 String [note: '@zod.describe("Einheit des Energieträgers der primären Heizquelle")'] - einheit_2 String [note: '@zod.describe("Einheit des Energieträgers der sekundären Heizquelle")'] - startdatum DateTime - verbrauch_1 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im ersten der drei Verbrauchsjahre")'] - verbrauch_2 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im zweiten der drei Verbrauchsjahre")'] - verbrauch_3 Int [note: '@zod.describe("Energieverbrauch der primären Heizquelle im letzten der drei Verbrauchsjahre")'] - verbrauch_4 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im ersten der drei Verbrauchsjahre")'] - verbrauch_5 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im zweiten der drei Verbrauchsjahre")'] - verbrauch_6 Int [note: '@zod.describe("Energieverbrauch der sekund̈́ären Heizquelle im letzten der drei Verbrauchsjahre")'] - warmwasser_enthalten Boolean [note: '@zod.describe("Falls Warmwasser im Verbrauchswert enthalten ist, sollte dieser Wert auf true stehen")'] - warmwasser_anteil_bekannt Boolean [note: '@zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen")'] - keller_beheizt Boolean [note: '@zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen")'] - faktorKeller Float [note: '@zod.describe("Der Faktor mit dem die Wohnfläche erhöht wird wenn die beheizte Gesamtfläche (energetische Nutzfläche) unbekannt ist.")'] - alternative_heizung Boolean [note: '@zod.describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet, sollte dieser Wert auf true stehen.")'] - alternative_warmwasser Boolean [note: '@zod.describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme (z.B. Solarsystem, Wärmepumpe, etc.) beinhaltet, sollte dieser Wert auf true stehen.")'] - alternative_lueftung Boolean [note: '@zod.describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")'] - alternative_kuehlung Boolean [note: '@zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen.")'] - anteil_warmwasser_1 Float [note: '@zod.describe("Anteil des Warmwassers am Gesamtverbrauch der primären Energiequelle in Prozent")'] - anteil_warmwasser_2 Float [note: '@zod.describe("Anteil des Warmwassers am Gesamtverbrauch der sekundären Energiequelle in Prozent")'] - ausgestellt Boolean [default: false] - storniert Boolean [default: false, note: '@zod.describe("Falls der Ausweis storniert wurde, sollte dieser Wert auf true stehen")'] - bestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis bestellt wurde, sollte dieser Wert auf true stehen")'] - zurueckgestellt Boolean [default: false, note: '@zod.describe("Falls der Ausweis vom Aussteller zurückgestellt wurde, sollte dieser Wert auf true stehen")'] - prueftext String [note: '@zod.describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung")'] - beschreibung String - kontrolldatei_angefragt Boolean [default: false, note: '@zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")'] - created_at DateTime [default: `now()`, not null] - updated_at DateTime [not null] - benutzer benutzer - rechnung_id Int [unique] - rechnung Rechnung - aufnahme_id Int [unique, not null, note: '@zod.describe("ID der korrespondierenden Gebäudeaufnahme")'] - aufnahme Aufnahme [not null] -} - -Table documenttemplates { - id Int [pk, increment] - name String [not null] - shortdescription String [not null] - longdescription String [not null] - user_id Int [not null] - is_private Boolean [not null, default: true] - documenttype Int [not null] - filename String [not null] - created_at DateTime [default: `now()`, not null] - updated_at DateTime [default: `now()`, not null] - benutzer benutzer [not null] - documenttypes documenttypes [not null] -} - -Table documenttypes { - id Int [pk, increment] - name String [not null] - shortdescription String [not null] - longdescription String [not null] - documenttemplates documenttemplates [not null] -} - -Table tokens { - id Int [pk, increment] - token String [not null] - user_id Int [not null] - date_created DateTime [default: `now()`, not null] - last_used DateTime [default: `now()`, not null] - times_used Int [not null, default: 0] - permissions Int [not null, default: 0] - benutzer benutzer [not null] -} - -Enum Heizungsstatus { - BEHEIZT - UNBEHEIZT - NICHT_VORHANDEN -} - -Enum Lueftungskonzept { - Fensterlueftung - Schachtlueftung - LueftungsanlageMitWaermerueckgewinnung - LueftungsanlageOhneWaermerueckgewinnung -} - -Enum BenutzerRolle { - USER - ADMIN -} - -Enum BilderKategorie { - Heizung - Fenster - Gebaeude - Daemmung - AnlagenTechnik -} - -Enum Einpreisungsstatus { - open - canceled - pending - expired -} - -Enum Bezahlmethoden { - paypal - giropay - sofort - creditcard - rechnung -} - -Enum Rechnungsstatus { - open - canceled - pending - authorized - expired - failed - paid -} - -Enum AusweisTyp { - Standard - Beratung - Offline -} - -Enum TicketStatus { - OFFEN - IN_BEARBEITUNG - IN_WARTESCHLEIFE - GESCHLOSSEN - GELOEST -} - -Enum UnterlagenKategorie { - Grundriss - Sonstiges -} - -Enum Ausstellgrund { - Neubau - Vermietung - Verkauf - Modernisierung - Sonstiges -} - -Enum Ausweisart { - VerbrauchsausweisWohnen - VerbrauchsausweisGewerbe - BedarfsausweisWohnen - BedarfsausweisGewerbe - GEGNachweisWohnen - GEGNachweisGewerbe -} - -Enum Service { - Telefonberatung - Aushang - Qualitaetsdruck - SameDay -} - -Ref: Anteilshaber.benutzer_id - benutzer.id [delete: No Action] - -Ref: Anteilshaber.objekt_id > Objekt.id [delete: No Action] - -Ref: ApiRequests.user_id > benutzer.id [delete: No Action] - -Ref: Aufnahme.benutzer_id > benutzer.id [delete: No Action] - -Ref: Aufnahme.objekt_id > Objekt.id [delete: No Action] - -Ref: BedarfsausweisGewerbe.benutzer_id > benutzer.id [delete: No Action] - -Ref: BedarfsausweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: BedarfsausweisGewerbe.rechnung_id - Rechnung.id [delete: No Action] - -Ref: BedarfsausweisGewerbe.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action] - -Ref: BedarfsausweisWohnen.benutzer_id > benutzer.id [delete: No Action] - -Ref: BedarfsausweisWohnen.rechnung_id - Rechnung.id [delete: No Action] - -Ref: BedarfsausweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: Bild.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: Event.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: Event.benutzer_id > benutzer.id [delete: No Action] - -Ref: GEGEinpreisung.benutzer_id > benutzer.id [delete: No Action] - -Ref: GEGNachweisGewerbe.benutzer_id > benutzer.id [delete: No Action] - -Ref: GEGNachweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: GEGNachweisGewerbe.rechnung_id - Rechnung.id [delete: No Action] - -Ref: GEGNachweisGewerbe.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action] - -Ref: GEGNachweisWohnen.benutzer_id > benutzer.id [delete: No Action] - -Ref: GEGNachweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: GEGNachweisWohnen.rechnung_id - Rechnung.id [delete: No Action] - -Ref: GEGNachweisWohnen.geg_einpreisung_id - GEGEinpreisung.id [delete: No Action] - -Ref: Objekt.benutzer_id > benutzer.id - -Ref: Rechnung.benutzer_id > benutzer.id [delete: No Action] - -Ref: RefreshTokens.benutzer_id > benutzer.id [delete: Cascade] - -Ref: Tickets.benutzer_id > benutzer.id - -Ref: Tickets.bearbeiter_id > benutzer.id - -Ref: Unterlage.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: VerbrauchsausweisGewerbe.benutzer_id > benutzer.id [delete: No Action] - -Ref: VerbrauchsausweisGewerbe.rechnung_id - Rechnung.id [delete: No Action] - -Ref: VerbrauchsausweisGewerbe.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: VerbrauchsausweisWohnen.benutzer_id > benutzer.id [delete: No Action] - -Ref: VerbrauchsausweisWohnen.rechnung_id - Rechnung.id [delete: No Action] - -Ref: VerbrauchsausweisWohnen.aufnahme_id > Aufnahme.id [delete: No Action] - -Ref: documenttemplates.user_id > benutzer.id [delete: Cascade] - -Ref: documenttemplates.documenttype > documenttypes.id [delete: Cascade] - -Ref: tokens.user_id > benutzer.id [delete: No Action] \ No newline at end of file diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte index 131ee9af..dbce697e 100644 --- a/src/components/Dashboard/DashboardAusweis.svelte +++ b/src/components/Dashboard/DashboardAusweis.svelte @@ -13,7 +13,7 @@ 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"; @@ -131,19 +131,21 @@
- {#if ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen} -
+
+ {#if ausweisart == Enums.Ausweisart.VerbrauchsausweisWohnen} Verbrauchsausweis Wohnen -
- {:else if ausweisart == Enums.Ausweisart.BedarfsausweisWohnen} -
- Bedarfsausweis Wohnen -
- {:else if ausweisart == Enums.Ausweisart.VerbrauchsausweisGewerbe} -
- Verbrauchsausweis Gewerbe -
- {/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} +
{#if ausweis.ausgestellt} Ausgestellt From 4378f256423bf5179151edd7e986cc40f5f81cb7 Mon Sep 17 00:00:00 2001 From: Moritz Utcke Date: Thu, 13 Mar 2025 17:23:54 -0300 Subject: [PATCH 3/3] GEG Nachweis Wohnen Test --- .../e2e/GEGNachweisWohnen/erstellen.cy.ts | 125 ++++++++++++++++++ .../GEGNachweisWohnenModule.svelte | 3 +- 2 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts diff --git a/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts b/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts new file mode 100644 index 00000000..86f049f4 --- /dev/null +++ b/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts @@ -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") + }); +}); diff --git a/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte b/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte index 2d05d14e..882e5e24 100644 --- a/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte +++ b/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte @@ -113,7 +113,7 @@ />
-
+
@@ -144,6 +144,7 @@