302 lines
9.2 KiB
TypeScript
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() |