From a8f29717b4aa08fdefff10b565a0f52045c32388 Mon Sep 17 00:00:00 2001 From: rxf Date: Sun, 1 Mar 2026 16:25:05 +0100 Subject: [PATCH] =?UTF-8?q?checkfuehrung:=20mehrere=20Eintr=C3=A4ge=20pro?= =?UTF-8?q?=20Tag=20behandeln?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 9 ++++ sternwarte/DB4js_all.php | 13 +++++ sternwarte/checkfuehrung/checkfuehrung.js | 59 +++++++++++++++-------- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 0ac3a23..79744f5 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -37,6 +37,15 @@ "pathMappings": { "/var/www/html": "${workspaceFolder}/sternwarte" } + }, + { + "name": "Debug checkfuehrung.js", + "type": "node", + "request": "launch", + "program": "${workspaceFolder}/sternwarte/checkfuehrung/checkfuehrung.js", + "args": ["-d", "2"], + "cwd": "${workspaceFolder}/sternwarte/checkfuehrung", + "console": "integratedTerminal" } ] } \ No newline at end of file diff --git a/sternwarte/DB4js_all.php b/sternwarte/DB4js_all.php index 9657db5..0948d23 100644 --- a/sternwarte/DB4js_all.php +++ b/sternwarte/DB4js_all.php @@ -898,6 +898,7 @@ class RepoKalender { const TBL = 'kalender'; + public static function getEntries(string $start, string $end): array { $s = date('Ymd', strtotime($start)); @@ -905,6 +906,14 @@ class RepoKalender return DB::all("SELECT * FROM " . self::TBL . " WHERE start >= ? AND start <= ?", [$s, $e]); } + public static function getOneEntry(string $start): array + { + $end = new DateTime($start); + $end->modify('+1 day'); + $end = $end->format('Y-m-d'); + return RepoKalender::getEntries($start, $end); + } + public static function insert(array $data): bool { $sql = "INSERT INTO " . self::TBL . " (start, end, title, description) VALUES (?, ?, ?, ?)"; @@ -1078,6 +1087,7 @@ class Commands 'UPDATE_KALENDER_BEO' => 'Kalender-Eintrag BEOS aktualisieren', 'GET_FDATES' => 'Führungstermine für Kalenderansicht', 'GET_CALENTRIES' => 'Kalendereinträge abrufen', + 'GET_ONEENTRY' => 'einen Kalendereintrag abrufen', 'PUT_CALENTRY' => 'Kalendereintrag erstellen', 'DEL_CALENTRY' => 'Kalendereintrag löschen', 'GET_YEARS' => 'Liste verfügbare Jahre (Statistik)', @@ -1438,6 +1448,9 @@ Spendenbescheinigung: \t" . $info['spende'] . " case 'GET_CALENTRIES': if (!isset($input['start'], $input['end'])) respondError('start and end required'); respond(RepoKalender::getEntries($input['start'], $input['end'])); + case 'GET_ONEENTRY': + if (!isset($input['date'])) respondError('date required'); + respond(RepoKalender::getOneEntry($input['date'])); case 'PUT_CALENTRY': RepoKalender::insert($input['data']); respond(['success' => true]); diff --git a/sternwarte/checkfuehrung/checkfuehrung.js b/sternwarte/checkfuehrung/checkfuehrung.js index 42014f9..27dcebc 100755 --- a/sternwarte/checkfuehrung/checkfuehrung.js +++ b/sternwarte/checkfuehrung/checkfuehrung.js @@ -15,6 +15,9 @@ Dieses Programm kann auch die Überwachung machen, dass Einträge in der DB gel Versions: +V 1.0.2 2026-03-01 rxf + - Mehrere Führungen am gleichen Tag werden nun alle verarbeitet (je eine E-Mail pro Eintrag). + V 1.0.1 2025-11-17 rxf - Übergabe der Tage bis zu 'gestern' als Commandline Parameter: '-d x'. Ohne -d wird 1 angesetzt. @@ -61,30 +64,44 @@ const transporter = DEVELOP ? nodemailer.createTransport({ }); -// Ajax-Call, um die Daten von der DBase zu holen -async function fetchDatafromDB(conn,termin) { - let result; - let id; - let query = "select mitarbeiter,id from SoFue2 where DATE(wtermin) = '" + termin + "' and status = 2"; +// Daten aus der DB holen und für jeden Eintrag eine E-Mail senden +async function fetchDatafromDB(conn, termin) { try { - result = await conn.query(query); - if (result[0].length == 0) { + const query = "select mitarbeiter,id from SoFue2 where DATE(wtermin) = '" + termin + "' and status = 2"; + const [rows] = await conn.query(query); + + if (rows.length === 0) { console.log("Keine Führung gewesen"); return; } - let ma = result[0][0].mitarbeiter; - id = result[0][0].id; - query = "select vorname,email_1 from beos where name = '" + ma + "'"; - result = await conn.query(query); + + console.log(`${rows.length} Führung(en) gefunden für ${termin}`); + + for (const row of rows) { + const ma = row.mitarbeiter; + const id = row.id; + const beoQuery = "select vorname,email_1 from beos where name = '" + ma + "'"; + const [beoRows] = await conn.query(beoQuery); + + if (beoRows.length === 0) { + console.log(`Kein BEO-Eintrag gefunden für Mitarbeiter: ${ma} (id=${id})`); + continue; + } + + send2BEO({ + name: beoRows[0].vorname, + email: (beoRows[0].email_1).toLowerCase(), + date: termin, + id: id + }); + } } - catch(err) { + catch (err) { console.log(err); } - finally { + finally { conn.end(); } - let erg = result[0]; - send2BEO({name: erg[0].vorname, email: erg[0].email_1, date: termin, id: id}); } @@ -116,13 +133,17 @@ function send2BEO(info) { async function main() { // console.log(DB_host, DB_port, DB_user, DB_pass, DB_dbase); console.log('Start: ' + moment().format('YYYY-MM-DD HH:mm')) - const connection = await mysql.createConnection({ -// host: DB_host, -// port: DB_port, + const connection = await mysql.createConnection(DEVELOP ? { + host: DB_host, + port: DB_port, user: DB_user, password: DB_pass, database: DB_dbase, - socketPath: '/var/lib/mysql/mysql.sock' + } : { + user: DB_user, + password: DB_pass, + database: DB_dbase, + socketPath: '/var/lib/mysql/mysql.sock' }); const yesterday = moment().subtract(DAYS, 'd').format('YYYY-MM-DD'); console.log('Yesterday:', yesterday)