refactor: AIDA -> modulare Zeiterfassung
- Alle AIDA-Referenzen durch generische Begriffe ersetzt
(aida -> attendance im Code, "Zeiterfassung" im UI)
- DB-Spalten: last_aida_status -> last_attendance_status
- Settings: aida_csv_path -> attendance_csv_path
- REST API fuer Zeiterfassung auf Port 8081:
POST /api/attendance/{personal_nr} mit {"status": "anwesend"}
GET /api/attendance - alle Status abfragen
- Automatische DB-Migration fuer bestehende Installationen
- CSV bleibt als Option, API als Echtzeit-Alternative
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+30
-9
@@ -59,7 +59,7 @@ def init_db():
|
||||
|
||||
CREATE TABLE IF NOT EXISTS state (
|
||||
user_azure_id TEXT PRIMARY KEY REFERENCES users(azure_id) ON DELETE CASCADE,
|
||||
last_aida_status TEXT DEFAULT '',
|
||||
last_attendance_status TEXT DEFAULT '',
|
||||
last_teams_status TEXT DEFAULT '',
|
||||
phone_active INTEGER DEFAULT 0,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
@@ -70,7 +70,7 @@ def init_db():
|
||||
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
user_azure_id TEXT,
|
||||
user_name TEXT,
|
||||
aida_status TEXT,
|
||||
attendance_status TEXT,
|
||||
teams_status TEXT,
|
||||
wled_url TEXT,
|
||||
result TEXT
|
||||
@@ -107,6 +107,27 @@ def init_db():
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Migrate: rename aida columns to attendance
|
||||
try:
|
||||
conn.execute("ALTER TABLE state RENAME COLUMN last_aida_status TO last_attendance_status")
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
conn.execute("ALTER TABLE activity_log RENAME COLUMN aida_status TO attendance_status")
|
||||
except Exception:
|
||||
pass
|
||||
# Migrate: rename aida settings keys
|
||||
for old_key, new_key in [
|
||||
("aida_csv_path", "attendance_csv_path"),
|
||||
("aida_status_anwesend", "attendance_status_anwesend"),
|
||||
("aida_status_abwesend", "attendance_status_abwesend"),
|
||||
("aida_status_homeoffice", "attendance_status_homeoffice"),
|
||||
]:
|
||||
old_val = conn.execute("SELECT value FROM settings WHERE key=?", (old_key,)).fetchone()
|
||||
if old_val:
|
||||
conn.execute("INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", (new_key, old_val["value"]))
|
||||
conn.execute("DELETE FROM settings WHERE key=?", (old_key,))
|
||||
|
||||
defaults = {
|
||||
"azure_client_id": "",
|
||||
"azure_client_secret": "",
|
||||
@@ -115,10 +136,10 @@ def init_db():
|
||||
"azure_scopes": "User.Read User.Read.All Presence.Read Presence.Read.All",
|
||||
"azure_auth_record": "",
|
||||
"poll_interval": "15",
|
||||
"aida_csv_path": "",
|
||||
"aida_status_anwesend": "~~1~~",
|
||||
"aida_status_abwesend": "~~0~~",
|
||||
"aida_status_homeoffice": "~~2~~",
|
||||
"attendance_csv_path": "",
|
||||
"attendance_status_anwesend": "~~1~~",
|
||||
"attendance_status_abwesend": "~~0~~",
|
||||
"attendance_status_homeoffice": "~~2~~",
|
||||
}
|
||||
for key, value in defaults.items():
|
||||
conn.execute(
|
||||
@@ -179,14 +200,14 @@ def get_all_settings():
|
||||
return {row["key"]: row["value"] for row in rows}
|
||||
|
||||
|
||||
def log_activity(user_azure_id, user_name, aida_status, teams_status, wled_url, result):
|
||||
def log_activity(user_azure_id, user_name, attendance_status, teams_status, wled_url, result):
|
||||
from datetime import datetime
|
||||
conn = get_db()
|
||||
conn.execute(
|
||||
"""INSERT INTO activity_log
|
||||
(timestamp, user_azure_id, user_name, aida_status, teams_status, wled_url, result)
|
||||
(timestamp, user_azure_id, user_name, attendance_status, teams_status, wled_url, result)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)""",
|
||||
(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), user_azure_id, user_name, aida_status, teams_status, wled_url, result),
|
||||
(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), user_azure_id, user_name, attendance_status, teams_status, wled_url, result),
|
||||
)
|
||||
conn.execute(
|
||||
"DELETE FROM activity_log WHERE id NOT IN (SELECT id FROM activity_log ORDER BY id DESC LIMIT 500)"
|
||||
|
||||
Reference in New Issue
Block a user