Files
online-energieausweis/src/testing/daten-umziehen.ts
2025-02-20 16:50:21 +11:00

302 lines
9.2 KiB
TypeScript

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;
const saveUserMap = () => {
fs.writeFileSync(
fileURLToPath(new URL("./new-user-id-map.json", import.meta.url)),
JSON.stringify(newUserIdMap)
);
};
if (!datasets || !datasetUsers) {
throw new Error("Invalid dataset");
}
let i = 0;
for (const user of datasetUsers) {
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++;
}
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({
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",
},
});
}
processed[dataset.id] = true;
if (i % 25 == 0) {
saveProcessed()
}
});
}
saveProcessed()