Merge pull request #498 from IBCornelsen/main

get main
This commit is contained in:
Jens Cornelsen
2025-04-07 06:40:09 +02:00
committed by GitHub
19 changed files with 1611 additions and 652 deletions

View File

@@ -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;

View File

@@ -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)

View File

@@ -58,3 +58,12 @@ export function getZodBaseType(schema: ZodType<any>): ZodType<any> {
}
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;
}

View File

@@ -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
}, "")
}
}

View File

@@ -98,7 +98,7 @@ export type OptionalNullable<T> = 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)

View File

@@ -26,9 +26,9 @@
<a href="/pdf/ansichtsausweis?id={ausweis.id}" target="_blank">
<div class="inline-block border rounded-lg bg-white">
{#if ausweis?.ausgestellt}
<img src="/images/dashboard/ausweishaken.jpg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
<img src="/images/dashboard/AusweisHaken.svg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
{:else}
<img src="/images/dashboard/ausweiskreuz.jpg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
<img src="/images/dashboard/AusweisKreuz.svg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
{/if}
</div>
<div class="text-sm text-center">Energieausweis</div>
@@ -39,9 +39,9 @@
<a href="/pdf/ansichtsausweis?id={ausweis.id}" target="_blank">
<div class="inline-block border rounded-lg bg-white">
{#if ausweis?.ausgestellt}
<img src="/images/dashboard/ausweishaken.jpg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
<img src="/images/dashboard/AusweisHaken.svg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
{:else}
<img src="/images/dashboard/ausweiskreuz.jpg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
<img src="/images/dashboard/AusweisKreuz.svg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
{/if}
</div>
<div class="text-sm text-center">Energieausweis</div>
@@ -52,9 +52,9 @@
<a href="/pdf/ansichtsausweis?id={ausweis.id}" target="_blank">
<div class="inline-block border rounded-lg bg-white">
{#if ausweis?.ausgestellt}
<img src="/images/dashboard/ausweishaken.jpg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
<img src="/images/dashboard/AusweisHaken.svg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
{:else}
<img src="/images/dashboard/ausweiskreuz.jpg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
<img src="/images/dashboard/AusweisKreuz.svg" class="h-auto w-auto max-h-[150px] max-w-full object-contain p-1" alt="Energieausweis ausgestellt">
{/if}
</div>
<div class="text-sm text-center">Energieausweis</div>

View File

@@ -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(),
})

View File

@@ -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";

View File

@@ -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<BenutzerClient>;
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"
</div>
{/if}
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen}
<div class="grid grid-cols-1 sm:grid-cols-1 gap-x-6 my-6">
<div class="pruefpunkte bereich-box bg-white">
<h3>Bitte untenstehende Punkte bestätigen. Bitte gehen Sie gegebenenfalls zurück zum Formular und überprüfen bzw. korrigieren Ihre Eingaben.</h3>
{#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}
<!-- Verbrauchsausweis Wohnen, Gewerbe [altes System: $ausweis->baujahr_anlage < (intval(date("Y")) - 3)] -->
{#if (aufnahme.baujahr_heizung.at(-1) || new Date().getFullYear()) >= (new Date().getFullYear() - 3)}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Das Heizungsalter ist jünger als 3 Jahre. Es handelt sich hier um einen Heizungstausch ohne energetische Verbesserung.
</div>
</div>
{/if}
<!-- Verbrauchsausweis Wohnen, Gewerbe -->
<!-- Bei besonders niedrigem Endenergieverbrauch [altes System: $result->endEnergieVerbrauchGesamt < 40] -->
{#if (berechnungen?.endEnergieVerbrauchGesamt || 0) < 40}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
{/if}
<!-- Verbrauchsausweis Wohnen, Gewerbe -->
<!-- Bei besonders hohem Endenergieverbrauch [altes System: $result->endEnergieVerbrauchGesamt > 450] -->
{#if (berechnungen?.endEnergieVerbrauchGesamt || 0) > 450}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
{/if}
<!-- Verbrauchsausweis Wohnen, Gewerbe [altes System: $ausweis->energieverbrauch_1_heizquelle_1 > 0 && $ausweis->energieverbrauch_2_heizquelle_1 > 0
&& $ausweis->energieverbrauch_3_heizquelle_1 > 0] -->
{#if ausweis.verbrauch_1 == 0 || ausweis.verbrauch_2 == 0 || ausweis.verbrauch_3 == 0}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Die eingegebenen Heizverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben.
</div>
</div>
{/if}
<!-- Verbrauchsausweis Wohnen, Gewerbe [altes System: getMaximumDevitationInPercent([$ausweis->energieverbrauch_1_heizquelle_1,
$ausweis->energieverbrauch_2_heizquelle_1, $ausweis->energieverbrauch_3_heizquelle_1]) < 50] -->
{#if getMaximumDevitationInPercent(ausweis.verbrauch_1 || 0, ausweis.verbrauch_2 || 0, ausweis.verbrauch_3 || 0) > 50}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
{/if}
{/await}
{/if}
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen || ausweisart === Enums.Ausweisart.BedarfsausweisWohnen}
<!-- Verbrauchsausweis Wohnen und Bedarfsausweis Wohnen [altes System: $ausweis->wohnflaeche >= $ausweis->anzahl_einheiten * 30] -->
{#if aufnahme.flaeche || 0 < (aufnahme.einheiten || 0) * 30}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Die Angabe der Wohnfläche ist korrekt und bezieht sich auf das gesamte Gebäude.
</div>
</div>
{/if}
{/if}
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe}
<!-- Zusätzlich beim Verbrauchsausweis Gewerbe [altes System: $ausweis->vanw_strom_1 > 0 && $ausweis->vanw_strom_2 > 0 && $ausweis->vanw_strom_3 > 0] -->
{#if ausweis.strom_1 == 0 || ausweis.strom_2 == 0 || ausweis.strom_3 == 0}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Die eingegebenen Stromverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben.
</div>
</div>
{/if}
<!-- Zusätzlich beim Verbrauchsausweis Gewerbe [altes System: getMaximumDevitationInPercent([$ausweis->vanw_strom_1, $ausweis->vanw_strom_2, $ausweis->vanw_strom_3]) < 50] -->
{#if getMaximumDevitationInPercent(ausweis.strom_1 || 0, ausweis.strom_2 || 0, ausweis.strom_3 || 0) > 50}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
{/if}
{/if}
<!-- Verbrauchsausweis Wohnen, Gewerbe und Bedarfsausweis Wohnen
[altes System: !!db()->one("SELECT * FROM FORM WHERE zipcode = :zipcode", ["zipcode" => $ausweis->objekt_plz])] -->
<div class="pruefpunkt">
@@ -931,89 +1025,56 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
</div>
</div>
<!-- Verbrauchsausweis Wohnen, Gewerbe und Bedarfsausweis Wohnen [altes System: $ausweis->baujahr_anlage >= $ausweis->baujahr_gebaeude] -->
{#if aufnahme.baujahr_heizung.at(-1) || 0 < aufnahme.baujahr_gebaeude[0] || 0}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Das Baujahr der Heizungsanlage ist kleiner als das Baujahr des Gebäudes und befründet.
</div>
</div>
<!-- Verbrauchsausweis Wohnen, Gewerbe [altes System: $ausweis->energieverbrauch_1_heizquelle_1 > 0 && $ausweis->energieverbrauch_2_heizquelle_1 > 0
&& $ausweis->energieverbrauch_3_heizquelle_1 > 0] -->
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Die eingegebenen Heizverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben.
</div>
</div>
<!-- Verbrauchsausweis Wohnen, Gewerbe [altes System: getMaximumDevitationInPercent([$ausweis->energieverbrauch_1_heizquelle_1,
$ausweis->energieverbrauch_2_heizquelle_1, $ausweis->energieverbrauch_3_heizquelle_1]) < 50] -->
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
<!-- Zusätzlich beim Verbrauchsausweis Gewerbe [altes System: $ausweis->vanw_strom_1 > 0 && $ausweis->vanw_strom_2 > 0 && $ausweis->vanw_strom_3 > 0] -->
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Die eingegebenen Stromverbräuche sind korrekt und alle 3 Felder wurden vollständig eingegeben.
</div>
</div>
<!-- Zusätzlich beim Verbrauchsausweis Gewerbe [altes System: getMaximumDevitationInPercent([$ausweis->vanw_strom_1, $ausweis->vanw_strom_2, $ausweis->vanw_strom_3]) < 50] -->
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
<!-- Verbrauchsausweis Wohnen, Gewerbe -->
<!-- Bei besonders niedrigem Endenergieverbrauch [altes System: $result->endEnergieVerbrauchGesamt < 40] -->
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
<!-- Verbrauchsausweis Wohnen, Gewerbe -->
<!-- Bei besonders hohem Endenergieverbrauch [altes System: $result->endEnergieVerbrauchGesamt > 450] -->
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
Das Baujahr der Heizungsanlage ist kleiner als das Baujahr des Gebäudes und begründet.
</div>
</div>
{/if}
{#if ausweisart === Enums.Ausweisart.VerbrauchsausweisWohnen}
<!-- Verbrauchsausweis Wohnen [altes System: $ausweis->anteil_warmwasser_1 < 6 OR $ausweis->anteil_warmwasser_1 > 40] -->
{#if ausweis.anteil_warmwasser_1 < 6 || ausweis.anteil_warmwasser_1 > 40}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Ich habe den Warmwasseranteil nochmal überprüft. Dieser ist korrekt und begründet.
</div>
</div>
{/if}
{/if}
{#if ausweisart === Enums.Ausweisart.BedarfsausweisWohnen}
<!-- Zusätzlich beim Bedarfsausweis [altes System: $ausweis->wohnflaeche < $ausweis->energetische_nutzfläche] -->
{#if ausweis.flaeche < ausweis.nutzflaeche}
<div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
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.
</div>
</div>
{/if}
<!-- Zusätzlich beim Bedarfsausweis [altes System: ($result->AHF / ($ausweis->volumen ?: 1)) > 1.4 OR ($result->AHF / ($ausweis->volumen ?: 1)) < 0.18] -->
<div class="pruefpunkt">
<!-- TODO -->
<!-- <div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Ich habe die Angaben zur Gebäudegeometrie geprüft und bestätige die Richtigkeit.
</div>
</div>
</div> -->
<!-- Zusätzlich beim Bedarfsausweis [altes System: getPortionInPercent(($ausweis->fenster_flaeche_1 + $ausweis->fenster_flaeche_2), $ausweis->aussenwand_flaeche) < 5 OR
getPortionInPercent(($ausweis->fenster_flaeche_1 + $ausweis->fenster_flaeche_2), $ausweis->aussenwand_flaeche) > 70] -->
<div class="pruefpunkt">
<!-- <div class="pruefpunkt">
<input type="checkbox"/>
<div class="text-left">
Ich habe die Angaben zu den Fensterflächen geprüft und bestätige die Richtigkeit.
</div>
</div>
</div> -->
{/if}
<!-- Für alle -->
<div class="pruefpunkt">
<input type="checkbox"/>
@@ -1021,9 +1082,9 @@ grid-cols-3 sm:grid-cols-5 justify-around justify-items-center items-center"
Ich habe die AGB und DSGVO im <a href="/impressum#agb" target="_blank" rel="noopener noreferrer">Impressum</a> gelesen und akzeptiert.
</div>
</div>
</div>
</div>
{/if}
<div

View File

@@ -56,6 +56,7 @@
export let bilder: BildClient[];
export let ausweistyp: Enums.AusweisTyp;
export let id: string | null;
export let partner_code: string;
export let loadFromDatabase: boolean = false;
@@ -270,6 +271,7 @@ let skala: HTMLDivElement;
ausweisart={Enums.Ausweisart.VerbrauchsausweisWohnen}
{ausweistyp}
{skala}
{partner_code}
>
</ButtonWeiterHilfe>

View File

@@ -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;

View File

@@ -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,6 +61,43 @@ export const GET = defineApiRoute({
},
},
});
} else if (ausweisart === Enums.Ausweisart.VerbrauchsausweisGewerbe) {
ausweis = await prisma.verbrauchsausweisGewerbe.findUnique({
where: {
id: id_ausweis,
},
include: {
aufnahme: {
include: {
bilder: true,
objekt: {
include: {
benutzer: true,
},
},
},
},
},
});
} 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 (!ausweis) {
throw new APIError({
@@ -48,7 +109,7 @@ export const GET = defineApiRoute({
const rechnung = await prisma.rechnung.findFirst({
where: {
verbrauchsausweis_wohnen: {
id: id_ausweis
id: id_ausweis,
},
},
orderBy: {
@@ -86,7 +147,13 @@ export const GET = defineApiRoute({
// $ausweis->erledigt = 2;
// $ausweis->save();
const pdfAusweis = await getAnsichtsausweis(ausweis, ausweis.aufnahme, ausweis.aufnahme.objekt, ausweis.aufnahme.bilder, ausweis.aufnahme.objekt.benutzer)
const pdfAusweis = await getAnsichtsausweis(
ausweis,
ausweis.aufnahme,
ausweis.aufnahme.objekt,
ausweis.aufnahme.bilder,
ausweis.aufnahme.objekt.benutzer
);
const pdfDatenblatt = await getDatenblatt(
ausweis,
ausweis.aufnahme,
@@ -96,24 +163,25 @@ export const GET = defineApiRoute({
);
if (pdfAusweis) {
const pdfAusweisPath = fileURLToPath(
new URL(
`${PERSISTENT_DIR}/generated/Ausweis-${ausweis.id}.pdf`,
import.meta.url
)
);
fs.writeFileSync(pdfAusweisPath, pdfAusweis);
const command = new PutObjectCommand({
Bucket: "ibc-pdfs",
Key: `ID_${ausweis.id}_Energieausweis.pdf`,
Body: pdfAusweis,
ACL: "private",
});
const response = await s3Client.send(command);
}
if (pdfDatenblatt) {
const pdfDatenblattPath = fileURLToPath(
new URL(
`${PERSISTENT_DIR}/generated/Datenblatt-${ausweis.id}.pdf`,
import.meta.url
)
);
const command = new PutObjectCommand({
Bucket: "ibc-pdfs",
Key: `ID_${ausweis.id}_Energieausweis.pdf`,
Body: pdfDatenblatt,
ACL: "private",
});
fs.writeFileSync(pdfDatenblattPath, pdfDatenblatt);
const response = await s3Client.send(command);
}
let text: string;
@@ -205,7 +273,5 @@ fax 040 · 209339859
subject: `Ihr Originalausweis vom Ingenieurbüro Cornelsen (ID: ${ausweis.id})`,
text,
});
}
},
});

View File

@@ -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
}
});
}

View File

@@ -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 {
---
<AusweisLayout title="Kundendaten Aufnehmen - IBCornelsen">
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} {unterlagen} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
<KundendatenModule {user} {ausweis} {objekt} {aufnahme} {bilder} {ausweisart} {unterlagen} {partner_code} aktiveBezahlmethode={Enums.Bezahlmethoden.paypal} client:only ></KundendatenModule>
</AusweisLayout>

View File

@@ -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<ArrayBufferLike> | 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, {

View File

@@ -44,9 +44,10 @@ export const GET: APIRoute = async (Astro) => {
user = await getCurrentUser(Astro)
let pdf: Uint8Array<ArrayBufferLike> | 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) {

View File

@@ -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,9 +25,8 @@ 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;
async complete(results, file) {
for (const dataset of results.data as any) {
if (dataset.id in processed) {
return;
}
@@ -37,10 +36,11 @@ Papa.parse(file, {
if (!(user_id in newUserIdMap)) {
console.log(`Missing user ${user_id}`);
if (dataset.email) {
const email = dataset.email || dataset.rechnung_email
if (email) {
user = await prisma.benutzer.findUnique({
where: {
email: dataset.email
email
}
})
@@ -51,7 +51,7 @@ Papa.parse(file, {
user = await prisma.benutzer.create({
data: {
id,
email: dataset.email,
email,
passwort: hashPassword(Math.random().toString(36).slice(-8)),
adresse: dataset.strasse,
ort: dataset.ort,
@@ -77,8 +77,7 @@ Papa.parse(file, {
if (!user) {
saveProcessed();
// throw new Error("Benutzer ist nicht vorhanden.");
return
throw new Error("Benutzer ist nicht vorhanden.");
}
const objekt_id = generatePrefixedId(6, VALID_UUID_PREFIXES.Objekt)
@@ -471,9 +470,8 @@ Papa.parse(file, {
processed[dataset.id as string] = true;
saveProcessed()
},
complete(results, file) {
saveProcessed()
}
},
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long