From 97eba82cd897f63b016b35bcf78e0338340807e0 Mon Sep 17 00:00:00 2001 From: Vikrant Kumar Date: Sat, 18 Jul 2026 13:01:24 +0530 Subject: [PATCH] Examination: allow acadadmin to submit and upload grades - Add acadadmin to SubmitGradesProfAPI and UploadGradesProfAPI role gates - acadadmin sees every course offered in the selected term (admin-wide listing); faculty stay scoped to the courses they teach --- FusionIIIT/applications/examination/api/views.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/FusionIIIT/applications/examination/api/views.py b/FusionIIIT/applications/examination/api/views.py index b75da5fc6..808ad10d4 100644 --- a/FusionIIIT/applications/examination/api/views.py +++ b/FusionIIIT/applications/examination/api/views.py @@ -1715,7 +1715,7 @@ def post(self, request): semester_type = request.data.get("semester_type") programme_type = request.data.get("programme_type") - if not user_holds_any_role(request.user, ["Associate Professor", "Professor", "Assistant Professor"]): + if not user_holds_any_role(request.user, ["Associate Professor", "Professor", "Assistant Professor", "acadadmin"]): return Response( {"success": False, "error": "Access denied."}, status=status.HTTP_403_FORBIDDEN, @@ -1727,12 +1727,14 @@ def post(self, request): status=400, ) - instructor_id = request.user.username - working_year, _ = parse_academic_year(academic_year=academic_year, semester_type=semester_type) + instructor_filter = {"year": working_year, "semester_type": semester_type} + if not user_holds_role(request.user, "acadadmin"): + instructor_filter["instructor_id_id"] = request.user.username + unique_course_ids = ( - CourseInstructor.objects.filter(instructor_id_id=instructor_id, year = working_year, semester_type=semester_type) + CourseInstructor.objects.filter(**instructor_filter) .values("course_id_id") .distinct() .annotate(course_id_int=Cast("course_id_id", IntegerField())) @@ -1812,7 +1814,7 @@ def post(self, request): try: # 1) ROLE CHECK role = request.data.get("Role") - if not user_holds_any_role(request.user, ["Associate Professor", "Professor", "Assistant Professor"]): + if not user_holds_any_role(request.user, ["Associate Professor", "Professor", "Assistant Professor", "acadadmin"]): return Response({"error": "Access denied."}, status=status.HTTP_403_FORBIDDEN)