diff --git a/cutprogress.py b/cutprogress.py index 51279471def9c7ff4639522e34e50303d7ffdb2e..0c0ba5d43ea7ea53b80bd1de5880975c2807cc42 100644 --- a/cutprogress.py +++ b/cutprogress.py @@ -1,5 +1,4 @@ from server import * -import datetime @register_navbar('Schnittfortschritt User', icon='spinner', iconlib='fa', userendpoint=True, endpoint='cutprogress_user') @register_navbar('Schnittfortschritt', icon='spinner', iconlib='fa') @@ -7,19 +6,15 @@ import datetime @app.route('/internal/user/<int:user>/cutprogress', endpoint='cutprogress_user') @mod_required def cutprogress(user=None): - # use request argument, default to latest semester allsemester = query('SELECT DISTINCT semester from courses ORDER BY semester DESC') semester = request.values.get('semester', allsemester[0]['semester']) - - # find courses for semester courses = query(''' SELECT courses.id, courses.handle, courses.short FROM courses WHERE semester = ? ORDER by id DESC ''', semester) - - # list of people responsible for course + # Fetch list of people responsible for every course for course in courses: people = query(''' SELECT users.* @@ -28,27 +23,22 @@ def cutprogress(user=None): WHERE responsible.course_id = ? ORDER BY users.realname ASC ''', course['id']) - if not people: people = [{ 'realname': 'Niemand', 'id': -1 }] - course['responsible'] = people - - # filter for responsibility if user is not None: courses = [ c for c in courses if user in (r['id'] for r in c['responsible']) ] - - # fetch lectures for courses + # Fetch lectures for all courses lectures = [] for c in courses: lectures += query(''' SELECT lectures.id, lectures.course_id, - lectures.time, DATE(lectures.time) as date, + lectures.time, lectures.title, COUNT(videos.id) as videos_total, COUNT(videos.visible) as videos_visible @@ -56,25 +46,18 @@ def cutprogress(user=None): JOIN courses ON courses.id = lectures.course_id LEFT JOIN videos ON lectures.id = videos.lecture_id WHERE courses.id = ? - AND date <= DATE('now') + AND lectures.time <= ? AND NOT lectures.norecording GROUP BY lectures.id - ORDER BY date DESC, lectures.time ASC, lectures.id ASC - ''', c['id']) - - # sort dates, figure out when weeks change - dates = sorted({ - datetime.datetime.strptime(row['date'], '%Y-%m-%d') - for row in lectures - }, reverse=True) - - # check week numbers + ORDER BY lectures.time ASC, lectures.id ASC + ''', c['id'], datetime.now()) + # Generate list of days, figure out when weeks change + dates = sorted({row['time'].date() for row in lectures}, reverse=True) is_new_weeks = [ False if (i == 0) else thisdate.isocalendar()[1] != dates[i-1].isocalendar()[1] for i, thisdate in enumerate(dates) ] - - # sort into cells + # Sort into cells tablebody = [ { 'date': date, # row header @@ -83,23 +66,19 @@ def cutprogress(user=None): [ # this list is a cell lecture for lecture in lectures - if lecture['course_id'] == course['id'] and datetime.datetime.strptime(lecture['date'], '%Y-%m-%d') == date - and (user is None or user in [r['id'] for r in course['responsible']]) + if lecture['course_id'] == course['id'] and lecture['time'].date() == date ] for course in courses ] } - for date,is_new_week in zip(dates, is_new_weeks) + for date, is_new_week in zip(dates, is_new_weeks) ] - return render_template('cutprogress.html', # dropdown selection allsemester=allsemester, # options semester=semester, # choice user=query('SELECT * FROM users WHERE id = ?', user)[0] if user else None, - # content courses=courses, - dates=dates, - tablebody=tablebody, + tablebody=tablebody )