Files
online-energieausweis/src/testing/rechnungen-umziehen.ts
2025-04-12 16:40:21 +02:00

176 lines
5.1 KiB
TypeScript

import { Enums, Prisma, prisma } from "#lib/server/prisma.js";
import Papa from "papaparse"
import * as fs from "fs";
import { fileURLToPath } from "url";
import { generatePrefixedId } from "#lib/db.js";
import { VALID_UUID_PREFIXES } from "#lib/constants.js";
import moment from "moment";
const path = fileURLToPath(new URL("./rechnungen.csv", import.meta.url));
if (!fs.existsSync(path)) {
throw new Error(`${path} existiert nicht.`)
}
const file = fs.createReadStream(path, "utf8");
Papa.parse(file, {
header: true,
async complete(results, file) {
let i = 0;
for (const rechnung of results.data as any) {
i++
if (i % 500 === 0) {
console.log(`Processed ${i} of ${results.data.length}, ${Math.round(i / results.data.length * 100)}%`)
}
const existing = await prisma.rechnung.findFirst({
where: {
alte_id: parseInt(rechnung.id)
}
})
if (existing) {
//console.log(`Rechnung für ${rechnung.id} existiert bereits.`);
continue;
}
const user = await prisma.benutzer.findFirst({
where: {
alte_id: parseInt(rechnung.user_id)
}
})
if (!user) {
console.log(`User ${rechnung.user_id} not found.`);
continue;
}
try {
const id = generatePrefixedId(9, VALID_UUID_PREFIXES.Rechnung)
const services: Enums.Service[] = []
if (rechnung.service_1) {
services.push(Enums.Service.Qualitaetsdruck)
}
if (rechnung.service_2) {
services.push(Enums.Service.Aushang)
}
if (rechnung.service_3) {
services.push(Enums.Service.SameDay)
}
if (rechnung.service_4) {
services.push(Enums.Service.Telefonberatung)
}
const paymentTypeMap = {
"UEBERWIESEN": Enums.Bezahlmethoden.rechnung,
"ueberweisung": Enums.Bezahlmethoden.rechnung,
"RECHNUNG": Enums.Bezahlmethoden.rechnung,
"-FAIL": Enums.Bezahlmethoden.rechnung,
"ELV-FAIL": Enums.Bezahlmethoden.sofort,
"ELV-OK": Enums.Bezahlmethoden.sofort,
"giropay": Enums.Bezahlmethoden.giropay,
"KK-FAIL": Enums.Bezahlmethoden.creditcard,
"KK-OK": Enums.Bezahlmethoden.creditcard,
"kreditkarte": Enums.Bezahlmethoden.creditcard,
"PAYP-FAIL": Enums.Bezahlmethoden.paypal,
"PAYP-OK": Enums.Bezahlmethoden.paypal,
"paypal": Enums.Bezahlmethoden.paypal,
"rechnung": Enums.Bezahlmethoden.rechnung,
"SEPA": Enums.Bezahlmethoden.rechnung,
"sepa": Enums.Bezahlmethoden.rechnung,
"sofort": Enums.Bezahlmethoden.sofort,
"SUE-FAIL": Enums.Bezahlmethoden.sofort,
"SUE-OK": Enums.Bezahlmethoden.sofort,
"": Enums.Bezahlmethoden.rechnung
}
const data: Parameters<typeof prisma.rechnung.create>[0]["data"] = {
id,
alte_id: parseInt(rechnung.id),
betrag: parseFloat(rechnung.amount),
bezahlmethode: paymentTypeMap[rechnung.payment_type as keyof typeof paymentTypeMap],
// bedarfsausweis_gewerbe,
// bedarfsausweis_wohnen,
// benutzer,
// benutzer_id,
status: rechnung.status === "storniert" ? Enums.Rechnungsstatus.canceled : rechnung.status,
bezahlt_am: moment(rechnung.date_created).isValid() ? moment(rechnung.date_created).toDate() : new Date(),
email: rechnung.email,
empfaenger: `${rechnung.vorname} ${rechnung.name}`,
erstellt_am: moment(rechnung.date_created).isValid() ? moment(rechnung.date_created).toDate() : new Date(),
// geg_nachweis_gewerbe,
// geg_nachweis_wohnen,
ort: rechnung.ort,
partner_code: rechnung.resellercode,
plz: rechnung.ort,
services,
strasse: rechnung.strasse,
transaktions_referenz: rechnung.transaction_id,
// verbrauchsausweis_gewerbe,
// verbrauchsausweis_wohnen,
versand_empfaenger: `${rechnung.vorname} ${rechnung.name}`,
versand_ort: rechnung.ort,
versand_plz: rechnung.plz,
versand_strasse: rechnung.strasse,
lex_office_id: rechnung.lex_office_id,
benutzer: {
connect: {
id: user.id
}
}
}
const verbrauchsausweisWohnen = await prisma.verbrauchsausweisWohnen.findFirst({
where: {
alte_ausweis_id: parseInt(rechnung.ausweis_id)
}
})
if (verbrauchsausweisWohnen) {
data["verbrauchsausweis_wohnen"] = {
connect: {
id: verbrauchsausweisWohnen.id
}
}
} else {
const verbrauchsausweisGewerbe = await prisma.verbrauchsausweisGewerbe.findFirst({
where: {
alte_ausweis_id: parseInt(rechnung.ausweis_id)
}
})
if (verbrauchsausweisGewerbe) {
data["verbrauchsausweis_gewerbe"] = {
connect: {
id: verbrauchsausweisGewerbe.id
}
}
} else {
const bedarfsausweisWohnen = await prisma.bedarfsausweisWohnen.findFirst({
where: {
alte_ausweis_id: parseInt(rechnung.ausweis_id)
}
})
if (bedarfsausweisWohnen) {
data["bedarfsausweis_wohnen"] = {
connect: {
id: bedarfsausweisWohnen.id
}
}
}
}
}
await prisma.rechnung.create({
data
});
console.log('User: ' + rechnung.user_id + ' Rechnung:' + rechnung.id);
} catch (e) {
console.log(e);
continue;
}
}
}
});