From cb667cb048c569d5e055775cd3ec366bde94724b Mon Sep 17 00:00:00 2001 From: Carsten Graf Date: Mon, 23 Mar 2026 02:42:56 +0100 Subject: [PATCH] PDF wird beim Abschicken generiert --- routes/timesheet-routes.js | 45 ++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/routes/timesheet-routes.js b/routes/timesheet-routes.js index 80d09cb..6fe79a2 100644 --- a/routes/timesheet-routes.js +++ b/routes/timesheet-routes.js @@ -471,17 +471,54 @@ function registerTimesheetRoutes(app) { db.run(`INSERT INTO weekly_timesheets (user_id, week_start, week_end, version, status, version_reason) VALUES (?, ?, ?, ?, 'eingereicht', ?)`, [userId, week_start, week_end, newVersion, version_reason ? version_reason.trim() : null], - (err) => { + function(err) { if (err) return res.status(500).json({ error: 'Fehler beim Abschicken' }); - + + const timesheetId = this.lastID; + if (!timesheetId) { + return res.status(500).json({ error: 'Fehler beim Ermitteln der Stundenzettel-ID' }); + } + // Status der Einträge aktualisieren (optional - für Nachverfolgung) db.run(`UPDATE timesheet_entries SET status = 'eingereicht' WHERE user_id = ? AND date >= ? AND date <= ?`, [userId, week_start, week_end], - (err) => { + async (err) => { if (err) return res.status(500).json({ error: 'Fehler beim Aktualisieren des Status' }); - res.json({ success: true, version: newVersion }); + + // PDF direkt beim Einreichen erzeugen und auf dem Dateisystem persistieren, + // damit der abgegebene Stand versionstreu festgehalten wird. + try { + const pdfBuffer = await generatePDFToBuffer(timesheetId, req); + const pdfLocation = resolvePdfLocationFromTimesheetRow({ + id: timesheetId, + user_id: userId, + week_start, + version: newVersion, + firstname: req.session.firstname || '', + lastname: req.session.lastname || '', + }); + + await savePdfBufferAtomic(pdfLocation.absolutePath, pdfBuffer); + + db.run( + 'UPDATE weekly_timesheets SET pdf_path = ? WHERE id = ?', + [pdfLocation.relativePath, timesheetId], + (pathErr) => { + if (pathErr) { + console.error('Fehler beim Speichern des PDF-Pfads:', pathErr); + return res.status(500).json({ error: 'Fehler beim Speichern des PDF-Pfads' }); + } + res.json({ success: true, version: newVersion }); + } + ); + } catch (pdfErr) { + console.error('Fehler beim direkten Generieren des PDFs nach Einreichung:', pdfErr); + return res.status(500).json({ + error: 'Woche wurde eingereicht, aber PDF konnte nicht erzeugt werden. Bitte erneut versuchen.' + }); + } }); }); });