Rechnung Import
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Rechnung" ADD COLUMN "lex_office_id" TEXT;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
-- DropIndex
|
||||||
|
DROP INDEX "Rechnung_transaktions_referenz_key";
|
||||||
@@ -51,8 +51,9 @@ model Rechnung {
|
|||||||
erstellt_am DateTime @default(now())
|
erstellt_am DateTime @default(now())
|
||||||
bezahlt_am DateTime?
|
bezahlt_am DateTime?
|
||||||
storniert_am DateTime?
|
storniert_am DateTime?
|
||||||
transaktions_referenz String? @unique @db.VarChar
|
transaktions_referenz String? @db.VarChar
|
||||||
partner_code String?
|
partner_code String?
|
||||||
|
lex_office_id String?
|
||||||
|
|
||||||
benutzer_id String
|
benutzer_id String
|
||||||
benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
benutzer Benutzer @relation(fields: [benutzer_id], references: [id], onDelete: NoAction, onUpdate: NoAction)
|
||||||
|
|||||||
@@ -25,5 +25,6 @@ export const RechnungSchema = z.object({
|
|||||||
storniert_am: z.date().nullish(),
|
storniert_am: z.date().nullish(),
|
||||||
transaktions_referenz: z.string().nullish(),
|
transaktions_referenz: z.string().nullish(),
|
||||||
partner_code: z.string().nullish(),
|
partner_code: z.string().nullish(),
|
||||||
|
lex_office_id: z.string().nullish(),
|
||||||
benutzer_id: z.string(),
|
benutzer_id: z.string(),
|
||||||
})
|
})
|
||||||
|
|||||||
1
src/testing/new-rechnungen-id-map.json
Normal file
1
src/testing/new-rechnungen-id-map.json
Normal file
File diff suppressed because one or more lines are too long
138
src/testing/rechnungen-umziehen.ts
Normal file
138
src/testing/rechnungen-umziehen.ts
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
import newRechnungenIdMap from "./new-rechnungen-id-map.json" with { type: "json" };
|
||||||
|
import newUserIdMap from "./new-user-id-map.json" with { type: "json" };
|
||||||
|
import { Enums, 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 saveRechnungenMap = () => {
|
||||||
|
fs.writeFileSync(
|
||||||
|
fileURLToPath(new URL("./new-rechnungen-id-map.json", import.meta.url)),
|
||||||
|
JSON.stringify(newRechnungenIdMap)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
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) {
|
||||||
|
if (rechnung.id in newRechnungenIdMap) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(rechnung.user_id in newUserIdMap)) {
|
||||||
|
console.log(`User ${rechnung.user_id} not found.`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const id = generatePrefixedId(6, 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
|
||||||
|
}
|
||||||
|
await prisma.rechnung.create({
|
||||||
|
data: {
|
||||||
|
id,
|
||||||
|
betrag: parseFloat(rechnung.amount),
|
||||||
|
bezahlmethode: paymentTypeMap[rechnung.payment_type],
|
||||||
|
// bedarfsausweis_gewerbe,
|
||||||
|
// bedarfsausweis_wohnen,
|
||||||
|
// benutzer,
|
||||||
|
// benutzer_id,
|
||||||
|
status: rechnung.status === "storniert" ? Enums.Rechnungsstatus.canceled : rechnung.status,
|
||||||
|
bezahlt_am: moment(rechnung.date_created).toDate(),
|
||||||
|
email: rechnung.email,
|
||||||
|
empfaenger: `${rechnung.vorname} ${rechnung.name}`,
|
||||||
|
erstellt_am: moment(rechnung.date_created).toDate(),
|
||||||
|
// 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_id: newUserIdMap[rechnung.user_id]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
newRechnungenIdMap[rechnung.id] = id;
|
||||||
|
} catch (e) {
|
||||||
|
saveRechnungenMap();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Alle 50 werden gespeichert.
|
||||||
|
if (i % 50 == 0) {
|
||||||
|
console.log(`Saved ${i} - ${results.data.length - i} left`);
|
||||||
|
saveRechnungenMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
process.on("SIGINT", () => {
|
||||||
|
console.log("Shutting down.");
|
||||||
|
|
||||||
|
saveRechnungenMap()
|
||||||
|
|
||||||
|
process.exit(0)
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user