From 3acdf0466759fd2927700a2ab682acde93325f75 Mon Sep 17 00:00:00 2001 From: Ross Date: Sun, 12 Dec 2021 11:05:13 +0000 Subject: [PATCH] . --- generic/decorators.py | 10 +++++ generic/templates/generic/cid_view.html | 28 +++++++++--- generic/views.py | 59 +++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 6 deletions(-) diff --git a/generic/decorators.py b/generic/decorators.py index 0d6ab073..25f11b5a 100755 --- a/generic/decorators.py +++ b/generic/decorators.py @@ -1 +1,11 @@ from django.core.exceptions import PermissionDenied + +def user_is_cid_user_manager(function): + def wrap(request, *args, **kwargs): + if request.user.groups.filter(name='cid_user_manager').exists() or request.user.is_superuser: + return function(request, *args, **kwargs) + else: + raise PermissionDenied + wrap.__doc__ = function.__doc__ + wrap.__name__ = function.__name__ + return wrap \ No newline at end of file diff --git a/generic/templates/generic/cid_view.html b/generic/templates/generic/cid_view.html index 0073401d..0a8fd228 100644 --- a/generic/templates/generic/cid_view.html +++ b/generic/templates/generic/cid_view.html @@ -20,7 +20,11 @@

Add/Edit CID users

- + + + + +

Select exams below to add user to.

@@ -106,6 +110,10 @@ } function getGenericData() { + selected_cids = [] + $("#manage-span input:checked").each((n, el) => { + selected_cids.push(el.value) + }) return { csrfmiddlewaretoken: "{{ csrf_token }}", physics_exams: JSON.stringify($("#physics-exams").val()), @@ -113,17 +121,26 @@ sba_exams: JSON.stringify($("#sbas-exams").val()), longs_exams: JSON.stringify($("#longs-exams").val()), anatomy_exams: JSON.stringify($("#anatomy-exams").val()), + delete: false, + number_to_create: 0, + activate: false, + deactivate: false, + add_exams: false, + clear_exams: false, + selected_cids: JSON.stringify(selected_cids), } } $(document).ready(function () { + $("#add-exams-selected-cids").click((evt) => { + data = getGenericData(); + data["add_exams"] = true; + postAjax(data); + }); + $("#add-new-cids").click((evt) => { n = $("#add-number").get(0).value; - selected_cids = [] - $("#manage-span input:checked").each((n, el) => { - selected_cids.push(el.value) - }) if (n < 1) { toastr.info("You need to enter how many users to add."); @@ -132,7 +149,6 @@ data = getGenericData(); data["number_to_create"] = n; - data["selected_cids"] = selected_cids; postAjax(data); diff --git a/generic/views.py b/generic/views.py index 70f4343e..e322952d 100644 --- a/generic/views.py +++ b/generic/views.py @@ -25,6 +25,7 @@ import urllib from django.views import View from django_filters.views import FilterView from django_tables2.views import SingleTableMixin +from generic.decorators import user_is_cid_user_manager from generic.filters import CidUserFilter from generic.tables import CidUserTable @@ -951,6 +952,7 @@ class CidUserView(LoginRequiredMixin, SingleTableMixin, FilterView): @login_required +@user_is_cid_user_manager def manage_cid_users(request): if request.is_ajax() and request.method == "POST": physics_exams = json.loads(request.POST.get("physics_exams")) @@ -959,10 +961,67 @@ def manage_cid_users(request): longs_exams = json.loads(request.POST.get("longs_exams")) anatomy_exams = json.loads(request.POST.get("anatomy_exams")) + selected_cids = json.loads(request.POST.get("selected_cids")) + new_cid = max(CidUser.objects.all().order_by("-cid")[0].cid + 1, 50000) number_to_create = int(request.POST.get("number_to_create")) + delete = request.POST.get("deleted") + activate = request.POST.get("activate") + deactivate = request.POST.get("deactivate") + add_exams = request.POST.get("add_exams") + clear_exams = request.POST.get("clear_exams") + + if delete: + cids = CidUser.objects.filter(pk__in=selected_cids).delete() + return JsonResponse({"status": "success"}) + + if activate: + cids = CidUser.objects.filter(pk__in=selected_cids) + for c in cids: + c.active = True + c.save() + return JsonResponse({"status": "success"}) + + if deactivate: + cids = CidUser.objects.filter(pk__in=selected_cids) + for c in cids: + c.active = False + c.save() + return JsonResponse({"status": "success"}) + + if clear_exams: + cids = CidUser.objects.filter(pk__in=selected_cids) + for c in cids: + c.physics_exams.clear() + c.rapid_exams.clear() + c.sba_exams.clear() + c.longs_exams.clear() + c.anatomy_exams.clear() + return JsonResponse({"status": "success"}) + + if add_exams: + cids = CidUser.objects.filter(pk__in=selected_cids) + for c in cids: + if physics_exams: + c.physics_exams.set(physics_exams) + c.save() + if rapid_exams: + c.rapid_exams.set(rapid_exams) + c.save() + if sba_exams: + c.sba_exams.set(sba_exams) + c.save() + if longs_exams: + c.longs_exams.set(longs_exams) + c.save() + if anatomy_exams: + c.anatomy_exams.set(anatomy_exams) + c.save() + return JsonResponse({"status": "success"}) + + for n in range(number_to_create): passcode = "".join(random.choices(string.ascii_uppercase, k=4)) c = CidUser(cid=new_cid, passcode=passcode)