BugFix Projektauswertung
This commit is contained in:
@@ -38,10 +38,15 @@ function registerVerwaltungRoutes(app) {
|
||||
WHERE wt.status = 'eingereicht'
|
||||
ORDER BY wt.week_start DESC, wt.user_id, wt.version DESC
|
||||
`, (err, timesheets) => {
|
||||
if (err) {
|
||||
console.error('Fehler beim Laden der Stundenzettel (Verwaltung):', err);
|
||||
return res.status(500).send('Fehler beim Laden der Verwaltungsdaten. Bitte die Server-Logs prüfen oder die Datenbank-Migrationen ausführen.');
|
||||
}
|
||||
|
||||
// Gruppiere nach Mitarbeiter, dann nach Kalenderwoche
|
||||
// Struktur: { [user_id]: { user: {...}, weeks: { [week_key]: {...} } } }
|
||||
const groupedByEmployee = {};
|
||||
|
||||
|
||||
(timesheets || []).forEach(ts => {
|
||||
const userId = ts.user_id;
|
||||
const weekKey = `${ts.week_start}_${ts.week_end}`;
|
||||
@@ -152,37 +157,57 @@ function registerVerwaltungRoutes(app) {
|
||||
|
||||
// Projektauswertung nach Mitarbeitern für eine Projektnummer
|
||||
app.get('/verwaltung/projektauswertung', requireVerwaltung, (req, res) => {
|
||||
let session;
|
||||
try {
|
||||
session = req.session || {};
|
||||
} catch (e) {
|
||||
console.error('Fehler beim Zugriff auf die Session (Projektauswertung):', e);
|
||||
return res.status(500).send('Fehler: Session nicht verfügbar. Bitte erneut anmelden.');
|
||||
}
|
||||
const userForView = {
|
||||
firstname: session.firstname ?? '',
|
||||
lastname: session.lastname ?? '',
|
||||
roles: Array.isArray(session.roles) ? session.roles : [],
|
||||
currentRole: session.currentRole || 'verwaltung'
|
||||
};
|
||||
|
||||
const projectNumberRaw = req.query.project ? String(req.query.project).trim() : '';
|
||||
const projectNumber = projectNumberRaw || null;
|
||||
|
||||
const doRender = (locals) => {
|
||||
try {
|
||||
return res.render('projekt-auswertung', locals);
|
||||
} catch (e) {
|
||||
console.error('Fehler beim Rendern der Projektauswertung:', e);
|
||||
if (!res.headersSent) {
|
||||
res.status(500).send('Fehler beim Anzeigen der Seite. Bitte Server-Logs prüfen.');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (!projectNumber) {
|
||||
// Nur Formular anzeigen, noch keine Auswertung
|
||||
return res.render('projekt-auswertung', {
|
||||
user: {
|
||||
firstname: req.session.firstname,
|
||||
lastname: req.session.lastname,
|
||||
roles: req.session.roles || [],
|
||||
currentRole: req.session.currentRole || 'verwaltung'
|
||||
},
|
||||
return doRender({
|
||||
user: userForView,
|
||||
projectNumber: '',
|
||||
results: [],
|
||||
totalProjectHours: 0,
|
||||
hasResults: false
|
||||
hasResults: false,
|
||||
totalProjectHoursFormatted: '0:00',
|
||||
breakdownByUser: {},
|
||||
projectNumberError: null
|
||||
});
|
||||
}
|
||||
|
||||
if (!isValidProjectNumber(projectNumber)) {
|
||||
return res.render('projekt-auswertung', {
|
||||
user: {
|
||||
firstname: req.session.firstname,
|
||||
lastname: req.session.lastname,
|
||||
roles: req.session.roles || [],
|
||||
currentRole: req.session.currentRole || 'verwaltung'
|
||||
},
|
||||
return doRender({
|
||||
user: userForView,
|
||||
projectNumber: projectNumberRaw,
|
||||
results: [],
|
||||
totalProjectHours: 0,
|
||||
hasResults: false,
|
||||
totalProjectHoursFormatted: '0:00',
|
||||
breakdownByUser: {},
|
||||
projectNumberError: 'Die Projektnummer muss 7 Ziffern haben, mit 5 beginnen, gefolgt vom Jahr (YY) und 4 Ziffern (z.B. 5260001).'
|
||||
});
|
||||
}
|
||||
@@ -224,7 +249,7 @@ function registerVerwaltungRoutes(app) {
|
||||
db.all(sql, params, (err, rows) => {
|
||||
if (err) {
|
||||
console.error('Fehler bei der Projektauswertung:', err);
|
||||
return res.status(500).send('Fehler bei der Projektauswertung');
|
||||
return res.status(500).send('Fehler bei der Projektauswertung: ' + (err.message || String(err)));
|
||||
}
|
||||
|
||||
const rawResults = (rows || []).map((row) => {
|
||||
@@ -247,19 +272,15 @@ function registerVerwaltungRoutes(app) {
|
||||
const totalProjectHoursFormatted = minutesToHhMm(totalProjectMinutes);
|
||||
|
||||
if (results.length === 0) {
|
||||
return res.render('projekt-auswertung', {
|
||||
user: {
|
||||
firstname: req.session.firstname,
|
||||
lastname: req.session.lastname,
|
||||
roles: req.session.roles || [],
|
||||
currentRole: req.session.currentRole || 'verwaltung'
|
||||
},
|
||||
return doRender({
|
||||
user: userForView,
|
||||
projectNumber: projectNumberRaw,
|
||||
results,
|
||||
totalProjectHours,
|
||||
totalProjectHoursFormatted,
|
||||
hasResults: false,
|
||||
breakdownByUser: {}
|
||||
breakdownByUser: {},
|
||||
projectNumberError: null
|
||||
});
|
||||
}
|
||||
|
||||
@@ -343,19 +364,15 @@ function registerVerwaltungRoutes(app) {
|
||||
|
||||
pending -= 1;
|
||||
if (pending === 0) {
|
||||
res.render('projekt-auswertung', {
|
||||
user: {
|
||||
firstname: req.session.firstname,
|
||||
lastname: req.session.lastname,
|
||||
roles: req.session.roles || [],
|
||||
currentRole: req.session.currentRole || 'verwaltung'
|
||||
},
|
||||
doRender({
|
||||
user: userForView,
|
||||
projectNumber: projectNumberRaw,
|
||||
results,
|
||||
totalProjectHours,
|
||||
totalProjectHoursFormatted,
|
||||
hasResults: results.length > 0,
|
||||
breakdownByUser
|
||||
breakdownByUser,
|
||||
projectNumberError: null
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user