diff --git a/app.js b/app.js index 3ebaa4e..43dc356 100644 --- a/app.js +++ b/app.js @@ -91,10 +91,7 @@ const formatDate = (date) => { }; // Funktion zum Laden des aktuellen oder letzten Trainings -const getTraining = async (selectedDate) => { - const today = selectedDate ? new Date(selectedDate) : new Date(); - const dayOfWeek = today.getDay(); - +const getTraining = async (kw) => { const result = await pool.query(` SELECT tr.*, g1.name AS geraet_riege_1_name, g2.name AS geraet_riege_2_name, g3.name AS geraet_riege_3_name, g4.name AS geraet_riege_4_name, @@ -111,10 +108,10 @@ const getTraining = async (selectedDate) => { LEFT JOIN teilnehmende t2 ON tr.spielleiter = t2.id LEFT JOIN spiele sp1 ON tr.aufwaermen = sp1.id LEFT JOIN spiele sp2 ON tr.spiel = sp2.id - WHERE tr.datum <= $1 - ORDER BY tr.datum DESC + WHERE tr.kw <= $1 + ORDER BY tr.kw DESC LIMIT 1 - `, [today]); + `, [kw]); return result.rows[0]; }; @@ -138,6 +135,16 @@ const addNewSpiel = async (spielName) => { } }; +function getThursdayOfWeek(week, year) { + + const firstDayOfYear = new Date(year, 0, 1); + const dayOfWeek = firstDayOfYear.getDay(); + const daysUntilFirstThursday = (dayOfWeek <= 4) ? (4 - dayOfWeek) : (11 - dayOfWeek); + const daysUntilThursdayOfWeek = (week - 1) * 7 + daysUntilFirstThursday; + const thursdayOfWeek = new Date(year, 0, 1 + daysUntilThursdayOfWeek); + return thursdayOfWeek; +} + // Funktion zum Laden der vier Leute, die am längsten nicht Aufwärmen oder Spiel geleitet haben const getCandidatesForAufwaermleiter = async () => { const result = await pool.query(` @@ -161,10 +168,10 @@ const putInRiege = async (riege, teilnehmerID) => { if (resultRiege.rows.length > 0) { const resultRiege = await pool.query('UPDATE riegen SET riegennummer = $1 WHERE fremdid_teilnehmende = $2', [riege, teilnehmerID]); - console.log("Mitglied ist jetzt in Riege $1", [riege]); + log.Info("Mitglied " + teilnehmerID + " ist jetzt in Riege " + riege); } else { const resultRiege = await pool.query('INSERT INTO riegen (fremdid_teilnehmende, riegennummer) VALUES ($1, $2)', [teilnehmerID, riege]); - console.log("Mitglied neu in Riege $1 eingefügt.", [riege]); + log.Info("Mitglied " + teilnehmerID + " neu in Riege " + riege + " eingefügt."); }} } catch (error) { console.error('Error adding new spiel:', error); @@ -495,12 +502,15 @@ app.get('/admin', requireAuth, requireAdmin, async (req, res) => { }); app.post('/new-member', requireAuth, requireAdmin, async (req, res) => { - const { vorname, nachname, geburt, riege, adresse } = req.body; + const { vorname, nachname, geburt, riege, adresse, probe} = req.body; + var geb = "01.01.2024"; const name = vorname + ' ' + nachname; - console.log(name + ', ' + geburt + ', ' + riege + ', ' + adresse); try { - const teilnehmerID = await pool.query('INSERT INTO teilnehmende (name, geburtsdatum, adresse, vorname, nachname) VALUES ($1, $2, $3, $4, $5) RETURNING id', [name, geburt, adresse, vorname, nachname]); - console.log(teilnehmerID.rows[0].id); + if(geburt){ + geb = geburt; + } + const teilnehmerID = await pool.query('INSERT INTO teilnehmende (name, geburtsdatum, adresse, vorname, nachname, probe) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id', [name, geb, adresse, vorname, nachname, probe ? true : false]); + log.Info("Mitglied " + name + " durch " + req.session.userName + " angelegt" ); putInRiege(riege, teilnehmerID.rows[0].id); res.redirect('/riege'); } catch (error) { @@ -520,38 +530,32 @@ app.get('/training', requireAuth, async (req, res) => { let selectetYear; - if (dateParam) { - selectedDate = moment(dateParam, 'DD.MM.YYYY').toDate(); - } else { - selectedDate = moment().toDate(); - } - - if (kwParam) { - selectedKW = kwParam; - if (jahrParam) { - selectetYear = jahrParam; + if (kwParam) { + selectedKW = kwParam; } else { - if (dateParam) { - selectetYear = moment(selectedDate).year(); - } + selectedKW = moment().isoWeek(); } - } else { - selectedKW = moment(selectedDate).isoWeek(); - selectetYear = moment(selectedDate).year(); - } - const training = await getTraining(selectedDate); - const trainingsResult = await pool.query('SELECT datum FROM trainings ORDER BY datum ASC'); + if (jahrParam) { + selectedYear = jahrParam; + } else { + selectedYear = moment().year(); + } + + const training = await getTraining(selectedKW); + const anwesendResult = await pool.query('SELECT * FROM anwesend WHERE fid_training = $1', [training.id]); anwesend = anwesendResult.rows; + + const trainingsResult = await pool.query('SELECT kw, jahr FROM trainings ORDER BY kw ASC'); const trainingsDates = trainingsResult.rows.map(tr => ({ - datum: formatDate(tr.datum), - rawDatum: tr.datum + kw: tr.kw, + datum: formatDate(getThursdayOfWeek(tr.kw, tr.jahr)) })); // Vorheriges Training ermitteln - const previousTrainingResult = await pool.query('SELECT * FROM trainings WHERE datum < $1 ORDER BY datum DESC LIMIT 1', [selectedDate]); - const nextTrainingResult = await pool.query('SELECT * FROM trainings WHERE datum > $1 ORDER BY datum ASC LIMIT 1', [selectedDate]); + const previousTrainingResult = await pool.query('SELECT * FROM trainings WHERE kw < $1 ORDER BY kw DESC LIMIT 1', [selectedKW]); + const nextTrainingResult = await pool.query('SELECT * FROM trainings WHERE kw > $1 ORDER BY kw ASC LIMIT 1', [selectedKW]); const previousTraining = previousTrainingResult.rows.length > 0 ? previousTrainingResult.rows[0] : null; const nextTraining = nextTrainingResult.rows.length > 0 ? nextTrainingResult.rows[0] : null; @@ -583,7 +587,7 @@ app.get('/training', requireAuth, async (req, res) => { }); if (training) { - training.datum = formatDate(training.datum); + training.datum = getThursdayOfWeek(training.kw, training.jahr); } const aufwaermleiterCandidates = await getCandidatesForAufwaermleiter(); @@ -594,7 +598,7 @@ app.get('/training', requireAuth, async (req, res) => { res.render('trainings', { training, trainingsDates, - selectedDate: training.datum, + selectedKW: training.kw, aufwaermleiterCandidates, spielleiterCandidates, aufwaermenCandidates, // Übergeben der Kandidaten für Aufwärmleiter @@ -711,7 +715,7 @@ app.post('/set-riege', requireAuth, async (req, res) => { }) app.post('/update-mitglied', requireAdmin, async (req, res) => { - const { type, id, geburt, telid, adresse, name, verbindung, nummer } = req.body; + const { type, id, geburt, telid, adresse, name, verbindung, nummer, probe } = req.body; try { if (type == "tel") { console.log('INSERT INTO telefonnummern (fid_teilnehmer, name, verbindung, nummer, stand) VALUES ($1, $2, $3, $4, $5)', [id, name, verbindung, nummer, moment().toDate()]); @@ -720,7 +724,7 @@ app.post('/update-mitglied', requireAdmin, async (req, res) => { await pool.query('DELETE FROM telefonnummern WHERE id = $1', [telid]); console.log('delete numer $1', [telid]); } else if (type == "adresse") { - await pool.query('UPDATE teilnehmende SET geburtsdatum = $1, adresse = $2 WHERE id = $3', [geburt, adresse, id]); + await pool.query('UPDATE teilnehmende SET geburtsdatum = $1, adresse = $2, probe = $3 WHERE id = $4', [geburt, adresse, probe ? true : false, id]); } res.redirect('/mitglied/' + id); diff --git a/views/admin.ejs b/views/admin.ejs index cae3942..4b52f73 100644 --- a/views/admin.ejs +++ b/views/admin.ejs @@ -17,7 +17,7 @@
Name: -
+
Geburtsdatum:

