diff --git a/prisma/migrations/20250407000438_partner_code/migration.sql b/prisma/migrations/20250407000438_partner_code/migration.sql new file mode 100644 index 00000000..7532313e --- /dev/null +++ b/prisma/migrations/20250407000438_partner_code/migration.sql @@ -0,0 +1,811 @@ +-- CreateEnum +CREATE TYPE "Heizungsstatus" AS ENUM ('BEHEIZT', 'UNBEHEIZT', 'NICHT_VORHANDEN'); + +-- CreateEnum +CREATE TYPE "Lueftungskonzept" AS ENUM ('Fensterlueftung', 'Schachtlueftung', 'LueftungsanlageMitWaermerueckgewinnung', 'LueftungsanlageOhneWaermerueckgewinnung'); + +-- CreateEnum +CREATE TYPE "BenutzerRolle" AS ENUM ('USER', 'ADMIN'); + +-- CreateEnum +CREATE TYPE "BilderKategorie" AS ENUM ('Heizung', 'Fenster', 'Gebaeude', 'Daemmung', 'AnlagenTechnik'); + +-- CreateEnum +CREATE TYPE "Einpreisungsstatus" AS ENUM ('open', 'canceled', 'pending', 'expired'); + +-- CreateEnum +CREATE TYPE "Bezahlmethoden" AS ENUM ('paypal', 'giropay', 'sofort', 'creditcard', 'rechnung'); + +-- CreateEnum +CREATE TYPE "Rechnungsstatus" AS ENUM ('open', 'canceled', 'pending', 'authorized', 'expired', 'failed', 'paid'); + +-- CreateEnum +CREATE TYPE "AusweisTyp" AS ENUM ('Standard', 'Beratung', 'Offline'); + +-- CreateEnum +CREATE TYPE "TicketStatus" AS ENUM ('OFFEN', 'IN_BEARBEITUNG', 'IN_WARTESCHLEIFE', 'GESCHLOSSEN', 'GELOEST'); + +-- CreateEnum +CREATE TYPE "UnterlagenKategorie" AS ENUM ('Grundriss', 'Sonstiges'); + +-- CreateEnum +CREATE TYPE "Ausstellgrund" AS ENUM ('Neubau', 'Vermietung', 'Verkauf', 'Modernisierung', 'Sonstiges'); + +-- CreateEnum +CREATE TYPE "Ausweisart" AS ENUM ('VerbrauchsausweisWohnen', 'VerbrauchsausweisGewerbe', 'BedarfsausweisWohnen', 'BedarfsausweisGewerbe', 'GEGNachweisWohnen', 'GEGNachweisGewerbe'); + +-- CreateEnum +CREATE TYPE "Service" AS ENUM ('Telefonberatung', 'Aushang', 'Qualitaetsdruck', 'SameDay'); + +-- CreateTable +CREATE TABLE "Anteilshaber" ( + "id" VARCHAR(10) NOT NULL, + "rolle" VARCHAR, + "privilegien" BIGINT, + "benutzer_id" TEXT NOT NULL, + "objekt_id" TEXT NOT NULL, + + CONSTRAINT "Anteilshaber_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ApiRequests" ( + "id" VARCHAR(10) NOT NULL, + "date" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "ip" VARCHAR(50) NOT NULL, + "method" VARCHAR(10) NOT NULL, + "path" VARCHAR(100) NOT NULL, + "status" INTEGER NOT NULL, + "responseTime" DOUBLE PRECISION NOT NULL, + "responseSize" INTEGER NOT NULL, + "userAgent" VARCHAR(500) NOT NULL, + "user_id" TEXT, + + CONSTRAINT "ApiRequests_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Aufnahme" ( + "id" VARCHAR(10) NOT NULL, + "benutzer_id" TEXT, + "gebaeudetyp" VARCHAR, + "gebaeudeteil" VARCHAR, + "baujahr_gebaeude" INTEGER[], + "baujahr_heizung" INTEGER[], + "baujahr_klima" INTEGER[], + "einheiten" INTEGER, + "flaeche" INTEGER, + "nutzflaeche" INTEGER, + "saniert" BOOLEAN, + "keller" "Heizungsstatus", + "dachgeschoss" "Heizungsstatus", + "lueftung" "Lueftungskonzept", + "kuehlung" VARCHAR(50), + "leerstand" INTEGER, + "alternative_heizung" BOOLEAN, + "alternative_warmwasser" BOOLEAN, + "alternative_lueftung" BOOLEAN, + "alternative_kuehlung" BOOLEAN, + "erstellungsdatum" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP, + "zentralheizung" BOOLEAN, + "solarsystem_warmwasser" BOOLEAN, + "warmwasser_rohre_gedaemmt" BOOLEAN, + "niedertemperatur_kessel" BOOLEAN, + "brennwert_kessel" BOOLEAN, + "heizungsrohre_gedaemmt" BOOLEAN, + "standard_kessel" BOOLEAN, + "waermepumpe" BOOLEAN, + "raum_temperatur_regler" BOOLEAN, + "photovoltaik" BOOLEAN, + "durchlauf_erhitzer" BOOLEAN, + "einzelofen" BOOLEAN, + "zirkulation" BOOLEAN, + "einfach_verglasung" BOOLEAN, + "dreifach_verglasung" BOOLEAN, + "fenster_teilweise_undicht" BOOLEAN, + "doppel_verglasung" BOOLEAN, + "fenster_dicht" BOOLEAN, + "rolllaeden_kaesten_gedaemmt" BOOLEAN, + "isolier_verglasung" BOOLEAN, + "tueren_undicht" BOOLEAN, + "tueren_dicht" BOOLEAN, + "dachgeschoss_gedaemmt" BOOLEAN, + "keller_decke_gedaemmt" BOOLEAN, + "keller_wand_gedaemmt" BOOLEAN, + "aussenwand_gedaemmt" BOOLEAN, + "oberste_geschossdecke_gedaemmt" BOOLEAN, + "aussenwand_min_12cm_gedaemmt" BOOLEAN, + "dachgeschoss_min_12cm_gedaemmt" BOOLEAN, + "oberste_geschossdecke_min_12cm_gedaemmt" BOOLEAN, + "objekt_id" TEXT NOT NULL, + + CONSTRAINT "Aufnahme_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BedarfsausweisGewerbe" ( + "id" VARCHAR(10) NOT NULL, + "ausstellgrund" "Ausstellgrund", + "keller_beheizt" BOOLEAN, + "storniert" BOOLEAN DEFAULT false, + "bestellt" BOOLEAN DEFAULT false, + "zurueckgestellt" BOOLEAN DEFAULT false, + "abluftanlage" BOOLEAN DEFAULT false, + "zu_abluftanlage" BOOLEAN DEFAULT false, + "konditionierung_der_zuluft" BOOLEAN DEFAULT false, + "luftheizung" BOOLEAN DEFAULT false, + "hallenheizung" BOOLEAN DEFAULT false, + "dunkelstrahler" BOOLEAN DEFAULT false, + "direktheizung" BOOLEAN DEFAULT false, + "infrarotstrahler" BOOLEAN DEFAULT false, + "fussbodenheizung" BOOLEAN DEFAULT false, + "bauteilaktivierung" BOOLEAN DEFAULT false, + "klimatisierung" BOOLEAN DEFAULT false, + "nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "benutzer_id" TEXT, + "aufnahme_id" TEXT NOT NULL, + "rechnung_id" TEXT, + "geg_einpreisung_id" TEXT, + + CONSTRAINT "BedarfsausweisGewerbe_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BedarfsausweisWohnen" ( + "id" VARCHAR(10) NOT NULL, + "benutzer_id" TEXT, + "ausstellgrund" "Ausstellgrund", + "registriernummer" VARCHAR, + "alternative_heizung" BOOLEAN, + "alternative_warmwasser" BOOLEAN, + "alternative_lueftung" BOOLEAN, + "alternative_kuehlung" BOOLEAN, + "energieeffizienzklasse" VARCHAR(5), + "ausstellungsdatum" TIMESTAMP(3), + "boxpruefung" BOOLEAN DEFAULT false, + "anzahl_vollgeschosse" INTEGER, + "geschosshoehe" DOUBLE PRECISION, + "anzahl_gauben" INTEGER, + "breite_gauben" DOUBLE PRECISION, + "masse_a" DOUBLE PRECISION, + "masse_b" DOUBLE PRECISION, + "masse_c" DOUBLE PRECISION, + "masse_d" DOUBLE PRECISION, + "masse_e" DOUBLE PRECISION, + "masse_f" DOUBLE PRECISION, + "fensterflaeche_so_sw" DOUBLE PRECISION, + "fensterflaeche_nw_no" DOUBLE PRECISION, + "aussenwandflaeche_unbeheizt" DOUBLE PRECISION, + "dachflaeche" DOUBLE PRECISION, + "deckenflaeche" DOUBLE PRECISION, + "dach_u_wert" DOUBLE PRECISION, + "decke_u_wert" DOUBLE PRECISION, + "aussenwand_flaeche" DOUBLE PRECISION, + "aussenwand_u_wert" DOUBLE PRECISION, + "fussboden_flaeche" DOUBLE PRECISION, + "fussboden_u_wert" DOUBLE PRECISION, + "volumen" DOUBLE PRECISION, + "dicht" BOOLEAN, + "fenster_flaeche_1" DOUBLE PRECISION, + "fenster_art_1" DOUBLE PRECISION, + "fenster_flaeche_2" DOUBLE PRECISION, + "fenster_art_2" DOUBLE PRECISION, + "dachfenster_flaeche" DOUBLE PRECISION, + "dachfenster_art" DOUBLE PRECISION, + "haustuer_flaeche" DOUBLE PRECISION, + "haustuer_art" DOUBLE PRECISION, + "dach_bauart" VARCHAR, + "decke_bauart" VARCHAR, + "dach_daemmung" DOUBLE PRECISION, + "decke_daemmung" DOUBLE PRECISION, + "aussenwand_daemmung" DOUBLE PRECISION, + "boden_daemmung" DOUBLE PRECISION, + "aussenwand_bauart" VARCHAR, + "boden_bauart" VARCHAR, + "warmwasser_verteilung" VARCHAR, + "warmwasser_speicherung" VARCHAR, + "warmwasser_erzeugung" VARCHAR, + "heizung_zentral" BOOLEAN, + "heizung_verteilung" VARCHAR, + "heizung_speicherung" VARCHAR, + "waerme_erzeugung_heizung" VARCHAR, + "anteil_zusatzheizung" DOUBLE PRECISION, + "kollektor_flaeche" DOUBLE PRECISION, + "ausgestellt" BOOLEAN DEFAULT false, + "storniert" BOOLEAN DEFAULT false, + "bestellt" BOOLEAN DEFAULT false, + "zurueckgestellt" BOOLEAN DEFAULT false, + "prueftext" VARCHAR(1000), + "beschreibung" TEXT, + "kontrolldatei_angefragt" BOOLEAN DEFAULT false, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', + "rechnung_id" TEXT, + "aufnahme_id" TEXT NOT NULL, + + CONSTRAINT "BedarfsausweisWohnen_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "benutzer" ( + "id" VARCHAR(10) NOT NULL, + "name" VARCHAR(50), + "vorname" VARCHAR(50), + "email" VARCHAR(255) NOT NULL, + "passwort" VARCHAR(255) NOT NULL, + "profilbild" VARCHAR, + "plz" VARCHAR(5), + "ort" VARCHAR(50), + "adresse" VARCHAR(100), + "telefon" VARCHAR(50), + "anrede" VARCHAR(50), + "rolle" "BenutzerRolle" NOT NULL DEFAULT 'USER', + "firma" TEXT, + "lex_office_id" TEXT, + "verified" BOOLEAN NOT NULL DEFAULT false, + + CONSTRAINT "benutzer_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Bild" ( + "id" VARCHAR(10) NOT NULL, + "kategorie" "BilderKategorie" NOT NULL, + "name" TEXT NOT NULL, + "aufnahme_id" TEXT, + + CONSTRAINT "Bild_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Event" ( + "id" VARCHAR(10) NOT NULL, + "date" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "title" VARCHAR(255) NOT NULL, + "description" TEXT, + "aufnahme_id" TEXT NOT NULL, + "benutzer_id" TEXT, + + CONSTRAINT "Event_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GEGEinpreisung" ( + "id" VARCHAR(10) NOT NULL, + "empfaenger" VARCHAR, + "strasse" VARCHAR, + "plz" VARCHAR, + "ort" VARCHAR, + "zusatzzeile" VARCHAR, + "telefon" VARCHAR, + "email" VARCHAR, + "abweichende_versand_adresse" BOOLEAN DEFAULT false, + "versand_empfaenger" VARCHAR, + "versand_strasse" VARCHAR, + "versand_plz" VARCHAR, + "versand_ort" VARCHAR, + "versand_zusatzzeile" VARCHAR, + "status" "Einpreisungsstatus" NOT NULL, + "benutzer_id" TEXT, + + CONSTRAINT "GEGEinpreisung_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GEGNachweisGewerbe" ( + "id" VARCHAR(10) NOT NULL, + "ausstellgrund" "Ausstellgrund", + "keller_beheizt" BOOLEAN, + "storniert" BOOLEAN DEFAULT false, + "bestellt" BOOLEAN DEFAULT false, + "zurueckgestellt" BOOLEAN DEFAULT false, + "beschreibung" TEXT, + "nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "benutzer_id" TEXT, + "aufnahme_id" TEXT NOT NULL, + "rechnung_id" TEXT, + "geg_einpreisung_id" TEXT, + + CONSTRAINT "GEGNachweisGewerbe_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GEGNachweisWohnen" ( + "id" VARCHAR(10) NOT NULL, + "ausstellgrund" "Ausstellgrund", + "keller_beheizt" BOOLEAN, + "storniert" BOOLEAN DEFAULT false, + "bestellt" BOOLEAN DEFAULT false, + "zurueckgestellt" BOOLEAN DEFAULT false, + "beschreibung" TEXT, + "nachweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "benutzer_id" TEXT, + "aufnahme_id" TEXT NOT NULL, + "rechnung_id" TEXT, + "geg_einpreisung_id" TEXT, + + CONSTRAINT "GEGNachweisWohnen_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Klimafaktoren" ( + "id" SERIAL NOT NULL, + "plz" VARCHAR(5) NOT NULL, + "month" INTEGER NOT NULL, + "year" INTEGER NOT NULL, + "klimafaktor" DOUBLE PRECISION NOT NULL DEFAULT 1, + + CONSTRAINT "Klimafaktoren_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Objekt" ( + "id" VARCHAR(10) NOT NULL, + "latitude" DOUBLE PRECISION, + "longitude" DOUBLE PRECISION, + "plz" VARCHAR(5), + "ort" VARCHAR(50), + "adresse" VARCHAR(100), + "erstellungsdatum" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP, + "benutzer_id" TEXT, + + CONSTRAINT "Objekt_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Postleitzahlen" ( + "id" SERIAL NOT NULL, + "plz" VARCHAR(5) NOT NULL, + "stadt" VARCHAR(100) NOT NULL, + "bundesland" VARCHAR(100) NOT NULL, + "landkreis" VARCHAR(100) NOT NULL, + "lat" DOUBLE PRECISION NOT NULL, + "lon" DOUBLE PRECISION NOT NULL, + + CONSTRAINT "Postleitzahlen_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Rechnung" ( + "id" VARCHAR(10) NOT NULL, + "empfaenger" VARCHAR, + "strasse" VARCHAR, + "plz" VARCHAR, + "ort" VARCHAR, + "zusatzzeile" VARCHAR, + "telefon" VARCHAR, + "email" VARCHAR, + "abweichende_versand_adresse" BOOLEAN DEFAULT false, + "versand_empfaenger" VARCHAR, + "versand_strasse" VARCHAR, + "versand_plz" VARCHAR, + "versand_ort" VARCHAR, + "versand_zusatzzeile" VARCHAR, + "bezahlmethode" "Bezahlmethoden" NOT NULL, + "status" "Rechnungsstatus" NOT NULL, + "services" "Service"[], + "betrag" DOUBLE PRECISION NOT NULL, + "erstellt_am" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "bezahlt_am" TIMESTAMP(3), + "storniert_am" TIMESTAMP(3), + "transaktions_referenz" VARCHAR, + "partner_code" TEXT, + "benutzer_id" TEXT NOT NULL, + + CONSTRAINT "Rechnung_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "RefreshTokens" ( + "id" SERIAL NOT NULL, + "token" TEXT NOT NULL, + "ip" TEXT NOT NULL, + "expiry" TIMESTAMP(3) NOT NULL, + "benutzer_id" TEXT NOT NULL, + + CONSTRAINT "RefreshTokens_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Tickets" ( + "id" VARCHAR(10) NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3), + "deleted_at" TIMESTAMP(3), + "status" "TicketStatus" NOT NULL DEFAULT 'OFFEN', + "titel" TEXT NOT NULL, + "beschreibung" TEXT NOT NULL, + "metadata" JSONB, + "email" TEXT NOT NULL, + "bearbeiter_id" TEXT, + "prioritaet" INTEGER DEFAULT 0, + "benutzer_id" TEXT, + + CONSTRAINT "Tickets_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Unterlage" ( + "id" VARCHAR(10) NOT NULL, + "name" TEXT, + "kategorie" TEXT, + "mime" TEXT NOT NULL, + "aufnahme_id" TEXT, + + CONSTRAINT "Unterlage_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "VerbrauchsausweisGewerbe" ( + "id" VARCHAR(10) NOT NULL, + "ausstellgrund" "Ausstellgrund", + "registriernummer" VARCHAR, + "zusaetzliche_heizquelle" BOOLEAN, + "einheit_1" VARCHAR(50), + "einheit_2" VARCHAR(50), + "startdatum" TIMESTAMP(6), + "verbrauch_1" INTEGER, + "verbrauch_2" INTEGER, + "verbrauch_3" INTEGER, + "verbrauch_4" INTEGER, + "verbrauch_5" INTEGER, + "verbrauch_6" INTEGER, + "brennstoff_1" VARCHAR(50), + "brennstoff_2" VARCHAR(50), + "energieeffizienzklasse" VARCHAR(5), + "ausstellungsdatum" TIMESTAMP(3), + "boxpruefung" BOOLEAN DEFAULT false, + "strom_1" INTEGER, + "strom_2" INTEGER, + "strom_3" INTEGER, + "stromverbrauch_enthaelt_heizung" BOOLEAN, + "stromverbrauch_enthaelt_warmwasser" BOOLEAN, + "stromverbrauch_enthaelt_lueftung" BOOLEAN, + "stromverbrauch_enthaelt_beleuchtung" BOOLEAN, + "stromverbrauch_enthaelt_kuehlung" BOOLEAN, + "stromverbrauch_enthaelt_sonstige" VARCHAR(50), + "kuehlung_enthalten" BOOLEAN, + "anteil_kuehlung_1" DOUBLE PRECISION, + "anteil_kuehlung_2" DOUBLE PRECISION, + "keller_beheizt" BOOLEAN, + "alternative_heizung" BOOLEAN, + "alternative_warmwasser" BOOLEAN, + "alternative_lueftung" BOOLEAN, + "alternative_kuehlung" BOOLEAN, + "warmwasser_enthalten" BOOLEAN, + "warmwasser_anteil_bekannt" BOOLEAN, + "anteil_warmwasser_1" DOUBLE PRECISION, + "anteil_warmwasser_2" DOUBLE PRECISION, + "ausgestellt" BOOLEAN DEFAULT false, + "storniert" BOOLEAN DEFAULT false, + "bestellt" BOOLEAN DEFAULT false, + "zurueckgestellt" BOOLEAN DEFAULT false, + "prueftext" VARCHAR(1000), + "beschreibung" TEXT, + "kontrolldatei_angefragt" BOOLEAN DEFAULT false, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', + "benutzer_id" TEXT, + "rechnung_id" TEXT, + "aufnahme_id" TEXT NOT NULL, + + CONSTRAINT "VerbrauchsausweisGewerbe_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "VerbrauchsausweisWohnen" ( + "id" VARCHAR(10) NOT NULL, + "ausstellgrund" "Ausstellgrund", + "registriernummer" VARCHAR, + "zusaetzliche_heizquelle" BOOLEAN, + "einheit_1" VARCHAR(50), + "einheit_2" VARCHAR(50), + "brennstoff_1" VARCHAR(50), + "brennstoff_2" VARCHAR(50), + "energieeffizienzklasse" VARCHAR(5), + "ausstellungsdatum" TIMESTAMP(3), + "boxpruefung" BOOLEAN DEFAULT false, + "startdatum" TIMESTAMPTZ(6), + "verbrauch_1" INTEGER, + "verbrauch_2" INTEGER, + "verbrauch_3" INTEGER, + "verbrauch_4" INTEGER, + "verbrauch_5" INTEGER, + "verbrauch_6" INTEGER, + "warmwasser_enthalten" BOOLEAN, + "warmwasser_anteil_bekannt" BOOLEAN, + "faktorKeller" DOUBLE PRECISION, + "alternative_heizung" BOOLEAN, + "alternative_warmwasser" BOOLEAN, + "alternative_lueftung" BOOLEAN, + "alternative_kuehlung" BOOLEAN, + "anteil_warmwasser_1" DOUBLE PRECISION, + "anteil_warmwasser_2" DOUBLE PRECISION, + "ausgestellt" BOOLEAN DEFAULT false, + "storniert" BOOLEAN DEFAULT false, + "bestellt" BOOLEAN DEFAULT false, + "zurueckgestellt" BOOLEAN DEFAULT false, + "prueftext" VARCHAR(1000), + "beschreibung" TEXT, + "kontrolldatei_angefragt" BOOLEAN DEFAULT false, + "ausweistyp" "AusweisTyp" NOT NULL DEFAULT 'Standard', + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + "benutzer_id" TEXT, + "rechnung_id" TEXT, + "aufnahme_id" TEXT NOT NULL, + + CONSTRAINT "VerbrauchsausweisWohnen_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "documenttemplates" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(100) NOT NULL, + "shortdescription" VARCHAR(100) NOT NULL, + "longdescription" VARCHAR(5000) NOT NULL, + "user_id" TEXT NOT NULL, + "is_private" BOOLEAN NOT NULL DEFAULT true, + "documenttype" INTEGER NOT NULL, + "filename" VARCHAR(100) NOT NULL, + "created_at" TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "PK_DOCUMENTTEMPLATES" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "documenttypes" ( + "id" SERIAL NOT NULL, + "name" VARCHAR(100) NOT NULL, + "shortdescription" VARCHAR(100) NOT NULL, + "longdescription" VARCHAR(5000) NOT NULL, + + CONSTRAINT "PK_DOCUMENTTYPES" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "tokens" ( + "id" SERIAL NOT NULL, + "token" VARCHAR(36) NOT NULL, + "user_id" TEXT NOT NULL, + "date_created" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "last_used" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "times_used" INTEGER NOT NULL DEFAULT 0, + "permissions" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "PK_TOKENS" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Anteilshaber_id_key" ON "Anteilshaber"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "ApiRequests_id_key" ON "ApiRequests"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Aufnahme_id_key" ON "Aufnahme"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisGewerbe_id_key" ON "BedarfsausweisGewerbe"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisGewerbe_aufnahme_id_key" ON "BedarfsausweisGewerbe"("aufnahme_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisGewerbe_rechnung_id_key" ON "BedarfsausweisGewerbe"("rechnung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisGewerbe_geg_einpreisung_id_key" ON "BedarfsausweisGewerbe"("geg_einpreisung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisWohnen_id_key" ON "BedarfsausweisWohnen"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisWohnen_rechnung_id_key" ON "BedarfsausweisWohnen"("rechnung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "BedarfsausweisWohnen_aufnahme_id_key" ON "BedarfsausweisWohnen"("aufnahme_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "benutzer_id_key" ON "benutzer"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "benutzer_email_idx" ON "benutzer"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Bild_id_key" ON "Bild"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Event_id_key" ON "Event"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGEinpreisung_id_key" ON "GEGEinpreisung"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisGewerbe_id_key" ON "GEGNachweisGewerbe"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisGewerbe_aufnahme_id_key" ON "GEGNachweisGewerbe"("aufnahme_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisGewerbe_rechnung_id_key" ON "GEGNachweisGewerbe"("rechnung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisGewerbe_geg_einpreisung_id_key" ON "GEGNachweisGewerbe"("geg_einpreisung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisWohnen_id_key" ON "GEGNachweisWohnen"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisWohnen_aufnahme_id_key" ON "GEGNachweisWohnen"("aufnahme_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisWohnen_rechnung_id_key" ON "GEGNachweisWohnen"("rechnung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "GEGNachweisWohnen_geg_einpreisung_id_key" ON "GEGNachweisWohnen"("geg_einpreisung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Klimafaktoren_plz_month_year_key" ON "Klimafaktoren"("plz", "month", "year"); + +-- CreateIndex +CREATE UNIQUE INDEX "Objekt_id_key" ON "Objekt"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Rechnung_id_key" ON "Rechnung"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Rechnung_transaktions_referenz_key" ON "Rechnung"("transaktions_referenz"); + +-- CreateIndex +CREATE UNIQUE INDEX "RefreshTokens_token_key" ON "RefreshTokens"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tickets_id_key" ON "Tickets"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "Unterlage_id_key" ON "Unterlage"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_id_key" ON "VerbrauchsausweisGewerbe"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_rechnung_id_key" ON "VerbrauchsausweisGewerbe"("rechnung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerbrauchsausweisGewerbe_aufnahme_id_key" ON "VerbrauchsausweisGewerbe"("aufnahme_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_id_key" ON "VerbrauchsausweisWohnen"("id"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_rechnung_id_key" ON "VerbrauchsausweisWohnen"("rechnung_id"); + +-- CreateIndex +CREATE UNIQUE INDEX "VerbrauchsausweisWohnen_aufnahme_id_key" ON "VerbrauchsausweisWohnen"("aufnahme_id"); + +-- AddForeignKey +ALTER TABLE "Anteilshaber" ADD CONSTRAINT "Anteilshaber_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Anteilshaber" ADD CONSTRAINT "Anteilshaber_objekt_id_fkey" FOREIGN KEY ("objekt_id") REFERENCES "Objekt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "ApiRequests" ADD CONSTRAINT "ApiRequests_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Aufnahme" ADD CONSTRAINT "Aufnahme_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Aufnahme" ADD CONSTRAINT "Aufnahme_objekt_id_fkey" FOREIGN KEY ("objekt_id") REFERENCES "Objekt"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisGewerbe" ADD CONSTRAINT "BedarfsausweisGewerbe_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "BedarfsausweisWohnen" ADD CONSTRAINT "BedarfsausweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Bild" ADD CONSTRAINT "Bild_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Event" ADD CONSTRAINT "Event_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Event" ADD CONSTRAINT "Event_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGEinpreisung" ADD CONSTRAINT "GEGEinpreisung_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisGewerbe" ADD CONSTRAINT "GEGNachweisGewerbe_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "GEGNachweisWohnen" ADD CONSTRAINT "GEGNachweisWohnen_geg_einpreisung_id_fkey" FOREIGN KEY ("geg_einpreisung_id") REFERENCES "GEGEinpreisung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "Objekt" ADD CONSTRAINT "Objekt_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Rechnung" ADD CONSTRAINT "Rechnung_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "RefreshTokens" ADD CONSTRAINT "RefreshTokens_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Tickets" ADD CONSTRAINT "Tickets_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Tickets" ADD CONSTRAINT "Tickets_bearbeiter_id_fkey" FOREIGN KEY ("bearbeiter_id") REFERENCES "benutzer"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Unterlage" ADD CONSTRAINT "Unterlage_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VerbrauchsausweisGewerbe" ADD CONSTRAINT "VerbrauchsausweisGewerbe_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_benutzer_id_fkey" FOREIGN KEY ("benutzer_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_rechnung_id_fkey" FOREIGN KEY ("rechnung_id") REFERENCES "Rechnung"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "VerbrauchsausweisWohnen" ADD CONSTRAINT "VerbrauchsausweisWohnen_aufnahme_id_fkey" FOREIGN KEY ("aufnahme_id") REFERENCES "Aufnahme"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; + +-- AddForeignKey +ALTER TABLE "documenttemplates" ADD CONSTRAINT "benutzer_fk" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "documenttemplates" ADD CONSTRAINT "documenttypes_fk" FOREIGN KEY ("documenttype") REFERENCES "documenttypes"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tokens" ADD CONSTRAINT "fk_benutzer_tokens_user_id" FOREIGN KEY ("user_id") REFERENCES "benutzer"("id") ON DELETE NO ACTION ON UPDATE NO ACTION; diff --git a/prisma/schema/Rechnung.prisma b/prisma/schema/Rechnung.prisma index d5f7e774..b096e168 100644 --- a/prisma/schema/Rechnung.prisma +++ b/prisma/schema/Rechnung.prisma @@ -52,6 +52,7 @@ model Rechnung { bezahlt_am DateTime? storniert_am DateTime? transaktions_referenz String? @unique @db.VarChar + partner_code String? benutzer_id String benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction) diff --git a/src/client/lib/helpers.ts b/src/client/lib/helpers.ts index e20fc762..fc9164bb 100644 --- a/src/client/lib/helpers.ts +++ b/src/client/lib/helpers.ts @@ -57,4 +57,13 @@ export function getZodBaseType(schema: ZodType): ZodType { return getZodBaseType(schema._def.schema) } return schema; +} + +export function getMaximumDevitationInPercent(...numbers: number[]) { + const min = Math.min(...numbers) || 1; + const max = Math.min(...numbers) || 1; + + const deviation = max - min; + + return deviation / min * 100; } \ No newline at end of file diff --git a/src/components/Ausweis/ButtonWeiterHilfe.svelte b/src/components/Ausweis/ButtonWeiterHilfe.svelte index 0f67425f..7fe919a5 100644 --- a/src/components/Ausweis/ButtonWeiterHilfe.svelte +++ b/src/components/Ausweis/ButtonWeiterHilfe.svelte @@ -23,6 +23,7 @@ export let showWeiter: boolean = true; export let showHelpButton: boolean = true; + export let partner_code: string; export let ausweistyp: AusweisTyp = Enums.AusweisTyp.Standard; @@ -83,7 +84,8 @@ bilder, unterlagen, ausweisart, - ausweistyp + ausweistyp, + partner_code }, "") } else { openWindowWithPost("/kundendaten", { @@ -93,7 +95,8 @@ bilder, unterlagen, ausweisart, - ausweistyp + ausweistyp, + partner_code }, "") } } diff --git a/src/components/Ausweis/types.ts b/src/components/Ausweis/types.ts index cde604f9..943b9542 100644 --- a/src/components/Ausweis/types.ts +++ b/src/components/Ausweis/types.ts @@ -98,7 +98,7 @@ export type OptionalNullable = T extends object ? { } : T; export const UUidWithPrefix = z.string().refine((value) => { - const prefixedUUidRegex = /^([A-Z]{2})[0-9A-Z]{6}$/i + const prefixedUUidRegex = /^([A-Z]{2})[0-9A-Z]{6,8}$/i const match = value.match(prefixedUUidRegex) diff --git a/src/components/Dashboard/DashboardObjekt.svelte b/src/components/Dashboard/DashboardObjekt.svelte index c2864b42..4f3937b7 100644 --- a/src/components/Dashboard/DashboardObjekt.svelte +++ b/src/components/Dashboard/DashboardObjekt.svelte @@ -26,9 +26,9 @@
{#if ausweis?.ausgestellt} - Energieausweis ausgestellt + Energieausweis ausgestellt {:else} - Energieausweis ausgestellt + Energieausweis ausgestellt {/if}
Energieausweis
@@ -39,9 +39,9 @@
{#if ausweis?.ausgestellt} - Energieausweis ausgestellt + Energieausweis ausgestellt {:else} - Energieausweis ausgestellt + Energieausweis ausgestellt {/if}
Energieausweis
@@ -52,9 +52,9 @@
{#if ausweis?.ausgestellt} - Energieausweis ausgestellt + Energieausweis ausgestellt {:else} - Energieausweis ausgestellt + Energieausweis ausgestellt {/if}
Energieausweis
diff --git a/src/generated/zod/rechnung.ts b/src/generated/zod/rechnung.ts index b942af33..66cd0de7 100644 --- a/src/generated/zod/rechnung.ts +++ b/src/generated/zod/rechnung.ts @@ -24,5 +24,6 @@ export const RechnungSchema = z.object({ bezahlt_am: z.date().nullish(), storniert_am: z.date().nullish(), transaktions_referenz: z.string().nullish(), + partner_code: z.string().nullish(), benutzer_id: z.string(), }) diff --git a/src/lib/constants.ts b/src/lib/constants.ts index ab60d2e3..df214fa8 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -1,5 +1,4 @@ import { Enums } from "#lib/client/prisma.js"; -import { S3Client } from "@aws-sdk/client-s3"; export const API_ACCESS_TOKEN_COOKIE_NAME = "accessToken"; export const API_REFRESH_TOKEN_COOKIE_NAME = "refreshToken"; diff --git a/src/modules/KundendatenModule.svelte b/src/modules/KundendatenModule.svelte index 605e0a5a..9b0782e9 100644 --- a/src/modules/KundendatenModule.svelte +++ b/src/modules/KundendatenModule.svelte @@ -2,7 +2,7 @@ import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte"; import Progressbar from "#components/Ausweis/Progressbar.svelte"; import Bereich from "#components/labels/Bereich.svelte"; - import type { BedarfsausweisGewerbe, Bezahlmethoden, GEGNachweisGewerbe, GEGNachweisWohnen, Unterlage } from "#lib/client/prisma.js"; + import type { BedarfsausweisGewerbe, BedarfsausweisWohnen, Bezahlmethoden, GEGNachweisGewerbe, GEGNachweisWohnen, Unterlage, VerbrauchsausweisGewerbe, VerbrauchsausweisWohnen } from "#lib/client/prisma.js"; import { Enums } from "#lib/client/prisma.js"; import { API_ACCESS_TOKEN_COOKIE_NAME, @@ -15,7 +15,6 @@ BildClient, ObjektClient, RechnungClient, - UnterlageClient, VerbrauchsausweisWohnenClient, } from "#components/Ausweis/types.js"; import { validateAccessTokenClient } from "src/client/lib/validateAccessToken.js"; @@ -30,9 +29,12 @@ import HelpLabel from "#components/labels/HelpLabel.svelte"; import InputLabel from "#components/labels/InputLabel.svelte"; import PlzSuche from "#components/PlzSuche.svelte"; + import { getMaximumDevitationInPercent } from "#client/lib/helpers.js"; + import { endEnergieVerbrauchVerbrauchsausweis_2016 } from "#lib/Berechnungen/VerbrauchsausweisWohnen/VerbrauchsausweisWohnen_2016.js"; + import { endEnergieVerbrauchVerbrauchsausweisGewerbe_2016 } from "#lib/Berechnungen/VerbrauchsausweisGewerbe/VerbrauchsausweisGewerbe_2016.js"; export let user: Partial; - export let ausweis: VerbrauchsausweisWohnenClient; + export let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbe | BedarfsausweisWohnen; export let aufnahme: AufnahmeClient; export let objekt: ObjektClient; export let bilder: BildClient[]; @@ -41,6 +43,8 @@ export let ausweisart: Enums.Ausweisart; export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal; + export let partner_code: string; + let email: string, vorname: string, name: string, empfaenger: string, strasse: string, plz: string, ort: string, zusatzzeile: string, telefon: string; @@ -185,6 +189,15 @@ return; } + if (!result) { + addNotification({ + dismissable: true, + message: "Ups... Das hat nicht geklappt.", + subtext: "Speichern ist fehlgeschlagen, bitte versuchen sie es erneut oder kontaktieren sie unseren Support." + }) + return; + } + try { const { id } = await api.rechnung.anfordern.PUT.fetch( { @@ -350,7 +363,8 @@ versand_plz: versand_plz, versand_ort: versand_ort, telefon: telefon, - ausweis_id: ausweis.id + ausweis_id: ausweis.id, + partner_code }, { headers: { @@ -903,25 +917,105 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center" {/if} - + {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen}

Bitte untenstehende Punkte bestätigen. Bitte gehen Sie gegebenenfalls zurück zum Formular und überprüfen bzw. korrigieren Ihre Eingaben.

- -
- -
- Das Heizungsalter ist jünger als 3 Jahre. Es handelt sich hier um einen Heizungstausch ohne energetische Verbesserung. -
-
- -
- -
- Die Angabe der Wohnfläche ist korrekt und bezieht sich auf das gesamte Gebäude. -
-
+ {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe} + {@const request = ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen ? endEnergieVerbrauchVerbrauchsausweis_2016(ausweis, aufnahme, objekt) : endEnergieVerbrauchVerbrauchsausweisGewerbe_2016(ausweis, aufnahme, objekt)} + + {#await request} + + {:then berechnungen} + + {#if (aufnahme.baujahr_heizung.at(-1) || new Date().getFullYear()) >= (new Date().getFullYear() - 3)} +
+ +
+ Das Heizungsalter ist jünger als 3 Jahre. Es handelt sich hier um einen Heizungstausch ohne energetische Verbesserung. +
+
+ {/if} + + + {#if (berechnungen?.endEnergieVerbrauchGesamt || 0) < 40} +
+ +
+ Ich habe die Verbrauchsangaben nochmal kontrolliert. Der ungewöhnlich niedrige Energiekennwert ist korrekt, da es sich um ein besonders effizientes Gebäude mit z.B. Wärmepumpe handelt. +
+
+ {/if} + + + {#if (berechnungen?.endEnergieVerbrauchGesamt || 0) > 450} +
+ +
+ Ich habe die Verbrauchsangaben nochmal kontrolliert. Der ungewöhnlich hohe Energiekennwert ist korrekt, da es sich um ein sehr altes ungedämmtes Gebäude mit z.B. Einfachverglasung handelt. +
+
+ {/if} + + {#if ausweis.verbrauch_1 == 0 || ausweis.verbrauch_2 == 0 || ausweis.verbrauch_3 == 0} +
+ +
+ Die eingegebenen Heizverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben. +
+
+ {/if} + + {#if getMaximumDevitationInPercent(ausweis.verbrauch_1 || 0, ausweis.verbrauch_2 || 0, ausweis.verbrauch_3 || 0) > 50} +
+ +
+ Die eingegebenen Heizverbräuche sind korrekt und die Abweichung bei den Verbrauchsjahren lässt sich begründen. Falls es Leerstand gab, wurde + dieser im Formular von mir angegeben. +
+
+ {/if} + {/await} + {/if} + + {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen} + + {#if aufnahme.flaeche || 0 < (aufnahme.einheiten || 0) * 30} +
+ +
+ Die Angabe der Wohnfläche ist korrekt und bezieht sich auf das gesamte Gebäude. +
+
+ {/if} + {/if} + + {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe} + + {#if ausweis.strom_1 == 0 || ausweis.strom_2 == 0 || ausweis.strom_3 == 0} +
+ +
+ Die eingegebenen Stromverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben. +
+
+ {/if} + + {#if getMaximumDevitationInPercent(ausweis.strom_1 || 0, ausweis.strom_2 || 0, ausweis.strom_3 || 0) > 50} +
+ +
+ Die eingegebenen Stromverbräuche sind korrekt und die Abweichung bei den Verbrauchsjahren lässt sich begründen. Falls es Leerstand gab, wurde + dieser im Formular von mir angegeben. +
+
+ {/if} + {/if} + +
@@ -931,99 +1025,66 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
-
- -
- Das Baujahr der Heizungsanlage ist kleiner als das Baujahr des Gebäudes und befründet. + {#if aufnahme.baujahr_heizung.at(-1) || 0 < aufnahme.baujahr_gebaeude[0] || 0} +
+ +
+ Das Baujahr der Heizungsanlage ist kleiner als das Baujahr des Gebäudes und begründet. +
-
- -
- -
- Die eingegebenen Heizverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben. -
-
- -
- -
- Die eingegebenen Heizverbräuche sind korrekt und die Abweichung bei den Verbrauchsjahren lässt sich begründen. Falls es Leerstand gab, wurde - dieser im Formular von mir angegeben. -
-
- -
- -
- Die eingegebenen Stromverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben. -
-
- -
- -
- Die eingegebenen Stromverbräuche sind korrekt und die Abweichung bei den Verbrauchsjahren lässt sich begründen. Falls es Leerstand gab, wurde - dieser im Formular von mir angegeben. -
-
- - -
- -
- Ich habe die Verbrauchsangaben nochmal kontrolliert. Der ungewöhnlich niedrige Energiekennwert ist korrekt, da es sich um ein besonders effizientes Gebäude mit z.B. Wärmepumpe handelt. -
-
- - -
- -
- Ich habe die Verbrauchsangaben nochmal kontrolliert. Der ungewöhnlich hohe Energiekennwert ist korrekt, da es sich um ein sehr altes ungedämmtes Gebäude mit z.B. Einfachverglasung handelt. -
-
- -
- -
- Ich habe den Warmwasseranteil nochmal überprüft. Dieser ist korrekt und begründet. -
-
- -
- -
- Ich habe die Wohnfläche nochmal überprüft und bestätige die Richtigkeit. Es handelt sich lediglich um die Wohnfläche innerhalb des Gebäudes. Flächen von eventuell vorhandenen Terassen und Balkonen wurden nicht mitgezählt. -
-
- -
- -
- Ich habe die Angaben zur Gebäudegeometrie geprüft und bestätige die Richtigkeit. -
-
- -
- -
- Ich habe die Angaben zu den Fensterflächen geprüft und bestätige die Richtigkeit. -
-
+ {/if} + + + + + {#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen} + + {#if ausweis.anteil_warmwasser_1 < 6 || ausweis.anteil_warmwasser_1 > 40} +
+ +
+ Ich habe den Warmwasseranteil nochmal überprüft. Dieser ist korrekt und begründet. +
+
+ {/if} + {/if} + {#if ausweisart === Enums.Ausweisart.BedarfsausweisWohnen} + + {#if ausweis.flaeche < ausweis.nutzflaeche} +
+ +
+ Ich habe die Wohnfläche nochmal überprüft und bestätige die Richtigkeit. Es handelt sich lediglich um die Wohnfläche innerhalb des Gebäudes. Flächen von eventuell vorhandenen Terassen und Balkonen wurden nicht mitgezählt. +
+
+ {/if} + + + + + + {/if}
- +
+ {/if}
diff --git a/src/pages/[partner]/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro b/src/pages/[partner]/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro index eb35bf57..ee35a610 100644 --- a/src/pages/[partner]/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro +++ b/src/pages/[partner]/angebot-anfragen/geg-nachweis-wohnen-anfragen/index.astro @@ -1,13 +1,14 @@ --- import AusweisLayout from "#layouts/AusweisLayoutDaten_partner.astro"; import GEGNachweisWohnenModule from "#modules/angebot-anfragen/GEGNachweisWohnenModule.svelte"; -import { Aufnahme, Bild, Enums, GEGNachweisWohnen, Objekt, Unterlage, VerbrauchsausweisWohnen } from "#lib/server/prisma"; -import { getVerbrauchsausweisWohnen, getAufnahme, getObjekt, getBilder, getGEGNachweisWohnen, getUnterlagen } from "#lib/server/db"; +import { Aufnahme, Bild, Enums, GEGNachweisWohnen, Objekt, Unterlage } from "#lib/server/prisma"; +import { getAufnahme, getObjekt, getBilder, getGEGNachweisWohnen, getUnterlagen } from "#lib/server/db"; import { getCurrentUser } from "#lib/server/user"; const id = Astro.url.searchParams.get("id"); const aufnahme_id = Astro.url.searchParams.get("aufnahme") let nachweistyp = Astro.url.searchParams.get("nachweistyp") as Enums.AusweisTyp || Enums.AusweisTyp.Standard; +const partner_code = Astro.params.partner_code let nachweis: GEGNachweisWohnen = {} as GEGNachweisWohnen; let aufnahme: Aufnahme = {} as Aufnahme; diff --git a/src/pages/api/admin/ausstellen.ts b/src/pages/api/admin/ausstellen.ts index 68f005a5..9bbb345c 100644 --- a/src/pages/api/admin/ausstellen.ts +++ b/src/pages/api/admin/ausstellen.ts @@ -1,14 +1,23 @@ import { getAusweisartFromId } from "#components/Ausweis/types.js"; import { adminMiddleware } from "#lib/middleware/authorization.js"; -import { Enums, prisma } from "#lib/server/prisma.js"; +import { + Aufnahme, + BedarfsausweisWohnen, + Benutzer, + Bild, + Enums, + Objekt, + prisma, + VerbrauchsausweisGewerbe, + VerbrauchsausweisWohnen, +} from "#lib/server/prisma.js"; import { APIError, defineApiRoute } from "astro-typesafe-api/server"; import { z } from "astro:content"; -import { fileURLToPath } from "url"; -import * as fs from "fs"; import { transport } from "#lib/mail.js"; import { BASE_URI } from "#lib/constants.js"; import { getAnsichtsausweis, getDatenblatt } from "#lib/server/ausweis.js"; -import { PERSISTENT_DIR } from "#lib/server/constants.js"; +import { PutObjectCommand } from "@aws-sdk/client-s3"; +import { s3Client } from "#lib/s3.js"; export const GET = defineApiRoute({ input: z.object({ @@ -19,10 +28,25 @@ export const GET = defineApiRoute({ async fetch({ id_ausweis }, context, user) { const ausweisart = getAusweisartFromId(id_ausweis); - if (ausweisart === "VerbrauchsausweisWohnen") { - const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ + let ausweis: + | (( + | VerbrauchsausweisGewerbe + | VerbrauchsausweisWohnen + | BedarfsausweisWohnen + ) & { + aufnahme: Aufnahme & { + bilder: Bild[]; + objekt: Objekt & { + benutzer: Benutzer; + }; + }; + }) + | null = null; + + if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { + ausweis = await prisma.verbrauchsausweisWohnen.findUnique({ where: { - id: id_ausweis + id: id_ausweis, }, include: { aufnahme: { @@ -37,89 +61,133 @@ export const GET = defineApiRoute({ }, }, }); - - if (!ausweis) { - throw new APIError({ - code: "BAD_REQUEST", - message: "Ausweis existiert nicht.", - }); - } - - const rechnung = await prisma.rechnung.findFirst({ + } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { + ausweis = await prisma.verbrauchsausweisGewerbe.findUnique({ where: { - verbrauchsausweis_wohnen: { - id: id_ausweis + id: id_ausweis, + }, + include: { + aufnahme: { + include: { + bilder: true, + objekt: { + include: { + benutzer: true, + }, + }, + }, }, }, - orderBy: { - erstellt_am: "desc", + }); + } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { + ausweis = await prisma.bedarfsausweisWohnen.findUnique({ + where: { + id: id_ausweis, + }, + include: { + aufnahme: { + include: { + bilder: true, + objekt: { + include: { + benutzer: true, + }, + }, + }, + }, }, }); + } - if (!rechnung) { - throw new APIError({ - code: "BAD_REQUEST", - message: - "Die Rechnung wurde noch nicht erstellt, wir können nicht fortfahren.", - }); - } + if (!ausweis) { + throw new APIError({ + code: "BAD_REQUEST", + message: "Ausweis existiert nicht.", + }); + } - // TODO - // SECTION: Rechnung erstellen (LexOffice) - // Wir wollen die Rechnung an lex office versenden, und uns die ID von da holen. - // Falls die Rechnung bereits existiert ist das nicht nötig. - // if (!$rechnung->lex_office_id) { - // [$lex_office_id, $renr] = createInvoice($ausweis, $rechnung); - // sleep(1); // TODO: Nach der Umstellung von LexOffice auf etwas anderes MUSS das hier unbedingt entfernt werden! + const rechnung = await prisma.rechnung.findFirst({ + where: { + verbrauchsausweis_wohnen: { + id: id_ausweis, + }, + }, + orderBy: { + erstellt_am: "desc", + }, + }); - // if (!$lex_office_id || !$renr) { - // die("Bei der Erstellung der Rechnung ist etwas schiefgelaufen - Möglicherweise ist etwas mit LexOffice?"); - // } + if (!rechnung) { + throw new APIError({ + code: "BAD_REQUEST", + message: + "Die Rechnung wurde noch nicht erstellt, wir können nicht fortfahren.", + }); + } - // $rechnung->lex_office_id = $lex_office_id; - // $rechnung->rechnungsnummer = $renr; - // $rechnung->save(); - // } + // TODO + // SECTION: Rechnung erstellen (LexOffice) + // Wir wollen die Rechnung an lex office versenden, und uns die ID von da holen. + // Falls die Rechnung bereits existiert ist das nicht nötig. + // if (!$rechnung->lex_office_id) { + // [$lex_office_id, $renr] = createInvoice($ausweis, $rechnung); + // sleep(1); // TODO: Nach der Umstellung von LexOffice auf etwas anderes MUSS das hier unbedingt entfernt werden! - // TODO - // if ($ausweis->erledigt != 2) {$ausweis->erstellungsdatum = date("Y-m-d H:i:s");} - // $ausweis->erledigt = 2; - // $ausweis->save(); + // if (!$lex_office_id || !$renr) { + // die("Bei der Erstellung der Rechnung ist etwas schiefgelaufen - Möglicherweise ist etwas mit LexOffice?"); + // } - const pdfAusweis = await getAnsichtsausweis(ausweis, ausweis.aufnahme, ausweis.aufnahme.objekt, ausweis.aufnahme.bilder, ausweis.aufnahme.objekt.benutzer) - const pdfDatenblatt = await getDatenblatt( - ausweis, - ausweis.aufnahme, - ausweis.aufnahme.objekt, - ausweis.aufnahme.bilder, - ausweis.aufnahme.objekt.benutzer - ); + // $rechnung->lex_office_id = $lex_office_id; + // $rechnung->rechnungsnummer = $renr; + // $rechnung->save(); + // } - if (pdfAusweis) { - const pdfAusweisPath = fileURLToPath( - new URL( - `${PERSISTENT_DIR}/generated/Ausweis-${ausweis.id}.pdf`, - import.meta.url - ) - ); - fs.writeFileSync(pdfAusweisPath, pdfAusweis); - } + // TODO + // if ($ausweis->erledigt != 2) {$ausweis->erstellungsdatum = date("Y-m-d H:i:s");} + // $ausweis->erledigt = 2; + // $ausweis->save(); - if (pdfDatenblatt) { - const pdfDatenblattPath = fileURLToPath( - new URL( - `${PERSISTENT_DIR}/generated/Datenblatt-${ausweis.id}.pdf`, - import.meta.url - ) - ); - - fs.writeFileSync(pdfDatenblattPath, pdfDatenblatt); - } + const pdfAusweis = await getAnsichtsausweis( + ausweis, + ausweis.aufnahme, + ausweis.aufnahme.objekt, + ausweis.aufnahme.bilder, + ausweis.aufnahme.objekt.benutzer + ); + const pdfDatenblatt = await getDatenblatt( + ausweis, + ausweis.aufnahme, + ausweis.aufnahme.objekt, + ausweis.aufnahme.bilder, + ausweis.aufnahme.objekt.benutzer + ); - let text: string; + if (pdfAusweis) { + const command = new PutObjectCommand({ + Bucket: "ibc-pdfs", + Key: `ID_${ausweis.id}_Energieausweis.pdf`, + Body: pdfAusweis, + ACL: "private", + }); - if (rechnung.status === Enums.Rechnungsstatus.paid) { - text = ` + const response = await s3Client.send(command); + } + + if (pdfDatenblatt) { + const command = new PutObjectCommand({ + Bucket: "ibc-pdfs", + Key: `ID_${ausweis.id}_Energieausweis.pdf`, + Body: pdfDatenblatt, + ACL: "private", + }); + + const response = await s3Client.send(command); + } + + let text: string; + + if (rechnung.status === Enums.Rechnungsstatus.paid) { + text = `

Sehr geehrte*r ${user.vorname} ${user.name},

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. Den Rechnungsbetrag haben Sie bereits bezahlt. Vielen Dank.

@@ -145,8 +213,8 @@ fon 040 · 209339850
fax 040 · 209339859

`; - } else { - text = ` + } else { + text = `

Sehr geehrte*r ${user.vorname} ${user.name},

im Anhang finden Sie Ihren geprüften Energieusweis inkl. Rechnung als PDF-Datei. Nachfolgend finden Sie unsere Bankverbindung. Bitte geben Sie als Verwendungszweck die Rechnungsnummer an (siehe unten). Vielen Dank.

@@ -197,15 +265,13 @@ fon 040 · 209339850
fax 040 · 209339859

`; - } - - await transport.sendMail({ - from: `"IBCornelsen" `, - to: user.email, - subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`, - text, - }); - } + + await transport.sendMail({ + from: `"IBCornelsen" `, + to: user.email, + subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`, + text, + }); }, }); diff --git a/src/pages/api/rechnung/index.ts b/src/pages/api/rechnung/index.ts index e1c4aced..4d3bdc05 100644 --- a/src/pages/api/rechnung/index.ts +++ b/src/pages/api/rechnung/index.ts @@ -49,7 +49,7 @@ export const PUT = defineApiRoute({ // Wir erstellen eine Mollie Payment Referenz und eine neue Rechnung in unserer Datenbank, daraufhin geben // wir eine Checkout URL zurück auf die der Nutzer weitergeleitet werden kann. - const { ausweis_id, ausweisart, bezahlmethode, services } = input; + const { ausweis_id, ausweisart, bezahlmethode, services, partner_code } = input; const adapter = getPrismaAusweisAdapter(ausweis_id); @@ -105,6 +105,7 @@ export const PUT = defineApiRoute({ } }, services, + partner_code } }); } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { @@ -121,6 +122,7 @@ export const PUT = defineApiRoute({ } }, services, + partner_code } }); } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { @@ -137,6 +139,7 @@ export const PUT = defineApiRoute({ } }, services, + partner_code } }); } diff --git a/src/pages/kundendaten.astro b/src/pages/kundendaten.astro index 7eca88e9..0e7d94a1 100644 --- a/src/pages/kundendaten.astro +++ b/src/pages/kundendaten.astro @@ -16,7 +16,7 @@ if (!params.has("ausweis") || !params.has("aufnahme") || !params.has("objekt") | return Astro.redirect("/404") } -let ausweis, aufnahme, objekt, ausweisart, bilder, unterlagen; +let ausweis, aufnahme, objekt, ausweisart, bilder, unterlagen, partner_code; try { ausweis = JSON.parse(params.get("ausweis") || "") aufnahme = JSON.parse(params.get("aufnahme") || "") @@ -24,6 +24,7 @@ try { ausweisart = JSON.parse(params.get("ausweisart") || "") as Enums.Ausweisart; bilder = JSON.parse(params.get("bilder") || ""); unterlagen = JSON.parse(params.get("unterlagen") || "[]") + partner_code = params.get("partner_code") || "" if (!ausweisart || !Object.keys(Enums.Ausweisart).includes(ausweisart)) { throw new Error() @@ -35,6 +36,6 @@ try { --- - + diff --git a/src/pages/pdf/ansichtsausweis.ts b/src/pages/pdf/ansichtsausweis.ts index 7ef8c4eb..472d37d0 100644 --- a/src/pages/pdf/ansichtsausweis.ts +++ b/src/pages/pdf/ansichtsausweis.ts @@ -2,11 +2,11 @@ import { AufnahmeClient, BenutzerClient, getAusweisartFromId, ObjektClient, Uplo import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js"; import { pdfVerbrauchsausweisGewerbe } from "#lib/pdf/pdfVerbrauchsausweisGewerbe.js"; import { pdfVerbrauchsausweisWohnen } from "#lib/pdf/pdfVerbrauchsausweisWohnen.js"; -import { Enums } from "#lib/client/prisma.js"; +import { BedarfsausweisWohnen, 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 { getVerbrauchsausweisWohnen, getVerbrauchsausweisGewerbe, getAufnahme, getObjekt, getBilder, getBedarfsausweisWohnen } from "#lib/server/db.js"; import { getCurrentUser } from "#lib/server/user.js"; export const GET: APIRoute = async (Astro) => { @@ -18,7 +18,7 @@ export const GET: APIRoute = async (Astro) => { const ausweisart = getAusweisartFromId(ausweis_id) - let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | null = null; + let ausweis: VerbrauchsausweisWohnenClient | VerbrauchsausweisGewerbeClient | BedarfsausweisWohnen | null = null; let aufnahme: AufnahmeClient = {} as AufnahmeClient; let objekt: ObjektClient = {} as ObjektClient; let user: BenutzerClient = {} as BenutzerClient; @@ -28,9 +28,10 @@ export const GET: APIRoute = async (Astro) => { ausweis = await getVerbrauchsausweisWohnen(ausweis_id) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { ausweis = await getVerbrauchsausweisGewerbe(ausweis_id) + } else if (ausweisart === Enums.Ausweisart.BedarfsausweisWohnen) { + ausweis = await getBedarfsausweisWohnen(ausweis_id) } - if (!ausweis) { return new Response(null, { status: 404 }); } @@ -44,9 +45,10 @@ export const GET: APIRoute = async (Astro) => { user = await getCurrentUser(Astro) let pdf: Uint8Array | null = null; - if (ausweis.alte_ausweis_id) { + if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) { + const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray // Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren. - pdf = await getS3File("ibc-pdfs", `ID_${ausweis.alte_ausweis_id}_Energieausweis.pdf`) + pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Energieausweis.pdf`) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { pdf = await pdfVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, bilder, user); } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { @@ -73,7 +75,7 @@ export const POST: APIRoute = async (Astro) => { const ausweisart: Enums.Ausweisart = JSON.parse(params.get("ausweisart") || "") - let user: BenutzerClient = {}; + let user: BenutzerClient = {} as BenutzerClient; try { user = await caller.user.self.GET.fetch(undefined, { diff --git a/src/pages/pdf/datenblatt.ts b/src/pages/pdf/datenblatt.ts index f581e9f5..87d22974 100644 --- a/src/pages/pdf/datenblatt.ts +++ b/src/pages/pdf/datenblatt.ts @@ -44,9 +44,10 @@ export const GET: APIRoute = async (Astro) => { user = await getCurrentUser(Astro) let pdf: Uint8Array | null = null; - if (ausweis.alte_ausweis_id) { + if (/[A-Z]{2}[0-9]{8}/.test(ausweis.id)) { + const id = ausweis.id.match(/[A-Z]{2}([0-9]{8})/) as RegExpMatchArray // Dieser Ausweis wurde mit der alten Version erstellt, das PDF sollte bereits existieren. - pdf = await getS3File("ibc-pdfs", `ID_${ausweis.alte_ausweis_id}_Datenblatt.pdf`) + pdf = await getS3File("ibc-pdfs", `ID_${id[1]}_Datenblatt.pdf`) } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen) { pdf = await pdfDatenblattVerbrauchsausweisWohnen(ausweis as VerbrauchsausweisWohnenClient, aufnahme, objekt, user, bilder); } else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) { diff --git a/src/testing/daten-umziehen.ts b/src/testing/daten-umziehen.ts index 40766b78..cb4f46a5 100644 --- a/src/testing/daten-umziehen.ts +++ b/src/testing/daten-umziehen.ts @@ -1,6 +1,6 @@ import moment from "moment"; -import newUserIdMap from "./new-user-id-map.json" assert { type: "json" }; -import processed from "./new-ausweis-id-map.json" assert { type: "json" }; +import newUserIdMap from "./new-user-id-map.json" with { type: "json" }; +import processed from "./new-ausweis-id-map.json" with { type: "json" }; import { Benutzer, Enums, prisma } from "#lib/server/prisma.js"; import * as fs from "fs"; import { fileURLToPath } from "url"; @@ -25,455 +25,453 @@ if (!fs.existsSync(path)) { const file = fs.createReadStream(path, "utf8"); Papa.parse(file, { header: true, - step: async function(results) { - const dataset = results.data as any; - - if (dataset.id in processed) { - return; - } - const user_id = dataset.user_id; - - let user: Benutzer | null = null; - if (!(user_id in newUserIdMap)) { - console.log(`Missing user ${user_id}`); - - if (dataset.email) { - user = await prisma.benutzer.findUnique({ - where: { - email: dataset.email + async complete(results, file) { + for (const dataset of results.data as any) { + if (dataset.id in processed) { + return; + } + const user_id = dataset.user_id; + + let user: Benutzer | null = null; + if (!(user_id in newUserIdMap)) { + console.log(`Missing user ${user_id}`); + + const email = dataset.email || dataset.rechnung_email + if (email) { + user = await prisma.benutzer.findUnique({ + where: { + email + } + }) + + + if (!user) { + const id = generatePrefixedId(6, VALID_UUID_PREFIXES.User) + + user = await prisma.benutzer.create({ + data: { + id, + email, + passwort: hashPassword(Math.random().toString(36).slice(-8)), + adresse: dataset.strasse, + ort: dataset.ort, + plz: dataset.plz, + name: dataset.name, + vorname: dataset.vorname, + rolle: Enums.BenutzerRolle.USER, + telefon: dataset.telefonnummer, + }, + }); + } + + newUserIdMap[user_id] = user.id; + saveUserMap(); } - }) - - - if (!user) { - const id = generatePrefixedId(6, VALID_UUID_PREFIXES.User) - - user = await prisma.benutzer.create({ - data: { - id, - email: dataset.email, - passwort: hashPassword(Math.random().toString(36).slice(-8)), - adresse: dataset.strasse, - ort: dataset.ort, - plz: dataset.plz, - name: dataset.name, - vorname: dataset.vorname, - rolle: Enums.BenutzerRolle.USER, - telefon: dataset.telefonnummer, + } else { + user = await prisma.benutzer.findUnique({ + where: { + id: newUserIdMap[user_id], }, }); } - - newUserIdMap[user_id] = user.id; - saveUserMap(); - } - } else { - user = await prisma.benutzer.findUnique({ - where: { - id: newUserIdMap[user_id], - }, - }); - } - - if (!user) { - saveProcessed(); - // throw new Error("Benutzer ist nicht vorhanden."); - return - } - - const objekt_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt) - const objekt = await prisma.objekt.create({ - data: { - id: objekt_id, - adresse: dataset.objekt_strasse, - erstellungsdatum: moment(dataset.erstellungsdatum).toDate(), - ort: dataset.objekt_ort, - plz: dataset.objekt_plz, - benutzer: { - connect: { - id: user.id, - }, - }, - }, - }); - - const aufnahme_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt) - - const aufnahme = await prisma.aufnahme.create({ - data: { - id: aufnahme_id, - alternative_heizung: dataset.alheizung == "1", - alternative_kuehlung: dataset.alkuehlung == "1", - alternative_lueftung: dataset.allueftung == "1", - alternative_warmwasser: dataset.alwarmwasser == "1", - aussenwand_gedaemmt: dataset.aussenwand_gedaemmt == "1", - aussenwand_min_12cm_gedaemmt: - dataset.aussenwand_min_12cm_gedaemmt == "1", - baujahr_gebaeude: parseInt(dataset.baujahr_gebaeude) ? [parseInt(dataset.baujahr_gebaeude)] : [], - baujahr_heizung: parseInt(dataset.baujahr_anlage) ? [parseInt(dataset.baujahr_anlage)] : [], - baujahr_klima: parseInt(dataset.baujahr_klimaanlage) ? [parseInt(dataset.baujahr_klimaanlage)] : [], - benutzer: { - connect: { - id: user.id, - }, - }, - objekt: { - connect: { - id: objekt.id, - }, - }, - dachgeschoss: - dataset.dachgeschoss == "Beheizt" - ? Enums.Heizungsstatus.BEHEIZT - : dataset.dachgeschoss == "Nicht Vorhanden" - ? Enums.Heizungsstatus.NICHT_VORHANDEN - : Enums.Heizungsstatus.UNBEHEIZT, - brennwert_kessel: dataset.brennwert_kessel == "1", - dachgeschoss_gedaemmt: dataset.dachgeschoss_gedaemmt == "1", - dachgeschoss_min_12cm_gedaemmt: - dataset.dachgeschoss_min_12cm_gedaemmt == "1", - doppel_verglasung: dataset.doppel_verglasung == "1", - dreifach_verglasung: dataset.dreifach_verglasung == "1", - durchlauf_erhitzer: dataset.durchlauf_erhitzer == "1", - einfach_verglasung: dataset.einfach_verglasung == "1", - einzelofen: dataset.einzelofen == "1", - einheiten: parseInt(dataset.anzahl_einheiten), - fenster_dicht: dataset.fenster_dicht == "1", - fenster_teilweise_undicht: - dataset.fenster_teilweise_undicht == "1", - flaeche: parseFloat(dataset.wohnflaeche), - nutzflaeche: parseFloat(dataset.nutzflaeche), - gebaeudeteil: dataset.objekt_gebaeudeteil, - gebaeudetyp: dataset.objekt_typ, - heizungsrohre_gedaemmt: dataset.heizungsrohre_gedaemmt == "1", - isolier_verglasung: dataset.isolier_verglasung == "1", - keller: - dataset.keller_beheizt == "Beheizt" - ? Enums.Heizungsstatus.BEHEIZT - : dataset.dachgeschoss == "Nicht Vorhanden" - ? Enums.Heizungsstatus.NICHT_VORHANDEN - : Enums.Heizungsstatus.UNBEHEIZT, - keller_decke_gedaemmt: dataset.keller_decke_gedaemmt == "1", - keller_wand_gedaemmt: dataset.keller_wand_gedaemmt == "1", - kuehlung: dataset.wird_gekuehlt, - erstellungsdatum: moment(dataset.erstellungsdatum).toDate(), - rolllaeden_kaesten_gedaemmt: - dataset.rolllaeden_kaesten_gedaemmt == "1", - leerstand: parseInt(dataset.leerstand), - lueftung: - dataset.lueftungskonzept == "Fensterlüftung" - ? Enums.Lueftungskonzept.Fensterlueftung - : dataset.lueftungskonzept == - "Lüftungsanlage mit Wärmerückgewinnung" - ? Enums.Lueftungskonzept - .LueftungsanlageMitWaermerueckgewinnung - : dataset.lueftungskonzept == - "Lüftungsanlage ohne Wärmerückgewinnung" - ? Enums.Lueftungskonzept - .LueftungsanlageOhneWaermerueckgewinnung - : Enums.Lueftungskonzept.Schachtlueftung, - niedertemperatur_kessel: dataset.niedertemperatur_kessel == "1", - oberste_geschossdecke_gedaemmt: - dataset.oberste_geschossdecke_gedaemmt == "1", - oberste_geschossdecke_min_12cm_gedaemmt: - dataset.oberste_geschossdecke_min_12cm_gedaemmt == "1", - photovoltaik: dataset.photovoltaik == "1", - raum_temperatur_regler: dataset.raum_temperatur_regler == "1", - saniert: dataset.objekt_saniert == "1", - solarsystem_warmwasser: dataset.solarsystem_warmwasser == "1", - standard_kessel: dataset.standard_kessel == "1", - tueren_dicht: dataset.tueren_dicht == "1", - tueren_undicht: dataset.tueren_undicht == "1", - waermepumpe: dataset.waermepumpe == "1", - warmwasser_rohre_gedaemmt: - dataset.warmwasser_rohre_gedaemmt == "1", - zentralheizung: dataset.zentralheizung == "1", - zirkulation: dataset.zirkulation == "1", - }, - }); - - /* -------------------------------- Bilder ------------------------------- */ - const images: Record = JSON.parse(dataset.images); - - for (const kategorie in images) { - for (const image of images[kategorie]) { - const categoryMap = { - "daemmung": Enums.BilderKategorie.Daemmung, - "fenster": Enums.BilderKategorie.Fenster, - "general": Enums.BilderKategorie.Gebaeude, - "heizung": Enums.BilderKategorie.Heizung - } - - const id = generatePrefixedId(6, VALID_UUID_PREFIXES.Bild) - const img = await prisma.bild.create({ - data: { - id, - kategorie: categoryMap[kategorie as keyof typeof categoryMap], - aufnahme: { - connect: { - id: aufnahme.id - } - }, - name: image - } - }) + + if (!user) { + saveProcessed(); + throw new Error("Benutzer ist nicht vorhanden."); } - } - - if (dataset.ausweisart === "VA") { - const ausweis = await prisma.verbrauchsausweisWohnen.create({ - data: { - id: VALID_UUID_PREFIXES.VerbrauchsausweisWohnen + dataset.id, - alternative_heizung: dataset.alheizung == "1", - alternative_kuehlung: dataset.alkuehlung == "1", - alternative_lueftung: dataset.allueftung == "1", - alternative_warmwasser: dataset.alwarmwasser == "1", - anteil_warmwasser_1: parseFloat( - dataset.anteil_warmwasser_1 - ), - anteil_warmwasser_2: parseFloat( - dataset.anteil_warmwasser_2 - ), - aufnahme: { - connect: { - id: aufnahme.id, + + const objekt_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt) + const objekt = await prisma.objekt.create({ + data: { + id: objekt_id, + adresse: dataset.objekt_strasse, + erstellungsdatum: moment(dataset.erstellungsdatum).toDate(), + ort: dataset.objekt_ort, + plz: dataset.objekt_plz, + benutzer: { + connect: { + id: user.id, + }, }, }, - ausgestellt: dataset.erledigt == "2", - ausstellgrund: - dataset.ausstellgrund == "Vermietung" - ? Enums.Ausstellgrund.Vermietung - : dataset.ausstellgrund == "Verkauf" - ? Enums.Ausstellgrund.Verkauf - : dataset.ausstellgrund == "Modernisierung" - ? Enums.Ausstellgrund.Modernisierung - : dataset.ausstellgrund == "Neubau" - ? Enums.Ausstellgrund.Neubau - : Enums.Ausstellgrund.Sonstiges, - bestellt: dataset.erledigt == "0", - einheit_1: dataset.energietraeger_einheit_heizquelle_1, - einheit_2: dataset.energietraeger_einheit_heizquelle_2, - storniert: dataset.erledigt == "4", - benutzer: { - connect: { - id: user.id, + }); + + const aufnahme_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt) + + const aufnahme = await prisma.aufnahme.create({ + data: { + id: aufnahme_id, + alternative_heizung: dataset.alheizung == "1", + alternative_kuehlung: dataset.alkuehlung == "1", + alternative_lueftung: dataset.allueftung == "1", + alternative_warmwasser: dataset.alwarmwasser == "1", + aussenwand_gedaemmt: dataset.aussenwand_gedaemmt == "1", + aussenwand_min_12cm_gedaemmt: + dataset.aussenwand_min_12cm_gedaemmt == "1", + baujahr_gebaeude: parseInt(dataset.baujahr_gebaeude) ? [parseInt(dataset.baujahr_gebaeude)] : [], + baujahr_heizung: parseInt(dataset.baujahr_anlage) ? [parseInt(dataset.baujahr_anlage)] : [], + baujahr_klima: parseInt(dataset.baujahr_klimaanlage) ? [parseInt(dataset.baujahr_klimaanlage)] : [], + benutzer: { + connect: { + id: user.id, + }, }, - }, - kontrolldatei_angefragt: dataset.kontrolldatei == "1", - registriernummer: dataset.regnummer, - startdatum: moment().set("year", dataset.energieverbrauch_zeitraum_jahr).set("month", dataset.energieverbrauch_zeitraum_monat).toDate(), - verbrauch_1: parseFloat( - dataset.energieverbrauch_1_heizquelle_1 - ), - verbrauch_2: parseFloat( - dataset.energieverbrauch_2_heizquelle_1 - ), - verbrauch_3: parseFloat( - dataset.energieverbrauch_3_heizquelle_1 - ), - verbrauch_4: parseFloat( - dataset.energieverbrauch_1_heizquelle_2 - ), - verbrauch_5: parseFloat( - dataset.energieverbrauch_2_heizquelle_2 - ), - verbrauch_6: parseFloat( - dataset.energieverbrauch_3_heizquelle_2 - ), - warmwasser_anteil_bekannt: - dataset.warmwasser_anteil_bekannt == "1", - warmwasser_enthalten: dataset.warmwasser_enthalten == "1", - zurueckgestellt: dataset.zurueckGestellt == "1", - zusaetzliche_heizquelle: - dataset.zusaetzliche_heizquelle == "1", - ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(), - ausweistyp: Enums.AusweisTyp.Standard, - brennstoff_1: dataset.energietraeger_1, - brennstoff_2: dataset.energietraeger_2, - boxpruefung: dataset.boxpruefung == "1", - created_at: moment(dataset.erstellungsdatum).toDate(), - }, - }); - } else if (dataset.ausweisart === "VANW") { - const ausweis = await prisma.verbrauchsausweisGewerbe.create({ - data: { - id: VALID_UUID_PREFIXES.VerbrauchsausweisGewerbe + dataset.id, - alternative_heizung: dataset.alheizung == "1", - alternative_kuehlung: dataset.alkuehlung == "1", - alternative_lueftung: dataset.allueftung == "1", - alternative_warmwasser: dataset.alwarmwasser == "1", - anteil_warmwasser_1: parseFloat( - dataset.anteil_warmwasser_1 - ), - anteil_warmwasser_2: parseFloat( - dataset.anteil_warmwasser_2 - ), - aufnahme: { - connect: { - id: aufnahme.id, + objekt: { + connect: { + id: objekt.id, + }, }, + dachgeschoss: + dataset.dachgeschoss == "Beheizt" + ? Enums.Heizungsstatus.BEHEIZT + : dataset.dachgeschoss == "Nicht Vorhanden" + ? Enums.Heizungsstatus.NICHT_VORHANDEN + : Enums.Heizungsstatus.UNBEHEIZT, + brennwert_kessel: dataset.brennwert_kessel == "1", + dachgeschoss_gedaemmt: dataset.dachgeschoss_gedaemmt == "1", + dachgeschoss_min_12cm_gedaemmt: + dataset.dachgeschoss_min_12cm_gedaemmt == "1", + doppel_verglasung: dataset.doppel_verglasung == "1", + dreifach_verglasung: dataset.dreifach_verglasung == "1", + durchlauf_erhitzer: dataset.durchlauf_erhitzer == "1", + einfach_verglasung: dataset.einfach_verglasung == "1", + einzelofen: dataset.einzelofen == "1", + einheiten: parseInt(dataset.anzahl_einheiten), + fenster_dicht: dataset.fenster_dicht == "1", + fenster_teilweise_undicht: + dataset.fenster_teilweise_undicht == "1", + flaeche: parseFloat(dataset.wohnflaeche), + nutzflaeche: parseFloat(dataset.nutzflaeche), + gebaeudeteil: dataset.objekt_gebaeudeteil, + gebaeudetyp: dataset.objekt_typ, + heizungsrohre_gedaemmt: dataset.heizungsrohre_gedaemmt == "1", + isolier_verglasung: dataset.isolier_verglasung == "1", + keller: + dataset.keller_beheizt == "Beheizt" + ? Enums.Heizungsstatus.BEHEIZT + : dataset.dachgeschoss == "Nicht Vorhanden" + ? Enums.Heizungsstatus.NICHT_VORHANDEN + : Enums.Heizungsstatus.UNBEHEIZT, + keller_decke_gedaemmt: dataset.keller_decke_gedaemmt == "1", + keller_wand_gedaemmt: dataset.keller_wand_gedaemmt == "1", + kuehlung: dataset.wird_gekuehlt, + erstellungsdatum: moment(dataset.erstellungsdatum).toDate(), + rolllaeden_kaesten_gedaemmt: + dataset.rolllaeden_kaesten_gedaemmt == "1", + leerstand: parseInt(dataset.leerstand), + lueftung: + dataset.lueftungskonzept == "Fensterlüftung" + ? Enums.Lueftungskonzept.Fensterlueftung + : dataset.lueftungskonzept == + "Lüftungsanlage mit Wärmerückgewinnung" + ? Enums.Lueftungskonzept + .LueftungsanlageMitWaermerueckgewinnung + : dataset.lueftungskonzept == + "Lüftungsanlage ohne Wärmerückgewinnung" + ? Enums.Lueftungskonzept + .LueftungsanlageOhneWaermerueckgewinnung + : Enums.Lueftungskonzept.Schachtlueftung, + niedertemperatur_kessel: dataset.niedertemperatur_kessel == "1", + oberste_geschossdecke_gedaemmt: + dataset.oberste_geschossdecke_gedaemmt == "1", + oberste_geschossdecke_min_12cm_gedaemmt: + dataset.oberste_geschossdecke_min_12cm_gedaemmt == "1", + photovoltaik: dataset.photovoltaik == "1", + raum_temperatur_regler: dataset.raum_temperatur_regler == "1", + saniert: dataset.objekt_saniert == "1", + solarsystem_warmwasser: dataset.solarsystem_warmwasser == "1", + standard_kessel: dataset.standard_kessel == "1", + tueren_dicht: dataset.tueren_dicht == "1", + tueren_undicht: dataset.tueren_undicht == "1", + waermepumpe: dataset.waermepumpe == "1", + warmwasser_rohre_gedaemmt: + dataset.warmwasser_rohre_gedaemmt == "1", + zentralheizung: dataset.zentralheizung == "1", + zirkulation: dataset.zirkulation == "1", }, - ausgestellt: dataset.erledigt == "2", - ausstellgrund: - dataset.ausstellgrund == "Vermietung" - ? Enums.Ausstellgrund.Vermietung - : dataset.ausstellgrund == "Verkauf" - ? Enums.Ausstellgrund.Verkauf - : dataset.ausstellgrund == "Modernisierung" - ? Enums.Ausstellgrund.Modernisierung - : dataset.ausstellgrund == "Neubau" - ? Enums.Ausstellgrund.Neubau - : Enums.Ausstellgrund.Sonstiges, - bestellt: dataset.erledigt == "0", - einheit_1: dataset.energietraeger_einheit_heizquelle_1, - einheit_2: dataset.energietraeger_einheit_heizquelle_2, - storniert: dataset.erledigt == "4", - benutzer: { - connect: { - id: user.id, + }); + + /* -------------------------------- Bilder ------------------------------- */ + const images: Record = JSON.parse(dataset.images); + + for (const kategorie in images) { + for (const image of images[kategorie]) { + const categoryMap = { + "daemmung": Enums.BilderKategorie.Daemmung, + "fenster": Enums.BilderKategorie.Fenster, + "general": Enums.BilderKategorie.Gebaeude, + "heizung": Enums.BilderKategorie.Heizung + } + + const id = generatePrefixedId(6, VALID_UUID_PREFIXES.Bild) + const img = await prisma.bild.create({ + data: { + id, + kategorie: categoryMap[kategorie as keyof typeof categoryMap], + aufnahme: { + connect: { + id: aufnahme.id + } + }, + name: image + } + }) + } + } + + if (dataset.ausweisart === "VA") { + const ausweis = await prisma.verbrauchsausweisWohnen.create({ + data: { + id: VALID_UUID_PREFIXES.VerbrauchsausweisWohnen + dataset.id, + alternative_heizung: dataset.alheizung == "1", + alternative_kuehlung: dataset.alkuehlung == "1", + alternative_lueftung: dataset.allueftung == "1", + alternative_warmwasser: dataset.alwarmwasser == "1", + anteil_warmwasser_1: parseFloat( + dataset.anteil_warmwasser_1 + ), + anteil_warmwasser_2: parseFloat( + dataset.anteil_warmwasser_2 + ), + aufnahme: { + connect: { + id: aufnahme.id, + }, + }, + ausgestellt: dataset.erledigt == "2", + ausstellgrund: + dataset.ausstellgrund == "Vermietung" + ? Enums.Ausstellgrund.Vermietung + : dataset.ausstellgrund == "Verkauf" + ? Enums.Ausstellgrund.Verkauf + : dataset.ausstellgrund == "Modernisierung" + ? Enums.Ausstellgrund.Modernisierung + : dataset.ausstellgrund == "Neubau" + ? Enums.Ausstellgrund.Neubau + : Enums.Ausstellgrund.Sonstiges, + bestellt: dataset.erledigt == "0", + einheit_1: dataset.energietraeger_einheit_heizquelle_1, + einheit_2: dataset.energietraeger_einheit_heizquelle_2, + storniert: dataset.erledigt == "4", + benutzer: { + connect: { + id: user.id, + }, + }, + kontrolldatei_angefragt: dataset.kontrolldatei == "1", + registriernummer: dataset.regnummer, + startdatum: moment().set("year", dataset.energieverbrauch_zeitraum_jahr).set("month", dataset.energieverbrauch_zeitraum_monat).toDate(), + verbrauch_1: parseFloat( + dataset.energieverbrauch_1_heizquelle_1 + ), + verbrauch_2: parseFloat( + dataset.energieverbrauch_2_heizquelle_1 + ), + verbrauch_3: parseFloat( + dataset.energieverbrauch_3_heizquelle_1 + ), + verbrauch_4: parseFloat( + dataset.energieverbrauch_1_heizquelle_2 + ), + verbrauch_5: parseFloat( + dataset.energieverbrauch_2_heizquelle_2 + ), + verbrauch_6: parseFloat( + dataset.energieverbrauch_3_heizquelle_2 + ), + warmwasser_anteil_bekannt: + dataset.warmwasser_anteil_bekannt == "1", + warmwasser_enthalten: dataset.warmwasser_enthalten == "1", + zurueckgestellt: dataset.zurueckGestellt == "1", + zusaetzliche_heizquelle: + dataset.zusaetzliche_heizquelle == "1", + ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(), + ausweistyp: Enums.AusweisTyp.Standard, + brennstoff_1: dataset.energietraeger_1, + brennstoff_2: dataset.energietraeger_2, + boxpruefung: dataset.boxpruefung == "1", + created_at: moment(dataset.erstellungsdatum).toDate(), }, - }, - kontrolldatei_angefragt: dataset.kontrolldatei == "1", - registriernummer: dataset.regnummer, - startdatum: moment().set("year", dataset.energieverbrauch_zeitraum_jahr).set("month", dataset.energieverbrauch_zeitraum_monat).toDate(), - verbrauch_1: parseFloat( - dataset.energieverbrauch_1_heizquelle_1 - ), - verbrauch_2: parseFloat( - dataset.energieverbrauch_2_heizquelle_1 - ), - verbrauch_3: parseFloat( - dataset.energieverbrauch_3_heizquelle_1 - ), - verbrauch_4: parseFloat( - dataset.energieverbrauch_1_heizquelle_2 - ), - verbrauch_5: parseFloat( - dataset.energieverbrauch_2_heizquelle_2 - ), - verbrauch_6: parseFloat( - dataset.energieverbrauch_3_heizquelle_2 - ), - anteil_kuehlung_1: parseFloat(dataset.anteil_kuehlung_1), - anteil_kuehlung_2: parseFloat(dataset.anteil_kuehlung_2), - brennstoff_1: dataset.energietraeger_1, - brennstoff_2: dataset.energietraeger_2, - strom_1: parseFloat(dataset.vanw_strom_1), - strom_2: parseFloat(dataset.vanw_strom_2), - strom_3: parseFloat(dataset.vanw_strom_3), - kuehlung_enthalten: dataset.wird_gekuehlt == "1" ? true : false, - stromverbrauch_enthaelt_beleuchtung: dataset.nwbeleuchtung == "1", - stromverbrauch_enthaelt_heizung: dataset.nwheizung == "1", - stromverbrauch_enthaelt_kuehlung: dataset.nwkuehlung == "1", - stromverbrauch_enthaelt_lueftung: dataset.nwlueftung == "1", - stromverbrauch_enthaelt_sonstige: dataset.nwsonstiges, - stromverbrauch_enthaelt_warmwasser: dataset.nwwarmwasser == "1", - warmwasser_enthalten: dataset.warmwasser_enthalten == "1", - zurueckgestellt: dataset.zurueckGestellt == "1", - zusaetzliche_heizquelle: - dataset.zusaetzliche_heizquelle == "1", - ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(), - ausweistyp: Enums.AusweisTyp.Standard, - boxpruefung: dataset.boxpruefung == "1", - created_at: moment(dataset.erstellungsdatum).toDate(), - }, - }); - } else if (dataset.ausweisart === "BA") { - const ausweis = await prisma.bedarfsausweisWohnen.create({ - data: { - id: VALID_UUID_PREFIXES.BedarfsausweisWohnen + dataset.id, - alternative_heizung: dataset.alheizung == "1", - alternative_kuehlung: dataset.alkuehlung == "1", - alternative_lueftung: dataset.allueftung == "1", - alternative_warmwasser: dataset.alwarmwasser == "1", - aufnahme: { - connect: { - id: aufnahme.id, + }); + } else if (dataset.ausweisart === "VANW") { + const ausweis = await prisma.verbrauchsausweisGewerbe.create({ + data: { + id: VALID_UUID_PREFIXES.VerbrauchsausweisGewerbe + dataset.id, + alternative_heizung: dataset.alheizung == "1", + alternative_kuehlung: dataset.alkuehlung == "1", + alternative_lueftung: dataset.allueftung == "1", + alternative_warmwasser: dataset.alwarmwasser == "1", + anteil_warmwasser_1: parseFloat( + dataset.anteil_warmwasser_1 + ), + anteil_warmwasser_2: parseFloat( + dataset.anteil_warmwasser_2 + ), + aufnahme: { + connect: { + id: aufnahme.id, + }, + }, + ausgestellt: dataset.erledigt == "2", + ausstellgrund: + dataset.ausstellgrund == "Vermietung" + ? Enums.Ausstellgrund.Vermietung + : dataset.ausstellgrund == "Verkauf" + ? Enums.Ausstellgrund.Verkauf + : dataset.ausstellgrund == "Modernisierung" + ? Enums.Ausstellgrund.Modernisierung + : dataset.ausstellgrund == "Neubau" + ? Enums.Ausstellgrund.Neubau + : Enums.Ausstellgrund.Sonstiges, + bestellt: dataset.erledigt == "0", + einheit_1: dataset.energietraeger_einheit_heizquelle_1, + einheit_2: dataset.energietraeger_einheit_heizquelle_2, + storniert: dataset.erledigt == "4", + benutzer: { + connect: { + id: user.id, + }, + }, + kontrolldatei_angefragt: dataset.kontrolldatei == "1", + registriernummer: dataset.regnummer, + startdatum: moment().set("year", dataset.energieverbrauch_zeitraum_jahr).set("month", dataset.energieverbrauch_zeitraum_monat).toDate(), + verbrauch_1: parseFloat( + dataset.energieverbrauch_1_heizquelle_1 + ), + verbrauch_2: parseFloat( + dataset.energieverbrauch_2_heizquelle_1 + ), + verbrauch_3: parseFloat( + dataset.energieverbrauch_3_heizquelle_1 + ), + verbrauch_4: parseFloat( + dataset.energieverbrauch_1_heizquelle_2 + ), + verbrauch_5: parseFloat( + dataset.energieverbrauch_2_heizquelle_2 + ), + verbrauch_6: parseFloat( + dataset.energieverbrauch_3_heizquelle_2 + ), + anteil_kuehlung_1: parseFloat(dataset.anteil_kuehlung_1), + anteil_kuehlung_2: parseFloat(dataset.anteil_kuehlung_2), + brennstoff_1: dataset.energietraeger_1, + brennstoff_2: dataset.energietraeger_2, + strom_1: parseFloat(dataset.vanw_strom_1), + strom_2: parseFloat(dataset.vanw_strom_2), + strom_3: parseFloat(dataset.vanw_strom_3), + kuehlung_enthalten: dataset.wird_gekuehlt == "1" ? true : false, + stromverbrauch_enthaelt_beleuchtung: dataset.nwbeleuchtung == "1", + stromverbrauch_enthaelt_heizung: dataset.nwheizung == "1", + stromverbrauch_enthaelt_kuehlung: dataset.nwkuehlung == "1", + stromverbrauch_enthaelt_lueftung: dataset.nwlueftung == "1", + stromverbrauch_enthaelt_sonstige: dataset.nwsonstiges, + stromverbrauch_enthaelt_warmwasser: dataset.nwwarmwasser == "1", + warmwasser_enthalten: dataset.warmwasser_enthalten == "1", + zurueckgestellt: dataset.zurueckGestellt == "1", + zusaetzliche_heizquelle: + dataset.zusaetzliche_heizquelle == "1", + ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(), + ausweistyp: Enums.AusweisTyp.Standard, + boxpruefung: dataset.boxpruefung == "1", + created_at: moment(dataset.erstellungsdatum).toDate(), }, - }, - ausgestellt: dataset.erledigt == "2", - ausstellgrund: - dataset.ausstellgrund == "Vermietung" - ? Enums.Ausstellgrund.Vermietung - : dataset.ausstellgrund == "Verkauf" - ? Enums.Ausstellgrund.Verkauf - : dataset.ausstellgrund == "Modernisierung" - ? Enums.Ausstellgrund.Modernisierung - : dataset.ausstellgrund == "Neubau" - ? Enums.Ausstellgrund.Neubau - : Enums.Ausstellgrund.Sonstiges, - bestellt: dataset.erledigt == "0", - storniert: dataset.erledigt == "4", - benutzer: { - connect: { - id: user.id, + }); + } else if (dataset.ausweisart === "BA") { + const ausweis = await prisma.bedarfsausweisWohnen.create({ + data: { + id: VALID_UUID_PREFIXES.BedarfsausweisWohnen + dataset.id, + alternative_heizung: dataset.alheizung == "1", + alternative_kuehlung: dataset.alkuehlung == "1", + alternative_lueftung: dataset.allueftung == "1", + alternative_warmwasser: dataset.alwarmwasser == "1", + aufnahme: { + connect: { + id: aufnahme.id, + }, + }, + ausgestellt: dataset.erledigt == "2", + ausstellgrund: + dataset.ausstellgrund == "Vermietung" + ? Enums.Ausstellgrund.Vermietung + : dataset.ausstellgrund == "Verkauf" + ? Enums.Ausstellgrund.Verkauf + : dataset.ausstellgrund == "Modernisierung" + ? Enums.Ausstellgrund.Modernisierung + : dataset.ausstellgrund == "Neubau" + ? Enums.Ausstellgrund.Neubau + : Enums.Ausstellgrund.Sonstiges, + bestellt: dataset.erledigt == "0", + storniert: dataset.erledigt == "4", + benutzer: { + connect: { + id: user.id, + }, + }, + kontrolldatei_angefragt: dataset.kontrolldatei == "1", + registriernummer: dataset.regnummer, + zurueckgestellt: dataset.zurueckGestellt == "1", + anteil_zusatzheizung: parseFloat(dataset.anteil_zusatzheizung), + anzahl_gauben: parseInt(dataset.anzahl_gauben), + anzahl_vollgeschosse: parseInt(dataset.anzahl_vollgeschosse), + aussenwand_bauart: dataset.aussenwand_bauart, + aussenwand_daemmung: parseFloat(dataset.aussenwand_daemmung), + aussenwand_flaeche: parseFloat(dataset.aussenwand_flaeche), + aussenwand_u_wert: parseFloat(dataset.aussenwand_u_wert), + aussenwandflaeche_unbeheizt: parseFloat(dataset.aussenwandflaeche_unbeheizt), + boden_bauart: dataset.boden_bauart, + boden_daemmung: parseFloat(dataset.boden_daemmung), + breite_gauben: parseFloat(dataset.breite_gauben), + dach_bauart: dataset.dach_bauart, + dach_daemmung: parseFloat(dataset.dach_daemmung), + dach_u_wert: parseFloat(dataset.dach_u_wert), + // TODO Das machen wir zwar so aber das ist doch scheiße.... + dachfenster_art: parseFloat(dataset.dachfenster_art), + dachfenster_flaeche: parseFloat(dataset.dachfenster_flaeche), + dachflaeche: parseFloat(dataset.dachflaeche), + decke_bauart: dataset.decke_bauart, + decke_daemmung: parseFloat(dataset.decke_daemmung), + decke_u_wert: parseFloat(dataset.decke_u_wert), + dicht: dataset.dicht == "1", + fenster_art_1: parseFloat(dataset.fenster_art_1), + fenster_art_2: parseFloat(dataset.fenster_art_2), + deckenflaeche: parseFloat(dataset.deckenflaeche), + fenster_flaeche_1: parseFloat(dataset.fenster_flaeche_1), + fenster_flaeche_2: parseFloat(dataset.fenster_flaeche_2), + fensterflaeche_nw_no: parseFloat(dataset.fensterflaeche_nw_no), + fensterflaeche_so_sw: parseFloat(dataset.fensterflaeche_so_sw), + fussboden_flaeche: parseFloat(dataset.fussboden_flaeche), + fussboden_u_wert: parseFloat(dataset.fussboden_u_wert), + geschosshoehe: parseFloat(dataset.geschosshoehe), + haustuer_art: parseFloat(dataset.haustuer_art), + haustuer_flaeche: parseFloat(dataset.haustuer_flaeche), + heizung_speicherung: dataset.heizung_speicherung, + heizung_verteilung: dataset.heizung_verteilung, + heizung_zentral: dataset.heizung_zentral == "1", + masse_a: parseFloat(dataset.masse_a), + masse_b: parseFloat(dataset.masse_b), + masse_c: parseFloat(dataset.masse_c), + masse_d: parseFloat(dataset.masse_d), + masse_e: parseFloat(dataset.masse_e), + masse_f: parseFloat(dataset.masse_f), + kollektor_flaeche: parseFloat(dataset.kollektor_flaeche), + volumen: parseFloat(dataset.volumen), + waerme_erzeugung_heizung: dataset.waerme_erzeugung_heizung, + warmwasser_erzeugung: dataset.warmwasser_erzeugung, + warmwasser_speicherung: dataset.warmwasser_speicherung, + warmwasser_verteilung: dataset.warmwasser_verteilung, + ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(), + ausweistyp: Enums.AusweisTyp.Standard, + boxpruefung: dataset.boxpruefung == "1", + created_at: moment(dataset.erstellungsdatum).toDate(), }, - }, - kontrolldatei_angefragt: dataset.kontrolldatei == "1", - registriernummer: dataset.regnummer, - zurueckgestellt: dataset.zurueckGestellt == "1", - anteil_zusatzheizung: parseFloat(dataset.anteil_zusatzheizung), - anzahl_gauben: parseInt(dataset.anzahl_gauben), - anzahl_vollgeschosse: parseInt(dataset.anzahl_vollgeschosse), - aussenwand_bauart: dataset.aussenwand_bauart, - aussenwand_daemmung: parseFloat(dataset.aussenwand_daemmung), - aussenwand_flaeche: parseFloat(dataset.aussenwand_flaeche), - aussenwand_u_wert: parseFloat(dataset.aussenwand_u_wert), - aussenwandflaeche_unbeheizt: parseFloat(dataset.aussenwandflaeche_unbeheizt), - boden_bauart: dataset.boden_bauart, - boden_daemmung: parseFloat(dataset.boden_daemmung), - breite_gauben: parseFloat(dataset.breite_gauben), - dach_bauart: dataset.dach_bauart, - dach_daemmung: parseFloat(dataset.dach_daemmung), - dach_u_wert: parseFloat(dataset.dach_u_wert), - // TODO Das machen wir zwar so aber das ist doch scheiße.... - dachfenster_art: parseFloat(dataset.dachfenster_art), - dachfenster_flaeche: parseFloat(dataset.dachfenster_flaeche), - dachflaeche: parseFloat(dataset.dachflaeche), - decke_bauart: dataset.decke_bauart, - decke_daemmung: parseFloat(dataset.decke_daemmung), - decke_u_wert: parseFloat(dataset.decke_u_wert), - dicht: dataset.dicht == "1", - fenster_art_1: parseFloat(dataset.fenster_art_1), - fenster_art_2: parseFloat(dataset.fenster_art_2), - deckenflaeche: parseFloat(dataset.deckenflaeche), - fenster_flaeche_1: parseFloat(dataset.fenster_flaeche_1), - fenster_flaeche_2: parseFloat(dataset.fenster_flaeche_2), - fensterflaeche_nw_no: parseFloat(dataset.fensterflaeche_nw_no), - fensterflaeche_so_sw: parseFloat(dataset.fensterflaeche_so_sw), - fussboden_flaeche: parseFloat(dataset.fussboden_flaeche), - fussboden_u_wert: parseFloat(dataset.fussboden_u_wert), - geschosshoehe: parseFloat(dataset.geschosshoehe), - haustuer_art: parseFloat(dataset.haustuer_art), - haustuer_flaeche: parseFloat(dataset.haustuer_flaeche), - heizung_speicherung: dataset.heizung_speicherung, - heizung_verteilung: dataset.heizung_verteilung, - heizung_zentral: dataset.heizung_zentral == "1", - masse_a: parseFloat(dataset.masse_a), - masse_b: parseFloat(dataset.masse_b), - masse_c: parseFloat(dataset.masse_c), - masse_d: parseFloat(dataset.masse_d), - masse_e: parseFloat(dataset.masse_e), - masse_f: parseFloat(dataset.masse_f), - kollektor_flaeche: parseFloat(dataset.kollektor_flaeche), - volumen: parseFloat(dataset.volumen), - waerme_erzeugung_heizung: dataset.waerme_erzeugung_heizung, - warmwasser_erzeugung: dataset.warmwasser_erzeugung, - warmwasser_speicherung: dataset.warmwasser_speicherung, - warmwasser_verteilung: dataset.warmwasser_verteilung, - ausstellungsdatum: moment(dataset.bestelldatum).isValid() ? moment(dataset.bestelldatum).toDate() : new Date(), - ausweistyp: Enums.AusweisTyp.Standard, - boxpruefung: dataset.boxpruefung == "1", - created_at: moment(dataset.erstellungsdatum).toDate(), - }, - }); - } - - processed[dataset.id as string] = true; - saveProcessed() - }, - complete(results, file) { + }); + } + + processed[dataset.id as string] = true; saveProcessed() + + } }, }); diff --git a/src/testing/new-ausweis-id-map.json b/src/testing/new-ausweis-id-map.json index 07cb8f0f..d71f656b 100644 --- a/src/testing/new-ausweis-id-map.json +++ b/src/testing/new-ausweis-id-map.json @@ -1 +1 @@ -{"12361536":true,"12361537":true,"12361538":true,"12361539":true,"12361540":true,"12361541":true,"12361542":true,"12361543":true,"12361544":true,"12361545":true,"12361546":true,"12361547":true,"12361548":true,"12361549":true,"12361550":true,"12361551":true,"12361552":true,"12361553":true,"12361554":true,"12361555":true,"12361556":true,"12361557":true,"12361558":true,"12361559":true,"12361560":true,"12361561":true,"12361562":true,"12361563":true,"12361564":true,"12361565":true,"12361566":true,"12361567":true,"12361568":true,"12361569":true,"12361570":true,"12361571":true,"12361572":true,"12361573":true,"12361574":true,"12361575":true,"12361576":true,"12361577":true,"12361578":true,"12361579":true,"12361580":true,"12361581":true,"12361582":true,"12361583":true,"12361584":true,"12361585":true,"12361586":true,"12361587":true,"12361588":true,"12361589":true,"12361590":true,"12361591":true,"12361592":true,"12361593":true,"12361595":true,"12361597":true,"12361598":true,"12361599":true,"12361600":true,"12361601":true,"12361602":true,"12361603":true,"12361604":true,"12361605":true,"12361606":true,"12361607":true,"12361608":true,"12361609":true,"12361610":true,"12361611":true,"12361612":true,"12361613":true,"12361614":true,"12361615":true,"12361616":true,"12361617":true,"12361618":true,"12361619":true,"12361620":true,"12361621":true,"12361622":true,"12361623":true,"12361624":true,"12361625":true,"12361626":true,"12361627":true,"12361628":true,"12361629":true,"12361630":true,"12361631":true,"12361632":true,"12361633":true,"12361634":true,"12361635":true,"12361636":true,"12361637":true,"12361638":true,"12361639":true,"12361640":true,"12361641":true,"12361642":true,"12361643":true,"12361644":true,"12361645":true,"12361646":true,"12361647":true,"12361648":true,"12361649":true,"12361650":true,"12361651":true,"12361652":true,"12361653":true,"12361654":true,"12361655":true,"12361656":true,"12361657":true,"12361658":true,"12361659":true,"12361660":true,"12361661":true,"12361662":true,"12361663":true,"12361664":true,"12361665":true,"12361666":true,"12361667":true,"12361668":true,"12361669":true,"12361670":true,"12361671":true,"12361673":true,"12361674":true,"12361675":true,"12361676":true,"12361677":true,"12361678":true,"12361679":true,"12361680":true,"12361681":true,"12361682":true,"12361683":true,"12361684":true,"12361685":true,"12361686":true,"12361687":true,"12361688":true,"12361689":true,"12361690":true,"12361691":true,"12361692":true,"12361693":true,"12361694":true,"12361695":true,"12361696":true,"12361697":true,"12361698":true,"12361699":true,"12361700":true,"12361701":true,"12361702":true,"12361703":true,"12361704":true,"12361705":true,"12361706":true,"12361707":true,"12361708":true,"12361709":true,"12361710":true,"12361711":true,"12361712":true,"12361713":true,"12361714":true,"12361715":true,"12361716":true,"12361718":true,"12361719":true,"12361720":true,"12361721":true,"12361722":true,"12361723":true,"12361724":true,"12361725":true,"12361726":true,"12361727":true,"12361728":true,"12361729":true,"12361730":true,"12361731":true,"12361732":true,"12361733":true,"12361734":true,"12361735":true,"12361736":true,"12361737":true,"12361738":true,"12361739":true,"12361740":true,"12361741":true,"12361742":true,"12361743":true,"12361744":true,"12361745":true,"12361746":true,"12361747":true,"12361748":true,"12361749":true,"12361750":true,"12361751":true,"12361752":true,"12361753":true,"12361754":true,"12361755":true,"12361756":true,"12361757":true,"12361758":true,"12361759":true,"12361760":true,"12361761":true,"12361762":true,"12361763":true,"12361764":true,"12361765":true,"12361766":true,"12361767":true,"12361768":true,"12361769":true,"12361770":true,"12361771":true,"12361772":true,"12361773":true,"12361774":true,"12361775":true,"12361776":true,"12361777":true,"12361778":true,"12361779":true,"12361780":true,"12361781":true,"12361782":true,"12361783":true,"12361784":true,"12361785":true,"12361786":true,"12361787":true,"12361788":true,"12361789":true,"12361790":true,"12361791":true,"12361792":true,"12361793":true,"12361794":true,"12361795":true,"12361796":true,"12361797":true,"12361798":true,"12361799":true,"12361800":true,"12361801":true,"12361802":true,"12361803":true,"12361804":true,"12361805":true,"12361806":true,"12361807":true,"12361808":true,"12361809":true,"12361810":true,"12361811":true,"12361812":true,"12361813":true,"12361814":true,"12361815":true,"12361816":true,"12361817":true,"12361818":true,"12361819":true,"12361820":true,"12361821":true,"12361822":true,"12361823":true,"12361824":true,"12361825":true,"12361826":true,"12361827":true,"12361828":true,"12361829":true,"12361830":true,"12361831":true,"12361832":true,"12361833":true,"12361834":true,"12361835":true,"12361836":true,"12361837":true,"12361838":true,"12361839":true,"12361840":true,"12361841":true,"12361842":true,"12361843":true,"12361844":true,"12361845":true,"12361846":true,"12361847":true,"12361848":true,"12361849":true,"12361850":true,"12361851":true,"12361852":true,"12361853":true,"12361854":true,"12361855":true,"12361856":true,"12361857":true,"12361858":true,"12361859":true,"12361860":true,"12361861":true,"12361862":true,"12361863":true,"12361864":true,"12361865":true,"12361866":true,"12361867":true,"12361868":true,"12361869":true,"12361870":true,"12361871":true,"12361872":true,"12361873":true,"12361874":true,"12361875":true,"12361876":true,"12361877":true,"12361878":true,"12361879":true,"12361880":true,"12361881":true,"12361882":true,"12361883":true,"12361884":true,"12361885":true,"12361886":true,"12361887":true,"12361888":true,"12361889":true,"12361890":true,"12361891":true,"12361892":true,"12361893":true,"12361894":true,"12361895":true,"12361896":true,"12361897":true,"12361898":true,"12361899":true,"12361900":true,"12361901":true,"12361902":true,"12361903":true,"12361904":true,"12361905":true,"12361906":true,"12361907":true,"12361908":true,"12361909":true,"12361910":true,"12361911":true,"12361912":true,"12361913":true,"12361914":true,"12361915":true,"12361916":true,"12361917":true,"12361918":true,"12361919":true,"12361920":true,"12361921":true,"12361922":true,"12361923":true,"12361924":true,"12361925":true,"12361926":true,"12361927":true,"12361928":true,"12361929":true,"12361930":true,"12361931":true,"12361932":true,"12361933":true,"12361934":true,"12361935":true,"12361936":true,"12361937":true,"12361938":true,"12361939":true,"12361940":true,"12361941":true,"12361942":true,"12361943":true,"12361944":true,"12361945":true,"12361946":true,"12361947":true,"12361948":true,"12361949":true,"12361950":true,"12361951":true,"12361952":true,"12361953":true,"12361954":true,"12361955":true,"12361956":true,"12361957":true,"12361958":true,"12361959":true,"12361960":true,"12361961":true,"12361962":true,"12361963":true,"12361964":true,"12361965":true,"12361966":true,"12361967":true,"12361968":true,"12361969":true,"12361970":true,"12361971":true,"12361972":true,"12361973":true,"12361974":true,"12361975":true,"12361976":true,"12361977":true,"12361978":true,"12361979":true,"12361980":true,"12361981":true,"12361982":true,"12361983":true,"12361984":true,"12361985":true,"12361986":true,"12361987":true,"12361988":true,"12361989":true,"12361990":true,"12361991":true,"12361992":true,"12361993":true,"12361994":true,"12361995":true,"12361996":true,"12361997":true,"12361998":true,"12361999":true,"12362000":true,"12362001":true,"12362002":true,"12362003":true,"12362004":true,"12362005":true,"12362006":true,"12362007":true,"12362008":true,"12362009":true,"12362010":true,"12362011":true,"12362012":true,"12362013":true,"12362014":true,"12362015":true,"12362016":true,"12362017":true,"12362018":true,"12362019":true,"12362020":true,"12362021":true,"12362022":true,"12362023":true,"12362024":true,"12362025":true,"12362026":true,"12362027":true,"12362028":true,"12362029":true,"12362030":true,"12362031":true,"12362032":true,"12362033":true,"12362034":true,"12362035":true} \ No newline at end of file +{"12361718":true,"12361719":true,"12361720":true,"12361721":true,"12361722":true,"12361723":true,"12361724":true,"12361725":true,"12361726":true,"12361727":true,"12361728":true,"12361729":true,"12361730":true,"12361731":true,"12361732":true,"12361733":true,"12361734":true,"12361735":true,"12361736":true,"12361737":true,"12361738":true,"12361739":true,"12361740":true,"12361741":true,"12361742":true,"12361743":true,"12361744":true,"12361745":true,"12361746":true,"12361747":true,"12361748":true,"12361749":true,"12361750":true,"12361751":true,"12361752":true,"12361753":true,"12361754":true,"12361755":true,"12361756":true,"12361757":true,"12361758":true,"12361759":true,"12361760":true,"12361761":true,"12361762":true,"12361763":true,"12361764":true,"12361765":true,"12361766":true,"12361767":true,"12361768":true,"12361769":true,"12361770":true,"12361771":true,"12361772":true,"12361773":true,"12361774":true,"12361775":true,"12361776":true,"12361777":true,"12361778":true,"12361779":true,"12361780":true,"12361781":true,"12361782":true,"12361783":true,"12361784":true,"12361785":true,"12361786":true,"12361787":true,"12361788":true,"12361789":true,"12361790":true,"12361791":true,"12361792":true,"12361793":true,"12361794":true,"12361795":true,"12361796":true,"12361797":true,"12361798":true,"12361799":true,"12361800":true,"12361801":true,"12361802":true,"12361803":true,"12361804":true,"12361805":true,"12361806":true,"12361807":true,"12361808":true,"12361809":true,"12361810":true,"12361811":true,"12361812":true,"12361813":true,"12361814":true,"12361815":true,"12361816":true,"12361817":true,"12361818":true,"12361819":true,"12361820":true,"12361821":true,"12361822":true,"12361823":true,"12361824":true,"12361825":true,"12361826":true,"12361827":true,"12361828":true,"12361829":true,"12361830":true,"12361831":true,"12361832":true,"12361833":true,"12361834":true,"12361835":true,"12361836":true,"12361837":true,"12361838":true,"12361839":true,"12361840":true,"12361841":true,"12361842":true,"12361843":true,"12361844":true,"12361845":true,"12361846":true,"12361847":true,"12361848":true,"12361849":true,"12361850":true,"12361851":true,"12361852":true,"12361853":true,"12361854":true,"12361855":true,"12361856":true,"12361857":true,"12361858":true,"12361859":true,"12361860":true,"12361861":true,"12361862":true,"12361863":true,"12361864":true,"12361865":true,"12361866":true,"12361867":true,"12361868":true,"12361869":true,"12361870":true,"12361871":true,"12361872":true,"12361873":true,"12361874":true,"12361875":true,"12361876":true,"12361877":true,"12361878":true,"12361879":true,"12361880":true,"12361881":true,"12361882":true,"12361883":true,"12361884":true,"12361885":true,"12361886":true,"12361887":true,"12361888":true,"12361889":true,"12361890":true,"12361891":true,"12361892":true,"12361893":true,"12361894":true,"12361895":true,"12361896":true,"12361897":true,"12361898":true,"12361899":true,"12361900":true,"12361901":true,"12361902":true,"12361903":true,"12361904":true,"12361905":true,"12361906":true,"12361907":true,"12361908":true,"12361909":true,"12361910":true,"12361911":true,"12361912":true,"12361913":true,"12361914":true,"12361915":true,"12361916":true,"12361917":true,"12361918":true,"12361919":true,"12361920":true,"12361921":true,"12361922":true,"12361923":true,"12361924":true,"12361925":true,"12361926":true,"12361927":true,"12361928":true,"12361929":true,"12361930":true,"12361931":true,"12361932":true,"12361933":true,"12361934":true,"12361935":true,"12361936":true,"12361937":true,"12361938":true,"12361939":true,"12361940":true,"12361941":true,"12361942":true,"12361943":true,"12361944":true,"12361945":true,"12361946":true,"12361947":true,"12361948":true,"12361949":true,"12361950":true,"12361951":true,"12361952":true,"12361953":true,"12361954":true,"12361955":true,"12361956":true,"12361957":true,"12361958":true,"12361959":true,"12361960":true,"12361961":true,"12361962":true,"12361963":true,"12361964":true,"12361965":true,"12361966":true,"12361967":true,"12361968":true,"12361969":true,"12361970":true,"12361971":true,"12361972":true,"12361973":true,"12361974":true,"12361975":true,"12361976":true,"12361977":true,"12361978":true,"12361979":true,"12361980":true,"12361981":true,"12361982":true,"12361983":true,"12361984":true,"12361985":true,"12361986":true,"12361987":true,"12361988":true,"12361989":true,"12361990":true,"12361991":true,"12361992":true,"12361993":true,"12361994":true,"12361995":true,"12361996":true,"12361997":true,"12361998":true,"12361999":true,"12362000":true,"12362001":true,"12362002":true,"12362003":true,"12362004":true,"12362005":true,"12362006":true,"12362007":true,"12362008":true,"12362009":true,"12362010":true,"12362011":true,"12362012":true,"12362013":true,"12362014":true,"12362015":true,"12362016":true,"12362017":true,"12362018":true,"12362019":true,"12362020":true,"12362021":true,"12362022":true,"12362023":true,"12362024":true,"12362025":true,"12362026":true,"12362027":true,"12362028":true,"12362029":true,"12362030":true,"12362031":true,"12362032":true,"12362033":true,"12362034":true,"12362035":true} \ No newline at end of file diff --git a/src/testing/new-user-id-map.json b/src/testing/new-user-id-map.json index 4cefe031..fb5d7f43 100644 --- a/src/testing/new-user-id-map.json +++ b/src/testing/new-user-id-map.json @@ -1 +1 @@ -{"512184":"USSN4GRK","513185":"USWFTFCI","514361":"USY1MN6Z","521061":"USUX6LNU","527029":"USEI2UBC","528406":"US9FBB71","529214":"US5G6B2D","529414":"USQYCZUA","530180":"US52P5LF","532940":"US6UFRCZ","534784":"US5G6B2D","537750":"USQ8F3A1","538002":"USISS87K","538260":"US54RJBS","539126":"USADHKFC","540195":"USQ8BTUH","540379":"US5G6B2D","540406":"USA9WKA8","541373":"US7MEVP9","541430":"USP6OZP2","541716":"US92DI9B","542174":"US69I3PL","542860":"USASJK2O","543143":"US5G6B2D","543714":"US1PWS5U","545199":"USGAQXV5","545365":"USH35ATK","546049":"US34169T","546572":"US5G6B2D","547459":"US5G6B2D","547667":"US5G6B2D","547773":"USMCLIQ5","548317":"USB3OUWY","548678":"US5G6B2D","548815":"US5G6B2D","549605":"US5G6B2D","550502":"USP6WTLC","551372":"USAIS9FS","551563":"USQCA3IB","551934":"US5G6B2D","551993":"US66AXHN","552045":"US5G6B2D","552584":"USO9NJNR","552793":"USUX6LNU","569227":"USP1XF5U","569251":"US5G6B2D","570862":"US8UM1V7","571331":"US5G6B2D","571505":"US5G6B2D","572637":"US9KOGRV","572829":"USCJ7SJT","572958":"USO8OKIT","573508":"USOZPXZS","574589":"US8LR8ML","574897":"USURCF3U","575156":"US5G6B2D","575461":"US5G6B2D","575710":"USLXEMP3","575773":"USHDOTP3","575807":"USIY257T","575924":"USLX2O15","575962":"USDXMGFL","575985":"USF7Z3QQ","576082":"USQ1SQST","576311":"US52LI1F","576511":"USUX6LNU","576531":"US5K5V49","576539":"US6OVPBC","576571":"US5G6B2D","576602":"US5G6B2D","576603":"US5G6B2D","576629":"US5G6B2D","576659":"USLV5QDE","576775":"US8E7JV9","576780":"US5G6B2D","576786":"USXK8C8E","576804":"USO3OKS2","576817":"US5G6B2D","576834":"USIPSHRW","576856":"USX65JYC","576860":"USUX6LNU","576861":"USOBMUW2","576863":"USGJTAU7","576864":"USLINXPG","576865":"USX4MJLI","576866":"US83YPTW","576867":"USDAVVT5","576868":"US828MZD","576869":"USRCFX86","576870":"USPGYCS3","576871":"US4GLD57","576872":"USY1IE27","576873":"USQY9JLT","576874":"US7RIF2T","576875":"USV4K1AU","576876":"US8IND2E","576878":"USUX6LNU","576879":"USJ4QJRL","576880":"USC1LGHO","576881":"USDTAPM5","576882":"US7HE8V6","576883":"US5G6B2D","576884":"US7V5VWR","576885":"USGSLVAM","576886":"US7IEN98","576887":"US5EQW88","576888":"USXG6BU3","576889":"USI4M6FS","576890":"USTRCOY6","576891":"US7F2PWP","576892":"US6W919Y","576893":"USMS1EOP","576894":"US5G6B2D","576895":"US5G6B2D","576896":"US3MRJO7","576897":"US89RT2Z","576898":"USR41LRP","576899":"US6OS52U","576900":"USRREHVD","576901":"USKXKB17","576902":"USKUYKHZ","576903":"USQEC8BW","576904":"US3NVNS8","576905":"USUX6LNU","576906":"USOA9M1P","576907":"USRZ5XTW","576908":"USHUT1BI","576909":"USEGOLXK","576910":"USEYGTZR","576911":"USLYBAPW","576912":"USPODNG9","576913":"US5G6B2D","576914":"USPZWWCO","576915":"US3EOU4M","576916":"USPNJ3L8","576917":"US5G6B2D","576918":"USYWSFSG","576919":"US5G6B2D","576920":"USUX6LNU","576921":"US51NE14","576922":"USZAG6HF","576923":"USI33IYO","576924":"UST38GYG","576925":"US9QM1ZU","576926":"US3X8TPM","576927":"US5G6B2D","576928":"USCUDIRJ","576929":"USMC76U1","576930":"USXF5K74","576931":"USC6DIRS","576932":"US73H3SR","576933":"USE8S392","576934":"USVL1Q3F","576935":"US5G6B2D","576936":"US9OMXR3","576937":"US3L6BE3","576938":"USAX4KKE","576939":"US5G6B2D","576940":"US3PWYBO","576941":"US7JXPHC","576942":"US3CP4QK","576943":"US3NIS58","576944":"USM3VP2J","576946":"USPKDNYH","576947":"US5G6B2D","576948":"US3CFNXB","576949":"USVIPBKP","576950":"US82IVC1","576951":"USVO8A8F","576952":"USD6D7L1","576953":"USTNV5AC","576954":"US5G6B2D","576955":"USX32F74","576956":"USVLIXU7","576957":"USPSHU7J","576958":"US5G6B2D","576959":"US5G6B2D","576960":"US5G6B2D","576961":"USHUFVPI","576962":"US76YZYB","576963":"USEWDYLZ","576964":"US5G6B2D","576965":"USMHMQ1O","576966":"USX3DR7R","576967":"USFPPO1Q","576968":"USUIXZ2X","576969":"USL9OR3S","576970":"USLCH8EP","576971":"US96UJHV","576972":"USNRZJ7O","576973":"USGPTVNC","576974":"US4GRFLY","576975":"USNC2E7Z","576976":"US9O297O","576978":"USOPATMA","576979":"US4RNCX1","576980":"USNT1RR5","576981":"US5G6B2D","576983":"USS6WPWU","576984":"US5G6B2D","576985":"USJLEPQP","576986":"USTQ7BRH","576987":"US5G6B2D","576988":"USSJ3KSG","576989":"USGQ3XK1","576990":"USRPPCP2","576991":"USWZZ7E6","576992":"USNVAQPQ","576993":"US5G6B2D","576994":"USVS299I","576995":"USWVB46X","576996":"USPO22HS","576997":"US8IDSWM","576998":"US5G6B2D","576999":"US5G6B2D","577000":"US8FHYTS","577001":"US5G6B2D","577002":"US97F741","577003":"USWA7KW4","577004":"USQF52IM","577005":"USEZ3TXE","577006":"USYF81UP","577007":"US5G6B2D","577008":"US5VO3I6","577009":"US5G6B2D","577010":"USSBF3GN","577011":"USITWFIU","577012":"USFS1RFN","577013":"US23ZEY7","577014":"US3CI7EV","577015":"USKIHOIA","577016":"USX9R78T","577017":"USWW591E","577018":"USI5ZNJF","577020":"US493JV3","577021":"US5G6B2D","577022":"USD9YYCB","577023":"USHEIVR1","577024":"US5G6B2D","577025":"USU5P9E4","577026":"USHM37G7","577027":"US5G6B2D","577028":"USJY4LR1","577029":"US42CSUU","577030":"USZIP5K6","577031":"US5G6B2D","577032":"USTYPN99","577033":"USVJL7JG","577034":"US8ONCFE","577035":"USW7NXL4","577036":"US6MPXY4","577037":"US9Y73TW","577038":"USZAKM7A","577039":"US5G6B2D","577040":"US5G6B2D","577041":"USC1S97B","577042":"USL6BWZW","577043":"USELOWYH","577044":"US629QWV","577045":"US5G6B2D","577046":"US5G6B2D","NULL":"US5G6B2D"} \ No newline at end of file +{"513185":"USYTERLB","514361":"USNYTJTN","527029":"US4VCMP5","529214":"US7UXK3V","529414":"USXTO999","530180":"US6X9MDN","534784":"US7UXK3V","537750":"USJDJUVS","538260":"USG5ZZW2","539126":"US5G9AIP","540195":"US5XTOSP","540379":"US7UXK3V","541373":"USO7IFHJ","541430":"USN82GEB","542174":"USQPECV6","543143":"US7UXK3V","545199":"US4ECW7Q","546049":"USOPDP3Q","548678":"US7UXK3V","548815":"US7UXK3V","549605":"US7UXK3V","550502":"USI2JNO4","551993":"USX3DNV3","552045":"US7UXK3V","552793":"USKK414P","569227":"USQISODX","569251":"US7UXK3V","570862":"USFV9QBL","571331":"US7UXK3V","571505":"US7UXK3V","572829":"USAW1FIS","572958":"USROHCO9","575156":"US7UXK3V","575773":"US65BKFM","575807":"USRWJPCS","575962":"USBTOBQB","575985":"USDJ5QZ4","576082":"USWXKRWG","576531":"USV7WHG5","576602":"US7UXK3V","576603":"US7UXK3V","576629":"US7UXK3V","576659":"USHSLFKY","576856":"US133H11","576883":"USW92O93","576913":"US7UXK3V","576927":"US7UXK3V","576928":"USFZN3H8","576929":"US1ZYMPI","576930":"USYTGB2A","576931":"USBJX4MS","576932":"US4MSTKH","576933":"USHH58Z2","576934":"US7MJVD7","576935":"US7UXK3V","576936":"USEYJVSA","576937":"USQ1O128","576938":"US8Z4BVY","576939":"US7UXK3V","576940":"USRKK2KH","576941":"US3CD7MX","576942":"USW7GBQO","576943":"USC88MR6","576944":"USTAQ17X","576946":"US31DJNF","576947":"US7UXK3V","576948":"USCQTFFF","576949":"USTDE7A4","576950":"USUE6CDI","576951":"USGFYNLD","576952":"US6OAUTN","576953":"USZTCUGP","576954":"US7UXK3V","576955":"USJK9IJ1","576956":"US9ZD7AM","576957":"USEHNMI3","576958":"US7UXK3V","576959":"US7UXK3V","576960":"US7UXK3V","576961":"US1A61Z1","576962":"USFCFQZH","576963":"USKBGRPC","576964":"US7UXK3V","576965":"US7SR5DG","576966":"USM7FNVY","576967":"USKT47U2","576968":"USF5OWCB","576969":"USGIFVKH","576970":"USWF8AXN","576971":"USDP6YZD","576972":"USCFS43W","576973":"US1AMH6R","576974":"US7UXK3V","576975":"USAP7JHZ","576976":"USQWD8KV","576978":"USDLO6PP","576979":"US914HWP","576980":"USKNNN66","576981":"US7UXK3V","576983":"US69SPM4","576984":"US7UXK3V","576985":"US46D3KU","576986":"USVMBFTA","576987":"US7UXK3V","576988":"USIOQRIF","576989":"USIBPRO4","576990":"US779KKF","576991":"USM12GFV","576992":"USUOC7NP","576993":"US7UXK3V","576994":"USQDMGHB","576995":"USLKGVCJ","576996":"USJFAZPV","576997":"USPQ31OQ","576998":"US7UXK3V","576999":"US7UXK3V","577000":"USUHTR6T","577001":"US7UXK3V","577002":"USRBQSXZ","577003":"USQ1XH3A","577004":"USII1U1F","577005":"USPP1KRN","577006":"USCGHB6O","577007":"US7UXK3V","577008":"USS1YCA4","577009":"US7UXK3V","577010":"USOTEZA5","577011":"USNI4TRD","577012":"USB7SGKC","577013":"USE2ZRR2","577014":"US5PGY52","577015":"USO21YJD","577016":"USLBQVGE","577017":"USO2INAC","577018":"USLPP5LV","577020":"USIOR61Z","577021":"US7UXK3V","577022":"USM69RD1","577023":"USTBNKMB","577024":"US7UXK3V","577025":"USQ2G2CG","577026":"USZ76YSC","577027":"US7UXK3V","577028":"USRCS7FY","577029":"USO13POV","577030":"USF9BJU7","577031":"US7UXK3V","577032":"US52L9RG","577033":"US1FXW1I","577034":"USP6D9M1","577035":"USV7H5FF","577036":"USHBDVSM","577037":"USHT1YK6","577038":"US3X1LM6","577039":"US7UXK3V","577040":"US7UXK3V","577041":"USLP1ICC","577042":"USSFO7RR","577043":"USBU7M2S","577044":"USJI6MKA","577045":"US7UXK3V","577046":"US7UXK3V","NULL":"US7UXK3V"} \ No newline at end of file