allow adding groups to users in bulk

This commit is contained in:
Ross
2023-09-02 08:25:12 +01:00
parent 48cba9353e
commit 06f1e7852d
5 changed files with 89 additions and 53 deletions
+4
View File
@@ -15,3 +15,7 @@
# Future # Future
- Clean up user results / score pages - Clean up user results / score pages
- Remove external javascript dependencies - Remove external javascript dependencies
- Viva cases
- Update rapids for new style
+7 -1
View File
@@ -41,11 +41,17 @@
hx-target="#htmx-info" hx-target="#htmx-info"
>Delete supervisors</button> >Delete supervisors</button>
<button id="bulk-edit-grade-button" <button id="bulk-edit-grade-button"
hx-post="{% url 'generic:users_bulk_edit_grade' %}" hx-post="{% url 'generic:users_bulk_edit' %}"
hx-include="[name='selection']" hx-include="[name='selection']"
hx-target="#htmx-options" hx-target="#htmx-options"
>Edit grade</button> >Edit grade</button>
<button id="bulk-add-group-button"
hx-post="{% url 'generic:users_bulk_edit' %}"
hx-include="[name='selection']"
hx-target="#htmx-options"
>Add group</button>
</details> </details>
{% endblock %} {% endblock %}
+3 -3
View File
@@ -94,9 +94,9 @@ urlpatterns = [
name="users_bulk_delete_supervisors", name="users_bulk_delete_supervisors",
), ),
path( path(
"user/bulk_edit_grade/", "user/bulk_edit/",
views.users_bulk_edit_grade, views.users_bulk_edit,
name="users_bulk_edit_grade", name="users_bulk_edit",
), ),
path("user/group/", views.user_group_view, name="user_group_view"), 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"), path("user/group/all", views.user_group_view_all, name="user_group_view_all"),
+45 -26
View File
@@ -2475,14 +2475,20 @@ def users_bulk_delete_supervisors(request):
@user_is_cid_user_manager @user_is_cid_user_manager
def users_bulk_edit_grade(request): def users_bulk_edit(request):
if request.htmx.trigger == "bulk-edit-grade-button": 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")
case "bulk-edit-grade-button":
user_grades = UserGrades.objects.all() user_grades = UserGrades.objects.all()
html = "".join( html = "".join(
[ [
f"""<button class='change-grade-button' name='add-grade--{grade.id}' f"""<button class='change-grade-button' id='add-grade--{grade.id}'
hx-post="{reverse('generic:users_bulk_edit_grade')}" hx-post="{reverse('generic:users_bulk_edit')}"
hx-include="[name='selection']" hx-include="[name='selection']"
hx-confirm="This will modify grades of all selected users, are you sure you wish to continue?" hx-confirm="This will modify grades of all selected users, are you sure you wish to continue?"
hx-target="#htmx-info" hx-target="#htmx-info"
@@ -2497,7 +2503,7 @@ def users_bulk_edit_grade(request):
) )
return HttpResponse(html, content_type="text/html") return HttpResponse(html, content_type="text/html")
elif request.htmx.trigger_name.startswith("add-grade"): case r if r.startswith("add-grade"):
selected_users = request.POST.getlist("selection") selected_users = request.POST.getlist("selection")
if not selected_users: if not selected_users:
@@ -2506,32 +2512,45 @@ def users_bulk_edit_grade(request):
# u: User # u: User
for u in user_models: for u in user_models:
u.userprofile.grade_id = request.htmx.trigger_name.split("--")[-1] u.userprofile.grade_id = r.split("--")[-1]
u.save() u.save()
return HttpResponse("Grades update", content_type="text/html") return HttpResponse("Grades update", content_type="text/html")
else: case "bulk-add-group-button":
return HttpResponse("Error", content_type="text/html") user_groups = UserUserGroup.objects.all()
html = "".join(
@user_is_cid_user_manager [
def users_bulk_delete_supervisors(request): f"""<button class='add-group-button' id='add-group--{group.id}'
if "selection" in request.POST: hx-post="{reverse('generic:users_bulk_edit')}"
selected_users = request.POST.getlist("selection") hx-include="[name='selection']"
user_models = User.objects.filter(id__in=selected_users) hx-confirm="This will add the group '{group.name}' to all selected users, are you sure you wish to continue?"
hx-target="#htmx-info"
for u in user_models: >{group.name}</button>"""
u.userprofile.supervisor = None for group in user_groups
u.save() ]
)
modified_users = ",".join([user.username for user in user_models]) # TODO: work out how to actually use hyperscript
html = (
return HttpResponse( html
f"Supervisors removed from {modified_users}. Refresh page to see update", + "<button _='on click for el in .add-group-button remove el end then remove me'>Cancel</button>"
content_type="text/plain",
) )
else: return HttpResponse(html, content_type="text/html")
return HttpResponse("No users selected", content_type="text/plain") case r if r.startswith("add-group"):
selected_users = request.POST.getlist("selection")
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:
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 @user_is_cid_user_manager
+7
View File
@@ -1,4 +1,5 @@
import secrets import secrets
from typing import Optional
from django.conf import settings from django.conf import settings
from django_tables2 import SingleTableMixin from django_tables2 import SingleTableMixin
@@ -542,6 +543,12 @@ class UserListTableView(CidManagerRequiredMixin, SingleTableMixin, FilterView):
filterset_class = UserUserFilter 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): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
# user = self.request.user # user = self.request.user