Verbesserungen
This commit is contained in:
6
bun.lock
6
bun.lock
@@ -61,6 +61,7 @@
|
||||
"@types/jsonwebtoken": "^9.0.7",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/nodemailer": "^6.4.17",
|
||||
"@types/papaparse": "^5.3.15",
|
||||
"@types/siema": "^1.4.11",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
@@ -72,6 +73,7 @@
|
||||
"cypress-vite": "^1.6.0",
|
||||
"eslint": "~8.15.0",
|
||||
"eslint-config-prettier": "8.1.0",
|
||||
"papaparse": "^5.5.2",
|
||||
"postcss": "^8.5.1",
|
||||
"postcss-import": "^16.1.0",
|
||||
"postcss-nesting": "^13.0.1",
|
||||
@@ -556,6 +558,8 @@
|
||||
|
||||
"@types/nodemailer": ["@types/nodemailer@6.4.17", "", { "dependencies": { "@types/node": "*" } }, "sha512-I9CCaIp6DTldEg7vyUTZi8+9Vo0hi1/T8gv3C89yk1rSAAzoKQ8H8ki/jBYJSFoH/BisgLP8tkZMlQ91CIquww=="],
|
||||
|
||||
"@types/papaparse": ["@types/papaparse@5.3.15", "", { "dependencies": { "@types/node": "*" } }, "sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw=="],
|
||||
|
||||
"@types/pug": ["@types/pug@2.0.10", "", {}, "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA=="],
|
||||
|
||||
"@types/qs": ["@types/qs@6.9.18", "", {}, "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA=="],
|
||||
@@ -1658,6 +1662,8 @@
|
||||
|
||||
"pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="],
|
||||
|
||||
"papaparse": ["papaparse@5.5.2", "", {}, "sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA=="],
|
||||
|
||||
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
|
||||
|
||||
"parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="],
|
||||
|
||||
@@ -75,6 +75,7 @@
|
||||
"@types/jsonwebtoken": "^9.0.7",
|
||||
"@types/mime-types": "^2.1.4",
|
||||
"@types/nodemailer": "^6.4.17",
|
||||
"@types/papaparse": "^5.3.15",
|
||||
"@types/siema": "^1.4.11",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
||||
@@ -86,6 +87,7 @@
|
||||
"cypress-vite": "^1.6.0",
|
||||
"eslint": "~8.15.0",
|
||||
"eslint-config-prettier": "8.1.0",
|
||||
"papaparse": "^5.5.2",
|
||||
"postcss": "^8.5.1",
|
||||
"postcss-import": "^16.1.0",
|
||||
"postcss-nesting": "^13.0.1",
|
||||
|
||||
@@ -5,19 +5,21 @@ export const createCaller = createCallerFactory({
|
||||
"klimafaktoren": await import("../src/pages/api/klimafaktoren.ts"),
|
||||
"postleitzahlen": await import("../src/pages/api/postleitzahlen.ts"),
|
||||
"unterlage": await import("../src/pages/api/unterlage.ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
"admin/ausstellen": await import("../src/pages/api/admin/ausstellen.ts"),
|
||||
"admin/bestellbestaetigung": await import("../src/pages/api/admin/bestellbestaetigung.ts"),
|
||||
"admin/erinnern": await import("../src/pages/api/admin/erinnern.ts"),
|
||||
"admin/nicht-ausstellen": await import("../src/pages/api/admin/nicht-ausstellen.ts"),
|
||||
"admin/post-ausstellen": await import("../src/pages/api/admin/post-ausstellen.ts"),
|
||||
"admin/registriernummer": await import("../src/pages/api/admin/registriernummer.ts"),
|
||||
"aufnahme": await import("../src/pages/api/aufnahme/index.ts"),
|
||||
"auth/access-token": await import("../src/pages/api/auth/access-token.ts"),
|
||||
"auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"),
|
||||
"auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"),
|
||||
"bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"),
|
||||
"bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"),
|
||||
"bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"),
|
||||
"geg-nachweis-gewerbe/[uid]": await import("../src/pages/api/geg-nachweis-gewerbe/[uid].ts"),
|
||||
"geg-nachweis-gewerbe": await import("../src/pages/api/geg-nachweis-gewerbe/index.ts"),
|
||||
"geg-nachweis-wohnen/[uid]": await import("../src/pages/api/geg-nachweis-wohnen/[uid].ts"),
|
||||
"geg-nachweis-wohnen": await import("../src/pages/api/geg-nachweis-wohnen/index.ts"),
|
||||
"objekt": await import("../src/pages/api/objekt/index.ts"),
|
||||
@@ -33,5 +35,6 @@ export const createCaller = createCallerFactory({
|
||||
"webhooks/mollie": await import("../src/pages/api/webhooks/mollie.ts"),
|
||||
"aufnahme/[uid]/bilder": await import("../src/pages/api/aufnahme/[uid]/bilder.ts"),
|
||||
"aufnahme/[uid]": await import("../src/pages/api/aufnahme/[uid]/index.ts"),
|
||||
"aufnahme/[uid]/unterlagen": await import("../src/pages/api/aufnahme/[uid]/unterlagen.ts"),
|
||||
"objekt/[uid]": await import("../src/pages/api/objekt/[uid]/index.ts"),
|
||||
})
|
||||
@@ -71,6 +71,9 @@ export async function nachweisSpeichern(
|
||||
if (ausweisart == Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
patchRoute = api["geg-nachweis-wohnen"]._uid.PATCH
|
||||
putRoute = api["geg-nachweis-wohnen"].PUT
|
||||
} else if (ausweisart === Enums.Ausweisart.GEGNachweisGewerbe) {
|
||||
patchRoute = api["geg-nachweis-gewerbe"]._uid.PATCH
|
||||
putRoute = api["geg-nachweis-gewerbe"].PUT
|
||||
}
|
||||
|
||||
if (nachweis.uid) {
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
loginOverlayHidden = true
|
||||
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) {
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} else {
|
||||
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart)
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
import { addNotification } from "#components/Notifications/shared.js";
|
||||
import NotificationWrapper from "#components/Notifications/NotificationWrapper.svelte";
|
||||
import { nachweisSpeichern } from "#client/lib/nachweisSpeichern.js";
|
||||
import { EnterFullScreen } from "radix-svelte-icons";
|
||||
|
||||
export let user: Partial<BenutzerClient>;
|
||||
export let ausweis: VerbrauchsausweisWohnenClient;
|
||||
@@ -225,7 +226,7 @@
|
||||
loginOverlayHidden = true
|
||||
|
||||
let result: Awaited<ReturnType<typeof ausweisSpeichern>> | null = null;
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen) {
|
||||
if (ausweisart === Enums.Ausweisart.GEGNachweisWohnen || ausweisart === Enums.Ausweisart.GEGNachweisGewerbe || ausweisart === Enums.Ausweisart.GEGNachweisBedarfsausweis) {
|
||||
result = await nachweisSpeichern(ausweis, objekt, aufnahme, bilder, unterlagen, ausweisart)
|
||||
} else {
|
||||
result = await ausweisSpeichern(ausweis, objekt, aufnahme, bilder, ausweisart)
|
||||
|
||||
204
src/modules/angebot-anfragen/GEGNachweisGewerbeModule.svelte
Normal file
204
src/modules/angebot-anfragen/GEGNachweisGewerbeModule.svelte
Normal file
@@ -0,0 +1,204 @@
|
||||
<script lang="ts">
|
||||
import Ausweisart from "#components/Ausweis/Ausweisart.svelte";
|
||||
import GebaeudeDaten from "#components/Ausweis/GebaeudeDaten.svelte";
|
||||
import {
|
||||
ObjektClient,
|
||||
AufnahmeClient,
|
||||
BenutzerClient,
|
||||
UploadedGebaeudeBild,
|
||||
UnterlageClient,
|
||||
GEGNachweisWohnenClient,
|
||||
} from "#components/Ausweis/types.js";
|
||||
import Bereich from "#components/labels/Bereich.svelte";
|
||||
import { Enums } from "@ibcornelsen/database/client";
|
||||
import InputLabel from "#components/labels/InputLabel.svelte";
|
||||
import HelpLabel from "#components/labels/HelpLabel.svelte";
|
||||
import Progressbar from "#components/Ausweis/Progressbar.svelte";
|
||||
import FileGrid from "#components/FileGrid.svelte";
|
||||
import ButtonWeiterHilfe from "#components/Ausweis/ButtonWeiterHilfe.svelte";
|
||||
|
||||
|
||||
export let nachweis: GEGNachweisWohnenClient;
|
||||
export let objekt: ObjektClient;
|
||||
export let aufnahme: AufnahmeClient;
|
||||
export let user: BenutzerClient = {} as BenutzerClient;
|
||||
export let bilder: UploadedGebaeudeBild[] = [];
|
||||
export let plaene: UnterlageClient[] =
|
||||
[];
|
||||
export let unterlagen: UnterlageClient[] = [];
|
||||
|
||||
if (Object.keys(nachweis).length === 0) {
|
||||
const localStorageAusweis = localStorage.getItem("ausweis");
|
||||
if (localStorageAusweis) {
|
||||
nachweis = JSON.parse(localStorageAusweis)
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(aufnahme).length === 0) {
|
||||
const localStorageAufnahme = localStorage.getItem("aufnahme");
|
||||
if (localStorageAufnahme) {
|
||||
aufnahme = JSON.parse(localStorageAufnahme)
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(objekt).length === 0) {
|
||||
const localStorageObjekt = localStorage.getItem("objekt");
|
||||
if (localStorageObjekt) {
|
||||
objekt = JSON.parse(localStorageObjekt)
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(bilder).length === 0) {
|
||||
const localStorageBilder = localStorage.getItem("bilder");
|
||||
if (localStorageBilder) {
|
||||
bilder = JSON.parse(localStorageBilder)
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(unterlagen).length === 0) {
|
||||
const localStorageUnterlagen = localStorage.getItem("unterlagen");
|
||||
if (localStorageUnterlagen) {
|
||||
unterlagen = JSON.parse(localStorageUnterlagen)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$: {
|
||||
localStorage.setItem("ausweis", JSON.stringify(nachweis))
|
||||
localStorage.setItem("aufnahme", JSON.stringify(aufnahme))
|
||||
localStorage.setItem("objekt", JSON.stringify(objekt))
|
||||
localStorage.setItem("bilder", JSON.stringify(bilder))
|
||||
localStorage.setItem("unterlagen", JSON.stringify(unterlagen))
|
||||
}
|
||||
|
||||
const ausweisart = Enums.Ausweisart.GEGNachweisGewerbe;
|
||||
</script>
|
||||
|
||||
<div
|
||||
id="skala"
|
||||
class="bg-white grid grid-cols-1 p-4 lg:grid-cols-2 lg:gap-x-6 no-scroll"
|
||||
>
|
||||
<div
|
||||
id="progress-box"
|
||||
class="w-full box relative px-4 py-3 text-center order-2 self-stretch"
|
||||
>
|
||||
<h1 class="text-secondary text-3xl m-0">GEG Nachweis Anfragen</h1>
|
||||
<h2 class="text-primary text-xl">Verbrauchsausweis Wohnen</h2>
|
||||
<Progressbar
|
||||
active={0}
|
||||
steps={["Gebäudedaten", "Kundendaten", "Bestätigung"]}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form
|
||||
id="formInput-1"
|
||||
name="ausweis"
|
||||
data-test="ausweis"
|
||||
>
|
||||
<div id="formular-box" class="formular-boxen ring-0">
|
||||
<!-- A Prüfung der Ausweisart -->
|
||||
|
||||
<Bereich bereich="A" title="Prüfung der Ausweisart">
|
||||
<Ausweisart bind:objekt bind:aufnahme bind:ausweis={nachweis} {ausweisart} />
|
||||
</Bereich>
|
||||
|
||||
<!-- B Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss -->
|
||||
|
||||
<Bereich
|
||||
bereich="B"
|
||||
title="Eingabe der Gebäudeadresse - Angaben zu Wohnfläche, Keller und Dachgeschoss"
|
||||
><GebaeudeDaten bind:aufnahme bind:objekt {ausweisart} /></Bereich
|
||||
>
|
||||
|
||||
<Bereich bereich="C" title="Beschreibung des Bauvorhabens">
|
||||
<div class="bereich-box">
|
||||
<div class="input-standard order-3 md:order-5 xl:order-3">
|
||||
<InputLabel
|
||||
title="Angaben zur Heizung, Lüftung, Energieerezugung, Qualität und Aufbau der Gebäudehülle usw."
|
||||
></InputLabel>
|
||||
|
||||
<textarea class="rounded-e-none" rows="10" bind:value={nachweis.beschreibung}></textarea>
|
||||
|
||||
<div class="help-label">
|
||||
<HelpLabel>
|
||||
Geben Sie kurz an: Heizung, Lüftung, regenerative
|
||||
Energie (Solar, PV) und die Gebäudehülle (Qualität,
|
||||
Aufbau).
|
||||
</HelpLabel>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Bereich>
|
||||
|
||||
<Bereich bereich="D" title="Gebäudepläne & Unterlagen">
|
||||
<div
|
||||
class="bereich-box grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6"
|
||||
>
|
||||
<div class="md:box md:card mb-0">
|
||||
<div class="font-bold mb-2">Pläne</div>
|
||||
|
||||
<div>
|
||||
Hier können sie Grundrisspläne, Ansichtspläne und
|
||||
Schnitte hochladen. Die Dateien können entweder im PDF
|
||||
Format oder als Bild hochgeladen werden.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<div>
|
||||
<strong
|
||||
>Bitte laden Sie hier mind. 1 Dokument hoch:</strong
|
||||
>
|
||||
</div>
|
||||
<FileGrid
|
||||
max={Infinity}
|
||||
min={1}
|
||||
name={"plaene"}
|
||||
bind:files={plaene}
|
||||
bind:ausweis={nachweis}
|
||||
bind:objekt
|
||||
></FileGrid>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="bereich-box grid grid-cols-1 lg:grid-cols-2 gap-x-6 mt-6"
|
||||
>
|
||||
<div class="md:box md:card mb-0">
|
||||
<div class="font-bold mb-2">Unterlagen</div>
|
||||
|
||||
<div>
|
||||
Hier können sie weitere Unterlagen wie z.B.
|
||||
Baugenehmigungen, U-Wert Berechnungen, Anlagentechnik
|
||||
oder ihren alten Energieausweis hochladen. Die Dateien
|
||||
können entweder im PDF Format oder als Bild hochgeladen
|
||||
werden.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md:box md:card mb-0 mt-6 md:mt-0">
|
||||
<FileGrid
|
||||
max={Infinity}
|
||||
min={0}
|
||||
name={"unterlagen"}
|
||||
bind:files={unterlagen}
|
||||
bind:ausweis={nachweis}
|
||||
bind:objekt
|
||||
></FileGrid>
|
||||
</div>
|
||||
</div>
|
||||
</Bereich>
|
||||
</div>
|
||||
|
||||
<ButtonWeiterHilfe
|
||||
bind:ausweis={nachweis}
|
||||
bind:bilder
|
||||
bind:unterlagen
|
||||
bind:user
|
||||
bind:objekt
|
||||
bind:aufnahme
|
||||
ausweisart={Enums.Ausweisart.GEGNachweisGewerbe}
|
||||
>
|
||||
</ButtonWeiterHilfe>
|
||||
|
||||
</form>
|
||||
@@ -0,0 +1,90 @@
|
||||
---
|
||||
import AusweisLayout from "#layouts/AusweisLayoutDaten.astro";
|
||||
import { AufnahmeClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient, UploadedGebaeudeBild } from "#components/Ausweis/types";
|
||||
import { createCaller } from "../../astro-typesafe-api-caller.js";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { validateAccessTokenServer } from "#server/lib/validateAccessToken.js";
|
||||
import GEGNachweisGewerbeModule from "#modules/angebot-anfragen/GEGNachweisGewerbeModule.svelte";
|
||||
|
||||
const uid = Astro.url.searchParams.get("uid");
|
||||
let nachweis: GEGNachweisWohnenClient = {} as GEGNachweisWohnenClient;
|
||||
let aufnahme: AufnahmeClient = {} as AufnahmeClient;
|
||||
let objekt: ObjektClient = {} as ObjektClient;
|
||||
let bilder: UploadedGebaeudeBild[] = []
|
||||
let unterlagen: UnterlageClient[] = []
|
||||
|
||||
const valid = validateAccessTokenServer(Astro);
|
||||
|
||||
const caller = createCaller(Astro);
|
||||
|
||||
if (uid) {
|
||||
if (!valid) {
|
||||
return Astro.redirect(
|
||||
`/auth/login?redirect=${Astro.url.toString()}`
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
nachweis = await caller["geg-nachweis-wohnen"]._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid
|
||||
}
|
||||
});
|
||||
|
||||
aufnahme = await caller.aufnahme._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
objekt = await caller.objekt._uid.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_objekt
|
||||
}
|
||||
})
|
||||
|
||||
bilder = await caller.aufnahme._uid.bilder.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
unterlagen = await caller.aufnahme._uid.unterlagen.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
if (!nachweis) {
|
||||
// Der Ausweis scheint nicht zu existieren.
|
||||
// Wir leiten auf die generische Ausweisseite ohne UID weiter.
|
||||
return Astro.redirect(
|
||||
"/angebot-anfragen/geg-nachweis-wohnen-anfragen"
|
||||
);
|
||||
}
|
||||
} catch(e) {
|
||||
return Astro.redirect(
|
||||
"/angebot-anfragen/geg-nachweis-wohnen-anfragen"
|
||||
);
|
||||
}
|
||||
}
|
||||
---
|
||||
|
||||
<AusweisLayout title="GEG Nachweis Wohnen anfragen">
|
||||
<GEGNachweisGewerbeModule client:only {nachweis} {objekt} {aufnahme} {bilder} {unterlagen} />
|
||||
</AusweisLayout>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
import AusweisLayout from "#layouts/AusweisLayoutDaten.astro";
|
||||
import { AufnahmeClient, GEGNachweisWohnenClient, ObjektClient, UploadedGebaeudeBild } from "#components/Ausweis/types";
|
||||
import { AufnahmeClient, GEGNachweisWohnenClient, ObjektClient, UnterlageClient, UploadedGebaeudeBild } from "#components/Ausweis/types";
|
||||
import { createCaller } from "../../astro-typesafe-api-caller.js";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME } from "#lib/constants.js";
|
||||
import { validateAccessTokenServer } from "#server/lib/validateAccessToken.js";
|
||||
@@ -11,6 +11,7 @@ let nachweis: GEGNachweisWohnenClient = {} as GEGNachweisWohnenClient;
|
||||
let aufnahme: AufnahmeClient = {} as AufnahmeClient;
|
||||
let objekt: ObjektClient = {} as ObjektClient;
|
||||
let bilder: UploadedGebaeudeBild[] = []
|
||||
let unterlagen: UnterlageClient[] = []
|
||||
|
||||
const valid = validateAccessTokenServer(Astro);
|
||||
|
||||
@@ -60,6 +61,15 @@ if (uid) {
|
||||
}
|
||||
})
|
||||
|
||||
unterlagen = await caller.aufnahme._uid.unterlagen.GET.fetch(null, {
|
||||
headers: {
|
||||
authorization: `Bearer ${Astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME)?.value}`
|
||||
},
|
||||
params: {
|
||||
uid: nachweis.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
if (!nachweis) {
|
||||
// Der Ausweis scheint nicht zu existieren.
|
||||
// Wir leiten auf die generische Ausweisseite ohne UID weiter.
|
||||
@@ -76,5 +86,5 @@ if (uid) {
|
||||
---
|
||||
|
||||
<AusweisLayout title="GEG Nachweis Wohnen anfragen">
|
||||
<GEGNachweisWohnenModule client:only {nachweis} {objekt} {aufnahme} {bilder} />
|
||||
<GEGNachweisWohnenModule client:only {nachweis} {objekt} {aufnahme} {bilder} {unterlagen} />
|
||||
</AusweisLayout>
|
||||
|
||||
87
src/pages/api/aufnahme/[uid]/unterlagen.ts
Normal file
87
src/pages/api/aufnahme/[uid]/unterlagen.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { prisma, UnterlageSchema } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
input: z.array(UUidWithPrefix),
|
||||
output: z.void(),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
uid: ctx.params.uid
|
||||
}
|
||||
})
|
||||
|
||||
if (!aufnahme) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Aufnahme existiert nicht oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
prisma.$transaction(async tx => {
|
||||
for (const uid of input) {
|
||||
const img = await tx.unterlage.update({
|
||||
where: {
|
||||
uid,
|
||||
aufnahme_id: null
|
||||
},
|
||||
data: {
|
||||
aufnahme_id: aufnahme.id
|
||||
},
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
})
|
||||
|
||||
if (!img) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Unterlage existiert nicht oder gehört bereits zu einer anderen Aufnahme."
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
middleware: authorizationMiddleware,
|
||||
output: z.array(UnterlageSchema.pick({
|
||||
kategorie: true,
|
||||
uid: true
|
||||
})),
|
||||
async fetch(input, ctx, user) {
|
||||
const { uid } = ctx.params;
|
||||
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
benutzer_id: user.id
|
||||
},
|
||||
select: {
|
||||
benutzer_id: true,
|
||||
unterlagen: {
|
||||
select: {
|
||||
kategorie: true,
|
||||
uid: true,
|
||||
mime: true,
|
||||
name: true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!aufnahme) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Aufnahme existiert nicht oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
return aufnahme.unterlagen
|
||||
},
|
||||
})
|
||||
211
src/pages/api/geg-nachweis-gewerbe/[uid].ts
Normal file
211
src/pages/api/geg-nachweis-gewerbe/[uid].ts
Normal file
@@ -0,0 +1,211 @@
|
||||
import { GEGNachweisWohnenClient, OptionalNullable, UUidWithPrefix, ZodOverlap } from "#components/Ausweis/types.js";
|
||||
import { exclude } from "#lib/exclude.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { GEGNachweisGewerbeSchema, GEGNachweisWohnenSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PATCH = defineApiRoute({
|
||||
input: GEGNachweisGewerbeSchema.omit({
|
||||
uid: true,
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
aufnahme_id: true,
|
||||
geg_einpreisung_id: true
|
||||
}),
|
||||
output: z.void(),
|
||||
headers: {
|
||||
"Authorization": z.string()
|
||||
},
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const objekt = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid: ctx.params.uid,
|
||||
benutzer: {
|
||||
id: user.id
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
if (!objekt) {
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden oder gehört einem anderen Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
await prisma.gEGNachweisGewerbe.update({
|
||||
where: {
|
||||
uid: ctx.params.uid
|
||||
},
|
||||
data: input
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const DELETE = defineApiRoute({
|
||||
meta: {
|
||||
description: "Storniert einen Nachweis"
|
||||
},
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const { uid } = ctx.params;
|
||||
|
||||
if (!UUidWithPrefix.safeParse(uid).success) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "UID konnte nicht verifiziert werden."
|
||||
})
|
||||
}
|
||||
|
||||
// Wir holen uns den BedarfsNachweis
|
||||
// Dieser MUSS mit dem Nutzer verknüpft sein.
|
||||
const nachweis = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
}
|
||||
});
|
||||
|
||||
if (!nachweis) {
|
||||
// Falls wir den Nachweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
// Wir dürfen den Nachweis nur stornieren, wenn er noch nicht ausgestellt wurde
|
||||
// Außerdem müssen wir schauen, ob wir Admin oder der Besitzer des Nachweises sind.
|
||||
if ((nachweis.benutzer_id !== user.id) && user.rolle !== "ADMIN") {
|
||||
// Falls der Nachweis nicht dem Nutzer gehört, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "FORBIDDEN",
|
||||
message: "Nachweis gehört nicht dem Nutzer.",
|
||||
});
|
||||
}
|
||||
|
||||
// if (Nachweis.erledigt) {
|
||||
// // Falls der Nachweis bereits ausgestellt wurde, werfen wir einen Fehler
|
||||
// throw new TRPCError({
|
||||
// code: "BAD_REQUEST",
|
||||
// message: "Nachweis wurde bereits ausgestellt.",
|
||||
// });
|
||||
// }
|
||||
|
||||
if (nachweis.storniert) {
|
||||
// Falls der Nachweis bereits storniert ist, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Nachweis wurde bereits storniert.",
|
||||
});
|
||||
}
|
||||
|
||||
await prisma.gEGNachweisGewerbe.update({
|
||||
where: {
|
||||
id: nachweis.id
|
||||
},
|
||||
data: {
|
||||
storniert: true
|
||||
}
|
||||
})
|
||||
|
||||
// Wir erstellen ein Event, dass der Nachweis storniert wurde
|
||||
// Dann können wir das in der Historie anzeigen
|
||||
await prisma.event.create({
|
||||
data: {
|
||||
title: "Nachweis storniert",
|
||||
description: ((user.rolle === "ADMIN") && (nachweis.benutzer_id !== user.id)) ? "Nachweis wurde von einem Administrator storniert." : "Nachweis wurde vom Besitzer storniert.",
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id
|
||||
}
|
||||
},
|
||||
aufnahme: {
|
||||
connect: {
|
||||
id: nachweis.aufnahme_id
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt ein spezifisches Gebäude des Benutzers zurück.",
|
||||
tags: ["Gebäude"],
|
||||
headers: {
|
||||
"Authorization": {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
output: GEGNachweisGewerbeSchema.merge(z.object({
|
||||
uid_aufnahme: UUidWithPrefix,
|
||||
uid_objekt: UUidWithPrefix,
|
||||
uid_benutzer: UUidWithPrefix.optional()
|
||||
})).omit({
|
||||
id: true,
|
||||
aufnahme_id: true,
|
||||
benutzer_id: true
|
||||
}),
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
if (!uid) {
|
||||
throw new APIError({
|
||||
code: "BAD_REQUEST",
|
||||
message: "Missing uid in request params"
|
||||
})
|
||||
}
|
||||
|
||||
const nachweis = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
benutzer_id: user.id
|
||||
},
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
},
|
||||
aufnahme: {
|
||||
select: {
|
||||
uid: true,
|
||||
objekt: {
|
||||
select: {
|
||||
uid: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (!nachweis) {
|
||||
// Falls wir den Nachweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
uid_aufnahme: nachweis.aufnahme.uid,
|
||||
uid_objekt: nachweis.aufnahme.objekt.uid,
|
||||
uid_benutzer: nachweis.benutzer?.uid,
|
||||
...exclude(nachweis, ["id", "aufnahme_id", "benutzer_id", "aufnahme"])
|
||||
}
|
||||
},
|
||||
});
|
||||
143
src/pages/api/geg-nachweis-gewerbe/index.ts
Normal file
143
src/pages/api/geg-nachweis-gewerbe/index.ts
Normal file
@@ -0,0 +1,143 @@
|
||||
import { UUidWithPrefix } from "#components/Ausweis/types.js";
|
||||
import { authorizationHeaders, authorizationMiddleware } from "#lib/middleware/authorization.js";
|
||||
import { GEGNachweisGewerbeSchema, GEGNachweisWohnenSchema, prisma } from "@ibcornelsen/database/server";
|
||||
import { APIError, defineApiRoute } from "astro-typesafe-api/server";
|
||||
import { z } from "zod";
|
||||
|
||||
export const PUT = defineApiRoute({
|
||||
meta: {
|
||||
contentTypes: ["application/json"],
|
||||
description:
|
||||
"Erstellt einen neuen GEG Nachweis für Gewerbegebäude.",
|
||||
tags: ["GEG Nachweis"],
|
||||
},
|
||||
input: z.object({
|
||||
nachweis: GEGNachweisGewerbeSchema.omit({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
uid: true,
|
||||
aufnahme_id: true,
|
||||
geg_einpreisung_id: true,
|
||||
}),
|
||||
uid_aufnahme: UUidWithPrefix
|
||||
}),
|
||||
output: z.object({
|
||||
uid: UUidWithPrefix,
|
||||
objekt_uid: UUidWithPrefix,
|
||||
aufnahme_uid: UUidWithPrefix,
|
||||
}),
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, ctx, user) {
|
||||
const aufnahme = await prisma.aufnahme.findUnique({
|
||||
where: {
|
||||
uid: input.uid_aufnahme
|
||||
}
|
||||
})
|
||||
|
||||
if (!aufnahme || aufnahme.benutzer_id !== user.id) {
|
||||
throw new APIError({
|
||||
code: "FORBIDDEN",
|
||||
message: "Aufnahme konnte nicht gefunden werden oder gehört nicht zu diesem Benutzer."
|
||||
})
|
||||
}
|
||||
|
||||
const nachweis = await prisma.gEGNachweisGewerbe.create({
|
||||
data: {
|
||||
...input.nachweis,
|
||||
benutzer: {
|
||||
connect: {
|
||||
id: user.id,
|
||||
},
|
||||
},
|
||||
aufnahme: {
|
||||
connect: {
|
||||
id: aufnahme.id,
|
||||
},
|
||||
}
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
aufnahme: {
|
||||
select: {
|
||||
uid: true,
|
||||
objekt: {
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
uid: nachweis.uid,
|
||||
objekt_uid: nachweis.aufnahme.objekt.uid,
|
||||
aufnahme_uid: nachweis.aufnahme.uid,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt eine spezifische GEG Nachweis Anfrage des Benutzers zurück.",
|
||||
tags: ["GEG Nachweis"],
|
||||
headers: {
|
||||
Authorization: {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
required: true,
|
||||
allowEmptyValue: false,
|
||||
examples: {
|
||||
Bearer: {
|
||||
value: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
const nachweis = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
},
|
||||
include: {
|
||||
benutzer: true,
|
||||
aufnahme: {
|
||||
include: {
|
||||
rechnungen: true,
|
||||
events: {
|
||||
include: {
|
||||
benutzer: {
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: {
|
||||
date: "asc",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (
|
||||
!nachweis ||
|
||||
(nachweis.benutzer_id !== null && nachweis.benutzer_id !== user.id)
|
||||
) {
|
||||
// Falls wir den Ausweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "GEG Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return nachweis;
|
||||
},
|
||||
});
|
||||
@@ -10,6 +10,7 @@ export const PATCH = defineApiRoute({
|
||||
uid: true,
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
geg_einpreisung_id: true,
|
||||
aufnahme_id: true,
|
||||
}),
|
||||
output: z.void(),
|
||||
|
||||
@@ -16,7 +16,8 @@ export const PUT = defineApiRoute({
|
||||
id: true,
|
||||
benutzer_id: true,
|
||||
uid: true,
|
||||
aufnahme_id: true
|
||||
aufnahme_id: true,
|
||||
geg_einpreisung_id: true
|
||||
}),
|
||||
uid_aufnahme: UUidWithPrefix
|
||||
}),
|
||||
@@ -80,8 +81,8 @@ export const PUT = defineApiRoute({
|
||||
|
||||
export const GET = defineApiRoute({
|
||||
meta: {
|
||||
description: "Gibt ein spezifisches Gebäude des Benutzers zurück.",
|
||||
tags: ["Gebäude"],
|
||||
description: "Gibt eine spezifische GEG Nachweis Anfrage des Benutzers zurück.",
|
||||
tags: ["GEG Nachweis"],
|
||||
headers: {
|
||||
Authorization: {
|
||||
description: "Ein gültiger Authentifizierungstoken",
|
||||
@@ -95,11 +96,12 @@ export const GET = defineApiRoute({
|
||||
},
|
||||
},
|
||||
},
|
||||
headers: authorizationHeaders,
|
||||
middleware: authorizationMiddleware,
|
||||
async fetch(input, context, user) {
|
||||
const { uid } = context.params;
|
||||
|
||||
const ausweis = await prisma.verbrauchsausweisWohnen.findUnique({
|
||||
const nachweis = await prisma.gEGNachweisGewerbe.findUnique({
|
||||
where: {
|
||||
uid,
|
||||
},
|
||||
@@ -126,16 +128,16 @@ export const GET = defineApiRoute({
|
||||
});
|
||||
|
||||
if (
|
||||
!ausweis ||
|
||||
(ausweis.benutzer_id !== null && ausweis.benutzer_id !== user.id)
|
||||
!nachweis ||
|
||||
(nachweis.benutzer_id !== null && nachweis.benutzer_id !== user.id)
|
||||
) {
|
||||
// Falls wir den Ausweis nicht finden können, werfen wir einen Fehler
|
||||
throw new APIError({
|
||||
code: "NOT_FOUND",
|
||||
message: "Ausweis konnte nicht gefunden werden.",
|
||||
message: "GEG Nachweis konnte nicht gefunden werden.",
|
||||
});
|
||||
}
|
||||
|
||||
return ausweis;
|
||||
return nachweis;
|
||||
},
|
||||
});
|
||||
|
||||
0
src/testing/anfragen-umziehen.ts
Normal file
0
src/testing/anfragen-umziehen.ts
Normal file
2000
src/testing/ausweise.csv
Normal file
2000
src/testing/ausweise.csv
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,15 +1,11 @@
|
||||
import moment from "moment";
|
||||
import ausweise from "./ausweise.json" assert { type: "json" };
|
||||
import users from "./users.json" assert { type: "json" };
|
||||
import newUserIdMap from "./new-user-id-map.json" assert { type: "json" };
|
||||
import processed from "./processed.json" assert { type: "json" };
|
||||
import { Benutzer, Enums, prisma } from "@ibcornelsen/database/server";
|
||||
import * as fs from "fs";
|
||||
import { fileURLToPath } from "url";
|
||||
import { hashPassword } from "#lib/password.js";
|
||||
|
||||
const datasets = ausweise[2].data;
|
||||
const datasetUsers = users[2].data;
|
||||
import Papa from "papaparse"
|
||||
|
||||
const saveUserMap = () => {
|
||||
fs.writeFileSync(
|
||||
@@ -18,285 +14,419 @@ const saveUserMap = () => {
|
||||
);
|
||||
};
|
||||
|
||||
if (!datasets || !datasetUsers) {
|
||||
throw new Error("Invalid dataset");
|
||||
const path = fileURLToPath(new URL("./ausweise.csv", import.meta.url));
|
||||
|
||||
if (!fs.existsSync(path)) {
|
||||
throw new Error(`${path} existiert nicht.`)
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
for (const user of datasetUsers) {
|
||||
if (user.id in newUserIdMap) {
|
||||
continue;
|
||||
}
|
||||
const file = fs.createReadStream(path, "utf8");
|
||||
Papa.parse(file, {
|
||||
header: true,
|
||||
step: async function(results) {
|
||||
const dataset = results.data as any;
|
||||
|
||||
try {
|
||||
const benutzer = await prisma.benutzer.create({
|
||||
data: {
|
||||
email: user.email,
|
||||
passwort: user.password,
|
||||
adresse: user.adresse,
|
||||
anrede: user.anrede,
|
||||
name: user.name,
|
||||
vorname: user.vorname,
|
||||
ort: user.ort,
|
||||
plz: user.plz,
|
||||
rolle:
|
||||
parseInt(user.level) == 4
|
||||
? Enums.BenutzerRolle.ADMIN
|
||||
: Enums.BenutzerRolle.USER,
|
||||
firma: user.firma,
|
||||
lex_office_id: user.lex_office_id,
|
||||
telefon: user.phone,
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
});
|
||||
|
||||
newUserIdMap[user.id] = benutzer.uid;
|
||||
} catch (e) {
|
||||
saveUserMap();
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Alle 50 werden gespeichert.
|
||||
if (i % 50 == 0) {
|
||||
saveUserMap();
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
const saveProcessed = () => {
|
||||
fs.writeFileSync(
|
||||
fileURLToPath(new URL("./processed.json", import.meta.url)),
|
||||
JSON.stringify(processed)
|
||||
);
|
||||
};
|
||||
|
||||
for (const dataset of datasets) {
|
||||
if (dataset.id in processed) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let user: Benutzer;
|
||||
if (!newUserIdMap[dataset.user_id]) {
|
||||
user = await prisma.benutzer.create({
|
||||
data: {
|
||||
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,
|
||||
},
|
||||
});
|
||||
|
||||
newUserIdMap[dataset.user_id] = user.uid;
|
||||
saveUserMap();
|
||||
} else {
|
||||
user = await prisma.benutzer.findUnique({
|
||||
where: {
|
||||
uid: newUserIdMap[dataset.user_id],
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (!user) {
|
||||
saveProcessed();
|
||||
throw new Error("Benutzer ist nicht vorhanden.");
|
||||
}
|
||||
|
||||
await prisma.$transaction(async (tx) => {
|
||||
const objekt = await prisma.objekt.create({
|
||||
data: {
|
||||
adresse: dataset.strasse,
|
||||
erstellungsdatum: moment(dataset.erstellungsdatum).toDate(),
|
||||
ort: dataset.objekt_ort,
|
||||
plz: dataset.objekt_plz,
|
||||
benutzer: {
|
||||
connect: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const aufnahme = await prisma.aufnahme.create({
|
||||
data: {
|
||||
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",
|
||||
ausstellungsdatum: moment(dataset.erstellungsdatum).toDate(),
|
||||
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: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
objekt: {
|
||||
connect: {
|
||||
id: objekt.id,
|
||||
},
|
||||
},
|
||||
brennstoff_1: dataset.energietraeger_1,
|
||||
brennstoff_2: dataset.energietraeger_2,
|
||||
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",
|
||||
boxpruefung: dataset.boxpruefung == "1",
|
||||
},
|
||||
});
|
||||
|
||||
if (dataset.ausweisart === "VA") {
|
||||
const ausweis = await prisma.verbrauchsausweisWohnen.create({
|
||||
if (dataset.id in processed) {
|
||||
return;
|
||||
}
|
||||
|
||||
const user_id = dataset.user_id;
|
||||
|
||||
let user: Benutzer;
|
||||
if (!newUserIdMap[user_id]) {
|
||||
console.log(`Missing user ${user_id}`);
|
||||
|
||||
user = await prisma.benutzer.create({
|
||||
data: {
|
||||
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",
|
||||
email: dataset.email || "nutzer@nutzeremail.com",
|
||||
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.uid;
|
||||
saveUserMap();
|
||||
} else {
|
||||
user = await prisma.benutzer.findUnique({
|
||||
where: {
|
||||
uid: newUserIdMap[user_id],
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (!user) {
|
||||
saveProcessed();
|
||||
throw new Error("Benutzer ist nicht vorhanden.");
|
||||
}
|
||||
|
||||
await prisma.$transaction(async (tx) => {
|
||||
const objekt = await tx.objekt.create({
|
||||
data: {
|
||||
adresse: dataset.strasse,
|
||||
erstellungsdatum: moment(dataset.erstellungsdatum).toDate(),
|
||||
ort: dataset.objekt_ort,
|
||||
plz: dataset.objekt_plz,
|
||||
benutzer: {
|
||||
connect: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
kontrolldatei_angefragt: dataset.kontrolldatei == "1",
|
||||
registriernummer: dataset.regnummer,
|
||||
startdatum: moment(
|
||||
`${dataset.energieverbrauch_zeitraum_jahr}-${dataset.energieverbrauch_zeitraum_monat.padStart(2, "0")}-01`
|
||||
).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",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
processed[dataset.id] = true;
|
||||
|
||||
if (i % 25 == 0) {
|
||||
|
||||
const aufnahme = await tx.aufnahme.create({
|
||||
data: {
|
||||
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",
|
||||
ausstellungsdatum: moment(dataset.erstellungsdatum).toDate(),
|
||||
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: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
objekt: {
|
||||
connect: {
|
||||
id: objekt.id,
|
||||
},
|
||||
},
|
||||
brennstoff_1: dataset.energietraeger_1,
|
||||
brennstoff_2: dataset.energietraeger_2,
|
||||
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",
|
||||
boxpruefung: dataset.boxpruefung == "1",
|
||||
},
|
||||
});
|
||||
|
||||
if (dataset.ausweisart === "VA") {
|
||||
const ausweis = await tx.verbrauchsausweisWohnen.create({
|
||||
data: {
|
||||
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: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
kontrolldatei_angefragt: dataset.kontrolldatei == "1",
|
||||
registriernummer: dataset.regnummer,
|
||||
startdatum: moment(
|
||||
`${dataset.energieverbrauch_zeitraum_jahr}-${dataset.energieverbrauch_zeitraum_monat.padStart(2, "0")}-01`
|
||||
).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",
|
||||
},
|
||||
});
|
||||
} else if (dataset.ausweisart === "VANW") {
|
||||
const ausweis = await tx.verbrauchsausweisGewerbe.create({
|
||||
data: {
|
||||
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: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
kontrolldatei_angefragt: dataset.kontrolldatei == "1",
|
||||
registriernummer: dataset.regnummer,
|
||||
startdatum: moment(
|
||||
`${dataset.energieverbrauch_zeitraum_jahr}-${dataset.energieverbrauch_zeitraum_monat.padStart(2, "0")}-01`
|
||||
).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"
|
||||
},
|
||||
});
|
||||
} else if (dataset.ausweisart === "BA") {
|
||||
const ausweis = await tx.bedarfsausweisWohnen.create({
|
||||
data: {
|
||||
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: {
|
||||
uid: user.uid,
|
||||
},
|
||||
},
|
||||
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
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
processed[dataset.id as string] = true;
|
||||
saveProcessed()
|
||||
}
|
||||
});
|
||||
}
|
||||
}, {
|
||||
maxWait: 5000,
|
||||
timeout: 10000
|
||||
});
|
||||
},
|
||||
complete(results, file) {
|
||||
saveProcessed()
|
||||
},
|
||||
});
|
||||
|
||||
saveProcessed()
|
||||
function saveProcessed() {
|
||||
fs.writeFileSync(
|
||||
fileURLToPath(new URL("./processed.json", import.meta.url)),
|
||||
JSON.stringify(processed)
|
||||
);
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
62
src/testing/nutzer-umziehen.ts
Normal file
62
src/testing/nutzer-umziehen.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import userFile from "./users.json" assert { type: "json" };
|
||||
import newUserIdMap from "./new-user-id-map.json" assert { type: "json" };
|
||||
import { Enums, prisma } from "@ibcornelsen/database/server";
|
||||
import * as fs from "fs";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const users = userFile[2].data;
|
||||
|
||||
const saveUserMap = () => {
|
||||
fs.writeFileSync(
|
||||
fileURLToPath(new URL("./new-user-id-map.json", import.meta.url)),
|
||||
JSON.stringify(newUserIdMap)
|
||||
);
|
||||
};
|
||||
|
||||
if (!users) {
|
||||
throw new Error("Invalid dataset");
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
for (const user of users) {
|
||||
if (user.id in newUserIdMap) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const benutzer = await prisma.benutzer.create({
|
||||
data: {
|
||||
email: user.email,
|
||||
passwort: user.password,
|
||||
adresse: user.adresse,
|
||||
anrede: user.anrede,
|
||||
name: user.name,
|
||||
vorname: user.vorname,
|
||||
ort: user.ort,
|
||||
plz: user.plz,
|
||||
rolle:
|
||||
parseInt(user.level) == 4
|
||||
? Enums.BenutzerRolle.ADMIN
|
||||
: Enums.BenutzerRolle.USER,
|
||||
firma: user.firma,
|
||||
lex_office_id: user.lex_office_id,
|
||||
telefon: user.phone,
|
||||
},
|
||||
select: {
|
||||
uid: true,
|
||||
},
|
||||
});
|
||||
|
||||
newUserIdMap[user.id] = benutzer.uid;
|
||||
} catch (e) {
|
||||
saveUserMap();
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Alle 50 werden gespeichert.
|
||||
if (i % 50 == 0) {
|
||||
saveUserMap();
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user