diff --git a/app.js b/app.js index 8b8d32a..31f2d20 100644 --- a/app.js +++ b/app.js @@ -182,6 +182,15 @@ const getRiegenMitgliederSortedByAge = async () => { return result.rows; }; + const getAnwesenheit = function (id, anwesend) { + for (let item of anwesend) { + if (item.fid_teilnehmer === id) { + return true; + } + } + return false; + }; + // Registrierung app.post('/register', async (req, res) => { const { username, email, password } = req.body; @@ -492,6 +501,8 @@ app.get('/training', requireAuth, async (req, res) => { const training =await getTraining(selectedDate); const trainingsResult = await pool.query('SELECT datum FROM trainings ORDER BY datum ASC'); + const anwesendResult = await pool.query('SELECT * FROM anwesend WHERE fid_training = $1',[ training.id ]); + anwesend=anwesendResult.rows; const trainingsDates = trainingsResult.rows.map(tr => ({ datum: formatDate(tr.datum), rawDatum: tr.datum @@ -503,6 +514,33 @@ app.get('/training', requireAuth, async (req, res) => { const previousTraining = previousTrainingResult.rows.length > 0 ? previousTrainingResult.rows[0] : null; const nextTraining = nextTrainingResult.rows.length > 0 ? nextTrainingResult.rows[0] : null; + // Abrufen der Riegendaten einschließlich der Teilnehmer und deren Altersberechnung + const result = await pool.query(` + SELECT r.riegennummer, t.id, t.name, t.vorname, t.nachname, t.geburtsdatum, r.helfer + FROM riegen r + JOIN teilnehmende t ON r.fremdID_Teilnehmende = t.id + ORDER BY r.riegennummer, t.geburtsdatum ASC + `); + + // Gruppieren der Riegenteilnehmer nach Riegennummer + const riegen = {}; + result.rows.forEach(row => { + const age = calculateAge(row.geburtsdatum); + const tnAnwesend = getAnwesenheit(row.id, anwesend); + if (!riegen[row.riegennummer]) { + riegen[row.riegennummer] = []; + } + riegen[row.riegennummer].push({ + id: row.id, + name: row.name, + vorname: row.vorname, + nachname: row.nachname, + age: age, + helfer: row.helfer, + anwesend: tnAnwesend + }); + }); + if (training) { training.datum = formatDate(training.datum); } @@ -523,6 +561,7 @@ app.get('/training', requireAuth, async (req, res) => { session: req.session, previousTraining, nextTraining, + riegen, moment }); } catch (error) { @@ -733,6 +772,19 @@ app.post('/changelog', requireAdmin, async (req, res) => { } }) +app.post('/anwesend', requireAuth, async (req, res) => { +const { anw, trainingId } = req.body; +try { + for (const teilnehmer of anw) { + await pool.query('INSERT INTO anwesend (fid_teilnehmer, fid_training) VALUES ($1, $2)', [teilnehmer, trainingId]); +} + res.redirect('/training'); +} catch (error) { + console.error('Error:', error); + const message = 'Error:' + error; + res.render('error', {session: req.session, message}); +}}) + const server = app.listen(port, '0.0.0.0', () => { console.log(`Server is running on http://localhost:${port}/`); }); diff --git a/views/trainings.ejs b/views/trainings.ejs index 9850c19..fbaafc2 100644 --- a/views/trainings.ejs +++ b/views/trainings.ejs @@ -11,7 +11,20 @@ + + + + + <% if (training) { %> +
+

Geräte

- +
+

Aufwärmen:

@@ -101,20 +115,75 @@ <% } %>
-
- - -
-<% } else { %> +
+
+

Anwesenheit

+ + + + + +
+ <% Object.keys(riegen).forEach((riegennummer, index) => { %> +
+
+ + + <% riegen[riegennummer].forEach(teilnehmer => { if(teilnehmer.helfer) { %> + + + + + + <% riegen[riegennummer].forEach(teilnehmer => { if(!teilnehmer.helfer) { %> + + + + <% }}) %> + +
+ <%= teilnehmer.vorname %> <%= teilnehmer.nachname %> + + value="<%= teilnehmer.id %>"> + <% }}) %> +
<%= teilnehmer.vorname %> <%= teilnehmer.nachname %> value="<%= teilnehmer.id %>">
+ + +
+
+ <% }) %> +
+ + + +
+ +
+ <% } else { %>

Kein Training gefunden für das ausgewählte Datum.

<% } %> + +
+
+ + +
+ +
+