diff --git a/TODO.md b/TODO.md index 0b08a2ca..47feded1 100644 --- a/TODO.md +++ b/TODO.md @@ -14,4 +14,8 @@ # Future - Clean up user results / score pages -- Remove external javascript dependencies \ No newline at end of file +- Remove external javascript dependencies + +- Viva cases + +- Update rapids for new style \ No newline at end of file diff --git a/generic/templates/generic/user_view.html b/generic/templates/generic/user_view.html index 5c0e0d5e..fe985ea5 100644 --- a/generic/templates/generic/user_view.html +++ b/generic/templates/generic/user_view.html @@ -41,11 +41,17 @@ hx-target="#htmx-info" >Delete supervisors + {% endblock %} diff --git a/generic/urls.py b/generic/urls.py index cc67f412..5dad80f7 100755 --- a/generic/urls.py +++ b/generic/urls.py @@ -94,9 +94,9 @@ urlpatterns = [ name="users_bulk_delete_supervisors", ), path( - "user/bulk_edit_grade/", - views.users_bulk_edit_grade, - name="users_bulk_edit_grade", + "user/bulk_edit/", + views.users_bulk_edit, + name="users_bulk_edit", ), path("user/group/", views.user_group_view, name="user_group_view"), path("user/group/all", views.user_group_view_all, name="user_group_view_all"), diff --git a/generic/views.py b/generic/views.py index b7bef479..5d9974dd 100644 --- a/generic/views.py +++ b/generic/views.py @@ -2475,63 +2475,82 @@ def users_bulk_delete_supervisors(request): @user_is_cid_user_manager -def users_bulk_edit_grade(request): - if request.htmx.trigger == "bulk-edit-grade-button": - user_grades = UserGrades.objects.all() +def users_bulk_edit(request): + print(request.htmx.trigger) + print(request.htmx.trigger_name) + match request.htmx.trigger: + case r if r is None: + return HttpResponse("None", content_type="text/html") - html = "".join( - [ - f"""""" - for grade in user_grades - ] - ) - # TODO: work out how to actually use hyperscript - html = ( - html - + "" - ) + case "bulk-edit-grade-button": + user_grades = UserGrades.objects.all() - return HttpResponse(html, content_type="text/html") - elif request.htmx.trigger_name.startswith("add-grade"): - selected_users = request.POST.getlist("selection") + html = "".join( + [ + f"""""" + for grade in user_grades + ] + ) + # TODO: work out how to actually use hyperscript + html = ( + html + + "" + ) - if not selected_users: - return HttpResponse("No users selected", content_type="text/html") - user_models = User.objects.filter(id__in=selected_users) + return HttpResponse(html, content_type="text/html") + case r if r.startswith("add-grade"): + selected_users = request.POST.getlist("selection") - # u: User - for u in user_models: - u.userprofile.grade_id = request.htmx.trigger_name.split("--")[-1] - u.save() - return HttpResponse("Grades update", content_type="text/html") - else: - return HttpResponse("Error", content_type="text/html") + if not selected_users: + return HttpResponse("No users selected", content_type="text/html") + user_models = User.objects.filter(id__in=selected_users) + # u: User + for u in user_models: + u.userprofile.grade_id = r.split("--")[-1] + u.save() + return HttpResponse("Grades update", content_type="text/html") + case "bulk-add-group-button": + user_groups = UserUserGroup.objects.all() -@user_is_cid_user_manager -def users_bulk_delete_supervisors(request): - if "selection" in request.POST: - selected_users = request.POST.getlist("selection") - user_models = User.objects.filter(id__in=selected_users) + html = "".join( + [ + f"""""" + for group in user_groups + ] + ) + # TODO: work out how to actually use hyperscript + html = ( + html + + "" + ) - for u in user_models: - u.userprofile.supervisor = None - u.save() + return HttpResponse(html, content_type="text/html") + case r if r.startswith("add-group"): + selected_users = request.POST.getlist("selection") - modified_users = ",".join([user.username for user in user_models]) + if not selected_users: + return HttpResponse("No users selected", content_type="text/html") + user_models = User.objects.filter(id__in=selected_users) - return HttpResponse( - f"Supervisors removed from {modified_users}. Refresh page to see update", - content_type="text/plain", - ) - - else: - return HttpResponse("No users selected", content_type="text/plain") + # u: User + for u in user_models: + pass + u.user_groups.add(r.split("--")[-1]) + u.save() + return HttpResponse("Group added", content_type="text/html") + case _: + return HttpResponse("Error", content_type="text/html") @user_is_cid_user_manager diff --git a/rad/views.py b/rad/views.py index 2b613a4c..a8d51b39 100644 --- a/rad/views.py +++ b/rad/views.py @@ -1,4 +1,5 @@ import secrets +from typing import Optional from django.conf import settings from django_tables2 import SingleTableMixin @@ -542,6 +543,12 @@ class UserListTableView(CidManagerRequiredMixin, SingleTableMixin, FilterView): filterset_class = UserUserFilter + #table_pagination = {"per_page": 5} + + def get_paginate_by(self, table_data) -> int | None: + return 2 + #return super().get_paginate_by(table_data) + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # user = self.request.user