Bedarfsausweis Wohnen

This commit is contained in:
Moritz Utcke
2025-03-20 09:12:37 -03:00
parent 9706a839d6
commit 8b3e6b80c4
9 changed files with 196 additions and 105 deletions

View File

@@ -0,0 +1,55 @@
/*
Warnings:
- Added the required column `updated_at` to the `BedarfsausweisWohnen` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "BedarfsausweisWohnen" ADD COLUMN "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN "updated_at" TIMESTAMP(3) NOT NULL,
ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gng-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Rechnung" ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();

View File

@@ -0,0 +1,47 @@
-- AlterTable
ALTER TABLE "Anteilshaber" ALTER COLUMN "uid" SET DEFAULT 'ant-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Aufnahme" ALTER COLUMN "uid" SET DEFAULT 'auf-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "BedarfsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'bag-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "BedarfsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'baw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Bild" ALTER COLUMN "uid" SET DEFAULT 'img-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Event" ALTER COLUMN "uid" SET DEFAULT 'evt-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGEinpreisung" ALTER COLUMN "uid" SET DEFAULT 'gge-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGNachweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'gng-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "GEGNachweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'gnw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Objekt" ALTER COLUMN "uid" SET DEFAULT 'obj-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Rechnung" ALTER COLUMN "uid" SET DEFAULT 'inv-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Tickets" ALTER COLUMN "uid" SET DEFAULT 'tkt-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "Unterlage" ALTER COLUMN "uid" SET DEFAULT 'pln-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "VerbrauchsausweisGewerbe" ALTER COLUMN "uid" SET DEFAULT 'vag-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "VerbrauchsausweisWohnen" ALTER COLUMN "uid" SET DEFAULT 'vaw-' || gen_random_uuid();
-- AlterTable
ALTER TABLE "benutzer" ALTER COLUMN "uid" SET DEFAULT 'usr-' || gen_random_uuid();

View File

@@ -76,6 +76,10 @@ model BedarfsausweisWohnen {
/// @zod.describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde")
kontrolldatei_angefragt Boolean? @default(false)
created_at DateTime @default(now())
updated_at DateTime @updatedAt
benutzer Benutzer? @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
rechnung_id Int? @unique

View File

@@ -109,8 +109,6 @@ export async function ausweisSpeichern(
}
})
} else {
console.log(aufnahme);
const { uid } = await api.aufnahme.PUT.fetch({
aufnahme: {
baujahr_gebaeude: aufnahme.baujahr_gebaeude,

View File

@@ -67,6 +67,8 @@ export const BedarfsausweisWohnenSchema = z.object({
prueftext: z.string().describe("Durch den Kunden hinzugefügte Anmerkung zur Vorabprüfung").nullish(),
beschreibung: z.string().nullish(),
kontrolldatei_angefragt: z.boolean().describe("Ob bei der Anfrage der Registriernummer eine Kontrolldatei angefragt wurde").nullish(),
created_at: z.date(),
updated_at: z.date(),
rechnung_id: z.number().int().nullish(),
aufnahme_id: z.number().int().describe("ID der korrespondierenden Gebäudeaufnahme"),
})

View File

@@ -2,7 +2,6 @@
import PerformanceScore from "#components/Ausweis/PerformanceScore.svelte";
import Progressbar from "#components/Ausweis/Progressbar.svelte";
//import Hilfe from "#components/Ausweis/Hilfe.svelte";
import { PRICES } from "#lib/constants.js";
import Bereich from "#components/labels/Bereich.svelte";
@@ -18,15 +17,9 @@
import SanierungszustandWaermedammung from "#components/Ausweis/SanierungszustandWaermedammung.svelte";
import AusweisPreviewContainer from "#components/Ausweis/AusweisPreviewContainer.svelte";
import Label from "#components/Label.svelte";
import HelpLabel from "#components/HelpLabel.svelte";
import ZipSearch from "#components/PlzSuche.svelte";
import { hotWaterProductionTypes } from "#modules/BedarfsausweisWohnen/HotWaterProductionTypes.js";
import BilderZusatzsysteme from "../../components/Ausweis/BilderZusatzsysteme.svelte";
import moment from "moment";
import { BitChecker } from "src/lib/BitChecker.js";
import { Enums } from "#lib/client/prisma";
import { Enums } from "#lib/client/prisma.js";
import {
BedarfsausweisWohnenClient,
BenutzerClient,
@@ -41,7 +34,38 @@
export let objekt: ObjektClient
export let aufnahme: AufnahmeClient
export let user: BenutzerClient = {} as BenutzerClient;
export let images: UploadedGebaeudeBild[] = []
export let bilder: UploadedGebaeudeBild[] = []
export let uid: string;
if (!uid && (!ausweis.updated_at || moment(localStorage.getItem("bedarfsausweis-wohnen.updated_at") || new Date()).isAfter(ausweis.updated_at))) {
const localStorageAusweis = localStorage.getItem("bedarfsausweis-wohnen.ausweis");
if (localStorageAusweis) {
ausweis = JSON.parse(localStorageAusweis)
}
const localStorageAufnahme = localStorage.getItem("bedarfsausweis-wohnen.aufnahme");
if (localStorageAufnahme) {
aufnahme = JSON.parse(localStorageAufnahme)
}
const localStorageObjekt = localStorage.getItem("bedarfsausweis-wohnen.objekt");
if (localStorageObjekt) {
objekt = JSON.parse(localStorageObjekt)
}
const localStorageBilder = localStorage.getItem("bedarfsausweis-wohnen.bilder");
if (localStorageBilder) {
bilder = JSON.parse(localStorageBilder)
}
}
$: {
localStorage.setItem("bedarfsausweis-wohnen.ausweis", JSON.stringify(ausweis))
localStorage.setItem("bedarfsausweis-wohnen.aufnahme", JSON.stringify(aufnahme))
localStorage.setItem("bedarfsausweis-wohnen.objekt", JSON.stringify(objekt))
localStorage.setItem("bedarfsausweis-wohnen.bilder", JSON.stringify(bilder))
localStorage.setItem("bedarfsausweis-wohnen.updated_at", moment().toString())
}
let daemmungsBreiten = [0, 0.02, 0.05, 0.08, 0.12, 0.16, 0.2, 0.3, 0.4];
@@ -92,77 +116,15 @@
(value, index) => start + index * step
);
function automatischAusfüllen() {
ausweis.baujahr_anlage = 1974;
ausweis.baujahr_gebaeude = 1962;
ausweis.anzahl_einheiten = 1;
ausweis.objekt_saniert = true;
ausweis.objekt_strasse = "Mönckebergstraße";
ausweis.objekt_plz = "22049";
ausweis.objekt_ort = "Hamburg";
ausweis.wohnflaeche = 152;
ausweis.keller_beheizt = true;
ausweis.dachgeschoss = Enums.Heizungsstatus.UNBEHEIZT;
ausweis.energieverbrauch_zeitraum = moment("04.01.2018");
ausweis.energietraeger_1 = "Erdgas";
ausweis.energietraeger_einheit_heizquelle_1 = "kWh";
ausweis.versorgungssysteme = BitChecker(1);
ausweis.fenster_dach = BitChecker(1);
ausweis.daemmung = BitChecker(1);
ausweis.objekt_typ = "Einfamilienhaus";
ausweis.objekt_gebaeudeteil = "Gesamtgebäude";
ausweis.lueftungskonzept = "Fensterlüftung";
ausweis.wird_gekuehlt = false;
ausweis.energieverbrauch_1_heizquelle_1 = 40120;
ausweis.energieverbrauch_2_heizquelle_1 = 42120;
ausweis.energieverbrauch_3_heizquelle_1 = 41120;
ausweis.anzahl_vollgeschosse = 2;
ausweis.geschosshoehe = 2.25;
ausweis.anzahl_gauben = 1;
ausweis.breite_gauben = 0.7;
ausweis.masse_a = 4;
ausweis.masse_b = 12;
ausweis.masse_c = 3;
ausweis.masse_d = 6;
ausweis.masse_e = 4;
ausweis.masse_f = 9;
ausweis.fensterflaeche_so_sw = 8;
ausweis.fensterflaeche_nw_no = 8;
ausweis.aussenwandflaeche_unbeheizt = 15;
ausweis.fenster_flaeche_1 = 16;
ausweis.fenster_art_1 = 5;
ausweis.fenster_flaeche_2 = 0;
ausweis.fenster_art_2 = 5;
ausweis.dachfenster_flaeche = 12;
ausweis.dachfenster_art = 5;
ausweis.haustuer_flaeche = 2;
ausweis.haustuer_art = 5;
ausweis.dach_bauart = "Massive Konstruktion";
ausweis.dach_daemmung = 0;
ausweis.decke_bauart = "Massive Konstruktion";
ausweis.decke_daemmung = 0.02;
ausweis.aussenwand_bauart = "Massive Konstruktion";
ausweis.aussenwand_daemmung = 0.05;
ausweis.boden_bauart = "Massive Konstruktion";
ausweis.boden_daemmung = 0.08;
ausweis.warmwasser_verteilung = "zvmzbis1978";
ausweis.warmwasser_speicherung = "zwwsath";
ausweis.warmwasser_erzeugung = "ktkesselbis1986";
ausweis.heizung_zentral = false;
ausweis.heizung_verteilung = "zv7055bis1978";
ausweis.waerme_erzeugung_heizung = "ktkesselbis1986h";
ausweis.heizung_speicherung = "elzs7055bis1994";
ausweis.energietraeger_2 = "Braunkohle";
ausweis.anteil_zusatzheizung = 0.7;
ausweis = ausweis;
}
const ausweisart = Enums.Ausweisart.BedarfsausweisWohnen
const anliegen = "Energieausweis erstellen";
let form: HTMLFormElement;
let skala: HTMLDivElement;
</script>
<div id="skala" class="bg-white grid grid-cols-1 px-0 sm:p-4 lg:grid-cols-2 lg:gap-x-6">
<div id="skala" class="bg-white grid grid-cols-1 px-0 sm:p-4 lg:grid-cols-2 lg:gap-x-6" bind:this={skala}>
<PerformanceScore
bind:ausweis
@@ -175,11 +137,11 @@
</div>
<form id="formInput-1" on:submit={ausweisAbschicken} name="ausweis" data-test="ausweis">
<form id="formInput-1" bind:this={form} name="ausweis" data-cy="ausweis">
<div id="formular-box" class="formular-boxen ring-0">
<ButtonSpaeterHilfe {automatischAusfüllen} {spaeterWeitermachen} />
<ButtonSpaeterHilfe {spaeterWeitermachen} />
<!-- A Prüfung der Ausweisart -->
@@ -199,7 +161,7 @@
<Bereich
bereich="B"
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
><GebaeudeDaten bind:aufnahme bind:objekt /></Bereich
><GebaeudeDaten bind:aufnahme bind:objekt {ausweisart} /></Bereich
>
@@ -233,7 +195,7 @@ title="Angabe zu Keller, Dachgeschoss, Lüftung und Kühlung"
<!-- F Angaben zur Heizungsanlage -->
<Bereich bereich="F" title="Angaben zur Heizunganlage"
><SanierungszustandHeizungsanlage
bind:images
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
@@ -245,7 +207,7 @@ title="Angabe zu Keller, Dachgeschoss, Lüftung und Kühlung"
<Bereich bereich="G" title="Angaben zu Fenster, Dachfenster und Türen"
><SanierungszustandFensterTueren
bind:images
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
@@ -255,7 +217,7 @@ title="Angabe zu Keller, Dachgeschoss, Lüftung und Kühlung"
<Bereich bereich="H" title="Angaben zur Wärmedämmung"
><SanierungszustandWaermedammung
bind:images
bind:images={bilder}
bind:objekt
bind:aufnahme
bind:ausweis
@@ -266,7 +228,7 @@ title="Angabe zu Keller, Dachgeschoss, Lüftung und Kühlung"
<Bereich bereich="I" title="Gebäudebild und Energieausweis PDF Vorschau"
><AusweisPreviewContainer
bind:images
bind:images={bilder}
bind:ausweis
bind:objekt
bind:aufnahme
@@ -278,11 +240,13 @@ title="Angabe zu Keller, Dachgeschoss, Lüftung und Kühlung"
<ButtonWeiterHilfe {spaeterWeitermachen}
bind:ausweis
bind:images
bind:bilder
bind:user
bind:objekt
bind:aufnahme
ausweisart={Enums.Ausweisart.BedarfsausweisWohnen}
{form}
{skala}
/>

View File

@@ -42,24 +42,24 @@
export let aktiveBezahlmethode: Bezahlmethoden = Enums.Bezahlmethoden.paypal;
export let ausweistyp: Enums.AusweisTyp = Enums.AusweisTyp.Standard;
let email = localStorage.getItem("kundendaten.email") || user.email;
let vorname = localStorage.getItem("kundendaten.vorname") || user.vorname;
let name = localStorage.getItem("kundendaten.name") || user.name;
let empfaenger = localStorage.getItem("kundendaten.empfaenger") || `${user.vorname} ${user.name}`
let strasse = localStorage.getItem("kundendaten.strasse") || user.adresse;
let plz = localStorage.getItem("kundendaten.plz") || user.plz;
let ort = localStorage.getItem("kundendaten.ort") || user.ort;
let zusatzzeile = localStorage.getItem("kundendaten.zusatzzeile")
let telefon = localStorage.getItem("kundendaten.telefon") || user.telefon;
let email = localStorage.getItem("kundendaten.email") || user.email || "";
let vorname = localStorage.getItem("kundendaten.vorname") || user.vorname || "";
let name = localStorage.getItem("kundendaten.name") || user.name || "";
let empfaenger = localStorage.getItem("kundendaten.empfaenger") || (user.vorname && user.name ? `${user.vorname} ${user.name}` : "")
let strasse = localStorage.getItem("kundendaten.strasse") || user.adresse || "";
let plz = localStorage.getItem("kundendaten.plz") || user.plz || "";
let ort = localStorage.getItem("kundendaten.ort") || user.ort || "";
let zusatzzeile = localStorage.getItem("kundendaten.zusatzzeile") || ""
let telefon = localStorage.getItem("kundendaten.telefon") || user.telefon || "";
let abweichende_versand_adresse = JSON.parse(localStorage.getItem("kundendaten.abweichende_versand_adresse") || "false")
let versand_email: string,
versand_zusatzzeile: string,
versand_empfaenger: string,
versand_strasse: string,
versand_plz: string,
versand_ort: string;
let versand_email: string | undefined,
versand_zusatzzeile: string | undefined,
versand_empfaenger: string | undefined,
versand_strasse: string | undefined,
versand_plz: string | undefined,
versand_ort: string | undefined;
$: {
if (!abweichende_versand_adresse) {
versand_email = email
@@ -71,6 +71,19 @@
}
}
$: {
localStorage.setItem("kundendaten.email", email)
localStorage.setItem("kundendaten.vorname", vorname)
localStorage.setItem("kundendaten.name", name)
localStorage.setItem("kundendaten.empfaenger", empfaenger)
localStorage.setItem("kundendaten.strasse", strasse)
localStorage.setItem("kundendaten.plz", plz)
localStorage.setItem("kundendaten.ort", ort)
localStorage.setItem("kundendaten.zusatzzeile", zusatzzeile)
localStorage.setItem("kundendaten.telefon", telefon)
localStorage.setItem("kundendaten.abweichende_versand_adresse", abweichende_versand_adresse)
}
let services: {
name: string;
id: Enums.Service;
@@ -915,6 +928,13 @@ sm:grid-cols-[min-content_min-content_min-content] sm:justify-self-end sm:mt-8"
>
{/if}
{/if}
{#if user.rolle === Enums.BenutzerRolle.ADMIN}
<button class="button text-sm" on:click={() => {
localStorage.clear()
window.location.href = "/dashboard/objekte/1"
}}>Zurück zum Dashboard</button>
{/if}
</div>
</div>

View File

@@ -1,7 +1,8 @@
import { UUidWithPrefix } from "#components/Ausweis/types.js";
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
import { BedarfsausweisWohnenSchema, prisma } from "#lib/server/prisma";
import { prisma } from "#lib/server/prisma.js";
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
import { BedarfsausweisWohnenSchema } from "src/generated/zod/bedarfsausweiswohnen.js";
import { z } from "zod";
export const PUT = defineApiRoute({

View File

@@ -7,7 +7,7 @@ import { createCaller } from "src/astro-typesafe-api-caller";
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants";
import { validateAccessTokenServer } from "#server/lib/validateAccessToken";
const uid = Astro.url.searchParams.get("uid");
const uid = Astro.url.searchParams.get("uid") || "";
let ausweis: VerbrauchsausweisWohnenClient = {} as VerbrauchsausweisWohnenClient;
let aufnahme: AufnahmeClient = {} as AufnahmeClient;
let objekt: ObjektClient = {} as ObjektClient;
@@ -78,5 +78,5 @@ if (uid) {
---
<AusweisLayout title="Bedarfsausweis erstellen | IBCornelsen">
<BedarfsausweisWohnenModule client:load {ausweis} {objekt} {aufnahme} {bilder}></BedarfsausweisWohnenModule>
<BedarfsausweisWohnenModule client:only {ausweis} {objekt} {aufnahme} {bilder} {uid}></BedarfsausweisWohnenModule>
</AusweisLayout>