PDF wird beim Abschicken generiert

This commit is contained in:
2026-03-23 02:42:56 +01:00
parent 8152aab15b
commit cb667cb048

View File

@@ -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.'
});
}
});
});
});