From d3ea2ea303e789cb8072535f8574d057e6137b44 Mon Sep 17 00:00:00 2001 From: hmt Date: Mon, 9 Nov 2020 19:30:28 +0100 Subject: [PATCH] lehrerimport --- src/components/Einstellungen.svelte | 149 ++++++++++++++++++++-------- 1 file changed, 109 insertions(+), 40 deletions(-) diff --git a/src/components/Einstellungen.svelte b/src/components/Einstellungen.svelte index 40f92a5..c818136 100644 --- a/src/components/Einstellungen.svelte +++ b/src/components/Einstellungen.svelte @@ -6,6 +6,7 @@ let datensatz_schueler = "", datensatz_medien = "", datensatz_sonstige = { nichtschueler: 1, memo: "" }, + datensatz_block_sonstige = "", warten; const update_sonstige = () => { @@ -26,6 +27,32 @@ notifier.fehler(`Fehler beim Hinzufügen des Nutzers: ${e.message}`); } }; + const block_update_sonstige = async () => { + warten = true; + const { data } = await parse(datensatz_block_sonstige, { + comments: "#", + header: true, + }); + try { + $db.prepare( + `DELETE FROM schueler WHERE nichtschueler=1 AND NOT EXISTS (SELECT * FROM ausleihe WHERE ausleihe.schueler_id = schueler.id)` + ).run(); + const insert = $db.prepare( + `INSERT INTO schueler (schild_id, name, vorname, jahr, nichtschueler) VALUES(:id, :name, :vorname, :jahr, 1) + ON CONFLICT (schild_id) DO UPDATE SET jahr = :jahr` + ); + const insertMany = $db.transaction((entries) => { + for (const e of entries) insert.run(e); + }); + insertMany(data); + // id|name|vorname|jahr + notifier.fertig(`${data.length || 0} Datensätze verarbeitet.`); + } catch (e) { + notifier.fehler(`Fehler beim Lehrerimport: ${e.message}`); + console.log(e); + } + warten = false; + }; const update_schueler = async () => { warten = true; const res = await parse(datensatz_schueler, { @@ -34,8 +61,7 @@ }); // id|name|vorname|jahr|klasse|kurs|kurs_lehrer const values = res.data; - let schueler = {}, - kurse = {}; + let schueler = {} values.forEach((v) => { schueler[v.id] = [v.id, v.jahr, v.klasse, v.name, v.vorname]; }); @@ -47,7 +73,7 @@ .map((v) => `(${v.id}, '${v.kurs_lehrer || ""}', '${v.kurs || ""}')`) .join(","); const query = [ - `DELETE FROM schueler WHERE NOT EXISTS ( SELECT * FROM ausleihe WHERE ausleihe.schueler_id = schueler.id)`, + `DELETE FROM schueler WHERE NOT nichtschueler AND NOT EXISTS ( SELECT * FROM ausleihe WHERE ausleihe.schueler_id = schueler.id)`, `INSERT INTO schueler (schild_id, jahr, klasse, name, vorname) VALUES ${schueler_values} ON CONFLICT (schild_id) DO UPDATE SET jahr = ${jahr}`, `DELETE FROM kurszugehoerigkeit`, @@ -56,8 +82,12 @@ try { query.forEach((q) => $db.prepare(q).run()); datensatz_schueler = ""; - const res = $db.prepare(`SELECT COUNT(*) as anzahl FROM schueler`).get() - notifier.fertig(`${schueler_values.length || 0} Datensätze verarbeitet; ${res.anzahl} Nutzer in der Datenbank.`); + const res = $db.prepare(`SELECT COUNT(*) as anzahl FROM schueler`).get(); + notifier.fertig( + `${schueler_values.length || 0} Datensätze verarbeitet; ${ + res.anzahl + } Nutzer in der Datenbank.` + ); } catch (e) { notifier.fehler(`Fehler beim Schülerimport: ${e.message}`); console.log(e); @@ -65,7 +95,7 @@ warten = false; }; const update_medien = async () => { - const medien = datensatz_medien.split("\n").filter(a=>a) + const medien = datensatz_medien.split("\n").filter((a) => a); const insert = $db.prepare( "INSERT INTO medienbezeichnung (name) VALUES (?)" ); @@ -77,9 +107,10 @@ datensatz_medien = ""; notifier.fertig("Medientitel importiert"); } catch (e) { - const msg = e.code === "SQLITE_CONSTRAINT_UNIQUE" - ? "Mindestens ein Titel ist bereits vorhanden" - : e.message + const msg = + e.code === "SQLITE_CONSTRAINT_UNIQUE" + ? "Mindestens ein Titel ist bereits vorhanden" + : e.message; notifier.fehler(`Fehler beim Medienimport: ${msg}`); console.log(e); } @@ -90,10 +121,10 @@

Scan-Prefix

- +
@@ -101,17 +132,17 @@

Schüler, Kurse und Zugehörigkeiten importieren

-