Adresse:
+ Probe:
diff --git a/views/mitglied.ejs b/views/mitglied.ejs index 77bc7f0..572aa56 100644 --- a/views/mitglied.ejs +++ b/views/mitglied.ejs @@ -7,7 +7,9 @@ Geburtsdatum: <%= birthday.getDate() %>.<%= birthday.getMonth() + 1 %>.<%= birthday.getFullYear() %> (<%= mitglied.age %>)
Adresse: <%= mitglied.adresse %>
Riege: <%= (riege == 0) ? 'keine' : riege %>
+<% if (mitglied.probe) { %> Probetraining
<% } %> Anwesend: <%= anwesend %> Mal
+ <% numbers.forEach(number => { %> <% if (number.verbindung === 4) { %> Telefonnummer: <%= number.nummer %>
@@ -33,7 +35,8 @@ Geburtsdatum:
- Adresse: + Adresse:
+ Probetraining: >
diff --git a/views/trainings.ejs b/views/trainings.ejs index 0080a3d..f27ff72 100644 --- a/views/trainings.ejs +++ b/views/trainings.ejs @@ -2,11 +2,11 @@

<% if (previousTraining) { %> - < + < <% } %> - Training <%= training.datum %> + Training <%= moment(training.datum).format('DD.MM.YYYY') %> <% if (nextTraining) { %> - > + > <% } %>

@@ -175,10 +175,10 @@
- <% trainingsDates.forEach(date => { %> - <% }) %>