feat: add Ressourcen timeline view with group ordering (alpha.14)

- New timeline page showing all groups and active events in parallel
- Group order API endpoints with persistence (GET/POST /api/groups/order)
- Customizable group ordering with visual controls
- Fix CSS and TypeScript lint errors
- Update documentation and bump version to 2026.1.0-alpha.14
This commit is contained in:
RobbStarkAustria
2026-01-28 18:59:11 +00:00
parent 10f446dfb5
commit 7746e26385
13 changed files with 2487 additions and 665 deletions

View File

@@ -68,6 +68,7 @@ with engine.connect() as conn:
('holiday_banner_enabled', 'true', 'Ferienstatus-Banner auf Dashboard anzeigen'),
('organization_name', '', 'Name der Organisation (wird im Header angezeigt)'),
('refresh_seconds', '0', 'Scheduler Republish-Intervall (Sekunden; 0 deaktiviert)'),
('group_order', '[]', 'Benutzerdefinierte Reihenfolge der Raumgruppen (JSON-Array mit Group-IDs)'),
]
for key, value, description in default_settings:

View File

@@ -208,3 +208,55 @@ def get_groups_with_clients():
})
session.close()
return jsonify(result)
@groups_bp.route("/order", methods=["GET"])
def get_group_order():
"""Retrieve the saved group order from system settings."""
from models.models import SystemSetting
session = Session()
try:
setting = session.query(SystemSetting).filter_by(key='group_order').first()
if setting and setting.value:
import json
order = json.loads(setting.value)
return jsonify({"order": order})
return jsonify({"order": None})
except Exception as e:
print(f"Error loading group order: {e}")
return jsonify({"order": None})
finally:
session.close()
@groups_bp.route("/order", methods=["POST"])
@require_role('admin')
def save_group_order():
"""Save the custom group order to system settings."""
from models.models import SystemSetting
session = Session()
try:
data = request.get_json()
order = data.get('order')
if not order or not isinstance(order, list):
return jsonify({"success": False, "error": "Invalid order data"}), 400
import json
order_json = json.dumps(order)
setting = session.query(SystemSetting).filter_by(key='group_order').first()
if setting:
setting.value = order_json
else:
setting = SystemSetting(key='group_order', value=order_json)
session.add(setting)
session.commit()
return jsonify({"success": True})
except Exception as e:
session.rollback()
print(f"Error saving group order: {e}")
return jsonify({"success": False, "error": str(e)}), 500
finally:
session.close()