diff --git a/astro.config.mjs b/astro.config.mjs index 84898138..67005786 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -6,7 +6,6 @@ import node from "@astrojs/node"; import mdx from "@astrojs/mdx"; import astroTypesafeAPI from "astro-typesafe-api" - // https://astro.build/config export default defineConfig({ integrations: [svelte(), tailwind(), mdx(), astroTypesafeAPI()], diff --git a/bun.lock b/bun.lock index c53622c4..73863ed9 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ "js-interpolate": "^1.3.2", "jsonwebtoken": "^9.0.2", "jwt-decode": "^4.0.0", - "mime-types": "^2.1.35", + "mime": "^4.0.6", "moment": "^2.30.1", "moment-timezone": "^0.5.46", "nodemailer": "^6.10.0", @@ -64,7 +64,6 @@ "@types/is-base64": "^1.1.3", "@types/js-cookie": "^3.0.6", "@types/jsonwebtoken": "^9.0.7", - "@types/mime-types": "^2.1.4", "@types/nodemailer": "^6.4.17", "@types/papaparse": "^5.3.15", "@types/siema": "^1.4.11", @@ -772,8 +771,6 @@ "@types/mime": ["@types/mime@1.3.5", "", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="], - "@types/mime-types": ["@types/mime-types@2.1.4", "", {}, "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w=="], - "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], "@types/nlcst": ["@types/nlcst@2.0.3", "", { "dependencies": { "@types/unist": "*" } }, "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA=="], @@ -1856,7 +1853,7 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + "mime": ["mime@4.0.6", "", { "bin": { "mime": "bin/cli.js" } }, "sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A=="], "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], @@ -2868,6 +2865,8 @@ "node-mocks-http/depd": ["depd@1.1.2", "", {}, "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="], + "node-mocks-http/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + "normalize-package-data/semver": ["semver@5.7.2", "", { "bin": { "semver": "bin/semver" } }, "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="], "npm-packlist/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], @@ -2938,6 +2937,8 @@ "send/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="], + "send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + "serve-static/send": ["send@0.19.0", "", { "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" } }, "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw=="], "soap/strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], @@ -3022,6 +3023,8 @@ "express/send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + "express/send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + "finalhandler/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "form-render/@ant-design/icons/@ant-design/colors": ["@ant-design/colors@6.0.0", "", { "dependencies": { "@ctrl/tinycolor": "^3.4.0" } }, "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ=="], @@ -3094,6 +3097,8 @@ "serve-static/send/encodeurl": ["encodeurl@1.0.2", "", {}, "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="], + "serve-static/send/mime": ["mime@1.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="], + "tsx/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ=="], "tsx/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.25.0", "", { "os": "android", "cpu": "arm" }, "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g=="], diff --git a/cypress.config.ts b/cypress.config.ts index e6e1c1a1..e11f6b25 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -35,6 +35,14 @@ export default defineConfig({ on("task", { async verbrauchsausweisWohnen(query) { return await prisma.verbrauchsausweisWohnen.findFirst(query) + }, + async plz() { + const total = await prisma.postleitzahlen.count() + const result = await prisma.postleitzahlen.findFirst({ + skip: Math.floor(Math.random() * total) + }) + + return result?.plz } }) }, diff --git a/package.json b/package.json index 1e55d508..cd28e355 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "js-interpolate": "^1.3.2", "jsonwebtoken": "^9.0.2", "jwt-decode": "^4.0.0", - "mime-types": "^2.1.35", + "mime": "^4.0.6", "moment": "^2.30.1", "moment-timezone": "^0.5.46", "nodemailer": "^6.10.0", @@ -78,7 +78,6 @@ "@types/is-base64": "^1.1.3", "@types/js-cookie": "^3.0.6", "@types/jsonwebtoken": "^9.0.7", - "@types/mime-types": "^2.1.4", "@types/nodemailer": "^6.4.17", "@types/papaparse": "^5.3.15", "@types/siema": "^1.4.11", diff --git a/prisma/migrations/20250330225209_/migration.sql b/prisma/migrations/20250330225209_/migration.sql new file mode 100644 index 00000000..cd49940e --- /dev/null +++ b/prisma/migrations/20250330225209_/migration.sql @@ -0,0 +1,44 @@ +/* + Warnings: + + - You are about to drop the column `ausstellungsdatum` on the `Aufnahme` table. All the data in the column will be lost. + - You are about to drop the column `ausweisart` on the `Aufnahme` table. All the data in the column will be lost. + - You are about to drop the column `boxpruefung` on the `Aufnahme` table. All the data in the column will be lost. + - You are about to drop the column `brennstoff_1` on the `Aufnahme` table. All the data in the column will be lost. + - You are about to drop the column `brennstoff_2` on the `Aufnahme` table. All the data in the column will be lost. + - You are about to drop the column `energieeffizienzklasse` on the `Aufnahme` table. All the data in the column will be lost. + - You are about to drop the column `uid` on the `Bild` table. All the data in the column will be lost. + - You are about to drop the column `keller_beheizt` on the `VerbrauchsausweisWohnen` table. All the data in the column will be lost. + +*/ +-- DropIndex +DROP INDEX "Bild_uid_key"; + +-- AlterTable +ALTER TABLE "Aufnahme" DROP COLUMN "ausstellungsdatum", +DROP COLUMN "ausweisart", +DROP COLUMN "boxpruefung", +DROP COLUMN "brennstoff_1", +DROP COLUMN "brennstoff_2", +DROP COLUMN "energieeffizienzklasse"; + +-- AlterTable +ALTER TABLE "BedarfsausweisWohnen" ADD COLUMN "ausstellungsdatum" TIMESTAMP(3), +ADD COLUMN "boxpruefung" BOOLEAN DEFAULT false, +ADD COLUMN "energieeffizienzklasse" VARCHAR(5); + +-- AlterTable +ALTER TABLE "Bild" DROP COLUMN "uid"; + +-- AlterTable +ALTER TABLE "VerbrauchsausweisGewerbe" ADD COLUMN "ausstellungsdatum" TIMESTAMP(3), +ADD COLUMN "boxpruefung" BOOLEAN DEFAULT false, +ADD COLUMN "energieeffizienzklasse" VARCHAR(5); + +-- AlterTable +ALTER TABLE "VerbrauchsausweisWohnen" DROP COLUMN "keller_beheizt", +ADD COLUMN "ausstellungsdatum" TIMESTAMP(3), +ADD COLUMN "boxpruefung" BOOLEAN DEFAULT false, +ADD COLUMN "brennstoff_1" VARCHAR(50), +ADD COLUMN "brennstoff_2" VARCHAR(50), +ADD COLUMN "energieeffizienzklasse" VARCHAR(5); diff --git a/prisma/migrations/20250331182241_nachweise/migration.sql b/prisma/migrations/20250331182241_nachweise/migration.sql new file mode 100644 index 00000000..b92d17c6 --- /dev/null +++ b/prisma/migrations/20250331182241_nachweise/migration.sql @@ -0,0 +1,22 @@ +/* + Warnings: + + - Added the required column `updated_at` to the `BedarfsausweisGewerbe` table without a default value. This is not possible if the table is not empty. + - Added the required column `updated_at` to the `GEGNachweisGewerbe` table without a default value. This is not possible if the table is not empty. + - Added the required column `updated_at` to the `GEGNachweisWohnen` table without a default value. This is not possible if the table is not empty. + +*/ +-- AlterTable +ALTER TABLE "BedarfsausweisGewerbe" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', +ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL; + +-- AlterTable +ALTER TABLE "GEGNachweisGewerbe" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', +ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL; + +-- AlterTable +ALTER TABLE "GEGNachweisWohnen" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, +ADD COLUMN "nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', +ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL; diff --git a/prisma/schema/Aufnahme.prisma b/prisma/schema/Aufnahme.prisma index 317d78c2..4e46d78e 100644 --- a/prisma/schema/Aufnahme.prisma +++ b/prisma/schema/Aufnahme.prisma @@ -16,8 +16,6 @@ model Aufnahme { id String @id @unique @db.VarChar(8) benutzer_id String? benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) - /// @zod.describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen") - ausweisart Ausweisart? /// @zod.describe("Art des Gebäudes und seiner primären Nutzungsart") gebaeudetyp String? @db.VarChar /// @zod.describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil") @@ -56,20 +54,8 @@ model Aufnahme { /// @zod.describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen") alternative_kuehlung Boolean? - /// @zod.describe("Genutzer Brennstoff der primären Energiequelle") - brennstoff_1 String? @db.VarChar(50) - /// @zod.describe("Genutzer Brennstoff der sekundären Energiequelle") - brennstoff_2 String? @db.VarChar(50) - - boxpruefung Boolean? @default(false) - - /// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes") - energieeffizienzklasse String? @db.VarChar(5) - - /// @zod.describe("Datum an dem der Kunde den Ausweis erstellt hat") + /// @zod.describe("Datum an dem der Kunde die Aufnahme erstellt hat") erstellungsdatum DateTime? @default(now()) - /// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat") - ausstellungsdatum DateTime? /// @zod.describe("Falls das Gebäude über eine Zentralbeheizung verfügt, sollte dieser Wert auf true stehen") zentralheizung Boolean? diff --git a/prisma/schema/BedarfsausweisGewerbe.prisma b/prisma/schema/BedarfsausweisGewerbe.prisma index d0c97158..f2ec3991 100644 --- a/prisma/schema/BedarfsausweisGewerbe.prisma +++ b/prisma/schema/BedarfsausweisGewerbe.prisma @@ -25,6 +25,11 @@ model BedarfsausweisGewerbe { bauteilaktivierung Boolean? @default(false) klimatisierung Boolean? @default(false) + nachweistyp AusweisTyp @default(Standard) + + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + /// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört") benutzer_id String? benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) diff --git a/prisma/schema/BedarfsausweisWohnen.prisma b/prisma/schema/BedarfsausweisWohnen.prisma index e2ce4f2a..5dbbf3e9 100644 --- a/prisma/schema/BedarfsausweisWohnen.prisma +++ b/prisma/schema/BedarfsausweisWohnen.prisma @@ -11,6 +11,12 @@ model BedarfsausweisWohnen { alternative_lueftung Boolean? alternative_kuehlung Boolean? + /// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes") + energieeffizienzklasse String? @db.VarChar(5) + /// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat") + ausstellungsdatum DateTime? + boxpruefung Boolean? @default(false) + anzahl_vollgeschosse Int? geschosshoehe Float? anzahl_gauben Int? diff --git a/prisma/schema/GEGNachweisGewerbe.prisma b/prisma/schema/GEGNachweisGewerbe.prisma index b7f39cca..3fb83957 100644 --- a/prisma/schema/GEGNachweisGewerbe.prisma +++ b/prisma/schema/GEGNachweisGewerbe.prisma @@ -16,6 +16,11 @@ model GEGNachweisGewerbe { /// @zod.describe("Beschreibung des Bauvorhabens") beschreibung String? @db.Text + nachweistyp AusweisTyp @default(Standard) + + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + /// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört") benutzer_id String? benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) diff --git a/prisma/schema/GEGNachweisWohnen.prisma b/prisma/schema/GEGNachweisWohnen.prisma index c4b747b0..951e1fa3 100644 --- a/prisma/schema/GEGNachweisWohnen.prisma +++ b/prisma/schema/GEGNachweisWohnen.prisma @@ -16,6 +16,11 @@ model GEGNachweisWohnen { /// @zod.describe("Beschreibung des Bauvorhabens") beschreibung String? @db.Text + nachweistyp AusweisTyp @default(Standard) + + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + /// @zod.describe("Die ID des Benutzers, welchem dieser Ausweis gehört") benutzer_id String? benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) diff --git a/prisma/schema/VerbrauchsausweisGewerbe.prisma b/prisma/schema/VerbrauchsausweisGewerbe.prisma index c827a1e7..c544fb68 100644 --- a/prisma/schema/VerbrauchsausweisGewerbe.prisma +++ b/prisma/schema/VerbrauchsausweisGewerbe.prisma @@ -5,9 +5,7 @@ model VerbrauchsausweisGewerbe { ausstellgrund Ausstellgrund? registriernummer String? @db.VarChar zusaetzliche_heizquelle Boolean? - brennstoff_1 String? @db.VarChar(50) einheit_1 String? @db.VarChar(50) - brennstoff_2 String? @db.VarChar(50) einheit_2 String? @db.VarChar(50) startdatum DateTime? @db.Timestamp(6) verbrauch_1 Int? @@ -17,6 +15,17 @@ model VerbrauchsausweisGewerbe { verbrauch_5 Int? verbrauch_6 Int? + /// @zod.describe("Genutzer Brennstoff der primären Energiequelle") + brennstoff_1 String? @db.VarChar(50) + /// @zod.describe("Genutzer Brennstoff der sekundären Energiequelle") + brennstoff_2 String? @db.VarChar(50) + + /// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes") + energieeffizienzklasse String? @db.VarChar(5) + /// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat") + ausstellungsdatum DateTime? + boxpruefung Boolean? @default(false) + strom_1 Int? strom_2 Int? strom_3 Int? diff --git a/prisma/schema/VerbrauchsausweisWohnen.prisma b/prisma/schema/VerbrauchsausweisWohnen.prisma index a19e0e18..ca44544b 100644 --- a/prisma/schema/VerbrauchsausweisWohnen.prisma +++ b/prisma/schema/VerbrauchsausweisWohnen.prisma @@ -13,6 +13,18 @@ model VerbrauchsausweisWohnen { einheit_1 String? @db.VarChar(50) /// @zod.describe("Einheit des Energieträgers der sekundären Heizquelle") einheit_2 String? @db.VarChar(50) + + /// @zod.describe("Genutzer Brennstoff der primären Energiequelle") + brennstoff_1 String? @db.VarChar(50) + /// @zod.describe("Genutzer Brennstoff der sekundären Energiequelle") + brennstoff_2 String? @db.VarChar(50) + + /// @zod.describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes") + energieeffizienzklasse String? @db.VarChar(5) + /// @zod.describe("Datum an dem der Aussteller den Ausweis ausgestellt hat") + ausstellungsdatum DateTime? + boxpruefung Boolean? @default(false) + startdatum DateTime? @db.Timestamptz(6) /// @zod.describe("Energieverbrauch der primären Heizquelle im ersten der drei Verbrauchsjahre") verbrauch_1 Int? @@ -30,8 +42,6 @@ model VerbrauchsausweisWohnen { warmwasser_enthalten Boolean? /// @zod.describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen") warmwasser_anteil_bekannt Boolean? - /// @zod.describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen") - keller_beheizt Boolean? /// @zod.describe("Der Faktor mit dem die Wohnfläche erhöht wird wenn die beheizte Gesamtfläche (energetische Nutzfläche) unbekannt ist.") faktorKeller Float? diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index f10f3aaa..a6ca81e3 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -5,6 +5,15 @@ 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"), + "ausweise": await import("../src/pages/api/ausweise/index.ts"), + "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), + "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), + "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), + "bedarfsausweis-gewerbe/[id]": await import("../src/pages/api/bedarfsausweis-gewerbe/[id].ts"), + "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), + "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), + "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/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"), @@ -12,31 +21,22 @@ export const createCaller = createCallerFactory({ "admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"), "admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"), "admin/stornieren": await import("../src/pages/api/admin/stornieren.ts"), - "aufnahme": await import("../src/pages/api/aufnahme/index.ts"), - "ausweise": await import("../src/pages/api/ausweise/index.ts"), - "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), - "auth/passwort-vergessen": await import("../src/pages/api/auth/passwort-vergessen.ts"), - "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "bedarfsausweis-gewerbe/[uid]": await import("../src/pages/api/bedarfsausweis-gewerbe/[uid].ts"), - "bedarfsausweis-gewerbe": await import("../src/pages/api/bedarfsausweis-gewerbe/index.ts"), - "bedarfsausweis-wohnen/[id]": await import("../src/pages/api/bedarfsausweis-wohnen/[id].ts"), - "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), "bilder/[id]": await import("../src/pages/api/bilder/[id].ts"), - "geg-nachweis-gewerbe/[uid]": await import("../src/pages/api/geg-nachweis-gewerbe/[uid].ts"), + "geg-nachweis-gewerbe/[id]": await import("../src/pages/api/geg-nachweis-gewerbe/[id].ts"), "geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"), - "geg-nachweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-wohnen/[uid].ts"), + "geg-nachweis-wohnen/[id]": await import("../src/pages/api/geg-nachweis-wohnen/[id].ts"), "geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"), "objekt": await import("../src/pages/api/objekt/index.ts"), + "ticket": await import("../src/pages/api/ticket/index.ts"), + "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), + "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), "rechnung/[id]": await import("../src/pages/api/rechnung/[id].ts"), "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/[id]": await import("../src/pages/api/verbrauchsausweis-gewerbe/[id].ts"), "verbrauchsausweis-gewerbe": await import("../src/pages/api/verbrauchsausweis-gewerbe/index.ts"), - "verbrauchsausweis-wohnen/[id]": await import("../src/pages/api/verbrauchsausweis-wohnen/[id].ts"), - "verbrauchsausweis-wohnen": await import("../src/pages/api/verbrauchsausweis-wohnen/index.ts"), + "user": await import("../src/pages/api/user/index.ts"), + "user/self": await import("../src/pages/api/user/self.ts"), "webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"), "aufnahme/[id]/bilder": await import("../src/pages/api/aufnahme/[id]/bilder.ts"), "aufnahme/[id]": await import("../src/pages/api/aufnahme/[id]/index.ts"), diff --git a/src/client/lib/ausweisSpeichern.ts b/src/client/lib/ausweisSpeichern.ts index 741381ee..4d3eebbb 100644 --- a/src/client/lib/ausweisSpeichern.ts +++ b/src/client/lib/ausweisSpeichern.ts @@ -57,9 +57,6 @@ export async function ausweisSpeichern( 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, @@ -70,7 +67,6 @@ export async function ausweisSpeichern( 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, @@ -119,10 +115,7 @@ export async function ausweisSpeichern( 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, @@ -133,7 +126,6 @@ export async function ausweisSpeichern( 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, diff --git a/src/client/lib/nachweisSpeichern.ts b/src/client/lib/nachweisSpeichern.ts index 2bd84c6d..083839e8 100644 --- a/src/client/lib/nachweisSpeichern.ts +++ b/src/client/lib/nachweisSpeichern.ts @@ -4,10 +4,10 @@ import { exclude } from "#lib/exclude.js"; import Cookies from "js-cookie"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { AufnahmeClient, BedarfsausweisWohnenClient, BildClient, ObjektClient, UnterlageClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js"; -import { Enums } from "#lib/client/prisma.js"; +import { BedarfsausweisGewerbe, Enums, GEGNachweisGewerbe, GEGNachweisWohnen } from "#lib/client/prisma.js"; export async function nachweisSpeichern( - nachweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, + nachweis: BedarfsausweisGewerbe | GEGNachweisWohnen | GEGNachweisGewerbe, objekt: ObjektClient, aufnahme: AufnahmeClient, bilder: BildClient[], @@ -58,9 +58,6 @@ export async function nachweisSpeichern( 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, @@ -71,7 +68,6 @@ export async function nachweisSpeichern( 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, @@ -120,10 +116,7 @@ export async function nachweisSpeichern( 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, @@ -134,7 +127,6 @@ export async function nachweisSpeichern( 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, @@ -203,7 +195,7 @@ export async function nachweisSpeichern( } else { const { id } = await putRoute.fetch({ nachweis, - uid_aufnahme: aufnahme.id + aufnahme_id: aufnahme.id }, { headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` diff --git a/src/components/Ausweis/ButtonWeiterHilfe.svelte b/src/components/Ausweis/ButtonWeiterHilfe.svelte index 8e616e77..d266ef6d 100644 --- a/src/components/Ausweis/ButtonWeiterHilfe.svelte +++ b/src/components/Ausweis/ButtonWeiterHilfe.svelte @@ -5,12 +5,12 @@ import Overlay from "#components/Overlay.svelte"; import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte"; - import { AusweisTyp, Enums } from "#lib/client/prisma.js"; + import { AusweisTyp, BedarfsausweisGewerbe, Enums, GEGNachweisGewerbe, GEGNachweisWohnen } from "#lib/client/prisma.js"; import { openWindowWithPost } from "#lib/helpers/window.js"; import { PRICES } from "#lib/constants.js"; import { nachweisSpeichern } from "#client/lib/nachweisSpeichern.js"; - export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient | GEGNachweisWohnenClient; + export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient | BedarfsausweisGewerbe | GEGNachweisWohnen | GEGNachweisGewerbe; export let bilder: BildClient[]; export let unterlagen: UnterlageClient[] = []; export let user: BenutzerClient | null; @@ -46,16 +46,27 @@ return; } - - openWindowWithPost("/kundendaten", { - ausweis: { ...ausweis, ausweistyp }, - objekt, - aufnahme, - bilder, - unterlagen, - ausweisart, - ausweistyp - }, "") + if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { + openWindowWithPost("/kundendaten", { + ausweis: { ...ausweis, nachweistyp: ausweistyp }, + objekt, + aufnahme, + bilder, + unterlagen, + ausweisart, + ausweistyp + }, "") + } else { + openWindowWithPost("/kundendaten", { + ausweis: { ...ausweis, ausweistyp }, + objekt, + aufnahme, + bilder, + unterlagen, + ausweisart, + ausweistyp + }, "") + } } let loginAction: () => any = ausweisAbschicken; @@ -71,7 +82,7 @@ let result: Awaited> | Awaited> | null = null; if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { - result = await nachweisSpeichern({ ...ausweis, ausweistyp }, objekt, aufnahme, bilder, unterlagen, ausweisart) + result = await nachweisSpeichern({ ...ausweis, nachweistyp: ausweistyp }, objekt, aufnahme, bilder, unterlagen, ausweisart) ausweis.id = result.nachweis_id; } else { result = await ausweisSpeichern({ ...ausweis, ausweistyp }, objekt, aufnahme, bilder, ausweisart) diff --git a/src/components/Ausweis/Progressbar.svelte b/src/components/Ausweis/Progressbar.svelte index 6295fe7a..9dda6504 100644 --- a/src/components/Ausweis/Progressbar.svelte +++ b/src/components/Ausweis/Progressbar.svelte @@ -26,6 +26,10 @@ Bedarfsausweis Wohnen {:else if ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe} Bedarfsausweis Gewerbe + {:else if ausweisart === Enums.Ausweisart.GEGNachweisWohnen} + GEG Nachweis Wohngebäude + {:else if ausweisart === Enums.Ausweisart.GEGNachweisGewerbe} + GEG Nachweis Gewerbegebäude {/if} {#if ausweistyp === Enums.AusweisTyp.Beratung} mit Beratung diff --git a/src/components/Ausweis/StromVerbrauch.svelte b/src/components/Ausweis/StromVerbrauch.svelte index c269137e..bb2032a1 100644 --- a/src/components/Ausweis/StromVerbrauch.svelte +++ b/src/components/Ausweis/StromVerbrauch.svelte @@ -79,11 +79,6 @@ } } - $: { - console.log(aufnahme.brennstoff_1); - - } - $: abweichung = auditVerbrauchAbweichung(ausweis, aufnahme); @@ -234,7 +229,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 class="rounded-e-none" name="brennstoff_1" data-cy="brennstoff_1" - bind:value={aufnahme.brennstoff_1} + bind:value={ausweis.brennstoff_1} required > @@ -267,11 +262,11 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 name="einheit_1" data-cy="einheit_1" bind:value={ausweis.einheit_1} - disabled={!aufnahme.brennstoff_1} + disabled={!ausweis.brennstoff_1} required > - {#each fuelMap.hasOwnProperty(aufnahme.brennstoff_1) ? fuelMap[aufnahme.brennstoff_1] : [] as unit} + {#each fuelMap.hasOwnProperty(ausweis.brennstoff_1) ? fuelMap[ausweis.brennstoff_1] : [] as unit} {/each} @@ -425,7 +420,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 class="rounded-e-none" name="brennstoff_2" data-cy="brennstoff_2" - bind:value={aufnahme.brennstoff_2} + bind:value={ausweis.brennstoff_2} required > - {#each fuelMap.hasOwnProperty(aufnahme.brennstoff_2) ? fuelMap[aufnahme.brennstoff_2] : [] as unit} + {#each fuelMap.hasOwnProperty(ausweis.brennstoff_2) ? fuelMap[ausweis.brennstoff_2] : [] as unit} {/each} diff --git a/src/components/Ausweis/Verbrauch.svelte b/src/components/Ausweis/Verbrauch.svelte index ac67de21..3cd8abf5 100644 --- a/src/components/Ausweis/Verbrauch.svelte +++ b/src/components/Ausweis/Verbrauch.svelte @@ -233,7 +233,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 @@ -436,7 +436,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 diff --git a/src/components/Ausweis/types.ts b/src/components/Ausweis/types.ts index be1410fa..b1ca6604 100644 --- a/src/components/Ausweis/types.ts +++ b/src/components/Ausweis/types.ts @@ -107,7 +107,7 @@ export const UUidWithPrefix = z.string().refine((value) => { return false; }) -export function getAusweisartFromUUID(id: string): Enums.Ausweisart | null { +export function getAusweisartFromId(id: string): Enums.Ausweisart | null { if (!UUidWithPrefix.safeParse(id).success) { return null } diff --git a/src/components/AusweisPruefenBox.svelte b/src/components/AusweisPruefenBox.svelte index cde3277b..c782deeb 100644 --- a/src/components/AusweisPruefenBox.svelte +++ b/src/components/AusweisPruefenBox.svelte @@ -3,7 +3,7 @@ import moment from "moment"; import { AufnahmeClient, - getAusweisartFromUUID, + getAusweisartFromId, ObjektClient, BildClient, VerbrauchsausweisWohnenClient, @@ -31,7 +31,7 @@ async function ausweisAusstellen(uid: string) { try { await api.admin.ausstellen.GET.fetch({ - uid_ausweis: uid + id_ausweis: uid }, { headers: { "Authorization": `Bearer ${Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)}` @@ -49,7 +49,7 @@ - const ausweisArt = getAusweisartFromUUID(ausweis.id) + const ausweisArt = getAusweisartFromId(ausweis.id) let verbrauchWWGesamt_1 = ""; let verbrauchWWGesamt_2 = ""; @@ -141,7 +141,7 @@ Abgeschlossen = 2; } - if (aufnahme.boxpruefung) { + if (ausweis.boxpruefung) { symbolPruefung = "/images/dashboard/kreishaken.png"; } else { symbolPruefung = "/images/dashboard/kreiskreuz.png"; @@ -205,7 +205,7 @@ " x " + aufnahme.flaeche + " m² Energetische Nutzfläche (Keller " + - ausweis.keller_beheizt + + aufnahme.keller + " ) in m²"; table3Z1 = aufnahme.flaeche; table3Z2 = calculations?.energetischeNutzflaeche; @@ -229,8 +229,8 @@ " kWh/" + ausweis.einheit_1 + " >> Verbrauch 1 " + - aufnahme.brennstoff_1 + - " in kWh"; + ausweis.brennstoff_1 + + " in kWh"; tooltip4Z2 = "(" + ausweis.verbrauch_4 + @@ -249,7 +249,7 @@ " kWh/" + ausweis.einheit_2 + " >> Verbrauch 2 " + - aufnahme.brennstoff_2 + + ausweis.brennstoff_2 + " in kWh"; table4Z1 = calculations?.energieVerbrauchGesamt_1; table4Z2 = calculations?.energieVerbrauchGesamt_2; @@ -764,7 +764,7 @@
{aufnahme.prueftext}
- {#if aufnahme.boxpruefung} + {#if ausweis.boxpruefung} {:else} @@ -880,7 +880,7 @@ Informationen des Nutzers - {aufnahme.boxpruefung} + {ausweis.boxpruefung} UID diff --git a/src/components/Dashboard/DashboardAusweis.svelte b/src/components/Dashboard/DashboardAusweis.svelte index 49a6cad9..8d0efafe 100644 --- a/src/components/Dashboard/DashboardAusweis.svelte +++ b/src/components/Dashboard/DashboardAusweis.svelte @@ -1,5 +1,5 @@ diff --git a/src/components/FileGrid.svelte b/src/components/FileGrid.svelte index 6b8bad6c..3b901019 100644 --- a/src/components/FileGrid.svelte +++ b/src/components/FileGrid.svelte @@ -4,14 +4,15 @@ import HelpLabel from "#components/labels/HelpLabel.svelte"; export let kategorie: string = ""; - export let files: UnterlageClient[] = []; + export let files: Unterlage[] = []; export let max: number = Infinity; export let min: number = 1; export let name: string = ""; - export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient | GEGNachweisWohnenClient; + export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient | BedarfsausweisGewerbe | GEGNachweisWohnen | GEGNachweisGewerbe; export let objekt: ObjektClient; - import mime from "mime-types"; + import mime from "mime" import { api } from "astro-typesafe-api/client"; + import { BedarfsausweisGewerbe, GEGNachweisGewerbe, GEGNachweisWohnen, Unterlage } from "#lib/client/prisma.js"; function getAllFiles(this: HTMLInputElement) { @@ -40,16 +41,16 @@ return; } - const mimeType = mime.types[file.name.split(".").pop() as string] + const mimeType = mime.getType(file.name.split(".").pop() as string) - const { uid } = await api.unterlage.PUT.fetch({ + const { id } = await api.unterlage.PUT.fetch({ data: reader.result as string, kategorie, mime: mimeType, name: file.name }) - files.push({ uid, kategorie, name: file.name, mime: mimeType }); + files.push({ id, kategorie, name: file.name, mime: mimeType, aufnahme_id: null }); files = files; diff --git a/src/components/GEGNachweis/GEGAusweisart.svelte b/src/components/GEGNachweis/GEGAusweisart.svelte index 4cf62736..f6db28d5 100644 --- a/src/components/GEGNachweis/GEGAusweisart.svelte +++ b/src/components/GEGNachweis/GEGAusweisart.svelte @@ -7,7 +7,7 @@ import { auditHeizungGebaeudeBaujahr } from "../Verbrauchsausweis/audits/HeizungGebaeudeBaujahr.js"; import { addNotification, deleteNotification } from "#components/Notifications/shared.js"; import TagInput from "../TagInput.svelte"; - import { Enums } from "#lib/client/prisma.js"; + import { BedarfsausweisGewerbe, Enums, GEGNachweisGewerbe, GEGNachweisWohnen } from "#lib/client/prisma.js"; import { AufnahmeClient, ObjektClient, @@ -15,8 +15,8 @@ } from "../Ausweis/types.js"; export let objekt: ObjektClient; - export let ausweis: - GEGNachweisWohnenClient; + export let nachweis: + BedarfsausweisGewerbe | GEGNachweisWohnen | GEGNachweisGewerbe; export let aufnahme: AufnahmeClient; export let ausweisart: Enums.Ausweisart; @@ -38,7 +38,7 @@ xl:grid-cols-3 xl:gap-x-8 xl:gap-y-8 class="rounded-e-none" name="ausstellgrund" placeholder="Anlass" - bind:value={ausweis.ausstellgrund} + bind:value={nachweis.ausstellgrund} required data-cy="ausstellgrund" > diff --git a/src/components/UploadImages.svelte b/src/components/UploadImages.svelte index 0b9c2c36..0180b817 100644 --- a/src/components/UploadImages.svelte +++ b/src/components/UploadImages.svelte @@ -1,6 +1,7 @@ {#if ausweis.startdatum} Bitte geben Sie Ihren {#if heizquelle == 1} - {#if aufnahme.brennstoff_1} - {aufnahme.brennstoff_1} + {#if ausweis.brennstoff_1} + {ausweis.brennstoff_1} {/if} Verbrauch {#if ausweis.einheit_1} in {ausweis.einheit_1} {/if} {:else if heizquelle == 2} - {#if aufnahme.brennstoff_2} - {aufnahme.brennstoff_2} + {#if ausweis.brennstoff_2} + {ausweis.brennstoff_2} {/if} Verbräuche {#if ausweis.einheit_2} in {ausweis.einheit_2} {/if} diff --git a/src/cypress/e2e/GEGNachweisGewerbe/erstellen.cy.ts b/src/cypress/e2e/GEGNachweisGewerbe/erstellen.cy.ts index ede1ad52..e57261d0 100644 --- a/src/cypress/e2e/GEGNachweisGewerbe/erstellen.cy.ts +++ b/src/cypress/e2e/GEGNachweisGewerbe/erstellen.cy.ts @@ -8,123 +8,116 @@ 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.task("plz").then(plz => { + cy.visit("/angebot-anfragen/geg-nachweis-gewerbe-anfragen"); - cy.wait(2000); + 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, - }) - ) + // 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); - }); + // 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 } + // Sanierungsstatus + cy.get("select[name='saniert']").select( + Math.random() > 0.5 ? "true" : "false" ); - // 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 } + // 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( + plz as string ); - // Adresse - cy.get("input[name='adresse']").type(faker.location.streetAddress()); + // 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() - // Postleitzahl - cy.get("input[name='plz']").type( - faker.location.zipCode({ - format: "#####", - }) - ); + // Gebäudeteil + cy.get("select[name='gebaeudeteil']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); + + // 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 + })); - // 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() + // 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 })) - // Nutzflaeche - cy.get("input[name='nutzflaeche']") - .should("have.attr", "type", "number") - .type(faker.number.int({ min: 50, max: 1000 }).toString()); + // 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" }); - // 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 - })); + // Jetzt können wir den Verbrauchsausweis erstellen. + cy.get("form[data-cy='nachweis'] button[data-cy='weiter']").click({ force: true }); - // 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 })) + cy.url().should("contain", "/kundendaten"); - // 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" }); + const email = faker.internet.email(); + const passwort = "test1234"; + const vorname = faker.person.firstName(); + const nachname = faker.person.lastName(); + const telefon = faker.phone.number() - // Jetzt können wir den Verbrauchsausweis erstellen. - cy.get("form[data-cy='nachweis'] button[data-cy='weiter']").click({ force: true }); + const strasse = faker.location.streetAddress({ useFullAddress: true }) - cy.url().should("contain", "/kundendaten"); + 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 as string); + cy.get("[data-cy='plz-container']").children().first().click() + cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email); - const email = faker.internet.email(); - const passwort = "test1234"; - const vorname = faker.person.firstName(); - const nachname = faker.person.lastName(); - const telefon = faker.phone.number() + cy.get("button[data-cy='bestellen']").click(); - const strasse = faker.location.streetAddress({ useFullAddress: true }) - const plz = faker.location.zipCode("#####") + cy.intercept({ method: "PUT", url: "**/api/rechnung/anfordern" }).as("anfordern") + cy["form:signup"](email, passwort, vorname, nachname) + cy.wait("@anfordern") - 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") + cy.url().should("contain", "/einpreisung/success") + }) }); }); diff --git a/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts b/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts index 86f049f4..9c49f4b6 100644 --- a/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts +++ b/src/cypress/e2e/GEGNachweisWohnen/erstellen.cy.ts @@ -8,118 +8,111 @@ 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.task("plz").then(plz => { + cy.visit("/angebot-anfragen/geg-nachweis-wohnen-anfragen"); - cy.wait(2000); + 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, - }) - ) + // 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); + // 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( + plz as string + ); + + // 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() + + // Gebäudeteil + cy.get("select[name='gebaeudeteil']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); + + // 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 }) + + 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 as string); + 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.intercept({ method: "PUT", url: "**/api/rechnung/anfordern" }).as("anfordern") + cy["form:signup"](email, passwort, vorname, nachname) + cy.wait("@anfordern") + + cy.url().should("contain", "/einpreisung/success") }); - - // 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/cypress/e2e/VerbrauchsausweisGewerbe/erstellen.cy.ts b/src/cypress/e2e/VerbrauchsausweisGewerbe/erstellen.cy.ts index 9ba3a856..17bb4c7a 100644 --- a/src/cypress/e2e/VerbrauchsausweisGewerbe/erstellen.cy.ts +++ b/src/cypress/e2e/VerbrauchsausweisGewerbe/erstellen.cy.ts @@ -1,312 +1,296 @@ import fuelList from "#components/Ausweis/brennstoffListe.js"; import { faker } from "@faker-js/faker"; -import { type Enums } from "#lib/client/prisma.js"; +import { Enums } from "#lib/client/prisma.js"; import "cypress-file-upload" import moment from "moment"; describe("Verbrauchsausweis erstellen Schritt 1", () => { - const ausstellgrund = (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]); - const heizungsstatus = (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]); - it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => { - cy.visit("/energieausweis-erstellen/verbrauchsausweis-gewerbe"); + cy.task("plz").then(plz => { + cy.visit("/energieausweis-erstellen/verbrauchsausweis-gewerbe"); - cy.wait(1000); + cy.wait(1000); - // 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: (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]).length, - }) - ) + // 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: (["Modernisierung", "Neubau", "Sonstiges", "Verkauf", "Vermietung"] as Enums.Ausstellgrund[]).length, + }) + ) - // 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 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 } + ); + + // // Anzahl Einheiten + // cy.get("input[name='einheiten']") + // .should("have.attr", "type", "number") + // .type(faker.number.int({ min: 1, max: 5 }).toString()); + + // Sanierungsstatus + cy.get("select[name='saniert']").select( + Math.random() > 0.5 ? "true" : "false" ); - // 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( + plz as string ); - // // Anzahl Einheiten - // cy.get("input[name='einheiten']") - // .should("have.attr", "type", "number") - // .type(faker.number.int({ min: 1, max: 5 }).toString()); + // 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() - // Sanierungsstatus - cy.get("select[name='saniert']").select( - Math.random() > 0.5 ? "true" : "false" - ); + // // Flaeche + // cy.get("input[name='flaeche']") + // .should("have.attr", "type", "number") + // .type(faker.number.int({ min: 50, max: 1000 }).toString()); - // Adresse - cy.get("input[name='adresse']").type(faker.location.streetAddress()); + // Nutzlaeche + cy.get("input[name='nutzflaeche']") + .should("have.attr", "type", "number") + .type(faker.number.int({ min: 50, max: 1000 }).toString()); - // Postleitzahl - cy.get("input[name='plz']").type( - faker.location.zipCode({ - format: "#####", - }) - ); + // Keller + cy.get("select[name='keller']").find("option:not([disabled])").should("have.length", Object.keys(Enums.Heizungsstatus).length).parent().select(faker.number.int({ + max: Object.keys(Enums.Heizungsstatus).length, + min: 1 + })); - // 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() + // Dachgeschoss + cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", Object.keys(Enums.Heizungsstatus).length).parent().select(faker.number.int({ + max: Object.keys(Enums.Heizungsstatus).length, + min: 1 + })); - // // Flaeche - // cy.get("input[name='flaeche']") - // .should("have.attr", "type", "number") - // .type(faker.number.int({ min: 50, max: 1000 }).toString()); + // Brennstoff und Einheit 1 + const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - // Nutzlaeche - 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", heizungsstatus.length).parent().select(faker.number.int({ - max: heizungsstatus.length, - min: 1 - })); - - // Dachgeschoss - cy.get("select[name='dachgeschoss']").find("option:not([disabled])").should("have.length", heizungsstatus.length).parent().select(faker.number.int({ - max: heizungsstatus.length, - min: 1 - })); - - // Brennstoff und Einheit 1 - const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - - cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]); - cy.get("select[name='einheit_1']").select(brennstoffKombo[1]); - - let availableDates = []; - const startDate = moment() - .subtract(4, "years") - .subtract(6, "months"); - const endDate = moment().subtract(3, "years"); - - for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) { - availableDates.push({ - year: m.year(), - month: m.month(), - }); - } - - // Verbrauchszeitraum - cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString()); - cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString()); - - // Verbrauch - cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); - cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); - cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]); + cy.get("select[name='einheit_1']").select(brennstoffKombo[1]); + let availableDates = []; + const startDate = moment() + .subtract(4, "years") + .subtract(6, "months"); + const endDate = moment().subtract(3, "years"); - const zusaetzlicheHeizquelle = Math.random() > 0.5; + for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) { + availableDates.push({ + year: m.year(), + month: m.month(), + }); + } - if (zusaetzlicheHeizquelle) { - cy.get("[data-cy='zusaetzliche_heizquelle']").check(); - - // Brennstoff und Einheit 2 - const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - - cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true }); - cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true }); + // Verbrauchszeitraum + cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString()); + cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString()); // Verbrauch - cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - } + cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); - // Gebäudestrom - cy.get("input[name='strom_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); - cy.get("input[name='strom_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); - cy.get("input[name='strom_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + + const zusaetzlicheHeizquelle = Math.random() > 0.5; - // Stromverbrauch Enthält - if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_heizung']").check(); - if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_lueftung']").check(); - if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_beleuchtung']").check(); - if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_kuehlung']").check(); + if (zusaetzlicheHeizquelle) { + cy.get("[data-cy='zusaetzliche_heizquelle']").check(); - // Warmwasser enthalten und bekannt - const warmwasserEnthalten = Math.random() > 0.5; - const anteilBekannt = Math.random() > 0.5; + // Brennstoff und Einheit 2 + const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - if (warmwasserEnthalten) { - cy.get("input[name='warmwasser_enthalten']").check(); + cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true }); + cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true }); - if (anteilBekannt) { - // Der Anteil ist bekannt, wir müssen ihn also angeben. - cy.get("input[name='warmwasser_anteil_bekannt']").check(); + // Verbrauch + cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + } - cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + // Gebäudestrom + cy.get("input[name='strom_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + cy.get("input[name='strom_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + cy.get("input[name='strom_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString()); + + // Stromverbrauch Enthält + if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_heizung']").check(); + if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_warmwasser']").check(); + if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_lueftung']").check(); + if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_beleuchtung']").check(); + if (Math.random() > 0.5) cy.get("input[name='stromverbrauch_enthaelt_kuehlung']").check(); + + // Warmwasser enthalten und bekannt + const warmwasserEnthalten = Math.random() > 0.5; + const anteilBekannt = Math.random() > 0.5; + + if (warmwasserEnthalten) { + cy.get("input[name='warmwasser_enthalten']").check(); + + if (anteilBekannt) { + // Der Anteil ist bekannt, wir müssen ihn also angeben. + cy.get("input[name='warmwasser_anteil_bekannt']").check(); + + cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + + if (zusaetzlicheHeizquelle) { + // Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben. + cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + } + } + } + + // Thermische Kühlung enthalten + const kuehlungEnthalten = Math.random() > 0.5; + + if (kuehlungEnthalten) { + cy.get("input[name='kuehlung_enthalten']").check(); + + cy.get("input[name='anteil_kuehlung_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); if (zusaetzlicheHeizquelle) { // Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben. - cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + cy.get("input[name='anteil_kuehlung_2']").type(faker.number.int({ min: 0, max: 50 }).toString()); } } - } - // Thermische Kühlung enthalten - const kuehlungEnthalten = Math.random() > 0.5; + // Alternative Energieversorgungssysteme + if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check(); + if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check(); + if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check(); + if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check(); - if (kuehlungEnthalten) { - cy.get("input[name='kuehlung_enthalten']").check(); + // Gebäudetyp + cy.get("select[name='gebaeudetyp']").then(($dropdown) => { + const options = $dropdown.find('option:not([disabled])'); + // 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); + }); - cy.get("input[name='anteil_kuehlung_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + // Gebäudeteil + cy.get("select[name='gebaeudeteil']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); - if (zusaetzlicheHeizquelle) { - // Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben. - cy.get("input[name='anteil_kuehlung_2']").type(faker.number.int({ min: 0, max: 50 }).toString()); - } - } + // Lüftung + cy.get("select[name='lueftung']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); - // Alternative Energieversorgungssysteme - if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check(); + // Kühlung + cy.get("select[name='kuehlung']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); - // Gebäudetyp - cy.get("select[name='gebaeudetyp']").then(($dropdown) => { - const options = $dropdown.find('option:not([disabled])'); - // 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); - }); + // Leerstand + cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString()); - // Gebäudeteil - cy.get("select[name='gebaeudeteil']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); + // Heizungsanlage Daten + if (Math.random() > 0.5) cy.get("input[name='zentralheizung']").check(); + if (Math.random() > 0.5) cy.get("input[name='einzelofen']").check(); + if (Math.random() > 0.5) cy.get("input[name='durchlauf_erhitzer']").check(); + if (Math.random() > 0.5) cy.get("input[name='standard_kessel']").check(); + if (Math.random() > 0.5) cy.get("input[name='solarsystem_warmwasser']").check(); + if (Math.random() > 0.5) cy.get("input[name='waermepumpe']").check(); + if (Math.random() > 0.5) cy.get("input[name='niedertemperatur_kessel']").check(); + if (Math.random() > 0.5) cy.get("input[name='brennwert_kessel']").check(); + if (Math.random() > 0.5) cy.get("input[name='warmwasser_rohre_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='heizungsrohre_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='zirkulation']").check(); + // if (Math.random() > 0.5) cy.get("input[name='raum_temperatur_regler']").check(); - // Lüftung - cy.get("select[name='lueftung']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); + // Heizungsanlage Bilder + cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" }); + cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/2.jpeg", { subjectType: "input" }); - // Kühlung - cy.get("select[name='kuehlung']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); + // Fenster Daten + if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check(); - // Leerstand - cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString()); + // Fenster Bilder + cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" }); + cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" }); - // Heizungsanlage Daten - if (Math.random() > 0.5) cy.get("input[name='zentralheizung']").check(); - if (Math.random() > 0.5) cy.get("input[name='einzelofen']").check(); - if (Math.random() > 0.5) cy.get("input[name='durchlauf_erhitzer']").check(); - if (Math.random() > 0.5) cy.get("input[name='standard_kessel']").check(); - if (Math.random() > 0.5) cy.get("input[name='solarsystem_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("input[name='waermepumpe']").check(); - if (Math.random() > 0.5) cy.get("input[name='niedertemperatur_kessel']").check(); - if (Math.random() > 0.5) cy.get("input[name='brennwert_kessel']").check(); - if (Math.random() > 0.5) cy.get("input[name='warmwasser_rohre_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='heizungsrohre_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='zirkulation']").check(); - // if (Math.random() > 0.5) cy.get("input[name='raum_temperatur_regler']").check(); + // Wärmedämmung Daten + if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check(); - // Heizungsanlage Bilder - cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" }); - cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/2.jpeg", { subjectType: "input" }); + // Wärmedämmung Bilder + cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" }); + cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" }); - // Fenster Daten - if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check(); + // Gebäude Bild + cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" }); - // Fenster Bilder - cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" }); - cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" }); + cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").click({ force: true }); - // Wärmedämmung Daten - if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check(); + cy.url().should("contain", "/kundendaten"); - // Wärmedämmung Bilder - cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" }); - cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" }); + const email = faker.internet.email(); + const passwort = "test1234"; + const vorname = faker.person.firstName(); + const nachname = faker.person.lastName(); + const telefon = faker.phone.number() - // Gebäude Bild - cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" }); + const strasse = faker.location.streetAddress({ useFullAddress: true }) - cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").click({ force: true }); + 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 as string); + cy.get("[data-cy='plz-container']").children().first().click() + cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").type(email); - cy.url().should("contain", "/kundendaten"); + cy.get("[data-cy='paypal']").click() - const email = faker.internet.email(); - const passwort = "test1234"; - const vorname = faker.person.firstName(); - const nachname = faker.person.lastName(); - const telefon = faker.phone.number() + cy.get("button[data-cy='bestellen']").click(); - const strasse = faker.location.streetAddress({ useFullAddress: true }) - const plz = faker.location.zipCode("#####") + cy["form:signup"](email, passwort, vorname, nachname) - 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("[data-cy='paypal']").click() - - 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.intercept({ method: "PUT", url: "**/api/user" }).as("signup") - cy.get("form[name='signup'] button[type='submit']").click(); - cy.wait("@signup") - 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. + 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. + }) }) }); }); diff --git a/src/cypress/e2e/VerbrauchsausweisWohnen/bearbeiten.cy.ts b/src/cypress/e2e/VerbrauchsausweisWohnen/bearbeiten.cy.ts index 5c12b754..78559e5d 100644 --- a/src/cypress/e2e/VerbrauchsausweisWohnen/bearbeiten.cy.ts +++ b/src/cypress/e2e/VerbrauchsausweisWohnen/bearbeiten.cy.ts @@ -2,14 +2,17 @@ import fuelList from "#components/Ausweis/brennstoffListe.js"; import { faker } from "@faker-js/faker"; import "cypress-file-upload" import moment from "moment"; -import { Aufnahme, Enums, Objekt, VerbrauchsausweisWohnen } from "#lib/client/prisma.js"; +import { Aufnahme, Benutzer, Enums, Objekt, Rechnung, VerbrauchsausweisWohnen } from "#lib/client/prisma.js"; describe("Verbrauchsausweis für Wohngebäude bearbeiten", async () => { it("bearbeitet einen bereits existierenden Verbrauchsausweis für Wohngebäude", () => { cy.task("verbrauchsausweisWohnen", { where: { ausgestellt: false, - bestellt: false + bestellt: false, + benutzer: { + email: "user@ib-cornelsen.de" + } }, include: { aufnahme: { @@ -17,261 +20,171 @@ describe("Verbrauchsausweis für Wohngebäude bearbeiten", async () => { objekt: true } }, - benutzer: true + benutzer: true, + rechnung: true } - }).then((ausweis: VerbrauchsausweisWohnen & { aufnahme: Aufnahme & { objekt: Objekt } }) => { + }).then((ausweis: VerbrauchsausweisWohnen & { benutzer: Benutzer, aufnahme: Aufnahme & { objekt: Objekt }, rechnung: Rechnung | null }) => { + cy.login("user@ib-cornelsen.de", "passwort"); + cy.visit(`/energieausweis-erstellen/verbrauchsausweis-wohngebaeude?id=${ausweis.id}`); 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']") .find("option:selected").should("have.value", ausweis.ausstellgrund) - // Jetzt Füllen wir das Baujahr vom Gebäude aus. - cy.get("input[name='baujahr_gebaeude']") - .should("have.value", ausweis.aufnahme.baujahr_gebaeude[0]) + // // Jetzt Füllen wir das Baujahr vom Gebäude aus. + // cy.get("input[name='baujahr_gebaeude']") + // .should("have.value", ausweis.aufnahme.baujahr_gebaeude[0]) - // Jetzt Füllen wir das Baujahr der Heizung aus. - cy.get("input[name='baujahr_heizung']") - .should("have.value", ausweis.aufnahme.baujahr_heizung[0]) + // // Jetzt Füllen wir das Baujahr der Heizung aus. + // cy.get("input[name='baujahr_heizung']") + // .should("have.value", ausweis.aufnahme.baujahr_heizung[0]) // Anzahl Einheiten cy.get("input[name='einheiten']") .should("have.value", ausweis.aufnahme.einheiten) // Sanierungsstatus - cy.get("select[name='saniert']").find("option:selected").should("have.value", ausweis.aufnahme.saniert) + cy.get("select[name='saniert']").find("option:selected").should("have.value", (ausweis.aufnahme.saniert || false).toString()) // Adresse cy.get("input[name='adresse']").should("have.value", ausweis.aufnahme.objekt.adresse); // 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() + cy.get("input[name='plz']").should("have.value", ausweis.aufnahme.objekt.plz); + cy.get("input[name='ort']").should("have.value", ausweis.aufnahme.objekt.ort); // Flaeche cy.get("input[name='flaeche']") - .should("have.attr", "type", "number") - .type(faker.number.int({ min: 50, max: 1000 }).toString()); + .should("have.value", ausweis.aufnahme.flaeche) // Nutzflaeche cy.get("input[name='nutzflaeche']") - .should("have.attr", "type", "number") - .type(faker.number.int({ min: 50, max: 1000 }).toString()); + .should("have.value", ausweis.aufnahme.nutzflaeche) // 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: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length, - min: 1 - })); + cy.get("select[name='keller']").find("option:selected").should("have.value", ausweis.aufnahme.keller) // 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: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length, - min: 1 - })); + cy.get("select[name='dachgeschoss']").find("option:selected").should("have.value", ausweis.aufnahme.dachgeschoss) - // Brennstoff und Einheit 1 - const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - - cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]); - cy.get("select[name='einheit_1']").select(brennstoffKombo[1]); - - let availableDates = []; - const startDate = moment() - .subtract(4, "years") - .subtract(6, "months"); - const endDate = moment().subtract(3, "years"); - - for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) { - availableDates.push({ - year: m.year(), - month: m.month(), - }); - } + cy.get("select[name='brennstoff_1']").should("have.value", ausweis.brennstoff_1) + cy.get("select[name='einheit_1']").should("have.value", ausweis.einheit_1) // Verbrauchszeitraum - cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString()); - cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString()); + cy.get("select[name='energieverbrauch_zeitraum_jahr']").find("option:selected").should("have.value", moment(ausweis.startdatum).get("year")) + cy.get("select[name='energieverbrauch_zeitraum_monat']").find("option:selected").should("have.value", moment(ausweis.startdatum).get("m") + 1) // Verbrauch - cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_1']").should("have.value", ausweis.verbrauch_1); + cy.get("input[name='verbrauch_2']").should("have.value", ausweis.verbrauch_2); + cy.get("input[name='verbrauch_3']").should("have.value", ausweis.verbrauch_3); - const zusaetzlicheHeizquelle = Math.random() > 0.5; - if (zusaetzlicheHeizquelle) { - cy.get("[data-cy='zusaetzliche_heizquelle']").check(); + if (ausweis.zusaetzliche_heizquelle) { + cy.get("[data-cy='zusaetzliche_heizquelle']").should("be.checked"); - // Brennstoff und Einheit 2 - const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - - cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true }); - cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true }); + cy.get("[data-cy='brennstoff_2']").find("option:selected").should("have.value", ausweis.brennstoff_2); + cy.get("[data-cy='einheit_2']").find("option:selected").should("have.value", ausweis.einheit_2); // Verbrauch - cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_4']").should("have.value", ausweis.verbrauch_4); + cy.get("input[name='verbrauch_5']").should("have.value", ausweis.verbrauch_5); + cy.get("input[name='verbrauch_6']").should("have.value", ausweis.verbrauch_6); } - // Warmwasser enthalten und bekannt - const warmwasserEnthalten = Math.random() > 0.5; - const anteilBekannt = Math.random() > 0.5; + if (ausweis.warmwasser_enthalten) { + cy.get("input[name='warmwasser_enthalten']").should("be.checked"); - if (warmwasserEnthalten) { - cy.get("input[name='warmwasser_enthalten']").check(); - - if (anteilBekannt) { + if (ausweis.warmwasser_anteil_bekannt) { // Der Anteil ist bekannt, wir müssen ihn also angeben. - cy.get("input[name='warmwasser_anteil_bekannt']").check(); + cy.get("input[name='warmwasser_anteil_bekannt']").should("be.checked"); - cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + cy.get("input[name='anteil_warmwasser_1']").should("have.value", ausweis.anteil_warmwasser_1); - if (zusaetzlicheHeizquelle) { + if (ausweis.zusaetzliche_heizquelle) { // Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben. - cy.get("input[name='anteil_warmwasser_2']").type(faker.number.int({ min: 0, max: 50 }).toString(), {force: true}); + cy.get("input[name='anteil_warmwasser_2']").should('have.value', ausweis.anteil_warmwasser_2); } } } // Alternative Energieversorgungssysteme - if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check(); + if (ausweis.alternative_heizung) cy.get("input[name='alternative_heizung']").should("be.checked"); + if (ausweis.alternative_warmwasser) cy.get("input[name='alternative_warmwasser']").should("be.checked"); + if (ausweis.alternative_lueftung) cy.get("input[name='alternative_lueftung']").should("be.checked"); + if (ausweis.alternative_kuehlung) cy.get("input[name='alternative_kuehlung']").should("be.checked"); // 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); - }); + cy.get("select[name='gebaeudetyp']").find("option:selected").should("have.value", ausweis.aufnahme.gebaeudetyp) // Gebäudeteil - cy.get("select[name='gebaeudeteil']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); + cy.get("select[name='gebaeudeteil']").find("option:selected").should("have.value", ausweis.aufnahme.gebaeudeteil) // Lüftung - cy.get("select[name='lueftung']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); + cy.get("select[name='lueftung']").find("option:selected").should("have.value", ausweis.aufnahme.lueftung) // Kühlung - cy.get("select[name='kuehlung']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string, { force: true }); - }); + cy.get("select[name='kuehlung']").find("option:selected").should("have.value", ausweis.aufnahme.kuehlung) // Leerstand - cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString()); + cy.get("input[name='leerstand']").should("have.value", ausweis.aufnahme.leerstand || ""); // Heizungsanlage Daten - if (Math.random() > 0.5) cy.get("[data-cy='zentralheizung']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='einzelofen']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='durchlauf_erhitzer']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='standard_kessel']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='solarsystem_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='waermepumpe']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='niedertemperatur_kessel']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='brennwert_kessel']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='heizungsrohre_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='zirkulation']").check(); - // if (Math.random() > 0.5) cy.get("[data-cy='raum_temperatur_regler']").check(); - - // Heizungsanlage Bilder - cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" }); - cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/2.jpeg", { subjectType: "input" }); + if (ausweis.aufnahme.zentralheizung) cy.get("[data-cy='zentralheizung']").should("be.checked"); + if (ausweis.aufnahme.einzelofen) cy.get("[data-cy='einzelofen']").should("be.checked"); + if (ausweis.aufnahme.durchlauf_erhitzer) cy.get("[data-cy='durchlauf_erhitzer']").should("be.checked"); + if (ausweis.aufnahme.standard_kessel) cy.get("[data-cy='standard_kessel']").should("be.checked"); + if (ausweis.aufnahme.solarsystem_warmwasser) cy.get("[data-cy='solarsystem_warmwasser']").should("be.checked"); + if (ausweis.aufnahme.waermepumpe) cy.get("[data-cy='waermepumpe']").should("be.checked"); + if (ausweis.aufnahme.niedertemperatur_kessel) cy.get("[data-cy='niedertemperatur_kessel']").should("be.checked"); + if (ausweis.aufnahme.brennwert_kessel) cy.get("[data-cy='brennwert_kessel']").should("be.checked"); + if (ausweis.aufnahme.warmwasser_rohre_gedaemmt) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").should("be.checked"); + if (ausweis.aufnahme.heizungsrohre_gedaemmt) cy.get("[data-cy='heizungsrohre_gedaemmt']").should("be.checked"); + if (ausweis.aufnahme.zirkulation) cy.get("[data-cy='zirkulation']").should("be.checked"); // Fenster Daten - if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check(); - - // Fenster Bilder - cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" }); - cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" }); + if (ausweis.aufnahme.einfach_verglasung) cy.get("input[name='einfach_verglasung']").check(); + if (ausweis.aufnahme.doppel_verglasung) cy.get("input[name='doppel_verglasung']").check(); + if (ausweis.aufnahme.isolier_verglasung) cy.get("input[name='isolier_verglasung']").check(); + if (ausweis.aufnahme.dreifach_verglasung) cy.get("input[name='dreifach_verglasung']").check(); + if (ausweis.aufnahme.fenster_dicht) cy.get("input[name='fenster_dicht']").check(); + if (ausweis.aufnahme.fenster_teilweise_undicht) cy.get("input[name='fenster_teilweise_undicht']").check(); + if (ausweis.aufnahme.tueren_dicht) cy.get("input[name='tueren_dicht']").check(); + if (ausweis.aufnahme.tueren_undicht) cy.get("input[name='tueren_undicht']").check(); + if (ausweis.aufnahme.rolllaeden_kaesten_gedaemmt) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check(); // Wärmedämmung Daten - if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check(); - - // Wärmedämmung Bilder - cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" }); - cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" }); - - // Gebäude Bild - cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" }); + if (ausweis.aufnahme.aussenwand_gedaemmt) cy.get("input[name='aussenwand_gedaemmt']").check(); + if (ausweis.aufnahme.keller_wand_gedaemmt) cy.get("input[name='keller_wand_gedaemmt']").check(); + if (ausweis.aufnahme.keller_decke_gedaemmt) cy.get("input[name='keller_decke_gedaemmt']").check(); + if (ausweis.aufnahme.dachgeschoss_gedaemmt) cy.get("input[name='dachgeschoss_gedaemmt']").check(); + if (ausweis.aufnahme.oberste_geschossdecke_gedaemmt) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check(); + if (ausweis.aufnahme.oberste_geschossdecke_min_12cm_gedaemmt) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check(); // Jetzt können wir den Verbrauchsausweis erstellen. cy.get("form[data-cy='ausweis'] 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); + cy.get("input[name='vorname']").should("have.value", ausweis.benutzer.vorname); + cy.get("input[name='name']").should("have.value", ausweis.benutzer.name); + cy.get("input[name='telefon']").should("have.value", ausweis.rechnung?.telefon || ausweis.benutzer.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("input[name='rechnung_empfaenger']").should("have.value", ausweis.rechnung?.empfaenger || `${ausweis.benutzer.vorname} ${ausweis.benutzer.name}`); + cy.get("input[name='rechnung_strasse']").should("have.value", ausweis.rechnung?.strasse || ausweis.benutzer.adresse); + cy.get("input[name='rechnung_plz']").should("have.value", ausweis.rechnung?.plz || ausweis.benutzer.plz); + cy.get("input[name='rechnung_email']").should("have.value", ausweis.rechnung?.email || ausweis.benutzer.email); cy.get("[data-cy='paypal']").click() 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.intercept({ method: "PUT", url: "**/api/user" }).as("signup") - cy.get("form[name='signup'] button[type='submit']").click(); - cy.wait("@signup") - 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(); diff --git a/src/cypress/e2e/VerbrauchsausweisWohnen/erstellen.cy.ts b/src/cypress/e2e/VerbrauchsausweisWohnen/erstellen.cy.ts index a0ce8e9e..d0eeaf18 100644 --- a/src/cypress/e2e/VerbrauchsausweisWohnen/erstellen.cy.ts +++ b/src/cypress/e2e/VerbrauchsausweisWohnen/erstellen.cy.ts @@ -6,296 +6,283 @@ import moment from "moment"; describe("Verbrauchsausweis erstellen Schritt 1", () => { it("erstellt einen neuen Verbrauchsausweis Wohngebäude.", () => { - const email = faker.internet.email(); - const passwort = "test1234"; - const vorname = faker.person.firstName(); - const nachname = faker.person.lastName(); - const telefon = faker.phone.number() + cy.task("plz").then(plz => { + 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("#####") + const strasse = faker.location.streetAddress({ useFullAddress: true }) - const preLogin = Math.random() > 0.5; + const preLogin = Math.random() > 0.5; - if (preLogin) { - cy.signup(email, passwort, vorname, nachname) - cy.login(email, passwort) - } + if (preLogin) { + cy.signup(email, passwort, vorname, nachname) + cy.login(email, passwort) + } - cy.visit("/energieausweis-erstellen/verbrauchsausweis-wohngebaeude"); - - cy.wait(2000); + cy.visit("/energieausweis-erstellen/verbrauchsausweis-wohngebaeude"); + + 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: Object.values(Enums.Ausstellgrund).length - 1, - }) - ) + // 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: Object.values(Enums.Ausstellgrund).length - 1, + }) + ) - // 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 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 } + ); + + // Anzahl Einheiten + cy.get("input[name='einheiten']") + .should("have.attr", "type", "number") + .type(faker.number.int({ min: 1, max: 5 }).toString()); + + // Sanierungsstatus + cy.get("select[name='saniert']").select( + Math.random() > 0.5 ? "true" : "false" ); - // 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( + plz as string ); - // Anzahl Einheiten - cy.get("input[name='einheiten']") - .should("have.attr", "type", "number") - .type(faker.number.int({ min: 1, max: 5 }).toString()); + // 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() - // Sanierungsstatus - cy.get("select[name='saniert']").select( - Math.random() > 0.5 ? "true" : "false" - ); + // Flaeche + cy.get("input[name='flaeche']") + .should("have.attr", "type", "number") + .type(faker.number.int({ min: 50, max: 1000 }).toString()); - // Adresse - cy.get("input[name='adresse']").type(faker.location.streetAddress()); + // Nutzflaeche + cy.get("input[name='nutzflaeche']") + .should("have.attr", "type", "number") + .type(faker.number.int({ min: 50, max: 1000 }).toString()); - // Postleitzahl - cy.get("input[name='plz']").type( - faker.location.zipCode({ - format: "#####", - }) - ); + // 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: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length, + min: 1 + })); - // 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() + // 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: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length, + min: 1 + })); - // Flaeche - cy.get("input[name='flaeche']") - .should("have.attr", "type", "number") - .type(faker.number.int({ min: 50, max: 1000 }).toString()); + // Brennstoff und Einheit 1 + const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - // 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: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as 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: (["BEHEIZT", "NICHT_VORHANDEN", "UNBEHEIZT"] as Enums.Heizungsstatus[]).length, - min: 1 - })); - - // Brennstoff und Einheit 1 - const brennstoffKombo = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - - cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]); - cy.get("select[name='einheit_1']").select(brennstoffKombo[1]); - - let availableDates = []; - const startDate = moment() - .subtract(4, "years") - .subtract(6, "months"); - const endDate = moment().subtract(3, "years"); - - for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) { - availableDates.push({ - year: m.year(), - month: m.month(), - }); - } - - // Verbrauchszeitraum - cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString()); - cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString()); - - - // Verbrauch - cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("select[name='brennstoff_1']").select(brennstoffKombo[0]); + cy.get("select[name='einheit_1']").select(brennstoffKombo[1]); + let availableDates = []; + const startDate = moment() + .subtract(4, "years") + .subtract(6, "months"); + const endDate = moment().subtract(3, "years"); - const zusaetzlicheHeizquelle = Math.random() > 0.5; + for (let m = moment(startDate); m.isBefore(endDate); m.add(1, "month")) { + availableDates.push({ + year: m.year(), + month: m.month(), + }); + } - if (zusaetzlicheHeizquelle) { - cy.get("[data-cy='zusaetzliche_heizquelle']").check(); + // Verbrauchszeitraum + cy.get("select[name='energieverbrauch_zeitraum_jahr']").select(availableDates[0].year.toString()); + cy.get("select[name='energieverbrauch_zeitraum_monat']").select(availableDates[0].month.toString()); - // Brennstoff und Einheit 2 - const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - - cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true }); - cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true }); // Verbrauch - cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - } + cy.get("input[name='verbrauch_1']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_2']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_3']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); - // Warmwasser enthalten und bekannt - const warmwasserEnthalten = Math.random() > 0.5; - const anteilBekannt = Math.random() > 0.5; + + const zusaetzlicheHeizquelle = Math.random() > 0.5; - if (warmwasserEnthalten) { - cy.get("input[name='warmwasser_enthalten']").check(); + if (zusaetzlicheHeizquelle) { + cy.get("[data-cy='zusaetzliche_heizquelle']").check(); - if (anteilBekannt) { - // Der Anteil ist bekannt, wir müssen ihn also angeben. - cy.get("input[name='warmwasser_anteil_bekannt']").check(); + // Brennstoff und Einheit 2 + const brennstoffKombo2 = fuelList[faker.number.int({ min: 0, max: fuelList.length - 1 })]; - cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + cy.get("[data-cy='brennstoff_2']").select(brennstoffKombo2[0], { force: true }); + cy.get("[data-cy='einheit_2']").select(brennstoffKombo2[1], { force: true }); - if (zusaetzlicheHeizquelle) { - // Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben. - cy.get("input[name='anteil_warmwasser_2']").type(faker.number.int({ min: 0, max: 50 }).toString(), {force: true}); + // Verbrauch + cy.get("input[name='verbrauch_4']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_5']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + cy.get("input[name='verbrauch_6']").type(faker.number.int({ min: 4000, max: 15000 }).toString(), { force: true }); + } + + // Warmwasser enthalten und bekannt + const warmwasserEnthalten = Math.random() > 0.5; + const anteilBekannt = Math.random() > 0.5; + + if (warmwasserEnthalten) { + cy.get("input[name='warmwasser_enthalten']").check(); + + if (anteilBekannt) { + // Der Anteil ist bekannt, wir müssen ihn also angeben. + cy.get("input[name='warmwasser_anteil_bekannt']").check(); + + cy.get("input[name='anteil_warmwasser_1']").type(faker.number.int({ min: 0, max: 50 }).toString()); + + if (zusaetzlicheHeizquelle) { + // Zusätzliche Heizquelle existiert, also müssen wir auch hier den Anteil angeben. + cy.get("input[name='anteil_warmwasser_2']").type(faker.number.int({ min: 0, max: 50 }).toString(), {force: true}); + } } } - } - // Alternative Energieversorgungssysteme - if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check(); - if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check(); + // Alternative Energieversorgungssysteme + if (Math.random() > 0.5) cy.get("input[name='alternative_heizung']").check(); + if (Math.random() > 0.5) cy.get("input[name='alternative_warmwasser']").check(); + if (Math.random() > 0.5) cy.get("input[name='alternative_lueftung']").check(); + if (Math.random() > 0.5) cy.get("input[name='alternative_kuehlung']").check(); - // 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); + // 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); + }); + + // Gebäudeteil + cy.get("select[name='gebaeudeteil']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); + + // Lüftung + cy.get("select[name='lueftung']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); + }); + + // Kühlung + cy.get("select[name='kuehlung']").then(($dropdown) => { + const options = $dropdown.find('option'); + // Select the option at the random index + cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string, { force: true }); + }); + + // Leerstand + cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString()); + + // Heizungsanlage Daten + if (Math.random() > 0.5) cy.get("[data-cy='zentralheizung']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='einzelofen']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='durchlauf_erhitzer']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='standard_kessel']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='solarsystem_warmwasser']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='waermepumpe']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='niedertemperatur_kessel']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='brennwert_kessel']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='heizungsrohre_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("[data-cy='zirkulation']").check(); + // if (Math.random() > 0.5) cy.get("[data-cy='raum_temperatur_regler']").check(); + + // Heizungsanlage Bilder + cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" }); + cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/2.jpeg", { subjectType: "input" }); + + // Fenster Daten + if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check(); + if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check(); + if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check(); + + // Fenster Bilder + cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" }); + cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" }); + + // Wärmedämmung Daten + if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check(); + if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check(); + + // Wärmedämmung Bilder + cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" }); + cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" }); + + // Gebäude Bild + cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" }); + + // Jetzt können wir den Verbrauchsausweis erstellen. + cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").click({ force: true }); + + cy.url().should("contain", "/kundendaten"); + + cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon); + // Rechnung + if (preLogin) { + cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").should("contain.value", `${vorname} ${nachname}`); + cy.get("input[name='vorname']").should("have.attr", "type", "text").should("contain.value", vorname); + cy.get("input[name='name']").should("have.attr", "type", "text").should("contain.value", nachname); + cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").should("contain.value", email); + } else { + cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`); + 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='rechnung_email']").should("have.attr", "type", "email").type(email); + } + 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 as string); + cy.get("[data-cy='plz-container']").children().first().click() + + cy.get("[data-cy='paypal']").click() + + cy.get("button[data-cy='bestellen']").click(); + + if (!preLogin) { + cy["form:signup"](email, passwort, vorname, nachname) + } + + 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. + }) }); - - // Gebäudeteil - cy.get("select[name='gebaeudeteil']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='gebaeudeteil']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); - - // Lüftung - cy.get("select[name='lueftung']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='lueftung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string); - }); - - // Kühlung - cy.get("select[name='kuehlung']").then(($dropdown) => { - const options = $dropdown.find('option'); - // Select the option at the random index - cy.get("select[name='kuehlung']").select(options.eq(faker.number.int({ min: 1, max: options.length - 1 })).val() as string, { force: true }); - }); - - // Leerstand - cy.get("input[name='leerstand']").should("have.attr", "type", "number").type(faker.number.int({ min: 0, max: 30 }).toString()); - - // Heizungsanlage Daten - if (Math.random() > 0.5) cy.get("[data-cy='zentralheizung']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='einzelofen']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='durchlauf_erhitzer']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='standard_kessel']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='solarsystem_warmwasser']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='waermepumpe']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='niedertemperatur_kessel']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='brennwert_kessel']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='warmwasser_rohre_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='heizungsrohre_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("[data-cy='zirkulation']").check(); - // if (Math.random() > 0.5) cy.get("[data-cy='raum_temperatur_regler']").check(); - - // Heizungsanlage Bilder - cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/1.jpeg", { subjectType: "input" }); - cy.get("input[name='heizung_image']").should("have.attr", "type", "file").attachFile("images/heizungsanlage/2.jpeg", { subjectType: "input" }); - - // Fenster Daten - if (Math.random() > 0.5) cy.get("input[name='einfach_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='doppel_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='isolier_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='dreifach_verglasung']").check(); - if (Math.random() > 0.5) cy.get("input[name='fenster_dicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='fenster_teilweise_undicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='tueren_dicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='tueren_undicht']").check(); - if (Math.random() > 0.5) cy.get("input[name='rolllaeden_kaesten_gedaemmt']").check(); - - // Fenster Bilder - cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/1.jpeg", { subjectType: "input" }); - cy.get("input[name='fenster_image']").should("have.attr", "type", "file").attachFile("images/fenster/2.jpeg", { subjectType: "input" }); - - // Wärmedämmung Daten - if (Math.random() > 0.5) cy.get("input[name='aussenwand_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='keller_wand_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='keller_decke_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='dachgeschoss_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_gedaemmt']").check(); - if (Math.random() > 0.5) cy.get("input[name='oberste_geschossdecke_min_12cm_gedaemmt']").check(); - - // Wärmedämmung Bilder - cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/1.jpeg", { subjectType: "input" }); - cy.get("input[name='daemmung_image']").should("have.attr", "type", "file").attachFile("images/daemmung/2.jpeg", { subjectType: "input" }); - - // Gebäude Bild - cy.get("input[name='gebaeude_image']").should("have.attr", "type", "file").attachFile("images/gebaeude/1.jpeg", { subjectType: "input" }); - - // Jetzt können wir den Verbrauchsausweis erstellen. - cy.get("form[data-cy='ausweis'] button[data-cy='weiter']").click({ force: true }); - - cy.url().should("contain", "/kundendaten"); - - cy.get("input[name='telefon']").should("have.attr", "type", "text").type(telefon); - // Rechnung - if (preLogin) { - cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").should("contain.value", `${vorname} ${nachname}`); - cy.get("input[name='vorname']").should("have.attr", "type", "text").should("contain.value", vorname); - cy.get("input[name='name']").should("have.attr", "type", "text").should("contain.value", nachname); - cy.get("input[name='rechnung_email']").should("have.attr", "type", "email").should("contain.value", email); - } else { - cy.get("input[name='rechnung_empfaenger']").should("have.attr", "type", "text").type(`${vorname} ${nachname}`); - 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='rechnung_email']").should("have.attr", "type", "email").type(email); - } - 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("[data-cy='paypal']").click() - - cy.get("button[data-cy='bestellen']").click(); - - if (!preLogin) { - 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.intercept({ method: "PUT", url: "**/api/user" }).as("signup") - cy.get("form[name='signup'] button[type='submit']").click(); - cy.wait("@signup") - 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. - }) }); }); diff --git a/src/cypress/support/commands.ts b/src/cypress/support/commands.ts index 71650262..3fb78854 100644 --- a/src/cypress/support/commands.ts +++ b/src/cypress/support/commands.ts @@ -30,11 +30,28 @@ Cypress.Commands.add("signup", (email, passwort, vorname, name) => { cy.url().should("include", "/auth/login") }) +Cypress.Commands.add("form:signup", (email, passwort, vorname, name) => { + 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(name); + 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.intercept({ method: "PUT", url: "**/api/user" }).as("signup") + cy.get("form[name='signup'] button[type='submit']").click(); + cy.wait("@signup") + cy.get("form[name='login'] button[type='submit']").click(); +}) + declare global { namespace Cypress { interface Chainable { login(email: string, passwort: string): Chainable signup(email: string, passwort: string, vorname: string, name: string): Chainable + "form:signup"(email: string, passwort: string, vorname: string, name: string): Chainable } } } \ No newline at end of file diff --git a/src/generated/zod/aufnahme.ts b/src/generated/zod/aufnahme.ts index d332700c..c48b4462 100644 --- a/src/generated/zod/aufnahme.ts +++ b/src/generated/zod/aufnahme.ts @@ -1,10 +1,9 @@ import * as z from "zod" -import { Ausweisart, Heizungsstatus, Heizungsstatus, Lueftungskonzept } from "@prisma/client" +import { Heizungsstatus, Heizungsstatus, Lueftungskonzept } from "@prisma/client" export const AufnahmeSchema = z.object({ id: z.string(), benutzer_id: z.string().nullish(), - ausweisart: z.nativeEnum(Ausweisart).describe("Art des korrespondierenden Ausweises, wie z.B. VerbrauchsausweisWohnen").nullish(), gebaeudetyp: z.string().describe("Art des Gebäudes und seiner primären Nutzungsart").nullish(), gebaeudeteil: z.string().describe("Betrachteter Teil des Gebäudes, z.B. Gesamtgebäude, Wohnteil, Gewerbeteil").nullish(), baujahr_gebaeude: z.number().int().array().describe("Alle Jahre in denen das Gebäude konstruiert oder grundlegend verändert wurde"), @@ -23,12 +22,7 @@ export const AufnahmeSchema = z.object({ alternative_warmwasser: z.boolean().describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen").nullish(), alternative_lueftung: z.boolean().describe("Falls die Lüftung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen").nullish(), alternative_kuehlung: z.boolean().describe("Falls die Kühlung alternative Energieversorgungssysteme beinhaltet sollte dieser Wert auf true stehen").nullish(), - brennstoff_1: z.string().describe("Genutzer Brennstoff der primären Energiequelle").nullish(), - brennstoff_2: z.string().describe("Genutzer Brennstoff der sekundären Energiequelle").nullish(), - boxpruefung: z.boolean().nullish(), - energieeffizienzklasse: z.string().describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes").nullish(), - erstellungsdatum: z.date().describe("Datum an dem der Kunde den Ausweis erstellt hat").nullish(), - ausstellungsdatum: z.date().describe("Datum an dem der Aussteller den Ausweis ausgestellt hat").nullish(), + erstellungsdatum: z.date().describe("Datum an dem der Kunde die Aufnahme erstellt hat").nullish(), zentralheizung: z.boolean().describe("Falls das Gebäude über eine Zentralbeheizung verfügt, sollte dieser Wert auf true stehen").nullish(), solarsystem_warmwasser: z.boolean().describe("Falls das Gebäude über ein Solarsystem für Warmwasser verfügt, sollte dieser Wert auf true stehen").nullish(), warmwasser_rohre_gedaemmt: z.boolean().describe("Falls die Warmwasserrohre des Gebäudes gedämmt sind, sollte dieser Wert auf true stehen").nullish(), diff --git a/src/generated/zod/bedarfsausweisgewerbe.ts b/src/generated/zod/bedarfsausweisgewerbe.ts index 17c29b9f..c387134e 100644 --- a/src/generated/zod/bedarfsausweisgewerbe.ts +++ b/src/generated/zod/bedarfsausweisgewerbe.ts @@ -1,5 +1,5 @@ import * as z from "zod" -import { Ausstellgrund } from "@prisma/client" +import { Ausstellgrund, AusweisTyp } from "@prisma/client" export const BedarfsausweisGewerbeSchema = z.object({ id: z.string(), @@ -19,6 +19,9 @@ export const BedarfsausweisGewerbeSchema = z.object({ fussbodenheizung: z.boolean().nullish(), bauteilaktivierung: z.boolean().nullish(), klimatisierung: z.boolean().nullish(), + nachweistyp: z.nativeEnum(AusweisTyp), + created_at: z.date(), + updated_at: z.date(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(), aufnahme_id: z.string(), rechnung_id: z.string().nullish(), diff --git a/src/generated/zod/bedarfsausweiswohnen.ts b/src/generated/zod/bedarfsausweiswohnen.ts index f91c83b8..cf377010 100644 --- a/src/generated/zod/bedarfsausweiswohnen.ts +++ b/src/generated/zod/bedarfsausweiswohnen.ts @@ -11,6 +11,9 @@ export const BedarfsausweisWohnenSchema = z.object({ alternative_warmwasser: z.boolean().nullish(), alternative_lueftung: z.boolean().nullish(), alternative_kuehlung: z.boolean().nullish(), + energieeffizienzklasse: z.string().describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes").nullish(), + ausstellungsdatum: z.date().describe("Datum an dem der Aussteller den Ausweis ausgestellt hat").nullish(), + boxpruefung: z.boolean().nullish(), anzahl_vollgeschosse: z.number().int().nullish(), geschosshoehe: z.number().nullish(), anzahl_gauben: z.number().int().nullish(), diff --git a/src/generated/zod/gegnachweisgewerbe.ts b/src/generated/zod/gegnachweisgewerbe.ts index dd509f91..36d05932 100644 --- a/src/generated/zod/gegnachweisgewerbe.ts +++ b/src/generated/zod/gegnachweisgewerbe.ts @@ -1,5 +1,5 @@ import * as z from "zod" -import { Ausstellgrund } from "@prisma/client" +import { Ausstellgrund, AusweisTyp } from "@prisma/client" export const GEGNachweisGewerbeSchema = z.object({ id: z.string(), @@ -9,6 +9,9 @@ export const GEGNachweisGewerbeSchema = z.object({ 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(), beschreibung: z.string().describe("Beschreibung des Bauvorhabens").nullish(), + nachweistyp: z.nativeEnum(AusweisTyp), + created_at: z.date(), + updated_at: z.date(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(), aufnahme_id: z.string(), rechnung_id: z.string().nullish(), diff --git a/src/generated/zod/gegnachweiswohnen.ts b/src/generated/zod/gegnachweiswohnen.ts index d149d137..3d454c3e 100644 --- a/src/generated/zod/gegnachweiswohnen.ts +++ b/src/generated/zod/gegnachweiswohnen.ts @@ -1,5 +1,5 @@ import * as z from "zod" -import { Ausstellgrund } from "@prisma/client" +import { Ausstellgrund, AusweisTyp } from "@prisma/client" export const GEGNachweisWohnenSchema = z.object({ id: z.string(), @@ -9,6 +9,9 @@ export const GEGNachweisWohnenSchema = z.object({ 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(), beschreibung: z.string().describe("Beschreibung des Bauvorhabens").nullish(), + nachweistyp: z.nativeEnum(AusweisTyp), + created_at: z.date(), + updated_at: z.date(), benutzer_id: z.string().describe("Die ID des Benutzers, welchem dieser Ausweis gehört").nullish(), aufnahme_id: z.string(), rechnung_id: z.string().nullish(), diff --git a/src/generated/zod/index.ts b/src/generated/zod/index.ts index 7a3650d7..37875cdf 100644 --- a/src/generated/zod/index.ts +++ b/src/generated/zod/index.ts @@ -1,23 +1,23 @@ -export * from "./anteilshaber.js" -export * from "./apirequests.js" -export * from "./aufnahme.js" -export * from "./bedarfsausweisgewerbe.js" -export * from "./bedarfsausweiswohnen.js" -export * from "./benutzer.js" -export * from "./bild.js" -export * from "./event.js" -export * from "./gegeinpreisung.js" -export * from "./gegnachweisgewerbe.js" -export * from "./gegnachweiswohnen.js" -export * from "./klimafaktoren.js" -export * from "./objekt.js" -export * from "./postleitzahlen.js" -export * from "./rechnung.js" -export * from "./refreshtokens.js" -export * from "./tickets.js" -export * from "./unterlage.js" -export * from "./verbrauchsausweisgewerbe.js" -export * from "./verbrauchsausweiswohnen.js" -export * from "./documenttemplates.js" -export * from "./documenttypes.js" -export * from "./tokens.js" +export * from "./anteilshaber" +export * from "./apirequests" +export * from "./aufnahme" +export * from "./bedarfsausweisgewerbe" +export * from "./bedarfsausweiswohnen" +export * from "./benutzer" +export * from "./bild" +export * from "./event" +export * from "./gegeinpreisung" +export * from "./gegnachweisgewerbe" +export * from "./gegnachweiswohnen" +export * from "./klimafaktoren" +export * from "./objekt" +export * from "./postleitzahlen" +export * from "./rechnung" +export * from "./refreshtokens" +export * from "./tickets" +export * from "./unterlage" +export * from "./verbrauchsausweisgewerbe" +export * from "./verbrauchsausweiswohnen" +export * from "./documenttemplates" +export * from "./documenttypes" +export * from "./tokens" diff --git a/src/generated/zod/verbrauchsausweisgewerbe.ts b/src/generated/zod/verbrauchsausweisgewerbe.ts index 1afbff15..b70f7af1 100644 --- a/src/generated/zod/verbrauchsausweisgewerbe.ts +++ b/src/generated/zod/verbrauchsausweisgewerbe.ts @@ -7,9 +7,7 @@ export const VerbrauchsausweisGewerbeSchema = z.object({ ausstellgrund: z.nativeEnum(Ausstellgrund).nullish(), registriernummer: z.string().nullish(), zusaetzliche_heizquelle: z.boolean().nullish(), - brennstoff_1: z.string().nullish(), einheit_1: z.string().nullish(), - brennstoff_2: z.string().nullish(), einheit_2: z.string().nullish(), startdatum: z.date().nullish(), verbrauch_1: z.number().int().nullish(), @@ -18,6 +16,11 @@ export const VerbrauchsausweisGewerbeSchema = z.object({ verbrauch_4: z.number().int().nullish(), verbrauch_5: z.number().int().nullish(), verbrauch_6: z.number().int().nullish(), + brennstoff_1: z.string().describe("Genutzer Brennstoff der primären Energiequelle").nullish(), + brennstoff_2: z.string().describe("Genutzer Brennstoff der sekundären Energiequelle").nullish(), + energieeffizienzklasse: z.string().describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes").nullish(), + ausstellungsdatum: z.date().describe("Datum an dem der Aussteller den Ausweis ausgestellt hat").nullish(), + boxpruefung: z.boolean().nullish(), strom_1: z.number().int().nullish(), strom_2: z.number().int().nullish(), strom_3: z.number().int().nullish(), diff --git a/src/generated/zod/verbrauchsausweiswohnen.ts b/src/generated/zod/verbrauchsausweiswohnen.ts index 4c8e16c7..5abc37c1 100644 --- a/src/generated/zod/verbrauchsausweiswohnen.ts +++ b/src/generated/zod/verbrauchsausweiswohnen.ts @@ -9,6 +9,11 @@ export const VerbrauchsausweisWohnenSchema = z.object({ zusaetzliche_heizquelle: z.boolean().describe("Falls eine sekundäre Heizquelle existiert, sollte dieser Wert auf true stehen").nullish(), einheit_1: z.string().describe("Einheit des Energieträgers der primären Heizquelle").nullish(), einheit_2: z.string().describe("Einheit des Energieträgers der sekundären Heizquelle").nullish(), + brennstoff_1: z.string().describe("Genutzer Brennstoff der primären Energiequelle").nullish(), + brennstoff_2: z.string().describe("Genutzer Brennstoff der sekundären Energiequelle").nullish(), + energieeffizienzklasse: z.string().describe("Die aus der Berechnung hervorgehende Energieeffizienzklasse des Gebäudes").nullish(), + ausstellungsdatum: z.date().describe("Datum an dem der Aussteller den Ausweis ausgestellt hat").nullish(), + boxpruefung: z.boolean().nullish(), startdatum: z.date().nullish(), verbrauch_1: z.number().int().describe("Energieverbrauch der primären Heizquelle im ersten der drei Verbrauchsjahre").nullish(), verbrauch_2: z.number().int().describe("Energieverbrauch der primären Heizquelle im zweiten der drei Verbrauchsjahre").nullish(), @@ -18,7 +23,6 @@ export const VerbrauchsausweisWohnenSchema = z.object({ verbrauch_6: z.number().int().describe("Energieverbrauch der sekund̈́ären Heizquelle im letzten der drei Verbrauchsjahre").nullish(), warmwasser_enthalten: z.boolean().describe("Falls Warmwasser im Verbrauchswert enthalten ist, sollte dieser Wert auf true stehen").nullish(), warmwasser_anteil_bekannt: z.boolean().describe("Falls der Warmwasser Anteil am Verbrauch bekannt ist, sollte dieser Wert auf true stehen").nullish(), - keller_beheizt: z.boolean().describe("Falls der Keller des Gebäudes beheizt wird, sollte dieser Wert auf true stehen").nullish(), faktorKeller: z.number().describe("Der Faktor mit dem die Wohnfläche erhöht wird wenn die beheizte Gesamtfläche (energetische Nutzfläche) unbekannt ist.").nullish(), alternative_heizung: z.boolean().describe("Falls der Heizungsverbrauch alternative Energieversorgungssysteme beinhaltet, sollte dieser Wert auf true stehen.").nullish(), alternative_warmwasser: z.boolean().describe("Falls der Warmwasserverbrauch alternative Energieversorgungssysteme (z.B. Solarsystem, Wärmepumpe, etc.) beinhaltet, sollte dieser Wert auf true stehen.").nullish(), diff --git a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts index dceb09e5..83d00205 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.ts @@ -99,13 +99,13 @@ export async function endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis: // Endenergieverbrauch // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. let brennstoff_1 = { coe: 0, energietraeger: "", einheit: "", umrechnungsfaktor: 0, primaerenergiefaktor: 0 }, brennstoff_2 = { coe: 0, energietraeger: "", einheit: "", umrechnungsfaktor: 0, primaerenergiefaktor: 0 }; - if (aufnahme.brennstoff_1 && ausweis.einheit_1) { - brennstoff_1 = getHeizwertfaktor(aufnahme.brennstoff_1, ausweis.einheit_1); + if (ausweis.brennstoff_1 && ausweis.einheit_1) { + brennstoff_1 = getHeizwertfaktor(ausweis.brennstoff_1, ausweis.einheit_1); } - if (aufnahme.brennstoff_2 && ausweis.einheit_2) { - brennstoff_2 = getHeizwertfaktor(aufnahme.brennstoff_2, ausweis.einheit_2); + if (ausweis.brennstoff_2 && ausweis.einheit_2) { + brennstoff_2 = getHeizwertfaktor(ausweis.brennstoff_2, ausweis.einheit_2); } let energieVerbrauchGesamt_1 = ((ausweis.verbrauch_1 || 0) + (ausweis.verbrauch_2 || 0) + (ausweis.verbrauch_3 || 0)) * brennstoff_1?.umrechnungsfaktor; diff --git a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts index 62205ab3..4540ebd1 100644 --- a/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts +++ b/src/lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.ts @@ -64,11 +64,11 @@ export async function endEnergieVerbrauchVerbrauchsausweis_2016( // Endenergieverbrauch // Um den EEV auszurechnen, müssen die Verbräuche zu kWh konvertiert werden. let brennstoff_1 = getHeizwertfaktor( - aufnahme.brennstoff_1 as string, + ausweis.brennstoff_1 as string, ausweis.einheit_1 as string ); let brennstoff_2 = getHeizwertfaktor( - aufnahme.brennstoff_2 as string, + ausweis.brennstoff_2 as string, ausweis.einheit_2 as string ); diff --git a/src/lib/Gebaeude.ts b/src/lib/Gebaeude.ts deleted file mode 100644 index 1da60d28..00000000 --- a/src/lib/Gebaeude.ts +++ /dev/null @@ -1,38 +0,0 @@ - -import { Ausweis } from "./Ausweis/Ausweis"; -import { Dachgeschoss, Lueftungskonzept } from "./Ausweis/types"; -import { BitChecker } from "./BitChecker"; - -export class Gebaeude { - public typ: string = ""; - public plz: string = ""; - public ort: string = ""; - public strasse: string = ""; - public gebaeudeteil: string = ""; - public saniert: boolean = false; - public baujahr: number[] = []; - public einheiten: number = 0; - public wohnflaeche: number = 0; - public nutzflaeche: number = 0; - public keller_beheizt: boolean = false; - public dachgeschoss_beheizt: Dachgeschoss = Dachgeschoss.UNBEHEIZT; - public lueftungskonzept: Lueftungskonzept = "Fensterlüftung"; - public wird_gekuehlt: boolean = false; - public leerstand: number = 0; - public versorgungssysteme: boolean[] = BitChecker(0); - public fenster_dach: boolean[] = BitChecker(0); - public energiequelle_2_nutzung: boolean[] = BitChecker(0); - public daemmung: boolean[] = BitChecker(0); - - public ausweis: Ausweis; - - public uid?: string; - - public constructor(initializer?: Gebaeude) { - if (initializer) { - this.typ = initializer.typ; - this.plz = initializer.plz; - this.ort = initializer.ort; - } - } -} diff --git a/src/lib/XML/getEmpfehlungen.ts b/src/lib/XML/getEmpfehlungen.ts index e0b075b0..fe6074dc 100644 --- a/src/lib/XML/getEmpfehlungen.ts +++ b/src/lib/XML/getEmpfehlungen.ts @@ -1,8 +1,8 @@ -import { AufnahmeClient, BedarfsausweisWohnenClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; -import { Enums } from "#lib/client/prisma"; +import { AufnahmeClient, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; +import { Enums } from "#lib/client/prisma.js"; import moment from "moment"; -export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient): { +export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient, aufnahme: AufnahmeClient, objekt: ObjektClient): { title: string, description: string, anlagenteil: string, @@ -19,7 +19,6 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient | Verbrau let baujahr_anlagesanlage = aufnahme.baujahr_heizung && aufnahme.baujahr_heizung[0]; let Zentralheizung = aufnahme.zentralheizung; let photovoltaik = aufnahme.photovoltaik; - let Brennstoff = aufnahme.brennstoff_1; let Aussenwand_gedaemmt = aufnahme.aussenwand_gedaemmt; let Dachgeschoss = aufnahme.dachgeschoss; let Dachgeschoss_gedaemmt = aufnahme.dachgeschoss_gedaemmt; @@ -70,7 +69,7 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient | Verbrau let Relanlagenjahr = moment().year() - 35; - if ((!Brennwertkessel && !Waermepumpe) && baujahr_anlagesanlage <= Relanlagenjahr && Brennstoff != 'Fernwärme' && Brennstoff != 'Strommix') { + if ((!Brennwertkessel && !Waermepumpe) && baujahr_anlagesanlage <= Relanlagenjahr && ausweis.brennstoff_1 != 'Fernwärme' && ausweis.brennstoff_1 != 'Strommix') { empfehlungen.push({ "title" : "Anlagentechnik", "description" : "Prüfen Sie, ob Sie bei einer Umrüstung auf einen regenerativen Anteil von 65% kommen. Bei energetisch sanierten Gebäuden z.B. Wärmepumpe. Bei unsanieten Gebäuden Fernwärmeanschluss.", @@ -126,7 +125,7 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient | Verbrau } } - if ((baujahr_anlagesanlage <= (moment().year() - 30)) && (Brennstoff == "Heizöl" || Brennstoff == "Erdgas") && !Waermepumpe) { + if ((baujahr_anlagesanlage <= (moment().year() - 30)) && (ausweis.brennstoff_1 == "Heizöl" || ausweis.brennstoff_1 == "Erdgas") && !Waermepumpe) { // Wärmepumpe empfehlungen.push({ "title" : "Wärmeerzeuger", @@ -137,7 +136,7 @@ export function getEmpfehlungen(ausweis: VerbrauchsausweisWohnenClient | Verbrau }); } - if (!photovoltaik && Brennstoff == "Strommix") { + if (!photovoltaik && ausweis.brennstoff_1 == "Strommix") { // Wärmepumpe empfehlungen.push({ "title" : "Wärmeerzeuger", diff --git a/src/lib/altes-system/import.ts b/src/lib/altes-system/import.ts index 40c763a9..7d5ff479 100644 --- a/src/lib/altes-system/import.ts +++ b/src/lib/altes-system/import.ts @@ -1,6 +1,6 @@ import { VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { faker } from "@faker-js/faker"; -import { Enums } from "#lib/client/prisma.js"; +import { Aufnahme, Enums, VerbrauchsausweisWohnen } from "#lib/client/prisma.js"; import moment from "moment"; export async function importVerbrauchsausweisWohnenAltesSystem(count: number = 5) { @@ -19,7 +19,7 @@ export async function importVerbrauchsausweisWohnenAltesSystem(count: number = 5 } export function verbrauchsausweisWohnenImportTranslate(ausweis: Record) { - const ausweisTranslated: VerbrauchsausweisWohnenClient = { + const ausweisTranslated: VerbrauchsausweisWohnen & { aufnahme: Aufnahme } = { aufnahme: { rechnungen: null, baujahr_gebaeude: [ausweis.baujahr_gebaeude], @@ -58,7 +58,6 @@ export function verbrauchsausweisWohnenImportTranslate(ausweis: Record { - const pos = childPositions[i]; + for (let i = 0; i < this.children.length; i++) { + const child = this.children[i]; + const pos = childPositions[i]; - child.draw(page, pos.x, pos.y); - }); + await child.draw(page, pos.x, pos.y); + } } private calculateChildPositions(x: number, y: number): { x: number; y: number }[] { diff --git a/src/lib/pdf/elements/Image.ts b/src/lib/pdf/elements/Image.ts index 5805ddc3..e6822b85 100644 --- a/src/lib/pdf/elements/Image.ts +++ b/src/lib/pdf/elements/Image.ts @@ -50,9 +50,9 @@ export class Image extends PDFElement { return; } - if (this.options.src.split(".").pop() === "png") { + try { embed = await page.doc.embedPng(img) - } else { + } catch(e) { embed = await page.doc.embedJpg(img) } } else if (this.options.data) { @@ -73,8 +73,6 @@ export class Image extends PDFElement { } } - - page.drawImage(embed, { x: x + this.margin.left + this.padding.left, y: y - this.height - this.margin.top - this.padding.top, diff --git a/src/lib/pdf/elements/Layout.ts b/src/lib/pdf/elements/Layout.ts index 3b7c3db8..6b396425 100644 --- a/src/lib/pdf/elements/Layout.ts +++ b/src/lib/pdf/elements/Layout.ts @@ -59,11 +59,11 @@ export class Layout extends PDFElement { this._height = value; } - draw(page: PDFPage, x: number, y: number): void { + async draw(page: PDFPage, x: number, y: number) { let currentY = y - this.margin.top - this.padding.top; for (const child of this.children) { - child.draw(page, x + this.margin.left + this.padding.left, currentY); + await child.draw(page, x + this.margin.left + this.padding.left, currentY); currentY -= child.height + child.margin.top + child.margin.bottom; } diff --git a/src/lib/pdf/elements/PDFElement.ts b/src/lib/pdf/elements/PDFElement.ts index d7d963ed..1d33cdd5 100644 --- a/src/lib/pdf/elements/PDFElement.ts +++ b/src/lib/pdf/elements/PDFElement.ts @@ -32,7 +32,9 @@ export abstract class PDFElement { return this._height === "auto" ? 0 : this._height; } - abstract draw(page: PDFPage, x: number, y: number): void; + async draw(page: PDFPage, x: number, y: number): Promise { + throw new Error("Method is not implemented.") + } abstract addChild(...children: PDFElement[]): void; } diff --git a/src/lib/pdf/elements/Text.ts b/src/lib/pdf/elements/Text.ts index 434b4064..2a887050 100644 --- a/src/lib/pdf/elements/Text.ts +++ b/src/lib/pdf/elements/Text.ts @@ -49,7 +49,7 @@ export class Text extends PDFElement { return this._width + this.padding.left + this.padding.right; } - draw(page: PDFPage, x: number, y: number): void { + async draw(page: PDFPage, x: number, y: number): Promise { page.drawText(this.content, { x: x + this.margin.left + this.padding.left, y: y - this.height - this.margin.top - this.padding.top, diff --git a/src/lib/pdf/elements/xml2pdf.ts b/src/lib/pdf/elements/xml2pdf.ts index e8d305a9..2f81cb81 100644 --- a/src/lib/pdf/elements/xml2pdf.ts +++ b/src/lib/pdf/elements/xml2pdf.ts @@ -51,7 +51,7 @@ export function xml2pdf(xml: string, fonts: Record & { "default color = rgb(...colorValue.map((x) => parseInt(x) / 255) as [number, number, number]); } - const text = new Text(child.children[0] || "", { font: child.attributes.hasOwnProperty("font") ? fonts[child.attributes["font"]] : fonts["default"], lineHeight: parseFloat(child.attributes.lineHeight), fontSize: parseFloat(child.attributes.size) || 10, color, margin: { + const text = new Text(child.children[0] as string || "", { font: child.attributes.hasOwnProperty("font") ? fonts[child.attributes["font"]] : fonts["default"], lineHeight: parseFloat(child.attributes.lineHeight), fontSize: parseFloat(child.attributes.size) || 10, color, margin: { bottom: parseFloat(child.attributes.marginBottom) || 0, left: parseFloat(child.attributes.marginLeft) || 0, right: parseFloat(child.attributes.marginRight) || 0, @@ -114,43 +114,4 @@ export function xml2pdf(xml: string, fonts: Record & { "default iterateChildren(tree, layout) return layout -} - -// const pdf = await PDFDocument.create() - -// const page = pdf.addPage() - -// const font = await pdf.embedFont(StandardFonts.Helvetica) -// const bold = await pdf.embedFont(StandardFonts.HelveticaBold) - -// console.log(page.getWidth(), "WIDTH"); - - -// const layout = xml2pdf(` -// -// -// -// awd1 -// -// -// -// awd2 -// -// -// -// awd3 -// -// -// -// awd4 -// -// `, { -// "default": font -// }) - -// layout.draw(page, 0, page.getHeight()) - -// import { writeFileSync } from "fs" -// import { FixedLengthArray } from "#lib/Berechnungen/BedarfsausweisWohnen/types.js" - -// writeFileSync("./test-pdf.pdf", await pdf.save()) \ No newline at end of file +} \ No newline at end of file diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts index 8fd5f24c..6a9d4c56 100644 --- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.ts @@ -165,14 +165,14 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa - ${aufnahme.brennstoff_1} + ${ausweis.brennstoff_1} ${ausweis.verbrauch_1} ${ausweis.einheit_1} ${ausweis.verbrauch_2} ${ausweis.einheit_1} ${ausweis.verbrauch_3} ${ausweis.einheit_1} zusätzliche Heizquelle - ${aufnahme.brennstoff_2 || ""} + ${ausweis.brennstoff_2 || ""} ${ausweis.verbrauch_4 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_5 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_6 || ""} ${ausweis.einheit_2 || ""} @@ -382,78 +382,9 @@ export async function pdfDatenblattVerbrauchsausweisGewerbe(ausweis: Verbrauchsa ${images.map(badge => `${badge.join("")}`).join("")} `, { "default": font }) - layout.draw(pages[0], 0, pages[0].getHeight()) - layoutPage2.draw(pages[1], 0, pages[1].getHeight()) - layoutPage3.draw(pages[2], 0, pages[2].getHeight()) - - // const containerWidth = width - marginX; - - // const layout = flex([ - // flex([ - // checkbox(8, 8), text("Neubau", { - // color: rgb(0,0,0), - // font, - // fontSize: 12 - // }) - // ], { - // align: "center", - // justify: "center", - // gap: 5, - // height: 12, - // page: pages[0] - // }), - // flex([ - // checkbox(8, 8), text("Vermietung/Verkauf", { - // color: rgb(0,0,0), - // font, - // fontSize: 12 - // }) - // ], { - // align: "center", - // justify: "center", - // gap: 5, - // height: 12, - // page: pages[0] - // }), - // flex([ - // checkbox(8, 8), text("Modernisierung", { - // color: rgb(0,0,0), - // font, - // fontSize: 12 - // }) - // ], { - // align: "center", - // justify: "center", - // gap: 5, - // height: 12, - // page: pages[0] - // }), - // flex([ - // checkbox(8, 8), text("Sonstiges", { - // color: rgb(0,0,0), - // font, - // fontSize: 12 - // }) - // ], { - // align: "center", - // justify: "center", - // gap: 5, - // height: 12, - // page: pages[0] - // }) - // ], { - // align: "center", - // justify: "space-between", - // gap: 15, - // x: marginX, - // y: height - marginY - 165, - // height: 12, - // width: containerWidth - // }) - - // layout.draw(pages[0]) - - // pdf.getForm().flatten() + await layout.draw(pages[0], 0, pages[0].getHeight()) + await layoutPage2.draw(pages[1], 0, pages[1].getHeight()) + await layoutPage3.draw(pages[2], 0, pages[2].getHeight()) return pdf.save(); } \ No newline at end of file diff --git a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts index d334bd0e..54f69d4b 100644 --- a/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.ts @@ -131,14 +131,14 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau - ${aufnahme.brennstoff_1} + ${ausweis.brennstoff_1} ${ausweis.verbrauch_1} ${ausweis.einheit_1} ${ausweis.verbrauch_2} ${ausweis.einheit_1} ${ausweis.verbrauch_3} ${ausweis.einheit_1} zusätzliche Heizquelle - ${aufnahme.brennstoff_2 || ""} + ${ausweis.brennstoff_2 || ""} ${ausweis.verbrauch_4 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_5 || ""} ${ausweis.einheit_2 || ""} ${ausweis.verbrauch_6 || ""} ${ausweis.einheit_2 || ""} @@ -298,7 +298,7 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau const images: string[][] = [] for (const bild of bilder) { - let badge: string[]; + let batch: string[]; let image: string = ""; if (bild.kategorie === Enums.BilderKategorie.Gebaeude) { @@ -310,26 +310,30 @@ export async function pdfDatenblattVerbrauchsausweisWohnen(ausweis: Verbrauchsau } if (images.length > 0) { - let badge = images[images.length - 1] - if (badge.length == 3) { - badge = [image] - images.push(badge) + let batch = images[images.length - 1] + if (batch.length == 3) { + batch = [image] + images.push(batch) } else { - badge.push(image) + batch.push(image) } } else { - badge = [image] - images.push(badge) + batch = [image] + images.push(batch) } } const layoutPage3 = xml2pdf(` - ${images.map(badge => `${badge.join("")}`).join("")} + ${images.map(batch => `${batch.join("")}`).join("")} `, { "default": font }) + - layout.draw(pages[0], 0, pages[0].getHeight()) - layoutPage2.draw(pages[1], 0, pages[1].getHeight()) - layoutPage3.draw(pages[2], 0, pages[2].getHeight()) + await layout.draw(pages[0], 0, pages[0].getHeight()) + await layoutPage2.draw(pages[1], 0, pages[1].getHeight()) + await layoutPage3.draw(pages[2], 0, pages[2].getHeight()) + + console.log("DONE"); + return pdf.save(); } \ No newline at end of file diff --git a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts index beaa1c2a..2a3fdf14 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisGewerbe.ts @@ -66,7 +66,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe size: 10 }) - pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, y: height - 285, size: 10 @@ -97,7 +97,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe }) if (ausweis.warmwasser_enthalten) { - pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, y: height - 299, size: 10 @@ -422,7 +422,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - aufnahme.brennstoff_1 || "", + ausweis.brennstoff_1 || "", berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(), "0", @@ -436,7 +436,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - aufnahme.brennstoff_1 || "", + ausweis.brennstoff_1 || "", berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(), Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), @@ -451,7 +451,7 @@ export async function pdfVerbrauchsausweisGewerbe(ausweis: VerbrauchsausweisGewe addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - aufnahme.brennstoff_2 || "", + ausweis.brennstoff_2 || "", berechnungen?.brennstoff_2.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_2 || 0).toString(), Math.round(berechnungen?.energieVerbrauchWarmwasser_2 || 0).toString(), diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 3059d272..80adf9b9 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -71,14 +71,14 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne size: 10 }) - pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, y: height - 298.5, size: 10 }) if (ausweis.warmwasser_enthalten) { - pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, y: height - 312, size: 10 @@ -111,7 +111,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne }) if (ausweis.warmwasser_enthalten) { - pages[0].drawText(`${aufnahme.brennstoff_1}, ${aufnahme.brennstoff_2 || ""}`, { + pages[0].drawText(`${ausweis.brennstoff_1}, ${ausweis.brennstoff_2 || ""}`, { x: 211, y: height - 299, size: 10 @@ -414,7 +414,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - aufnahme.brennstoff_1 || "", + ausweis.brennstoff_1 || "", berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(), "0", @@ -426,7 +426,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - aufnahme.brennstoff_1 || "", + ausweis.brennstoff_1 || "", berechnungen?.brennstoff_1.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_1 || 0).toString(), Math.round(berechnungen?.energieVerbrauchWarmwasser_1 || 0).toString(), @@ -439,7 +439,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne addVerbrauch( moment(ausweis.startdatum).format("MM.YYYY"), moment(ausweis.startdatum).add(3, "years").format("MM.YYYY"), - aufnahme.brennstoff_2 || "", + ausweis.brennstoff_2 || "", berechnungen?.brennstoff_2.primaerenergiefaktor.toString(), Math.round(berechnungen?.energieVerbrauchGesamt_2 || 0).toString(), Math.round(berechnungen?.energieVerbrauchWarmwasser_2 || 0).toString(), diff --git a/src/lib/s3.ts b/src/lib/s3.ts index 31e1f36d..0f910d80 100644 --- a/src/lib/s3.ts +++ b/src/lib/s3.ts @@ -1,5 +1,6 @@ import { GetObjectCommand, S3Client } from "@aws-sdk/client-s3"; import * as fs from "fs"; +import { tryCatch } from "./tryCatch.js"; export const s3Client = new S3Client({ region: "eu-central-1", @@ -17,21 +18,18 @@ export async function getS3File( bucket: string, key: string ): Promise { - try { - let command = new GetObjectCommand({ Bucket: bucket, Key: key }); - let response = await s3Client.send(command); + let command = new GetObjectCommand({ Bucket: bucket, Key: key }); - const body = response.Body; + let [response, error] = await tryCatch(s3Client.send(command)); - if (!body) { - return null; - } - - let buffer = await streamToBuffer(body as unknown as fs.ReadStream); - return buffer; - } catch (e) { + if (error || response === null) { return null; } + + const body = response.Body; + + let buffer = await streamToBuffer(body as unknown as fs.ReadStream); + return buffer; } async function streamToBuffer(stream: fs.ReadStream): Promise { diff --git a/src/lib/server/ausweis.ts b/src/lib/server/ausweis.ts index b34daebf..9cb13c00 100644 --- a/src/lib/server/ausweis.ts +++ b/src/lib/server/ausweis.ts @@ -1,4 +1,4 @@ -import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, BildClient, getAusweisartFromUUID, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; +import { AufnahmeClient, BedarfsausweisWohnenClient, BenutzerClient, BildClient, getAusweisartFromId, ObjektClient, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js"; import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js"; import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js"; @@ -10,7 +10,7 @@ import { Enums, prisma } from "#lib/server/prisma.js"; * @param id Die Ausweis UID */ export function getPrismaAusweisAdapter(id: string) { - const ausweisart = getAusweisartFromUUID(id); + const ausweisart = getAusweisartFromId(id); if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { return prisma.verbrauchsausweisWohnen @@ -25,7 +25,7 @@ export function getPrismaAusweisAdapter(id: string) { * Gibt den richtigen Ansichtsausweis basierend auf der Ausweisart zurück. * @param ausweis */ -export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromUUID(ausweis.uid)) { +export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromId(ausweis.uid)) { if (!ausweisart) { return null } @@ -43,7 +43,7 @@ export async function getAnsichtsausweis(ausweis: VerbrauchsausweisWohnenClient * Gibt das richtige Datenblatt basierend auf der Ausweisart zurück. * @param ausweis */ -export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromUUID(ausweis.uid)) { +export async function getDatenblatt(ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnenClient, aufnahme: AufnahmeClient, objekt: ObjektClient, bilder: BildClient[], user: BenutzerClient, ausweisart = getAusweisartFromId(ausweis.uid)) { if (!ausweisart) { return null } diff --git a/src/lib/server/db.ts b/src/lib/server/db.ts index 7c135d05..bf628b9d 100644 --- a/src/lib/server/db.ts +++ b/src/lib/server/db.ts @@ -1,4 +1,4 @@ -import { Aufnahme, Bild, Objekt, prisma, VerbrauchsausweisWohnen } from "./prisma.js"; +import { Aufnahme, BedarfsausweisGewerbe, BedarfsausweisWohnen, Bild, GEGNachweisGewerbe, GEGNachweisWohnen, Objekt, prisma, Unterlage, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "./prisma.js"; export async function getVerbrauchsausweisWohnen(id: string): Promise { return await prisma.verbrauchsausweisWohnen.findUnique({ @@ -8,6 +8,46 @@ export async function getVerbrauchsausweisWohnen(id: string): Promise { + return await prisma.verbrauchsausweisGewerbe.findUnique({ + where: { + id + } + }) +} + +export async function getBedarfsausweisWohnen(id: string): Promise { + return await prisma.bedarfsausweisWohnen.findUnique({ + where: { + id + } + }) +} + +export async function getBedarfsausweisGewerbe(id: string): Promise { + return await prisma.bedarfsausweisGewerbe.findUnique({ + where: { + id + } + }) +} + +export async function getGEGNachweisWohnen(id: string): Promise { + return await prisma.gEGNachweisWohnen.findUnique({ + where: { + id + } + }) +} + +export async function getGEGNachweisGewerbe(id: string): Promise { + return await prisma.gEGNachweisGewerbe.findUnique({ + where: { + id + } + }) +} + export async function getAufnahme(id: string): Promise { return await prisma.aufnahme.findUnique({ where: { @@ -30,4 +70,12 @@ export async function getBilder(aufnahme_id: string): Promise { aufnahme_id } }) +} + +export async function getUnterlagen(aufnahme_id: string): Promise { + return await prisma.unterlage.findMany({ + where: { + aufnahme_id + } + }) } \ No newline at end of file diff --git a/src/lib/server/mail/invoice.ts b/src/lib/server/mail/invoice.ts index c3f10a4e..3ec9deac 100644 --- a/src/lib/server/mail/invoice.ts +++ b/src/lib/server/mail/invoice.ts @@ -1,4 +1,4 @@ -import { getAusweisartFromUUID } from "#components/Ausweis/types.js"; +import { getAusweisartFromId } from "#components/Ausweis/types.js"; import { BASE_URI } from "#lib/constants.js"; import { transport } from "#lib/mail.js"; import { @@ -32,7 +32,7 @@ export async function sendInvoiceMail( return; } - const ausweisart = getAusweisartFromUUID(ausweis.id); + const ausweisart = getAusweisartFromId(ausweis.id); if (!ausweisart) { return diff --git a/src/lib/server/mail/payment-success.ts b/src/lib/server/mail/payment-success.ts index 6c24e527..48e7fc4a 100644 --- a/src/lib/server/mail/payment-success.ts +++ b/src/lib/server/mail/payment-success.ts @@ -1,4 +1,4 @@ -import { getAusweisartFromUUID } from "#components/Ausweis/types.js"; +import { getAusweisartFromId } from "#components/Ausweis/types.js"; import { transport } from "#lib/mail.js"; import { Benutzer, @@ -32,7 +32,7 @@ export async function sendPaymentSuccessMail( } let info: string = ""; - const ausweisart = getAusweisartFromUUID(ausweis.id); + const ausweisart = getAusweisartFromId(ausweis.id); if (!ausweisart) { return; diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 62938182..33c33020 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -41,15 +41,21 @@ export let ausweisart: Enums.Ausweisart; export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; - let email = localStorage.getItem("kundendaten.email") || user.email || ""; - let vorname = localStorage.getItem("kundendaten.vorname") || user.vorname || ""; - let name = localStorage.getItem("kundendaten.name") || user.name || ""; - let empfaenger = localStorage.getItem("kundendaten.empfaenger") || (user.vorname && user.name ? `${user.vorname} ${user.name}` : "") - let strasse = localStorage.getItem("kundendaten.strasse") || user.adresse || ""; - let plz = localStorage.getItem("kundendaten.plz") || user.plz || ""; - let ort = localStorage.getItem("kundendaten.ort") || user.ort || ""; - let zusatzzeile = localStorage.getItem("kundendaten.zusatzzeile") || "" - let telefon = localStorage.getItem("kundendaten.telefon") || user.telefon || ""; + + let email: string, vorname: string, name: string, empfaenger: string, strasse: string, plz: string, ort: string, zusatzzeile: string, telefon: string; + + if (user.rolle !== Enums.BenutzerRolle.ADMIN) { + // Falls der aktuelle Benutzer kein Admin ist können wir die Kundendaten aus den Stammdaten vorausfüllen. + email = localStorage.getItem("kundendaten.email") || user.email || ""; + vorname = localStorage.getItem("kundendaten.vorname") || user.vorname || ""; + name = localStorage.getItem("kundendaten.name") || user.name || ""; + empfaenger = localStorage.getItem("kundendaten.empfaenger") || (user.vorname && user.name ? `${user.vorname} ${user.name}` : "") + strasse = localStorage.getItem("kundendaten.strasse") || user.adresse || ""; + plz = localStorage.getItem("kundendaten.plz") || user.plz || ""; + ort = localStorage.getItem("kundendaten.ort") || user.ort || ""; + zusatzzeile = localStorage.getItem("kundendaten.zusatzzeile") || "" + telefon = localStorage.getItem("kundendaten.telefon") || user.telefon || ""; + } let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false") @@ -71,6 +77,7 @@ } $: { + // Wir speichern jede Änderung an den Kundendaten im localStorage ab. localStorage.setItem("kundendaten.email", email) localStorage.setItem("kundendaten.vorname", vorname) localStorage.setItem("kundendaten.name", name) @@ -187,7 +194,7 @@ versand_plz: versand_plz, versand_ort: versand_ort, telefon: telefon, - nachweis_uid: result.uid_nachweis, + nachweis_id: result.nachweis_id, }, { headers: { @@ -199,7 +206,7 @@ // Alle alten Ausweisdateien im localStorage löschen. localStorage.clear(); - window.location.href = `/einpreisung/success?e=${uid}&a=${result.uid_nachweis}`; + window.location.href = `/einpreisung/success?e=${uid}&a=${result.nachweis_id}`; } catch (e) { addNotification({ dismissable: true, diff --git a/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte b/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte index 9091f232..97dd73bc 100644 --- a/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte +++ b/src/modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte @@ -58,7 +58,8 @@ export let id: string | null; // Falls die Daten im localStorage neuer sind als der Ausweis den wir von der Datenbank bekommen haben, benutzen wir lieber diese. - if (!id && (!ausweis.updated_at || moment(localStorage.getItem("verbrauchsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) { + // Wir schauen auch ob der Benutzer nicht vielleicht ein Admin ist, dann sollten wir nichts aus dem localStorage holen. + if ((user && user.rolle !== Enums.BenutzerRolle.ADMIN) && !id && (!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) diff --git a/src/modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte b/src/modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte index 856c8c71..852fe40a 100644 --- a/src/modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte +++ b/src/modules/angebot-anfragen/BedarfsausweisGewerbeModule.svelte @@ -5,11 +5,10 @@ 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 { BedarfsausweisGewerbe, 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"; @@ -18,57 +17,45 @@ import SanierungszustandFensterTueren from "#components/Ausweis/SanierungszustandFensterTueren.svelte"; import SanierungszustandWaermedammung from "#components/Ausweis/SanierungszustandWaermedammung.svelte"; import AnlagenTechnik from "#components/Ausweis/AnlagenTechnik.svelte"; + import moment from "moment"; - export let nachweis: GEGNachweisWohnenClient; + export let nachweis: BedarfsausweisGewerbe; 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[] = []; + export let ausweistyp: Enums.AusweisTyp; + export let id: string | null; - if (Object.keys(nachweis).length === 0) { - const localStorageAusweis = localStorage.getItem( - "geg-nachweis-wohnen.ausweis" - ); + // Falls die Daten im localStorage neuer sind als der Ausweis den wir von der Datenbank bekommen haben, benutzen wir lieber diese. + // Wir schauen auch ob der Benutzer nicht vielleicht ein Admin ist, dann sollten wir nichts aus dem localStorage holen. + if ((user && user.rolle !== Enums.BenutzerRolle.ADMIN) && !id && (!nachweis.updated_at || moment(localStorage.getItem("geg-nachweis-wohnen.updated_at") || new Date()).isAfter(nachweis.updated_at))) { + const localStorageAusweis = localStorage.getItem("geg-nachweis-wohnen.ausweis"); if (localStorageAusweis) { - nachweis = JSON.parse(localStorageAusweis); + nachweis = JSON.parse(localStorageAusweis) + nachweis.nachweistyp = ausweistyp; } - } - 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); + bilder = JSON.parse(localStorageUnterlagen) } } @@ -112,6 +99,7 @@ {ausweisart} {anliegen} steps={["Gebäudedaten", "Kundendaten", "Anfragebestätigung"]} + {ausweistyp} /> @@ -123,7 +111,7 @@ diff --git a/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte b/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte index 882e5e24..1bb41b8f 100644 --- a/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte +++ b/src/modules/angebot-anfragen/GEGNachweisWohnenModule.svelte @@ -9,64 +9,50 @@ BildClient, } from "#components/Ausweis/types.js"; import Bereich from "#components/labels/Bereich.svelte"; - import { Enums } from "#lib/client/prisma.js"; + import { Enums, Unterlage } 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"; import GEGAusweisart from "#components/GEGNachweis/GEGAusweisart.svelte"; + import moment from "moment"; 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[] = []; + export let plaene: Unterlage[] = []; + export let unterlagen: Unterlage[] = []; + export let nachweistyp: Enums.AusweisTyp = Enums.AusweisTyp.Standard; + export let id: string | null; - if (Object.keys(nachweis).length === 0) { - const localStorageAusweis = localStorage.getItem( - "geg-nachweis-wohnen.ausweis" - ); - if (localStorageAusweis) { - nachweis = JSON.parse(localStorageAusweis); + if ((user && user.rolle !== Enums.BenutzerRolle.ADMIN) && !id && (!nachweis.updated_at || moment(localStorage.getItem("geg-nachweis-wohnen.updated_at") || new Date()).isAfter(nachweis.updated_at))) { + const localStorageNachweis = localStorage.getItem("geg-nachweis-wohnen.ausweis"); + if (localStorageNachweis) { + nachweis = JSON.parse(localStorageNachweis) + nachweis.nachweistyp = nachweistyp; } - } - 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) } } @@ -110,6 +96,7 @@ {ausweisart} {anliegen} steps={["Gebäudedaten", "Kundendaten", "Anfragebestätigung"]} + ausweistyp={nachweistyp} /> @@ -121,7 +108,7 @@ diff --git a/src/pages/angebot-anfragen/bedarfsausweis-gewerbe-anfragen/index.astro b/src/pages/angebot-anfragen/bedarfsausweis-gewerbe-anfragen/index.astro index 68d56348..edd70ab5 100644 --- a/src/pages/angebot-anfragen/bedarfsausweis-gewerbe-anfragen/index.astro +++ b/src/pages/angebot-anfragen/bedarfsausweis-gewerbe-anfragen/index.astro @@ -1,90 +1,88 @@ --- 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 VerbrauchsausweisWohnenModule from "#modules/VerbrauchsausweisWohnen/VerbrauchsausweisWohnenModule.svelte"; +import { AufnahmeClient, BildClient, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types"; +import { Aufnahme, BedarfsausweisGewerbe, Bild, Enums, Objekt, Unterlage, VerbrauchsausweisWohnen } from "#lib/server/prisma"; +import { getAufnahme, getBedarfsausweisGewerbe, getBilder, getObjekt, getUnterlagen, getVerbrauchsausweisWohnen } from "#lib/server/db"; +import { getCurrentUser } from "#lib/server/user"; 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 id = Astro.url.searchParams.get("id"); +const aufnahme_id = Astro.url.searchParams.get("aufnahme") +let ausweistyp = Astro.url.searchParams.get("ausweistyp") as Enums.AusweisTyp || Enums.AusweisTyp.Standard; -const valid = validateAccessTokenServer(Astro); +let nachweis: BedarfsausweisGewerbe = {} as BedarfsausweisGewerbe; +let aufnahme: Aufnahme = {} as Aufnahme; +let objekt: Objekt = {} as Objekt; +let bilder: Bild[] = [] +let unterlagen: Unterlage[] = [] -const caller = createCaller(Astro); +const user = await getCurrentUser(Astro) -if (uid) { - if (!valid) { +if (id) { + if (!user) { 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 - } - }); + nachweis = await getBedarfsausweisGewerbe(id) as BedarfsausweisGewerbe - 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) { + if (!nachweis || nachweis.benutzer_id !== user.id) { + // Der Ausweis scheint nicht zu existieren. + // Wir leiten auf die generische Ausweisseite ohne ID weiter. return Astro.redirect( - "/angebot-anfragen/bedarfsausweis-gewerbe-anfragen" + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + aufnahme = await getAufnahme(nachweis.aufnahme_id) as Aufnahme + + if (!aufnahme) { + // Die Aufnahme existiert nicht, das sollte eigentlich nicht passieren aber so können wir nicht fortfahren. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + objekt = await getObjekt(aufnahme.objekt_id) as Objekt + + if (!objekt) { + // Das Objekt existiert nicht, das sollte eigentlich nicht passieren aber so können wir nicht fortfahren. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + bilder = await getBilder(aufnahme.id); + unterlagen = await getUnterlagen(aufnahme.id); +} else if (aufnahme_id) { + if (!user) { + return Astro.redirect( + `/auth/login?redirect=${Astro.url.toString()}` + ); + } + + aufnahme = await getAufnahme(nachweis.aufnahme_id) as Aufnahme + + if (!aufnahme) { + // Die Aufnahme existiert wohl nicht. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + objekt = await getObjekt(aufnahme.objekt_id) as Objekt + + if (!objekt) { + // Das Objekt existiert nicht. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" ); } } --- - + diff --git a/src/pages/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro b/src/pages/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro index e8718bea..8fc53246 100644 --- a/src/pages/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro +++ b/src/pages/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro @@ -1,90 +1,87 @@ --- 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 GEGNachweisWohnenModule from "#modules/angebot-anfragen/GEGNachweisWohnenModule.svelte"; +import { getGEGNachweisWohnen, getAufnahme, getObjekt, getBilder } from "#lib/server/db"; +import { Enums, Aufnahme, Objekt, Bild, GEGNachweisWohnen, Unterlage } from "#lib/server/prisma"; +import { getCurrentUser } from "#lib/server/user"; +import { getUnterlagen } from "#lib/server/db"; -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 id = Astro.url.searchParams.get("id"); +const aufnahme_id = Astro.url.searchParams.get("aufnahme") +let ausweistyp = Astro.url.searchParams.get("ausweistyp") as Enums.AusweisTyp || Enums.AusweisTyp.Standard; -const valid = validateAccessTokenServer(Astro); +let nachweis: GEGNachweisWohnen = {} as GEGNachweisWohnen; +let aufnahme: Aufnahme = {} as Aufnahme; +let objekt: Objekt = {} as Objekt; +let bilder: Bild[] = [] +let unterlagen: Unterlage[] = [] -const caller = createCaller(Astro); +const user = await getCurrentUser(Astro) -if (uid) { - if (!valid) { +if (id) { + if (!user) { return Astro.redirect( `/auth/login?redirect=${Astro.url.toString()}` ); } - try { - nachweis = await caller["geg-nachweis-wohnen"]._uid.GET.fetch(null, { - headers: { - authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - }, - params: { - uid - } - }); + nachweis = await getGEGNachweisWohnen(id) as GEGNachweisWohnen - 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/geg-nachweis-wohnen-anfragen" - ); - } - } catch(e) { + if (!nachweis || nachweis.benutzer_id !== user.id) { + // Der Ausweis scheint nicht zu existieren. + // Wir leiten auf die generische Ausweisseite ohne ID weiter. return Astro.redirect( - "/angebot-anfragen/geg-nachweis-wohnen-anfragen" + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + aufnahme = await getAufnahme(nachweis.aufnahme_id) as Aufnahme + + if (!aufnahme) { + // Die Aufnahme existiert nicht, das sollte eigentlich nicht passieren aber so können wir nicht fortfahren. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + objekt = await getObjekt(aufnahme.objekt_id) as Objekt + + if (!objekt) { + // Das Objekt existiert nicht, das sollte eigentlich nicht passieren aber so können wir nicht fortfahren. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + bilder = await getBilder(aufnahme.id); + unterlagen = await getUnterlagen(aufnahme.id); +} else if (aufnahme_id) { + if (!user) { + return Astro.redirect( + `/auth/login?redirect=${Astro.url.toString()}` + ); + } + + aufnahme = await getAufnahme(nachweis.aufnahme_id) as Aufnahme + + if (!aufnahme) { + // Die Aufnahme existiert wohl nicht. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" + ); + } + + objekt = await getObjekt(aufnahme.objekt_id) as Objekt + + if (!objekt) { + // Das Objekt existiert nicht. + return Astro.redirect( + "/energieausweis-erstellen/verbrauchsausweis-wohngebaeude" ); } } --- - + diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts index e4c1278e..68f005a5 100644 --- a/src/pages/api/admin/ausstellen.ts +++ b/src/pages/api/admin/ausstellen.ts @@ -1,8 +1,6 @@ -import { getAusweisartFromUUID } from "#components/Ausweis/types.js"; +import { getAusweisartFromId } from "#components/Ausweis/types.js"; import { adminMiddleware } from "#lib/middleware/authorization.js"; -import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js"; -import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js"; -import { Enums, prisma } from "#lib/server/prisma"; +import { Enums, prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { z } from "astro:content"; import { fileURLToPath } from "url"; @@ -14,17 +12,17 @@ import { PERSISTENT_DIR } from "#lib/server/constants.js"; export const GET = defineApiRoute({ input: z.object({ - uid_ausweis: z.string(), + id_ausweis: z.string(), }), output: z.void(), middleware: adminMiddleware, - async fetch({ uid_ausweis }, context, user) { - const ausweisart = getAusweisartFromUUID(uid); + async fetch({ id_ausweis }, context, user) { + const ausweisart = getAusweisartFromId(id_ausweis); if (ausweisart === "VerbrauchsausweisWohnen") { const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ where: { - uid: uid_ausweis, + id: id_ausweis }, include: { aufnahme: { @@ -50,7 +48,7 @@ export const GET = defineApiRoute({ const rechnung = await prisma.rechnung.findFirst({ where: { verbrauchsausweis_wohnen: { - uid: uid_ausweis + id: id_ausweis }, }, orderBy: { @@ -100,7 +98,7 @@ export const GET = defineApiRoute({ if (pdfAusweis) { const pdfAusweisPath = fileURLToPath( new URL( - `${PERSISTENT_DIR}/generated/Ausweis-${ausweis.uid}.pdf`, + `${PERSISTENT_DIR}/generated/Ausweis-${ausweis.id}.pdf`, import.meta.url ) ); @@ -110,7 +108,7 @@ export const GET = defineApiRoute({ if (pdfDatenblatt) { const pdfDatenblattPath = fileURLToPath( new URL( - `${PERSISTENT_DIR}/generated/Datenblatt-${ausweis.uid}.pdf`, + `${PERSISTENT_DIR}/generated/Datenblatt-${ausweis.id}.pdf`, import.meta.url ) ); @@ -160,7 +158,7 @@ fax 040 · 209339859 IBAN:\t DE81 2004 0000 0348 6008 00 BIC:\t COBADEFFXXX Betrag:\t ${rechnung.betrag}€ -Verwendungszweck:\t ${rechnung.uid} +Verwendungszweck:\t ${rechnung.id}
@@ -170,11 +168,11 @@ Alternativ können Sie auch direkt online zahlen indem Sie auf den entsprechende
- - - - - + + + + +
Per Einzuglastschrift zahlen : jetzt per ELV bezahlen
Per Sofortüberweisung zahlen : jetzt per Sofortüberweisung bezahlen
Über PayPal zahlen : jetzt per Paypal bezahlen
Per Giropay zahlen : jetzt per Giropay bezahlen
Per Visa oder MasterCard zahlen : jetzt per Kreditkarte bezahlen
Per Einzuglastschrift zahlen : jetzt per ELV bezahlen
Per Sofortüberweisung zahlen : jetzt per Sofortüberweisung bezahlen
Über PayPal zahlen : jetzt per Paypal bezahlen
Per Giropay zahlen : jetzt per Giropay bezahlen
Per Visa oder MasterCard zahlen : jetzt per Kreditkarte bezahlen

@@ -204,7 +202,7 @@ fax 040 · 209339859 await transport.sendMail({ from: `"IBCornelsen" `, to: user.email, - subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.uid})`, + subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`, text, }); diff --git a/src/pages/api/admin/registriernummer.ts b/src/pages/api/admin/registriernummer.ts index 8df9913f..02c89216 100644 --- a/src/pages/api/admin/registriernummer.ts +++ b/src/pages/api/admin/registriernummer.ts @@ -1,5 +1,5 @@ import { - getAusweisartFromUUID, + getAusweisartFromId, UUidWithPrefix, } from "#components/Ausweis/types.js"; import { @@ -26,7 +26,7 @@ export const GET = defineApiRoute({ headers: authorizationHeaders, middleware: adminMiddleware, async fetch({ uid }, context, user) { - const ausweisart = getAusweisartFromUUID(uid); + const ausweisart = getAusweisartFromId(uid); const adapter = getPrismaAusweisAdapter( uid ) as typeof prisma.verbrauchsausweisWohnen; diff --git a/src/pages/api/bedarfsausweis-gewerbe/[uid].ts b/src/pages/api/bedarfsausweis-gewerbe/[id].ts similarity index 100% rename from src/pages/api/bedarfsausweis-gewerbe/[uid].ts rename to src/pages/api/bedarfsausweis-gewerbe/[id].ts diff --git a/src/pages/api/geg-nachweis-gewerbe/[uid].ts b/src/pages/api/geg-nachweis-gewerbe/[id].ts similarity index 100% rename from src/pages/api/geg-nachweis-gewerbe/[uid].ts rename to src/pages/api/geg-nachweis-gewerbe/[id].ts diff --git a/src/pages/api/geg-nachweis-gewerbe/index.ts b/src/pages/api/geg-nachweis-gewerbe/index.ts index 612350a0..f0e441d1 100644 --- a/src/pages/api/geg-nachweis-gewerbe/index.ts +++ b/src/pages/api/geg-nachweis-gewerbe/index.ts @@ -1,4 +1,6 @@ import { UUidWithPrefix } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; import { prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; @@ -16,24 +18,25 @@ export const PUT = defineApiRoute({ nachweis: GEGNachweisGewerbeSchema.omit({ id: true, benutzer_id: true, - uid: true, aufnahme_id: true, + created_at: true, + updated_at: true, geg_einpreisung_id: true, rechnung_id: true }), - uid_aufnahme: UUidWithPrefix + aufnahme_id: UUidWithPrefix }), output: z.object({ - uid: UUidWithPrefix, - objekt_uid: UUidWithPrefix, - aufnahme_uid: UUidWithPrefix, + id: UUidWithPrefix, + objekt_id: UUidWithPrefix, + aufnahme_id: UUidWithPrefix, }), headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { const aufnahme = await prisma.aufnahme.findUnique({ where: { - uid: input.uid_aufnahme + id: input.aufnahme_id } }) @@ -44,8 +47,11 @@ export const PUT = defineApiRoute({ }) } + const id = generatePrefixedId(6, VALID_UUID_PREFIXES.GEGNachweisGewerbe) + const nachweis = await prisma.gEGNachweisGewerbe.create({ data: { + id, ...input.nachweis, benutzer: { connect: { @@ -59,13 +65,13 @@ export const PUT = defineApiRoute({ } }, select: { - uid: true, + id: true, aufnahme: { select: { - uid: true, + id: true, objekt: { select: { - uid: true, + id: true, }, }, }, @@ -74,9 +80,9 @@ export const PUT = defineApiRoute({ }); return { - uid: nachweis.uid, - objekt_uid: nachweis.aufnahme.objekt.uid, - aufnahme_uid: nachweis.aufnahme.uid, + id: nachweis.id, + objekt_id: nachweis.aufnahme.objekt.id, + aufnahme_id: nachweis.aufnahme.id, }; }, }); @@ -101,11 +107,11 @@ export const GET = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; const nachweis = await prisma.gEGNachweisGewerbe.findUnique({ where: { - uid, + id, }, include: { benutzer: true, @@ -115,7 +121,7 @@ export const GET = defineApiRoute({ include: { benutzer: { select: { - uid: true, + id: true, }, }, }, diff --git a/src/pages/api/geg-nachweis-wohnen/[uid].ts b/src/pages/api/geg-nachweis-wohnen/[id].ts similarity index 81% rename from src/pages/api/geg-nachweis-wohnen/[uid].ts rename to src/pages/api/geg-nachweis-wohnen/[id].ts index 4a6725a8..05b95b6b 100644 --- a/src/pages/api/geg-nachweis-wohnen/[uid].ts +++ b/src/pages/api/geg-nachweis-wohnen/[id].ts @@ -1,13 +1,15 @@ -import { GEGNachweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js"; +import { UUidWithPrefix } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { exclude } from "#lib/exclude.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 PATCH = defineApiRoute({ input: GEGNachweisWohnenSchema.omit({ - uid: true, id: true, benutzer_id: true, geg_einpreisung_id: true, @@ -21,7 +23,7 @@ export const PATCH = defineApiRoute({ async fetch(input, ctx, user) { const objekt = await prisma.gEGNachweisWohnen.findUnique({ where: { - uid: ctx.params.uid, + id: ctx.params.id, benutzer: { id: user.id } @@ -37,7 +39,7 @@ export const PATCH = defineApiRoute({ await prisma.gEGNachweisWohnen.update({ where: { - uid: ctx.params.uid + id: ctx.params.id }, data: input }) @@ -51,9 +53,9 @@ export const DELETE = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { - const { uid } = ctx.params; + const { id } = ctx.params; - if (!UUidWithPrefix.safeParse(uid).success) { + if (!UUidWithPrefix.safeParse(id).success) { throw new APIError({ code: "BAD_REQUEST", message: "UID konnte nicht verifiziert werden." @@ -64,7 +66,7 @@ export const DELETE = defineApiRoute({ // Dieser MUSS mit dem Nutzer verknüpft sein. const nachweis = await prisma.gEGNachweisWohnen.findUnique({ where: { - uid, + id, } }); @@ -111,10 +113,13 @@ export const DELETE = defineApiRoute({ } }) + const event_id = + // Wir erstellen ein Event, dass der Nachweis storniert wurde // Dann können wir das in der Historie anzeigen await prisma.event.create({ data: { + id: generatePrefixedId(6, VALID_UUID_PREFIXES.Event), title: "Nachweis storniert", description: ((user.rolle === "ADMIN") && (nachweis.benutzer_id !== user.id)) ? "Nachweis wurde von einem Administrator storniert." : "Nachweis wurde vom Besitzer storniert.", benutzer: { @@ -150,9 +155,9 @@ export const GET = defineApiRoute({ } }, output: GEGNachweisWohnenSchema.merge(z.object({ - uid_aufnahme: UUidWithPrefix, - uid_objekt: UUidWithPrefix, - uid_benutzer: UUidWithPrefix.optional() + aufnahme_id: UUidWithPrefix, + objekt_id: UUidWithPrefix, + benutzer_id: UUidWithPrefix.optional() })).omit({ id: true, aufnahme_id: true, @@ -160,32 +165,32 @@ export const GET = defineApiRoute({ }), middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; - if (!uid) { + if (!id) { throw new APIError({ code: "BAD_REQUEST", message: "Missing uid in request params" }) } - const Nachweis = await prisma.gEGNachweisWohnen.findUnique({ + const nachweis = await prisma.gEGNachweisWohnen.findUnique({ where: { - uid, + id, benutzer_id: user.id }, include: { benutzer: { select: { - uid: true + id: true } }, aufnahme: { select: { - uid: true, + id: true, objekt: { select: { - uid: true + id: true } } } @@ -193,7 +198,7 @@ export const GET = defineApiRoute({ } }); - if (!Nachweis) { + if (!nachweis) { // Falls wir den Nachweis nicht finden können, werfen wir einen Fehler throw new APIError({ code: "NOT_FOUND", @@ -202,10 +207,10 @@ export const GET = defineApiRoute({ } 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"]) + aufnahme_id: nachweis.aufnahme.id, + objekt_id: nachweis.aufnahme.objekt.id, + benutzer_id: nachweis.benutzer?.id, + ...exclude(nachweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"]) } }, }); diff --git a/src/pages/api/geg-nachweis-wohnen/index.ts b/src/pages/api/geg-nachweis-wohnen/index.ts index c8a8b968..f164233a 100644 --- a/src/pages/api/geg-nachweis-wohnen/index.ts +++ b/src/pages/api/geg-nachweis-wohnen/index.ts @@ -1,4 +1,6 @@ import { UUidWithPrefix } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js"; import { prisma } from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; @@ -16,24 +18,25 @@ export const PUT = defineApiRoute({ nachweis: GEGNachweisWohnenSchema.omit({ id: true, benutzer_id: true, - uid: true, aufnahme_id: true, + updated_at: true, + created_at: true, geg_einpreisung_id: true, rechnung_id: true }), - uid_aufnahme: UUidWithPrefix + aufnahme_id: UUidWithPrefix }), output: z.object({ - uid: UUidWithPrefix, - objekt_uid: UUidWithPrefix, - aufnahme_uid: UUidWithPrefix, + id: UUidWithPrefix, + objekt_id: UUidWithPrefix, + aufnahme_id: UUidWithPrefix, }), headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, ctx, user) { const aufnahme = await prisma.aufnahme.findUnique({ where: { - uid: input.uid_aufnahme + id: input.aufnahme_id } }) @@ -44,8 +47,11 @@ export const PUT = defineApiRoute({ }) } + const id = generatePrefixedId(6, VALID_UUID_PREFIXES.GEGNachweisWohnen) + const nachweis = await prisma.gEGNachweisWohnen.create({ data: { + id, ...input.nachweis, benutzer: { connect: { @@ -59,13 +65,13 @@ export const PUT = defineApiRoute({ } }, select: { - uid: true, + id: true, aufnahme: { select: { - uid: true, + id: true, objekt: { select: { - uid: true, + id: true, }, }, }, @@ -74,9 +80,9 @@ export const PUT = defineApiRoute({ }); return { - uid: nachweis.uid, - objekt_uid: nachweis.aufnahme.objekt.uid, - aufnahme_uid: nachweis.aufnahme.uid, + id: nachweis.id, + objekt_id: nachweis.aufnahme.objekt.id, + aufnahme_id: nachweis.aufnahme.id, }; }, }); @@ -101,11 +107,11 @@ export const GET = defineApiRoute({ headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, context, user) { - const { uid } = context.params; + const { id } = context.params; const nachweis = await prisma.gEGNachweisGewerbe.findUnique({ where: { - uid, + id, }, include: { benutzer: true, @@ -115,7 +121,7 @@ export const GET = defineApiRoute({ include: { benutzer: { select: { - uid: true, + id: true, }, }, }, diff --git a/src/pages/api/rechnung/[id].ts b/src/pages/api/rechnung/[id].ts index 88822497..c10e932a 100644 --- a/src/pages/api/rechnung/[id].ts +++ b/src/pages/api/rechnung/[id].ts @@ -1,4 +1,4 @@ -import { UUidWithPrefix, getAusweisartFromUUID } from "#components/Ausweis/types.js" +import { UUidWithPrefix, getAusweisartFromId } from "#components/Ausweis/types.js" import { Enums } from "#lib/client/prisma.js" import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js" import { mollieClient } from "#lib/mollie.js" @@ -88,7 +88,7 @@ export const PATCH = defineApiRoute({ }) } - const ausweisart = getAusweisartFromUUID(ausweis.id) + const ausweisart = getAusweisartFromId(ausweis.id) if (!ausweisart) { throw new APIError({ diff --git a/src/pages/api/rechnung/anfordern.ts b/src/pages/api/rechnung/anfordern.ts index 4ada44ff..47393a7d 100644 --- a/src/pages/api/rechnung/anfordern.ts +++ b/src/pages/api/rechnung/anfordern.ts @@ -1,8 +1,10 @@ -import { getAusweisartFromUUID, UUidWithPrefix } from "#components/Ausweis/types.js"; +import { getAusweisartFromId, UUidWithPrefix } from "#components/Ausweis/types.js"; +import { VALID_UUID_PREFIXES } from "#lib/constants.js"; +import { generatePrefixedId } from "#lib/db.js"; 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, GEGNachweisGewerbe, GEGNachweisWohnen, prisma } from "#lib/server/prisma.js"; +import { BedarfsausweisGewerbe, 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"; @@ -11,34 +13,33 @@ export const PUT = defineApiRoute({ input: GEGEinpreisungSchema.omit({ benutzer_id: true, id: true, - uid: true, status: true, }).merge(z.object({ - nachweis_uid: UUidWithPrefix + nachweis_id: UUidWithPrefix })), headers: authorizationHeaders, middleware: authorizationMiddleware, async fetch(input, context, user) { - const ausweisart = getAusweisartFromUUID(input.nachweis_uid); + const ausweisart = getAusweisartFromId(input.nachweis_id); let einpreisung; - let nachweis: GEGNachweisWohnen | GEGNachweisGewerbe; + let nachweis: GEGNachweisWohnen | GEGNachweisGewerbe | BedarfsausweisGewerbe; if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) { nachweis = await prisma.gEGNachweisWohnen.findUnique({ where: { - uid: input.nachweis_uid + id: input.nachweis_id } }) } else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) { nachweis = await prisma.gEGNachweisGewerbe.findUnique({ where: { - uid: input.nachweis_uid + id: input.nachweis_id } }) } else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { nachweis = await prisma.bedarfsausweisGewerbe.findUnique({ where: { - uid: input.nachweis_uid + id: input.nachweis_id } }) } else { @@ -56,10 +57,13 @@ export const PUT = defineApiRoute({ }) } + const id = generatePrefixedId(6, VALID_UUID_PREFIXES.GEGEinpreisung) + if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) { einpreisung = await prisma.gEGEinpreisung.create({ data: { - ...omit(input, ["nachweis_uid"]), + id, + ...omit(input, ["nachweis_id"]), status: Enums.Einpreisungsstatus.open, benutzer: { connect: { @@ -68,7 +72,7 @@ export const PUT = defineApiRoute({ }, geg_nachweis_wohnen: { connect: { - uid: input.nachweis_uid + id: input.nachweis_id } } } @@ -76,7 +80,8 @@ export const PUT = defineApiRoute({ } else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) { einpreisung = await prisma.gEGEinpreisung.create({ data: { - ...omit(input, ["nachweis_uid"]), + id, + ...omit(input, ["nachweis_id"]), status: Enums.Einpreisungsstatus.open, benutzer: { connect: { @@ -85,7 +90,7 @@ export const PUT = defineApiRoute({ }, geg_nachweis_gewerbe: { connect: { - uid: input.nachweis_uid + id: input.nachweis_id } } } @@ -93,7 +98,8 @@ export const PUT = defineApiRoute({ } else if (ausweisart === Enums.Ausweisart.BedarfsausweisGewerbe) { einpreisung = await prisma.gEGEinpreisung.create({ data: { - ...omit(input, ["nachweis_uid"]), + id, + ...omit(input, ["nachweis_id"]), status: Enums.Einpreisungsstatus.open, benutzer: { connect: { @@ -102,7 +108,7 @@ export const PUT = defineApiRoute({ }, bedarfsausweis_gewerbe: { connect: { - uid: input.nachweis_uid + id: input.nachweis_id } } } @@ -112,7 +118,7 @@ export const PUT = defineApiRoute({ await sendGEGAnforderungsMail(nachweis, user) return { - uid: einpreisung.uid + id } }, }) \ No newline at end of file diff --git a/src/pages/dashboard/index.astro b/src/pages/dashboard/index.astro index 96b86f45..b627d118 100644 --- a/src/pages/dashboard/index.astro +++ b/src/pages/dashboard/index.astro @@ -1,4 +1,5 @@ --- return Astro.redirect("/dashboard/objekte/1", 301); +--- ---- \ No newline at end of file + \ No newline at end of file diff --git a/src/pages/einpreisung/success.astro b/src/pages/einpreisung/success.astro index 89544865..4b7add01 100644 --- a/src/pages/einpreisung/success.astro +++ b/src/pages/einpreisung/success.astro @@ -3,19 +3,19 @@ import Layout from "#layouts/Layout.astro"; import { getCurrentUser } from "#lib/server/user"; import { prisma } from "#lib/server/prisma"; -const uidEinpreisung = Astro.url.searchParams.get("e"); -const uidAusweis = Astro.url.searchParams.get("a"); +const einpreisung_id = Astro.url.searchParams.get("e"); +const ausweis_id = Astro.url.searchParams.get("a"); const user = await getCurrentUser(Astro) -if (!uidEinpreisung || !uidAusweis || !user) { +if (!einpreisung_id || !ausweis_id || !user) { return Astro.redirect("/") } const einpreisung = await prisma.gEGEinpreisung.findUnique({ where: { - uid: uidEinpreisung, + id: einpreisung_id, benutzer: { - uid: user.uid + id: user.id } } }) diff --git a/src/pages/energieausweis-erstellen/bezahlung.astro b/src/pages/energieausweis-erstellen/bezahlung.astro index b1846239..ef1a437c 100644 --- a/src/pages/energieausweis-erstellen/bezahlung.astro +++ b/src/pages/energieausweis-erstellen/bezahlung.astro @@ -1,5 +1,5 @@ --- -import { getAusweisartFromUUID } from "#components/Ausweis/types"; +import { getAusweisartFromId } from "#components/Ausweis/types"; import AusweisLayoutPruefung from "#layouts/AusweisLayoutPruefung.astro"; import { getPrismaAusweisAdapter } from "#lib/server/ausweis"; import { Enums } from "#lib/server/prisma"; @@ -16,7 +16,7 @@ if (!uid) { const user = await getCurrentUser(Astro) const adapter = getPrismaAusweisAdapter(uid) -const ausweisart = getAusweisartFromUUID(uid) +const ausweisart = getAusweisartFromId(uid) if (!user || !adapter || !ausweisart) { return Astro.redirect("/404") diff --git a/src/pages/pdf/ansichtsausweis.ts b/src/pages/pdf/ansichtsausweis.ts index b59e91d3..7ef8c4eb 100644 --- a/src/pages/pdf/ansichtsausweis.ts +++ b/src/pages/pdf/ansichtsausweis.ts @@ -1,4 +1,4 @@ -import { AufnahmeClient, BenutzerClient, getAusweisartFromUUID, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; +import { AufnahmeClient, BenutzerClient, getAusweisartFromId, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js"; import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js"; @@ -6,17 +6,17 @@ import { Enums } from "#lib/client/prisma.js"; import { APIRoute } from "astro"; import { createCaller } from "src/astro-typesafe-api-caller.js"; import { getS3File } from "#lib/s3.js"; +import { getVerbrauchsausweisWohnen, getVerbrauchsausweisGewerbe, getAufnahme, getObjekt, getBilder } from "#lib/server/db.js"; +import { getCurrentUser } from "#lib/server/user.js"; export const GET: APIRoute = async (Astro) => { - const ausweis_id = Astro.url.searchParams.get("uid"); + const ausweis_id = Astro.url.searchParams.get("id"); if (!ausweis_id) { return new Response(null, { status: 404 }); } - const ausweisart = getAusweisartFromUUID(ausweis_id) - - const caller = createCaller(Astro); + const ausweisart = getAusweisartFromId(ausweis_id) let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | null = null; let aufnahme: AufnahmeClient = {} as AufnahmeClient; @@ -25,23 +25,9 @@ export const GET: APIRoute = async (Astro) => { let bilder: UploadedGebaeudeBild[] = [] if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { - ausweis = await caller["verbrauchsausweis-wohnen"]._id.GET.fetch(undefined, { - params: { - id: ausweis_id - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + ausweis = await getVerbrauchsausweisWohnen(ausweis_id) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { - ausweis = await caller["verbrauchsausweis-gewerbe"]._id.GET.fetch(undefined, { - params: { - id: ausweis_id - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + ausweis = await getVerbrauchsausweisGewerbe(ausweis_id) } @@ -49,29 +35,13 @@ export const GET: APIRoute = async (Astro) => { return new Response(null, { status: 404 }); } - aufnahme = await caller.aufnahme._id.GET.fetch(undefined, { - params: { - id: ausweis.aufnahme_id - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + aufnahme = await getAufnahme(ausweis.aufnahme_id) - objekt = await caller.objekt._id.GET.fetch(undefined, { - params: { - id: ausweis.objekt_id - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + objekt = await getObjekt(aufnahme.objekt_id) - user = await caller.user.self.GET.fetch(undefined, { - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + bilder = await getBilder(ausweis.aufnahme_id) + + user = await getCurrentUser(Astro) let pdf: Uint8Array | null = null; if (ausweis.alte_ausweis_id) { diff --git a/src/pages/pdf/datenblatt.ts b/src/pages/pdf/datenblatt.ts index 4ebdef95..f581e9f5 100644 --- a/src/pages/pdf/datenblatt.ts +++ b/src/pages/pdf/datenblatt.ts @@ -1,49 +1,33 @@ -import { AufnahmeClient, BenutzerClient, getAusweisartFromUUID, ObjektClient, UploadedGebaeudeBild, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; +import { BenutzerClient, getAusweisartFromId, VerbrauchsausweisGewerbeClient, VerbrauchsausweisWohnenClient } from "#components/Ausweis/types.js"; import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { pdfDatenblattVerbrauchsausweisGewerbe } from "#lib/pdf/pdfDatenblattVerbrauchsausweisGewerbe.js"; import { pdfDatenblattVerbrauchsausweisWohnen } from "#lib/pdf/pdfDatenblattVerbrauchsausweisWohnen.js"; -import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js"; -import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js"; -import { Enums } from "#lib/client/prisma.js"; +import { Aufnahme, Benutzer, Bild, Enums, Objekt, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js"; import { APIRoute } from "astro"; import { createCaller } from "src/astro-typesafe-api-caller.js"; import { getS3File } from "#lib/s3.js"; +import { getAufnahme, getBilder, getObjekt, getVerbrauchsausweisGewerbe, getVerbrauchsausweisWohnen } from "#lib/server/db.js"; +import { getCurrentUser } from "#lib/server/user.js"; export const GET: APIRoute = async (Astro) => { - const uidAusweis = Astro.url.searchParams.get("uid"); + const ausweis_id = Astro.url.searchParams.get("id"); - if (!uidAusweis) { + if (!ausweis_id) { return new Response(null, { status: 404 }); } - const ausweisart = getAusweisartFromUUID(uidAusweis) + const ausweisart = getAusweisartFromId(ausweis_id) - const caller = createCaller(Astro); - - let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | null = null; - let aufnahme: AufnahmeClient = {} as AufnahmeClient; - let objekt: ObjektClient = {} as ObjektClient; - let user: BenutzerClient = {} as BenutzerClient; - let bilder: UploadedGebaeudeBild[] = [] + let ausweis: VerbrauchsausweisWohnen | VerbrauchsausweisGewerbe | null = null; + let aufnahme: Aufnahme = {} as Aufnahme; + let objekt: Objekt = {} as Objekt; + let user: Benutzer = {} as Benutzer; + let bilder: Bild[] = [] if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { - ausweis = await caller["verbrauchsausweis-wohnen"]._id.GET.fetch(undefined, { - params: { - id: uidAusweis - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + ausweis = await getVerbrauchsausweisWohnen(ausweis_id) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { - ausweis = await caller["verbrauchsausweis-gewerbe"]._id.GET.fetch(undefined, { - params: { - id: uidAusweis - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + ausweis = await getVerbrauchsausweisGewerbe(ausweis_id) } @@ -51,29 +35,13 @@ export const GET: APIRoute = async (Astro) => { return new Response(null, { status: 404 }); } - aufnahme = await caller.aufnahme._id.GET.fetch(undefined, { - params: { - id: ausweis.aufnahme_id - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + aufnahme = await getAufnahme(ausweis.aufnahme_id) - objekt = await caller.objekt._id.GET.fetch(undefined, { - params: { - id: ausweis.objekt_id - }, - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + objekt = await getObjekt(aufnahme.objekt_id) - user = await caller.user.self.GET.fetch(undefined, { - headers: { - Authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}` - } - }); + bilder = await getBilder(ausweis.aufnahme_id) + + user = await getCurrentUser(Astro) let pdf: Uint8Array | null = null; if (ausweis.alte_ausweis_id) { diff --git a/user-flow-verbrauchsausweis-wohnen.tefcha b/user-flow-verbrauchsausweis-wohnen.tefcha index 2d5e8d74..5738629d 100644 --- a/user-flow-verbrauchsausweis-wohnen.tefcha +++ b/user-flow-verbrauchsausweis-wohnen.tefcha @@ -1,5 +1,9 @@ Verbrauchsausweis Wohnen +[Wenn der Kunde über das Dashboard über "Ausweis erstellen" kommt gibt es Daten aus der +letzten aktuellen Vorlage. Die sollten nach klick auf den Button in LocalStorage inkl. +Objekt ID geschrieben werden. Die Verknüpfung zum Gebäude/Objekt sollte dann gewährleistet +sein.] if Domain hat bereits eine vorhandene ID? if LocalStorage hat Daten? Wir vergleichen ob der LocalStorage neuer ist als die Datenbank @@ -26,7 +30,11 @@ else if *Klick auf Weiter || Klick auf Hilfe* Wir leiten weiter auf Kundendaten mit dem entsprechenden Produkt +[Hier sollte auch geprüft werden ob Daten im LocalStorage vorliegen + (so wie oben). Wenn Kundendaten leer sind sollen die Stammdaten geladen +werden. Aber bitte nicht wenn der Aussteller/Admin eingeloggt ist] *User gibt Kundendaten ein* +[Wir speichern alles im LocalStorage mit dem aktuallen Timestamp] if *Klick auf Speichern* if Ausweis hat bereits eine id? Wir updaten den bereits gespeicherten Ausweis mit den neuen Daten @@ -43,7 +51,9 @@ if *Klick auf Weiter || Klick auf Hilfe* Wir erstellen einen neuen Ausweis else - *User klickt auf Bestellen* +[Bei schon bestellten Produkten (Beratung und Offline) kann man nicht nochmal bestellen +sondern nur Freigeben. Statt Bestellbestätigung Freigabebestätigung] + *User klickt auf Bestellen* [bzw. *User klickt auf Freigabe*] if Ausweis hat bereits eine id? Wir updaten den bereits gespeicherten Ausweis mit den neuen Daten else