From 6789ac73c83b4efaa6f38f202fa5b16ee0ae0794 Mon Sep 17 00:00:00 2001 From: Bkolb Date: Sat, 11 Apr 2026 19:08:26 +0200 Subject: [PATCH] =?UTF-8?q?Layout=20Kurs=C3=BCbersicht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/flask-postgres/app/app.py | 66 ++++++++- app/flask-postgres/app/templates/base.html | 7 +- app/flask-postgres/app/templates/courses.html | 85 +++++++++++ app/flask-postgres/app/templates/login.html | 2 +- app/flask-postgres/app/templates/preise2.html | 6 +- app/flask-postgres/styles/site.css | 139 ++++++++++++++++++ 6 files changed, 292 insertions(+), 13 deletions(-) create mode 100644 app/flask-postgres/app/templates/courses.html diff --git a/app/flask-postgres/app/app.py b/app/flask-postgres/app/app.py index 52e86e5..ff6e162 100644 --- a/app/flask-postgres/app/app.py +++ b/app/flask-postgres/app/app.py @@ -1048,13 +1048,73 @@ def useradmin_user_edit(user_id): @app.route("/courses") @login_required def course_list(): - courses = get_available_courses_for_user() + user_id = session.get("user_id") + mandant_level = session.get("mandant_level", 0) + + conn = get_connection() + cur = conn.cursor() + + # Alle aktiven Kurse laden + cur.execute(""" + SELECT id, code, title, description, video_file, sort_order, is_active + FROM course + WHERE is_active = TRUE + ORDER BY code + """) + all_courses = fetchall_dict(cur) + + # Filter nach Level + available_courses = [ + c for c in all_courses + if is_course_allowed_for_level(c["code"], mandant_level) + ] + + # Bestandene Assessments laden + cur.execute(""" + SELECT DISTINCT course_id + FROM user_assessment + WHERE user_id = %s + AND passed = TRUE + """, (user_id,)) + passed_rows = cur.fetchall() + passed_course_ids = {row[0] for row in passed_rows} + + cur.close() + conn.close() + + # Kurse markieren + Modul bestimmen + for course in available_courses: + course["is_completed"] = course["id"] in passed_course_ids + course["module_code"] = (course["code"] or "")[:1].upper() + + # Gruppieren + Fortschritt berechnen + grouped_courses = {} + module_progress = {} + + for module_code in ("A", "B", "C"): + module_courses = [ + c for c in available_courses + if c["module_code"] == module_code + ] + + grouped_courses[module_code] = module_courses + + total = len(module_courses) + completed = sum(1 for c in module_courses if c["is_completed"]) + percent = int((completed / total) * 100) if total > 0 else 0 + + module_progress[module_code] = { + "total": total, + "completed": completed, + "percent": percent + } return render_template( - "course_list.html", + "courses.html", + grouped_courses=grouped_courses, + module_progress=module_progress, page_title="Kurse", active_page="courses", - courses=courses, **get_current_user() ) diff --git a/app/flask-postgres/app/templates/base.html b/app/flask-postgres/app/templates/base.html index 8fde935..0005537 100644 --- a/app/flask-postgres/app/templates/base.html +++ b/app/flask-postgres/app/templates/base.html @@ -19,14 +19,13 @@