From 9a602272430214d2850897b5fdb778f9c63b84af Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 11 May 2025 12:34:21 +0200 Subject: [PATCH] Add Maybe option for Max --- app.py | 9 +++++++-- static/app.js | 22 ++++++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app.py b/app.py index 474558c..b29e865 100644 --- a/app.py +++ b/app.py @@ -18,10 +18,14 @@ class Date(db.Model): date_str = db.Column(db.String(20), nullable=False, unique=True) # e.g. '08/05/25' class Attendance(db.Model): + """ + Attendance record for a player on a date. + status: 'yes', 'no', 'maybe', or blank (None) + """ id = db.Column(db.Integer, primary_key=True) date_id = db.Column(db.Integer, db.ForeignKey('date.id'), nullable=False) player_id = db.Column(db.Integer, db.ForeignKey('player.id'), nullable=False) - status = db.Column(db.String(10), nullable=False) # 'yes' or 'no' + status = db.Column(db.String(10)) # 'yes', 'no', 'maybe', or blank __table_args__ = (db.UniqueConstraint('date_id', 'player_id', name='_date_player_uc'),) @@ -96,7 +100,8 @@ def json_to_db(data): if status: player = Player.query.filter_by(name=player_name).first() if player: - db.session.add(Attendance(date_id=date.id, player_id=player.id, status='yes' if status is True else 'no')) + # Save status as 'yes', 'no', or 'maybe' + db.session.add(Attendance(date_id=date.id, player_id=player.id, status=('yes' if status is True else status if status in ['no', 'maybe'] else None)) guest_name = data.get("guestNames", {}).get(date_str) if guest_name: db.session.add(GuestName(date_id=date.id, name=guest_name)) diff --git a/static/app.js b/static/app.js index a15c146..efadcdc 100644 --- a/static/app.js +++ b/static/app.js @@ -103,14 +103,18 @@ function renderTable() { if (data.attendance[key] === true) { td.innerText = 'Yes'; td.classList.add('yes'); - td.classList.remove('no'); + td.classList.remove('no', 'maybe'); } else if (data.attendance[key] === 'no') { td.innerText = 'No'; td.classList.add('no'); - td.classList.remove('yes'); + td.classList.remove('yes', 'maybe'); + } else if (data.attendance[key] === 'maybe') { + td.innerText = 'Maybe'; + td.classList.add('maybe'); + td.classList.remove('yes', 'no'); } else { td.innerText = ''; - td.classList.remove('yes', 'no'); + td.classList.remove('yes', 'no', 'maybe'); } td.onclick = () => { if (!data.attendance[key]) { @@ -118,20 +122,26 @@ function renderTable() { } else if (data.attendance[key] === true) { data.attendance[key] = 'no'; } else if (data.attendance[key] === 'no') { + data.attendance[key] = 'maybe'; + } else if (data.attendance[key] === 'maybe') { delete data.attendance[key]; } // Immediately update the cell UI if (data.attendance[key] === true) { td.innerText = 'Yes'; td.classList.add('yes'); - td.classList.remove('no'); + td.classList.remove('no', 'maybe'); } else if (data.attendance[key] === 'no') { td.innerText = 'No'; td.classList.add('no'); - td.classList.remove('yes'); + td.classList.remove('yes', 'maybe'); + } else if (data.attendance[key] === 'maybe') { + td.innerText = 'Maybe'; + td.classList.add('maybe'); + td.classList.remove('yes', 'no'); } else { td.innerText = ''; - td.classList.remove('yes', 'no'); + td.classList.remove('yes', 'no', 'maybe'); } saveData(); };