import sqlite3 from flask import Flask, render_template_string, jsonify from datetime import datetime, date app = Flask(__name__) DB_FILE = "cleaning_logs.db" # Room definitions BUILDINGS = { "Haus A-C": [ list(range(101, 131)), list(range(201, 231)), list(range(301, 331)) ], "Haus D-F": [ list(range(131, 151)), list(range(231, 251)), list(range(331, 351)) ], "Haus O": [ list(range(401, 413)), list(range(420, 436)), list(range(440, 457)) ] } def get_all_defined_rooms(): """Get a set of all room numbers defined in buildings""" rooms = set() for floors in BUILDINGS.values(): for floor in floors: rooms.update(str(r) for r in floor) return rooms def get_room_statuses(): """Returns dict: {room_number: (last_cleaned_time, is_today)}""" today = date.today().strftime("%Y-%m-%d") with sqlite3.connect(DB_FILE) as conn: cursor = conn.execute(""" SELECT room_number, MAX(cleaned_at) as last_cleaned FROM cleaning_events GROUP BY room_number """) rows = cursor.fetchall() statuses = {} for room, last_cleaned in rows: is_today = last_cleaned.startswith(today) if last_cleaned else False statuses[room] = { "is_today": is_today, "last_cleaned": last_cleaned } return statuses def get_special_rooms(statuses): """Get rooms that aren't in any defined building""" defined_rooms = get_all_defined_rooms() special_rooms = [] for room_number in statuses.keys(): if room_number not in defined_rooms: special_rooms.append(room_number) return sorted(special_rooms) @app.route('/') def dashboard(): statuses = get_room_statuses() special_rooms = get_special_rooms(statuses) return render_template_string( TEMPLATE, buildings=BUILDINGS, statuses=statuses, special_rooms=special_rooms ) @app.route('/api/status') def api_status(): """API endpoint for live updates""" statuses = get_room_statuses() special_rooms = get_special_rooms(statuses) return jsonify({ "statuses": statuses, "special_rooms": special_rooms }) TEMPLATE = '''