Skip to content

Commit c0503d6

Browse files
authored
Merge pull request #1865 from vikrantwiz02/prod/acad-react
Exclude courses with pending replacement and drop requests in course registration views
2 parents 18f6170 + 683222e commit c0503d6

File tree

1 file changed

+58
-4
lines changed
  • FusionIIIT/applications/academic_procedures/api

1 file changed

+58
-4
lines changed

FusionIIIT/applications/academic_procedures/api/views.py

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3129,7 +3129,26 @@ def registered_slots(request):
31293129
eligibility_resp = get_replace_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
31303130
if isinstance(eligibility_resp, JsonResponse):
31313131
return eligibility_resp
3132-
regs = course_registration.objects.filter(student_id=student, semester_id__semester_no = student.curr_semester_no).exclude(course_slot_id__name__startswith='SW').exclude(course_slot_id__name__startswith='BL')
3132+
3133+
# Exclude slots with pending drop requests
3134+
pending_drop_slots = CourseDropRequest.objects.filter(
3135+
student=student,
3136+
academic_year=session,
3137+
semester_type=semester_type,
3138+
status='Pending'
3139+
).values_list('course_slot_id', flat=True)
3140+
3141+
regs = course_registration.objects.filter(
3142+
student_id=student,
3143+
semester_id__semester_no=student.curr_semester_no
3144+
).exclude(
3145+
course_slot_id__name__startswith='SW'
3146+
).exclude(
3147+
course_slot_id__name__startswith='BL'
3148+
).exclude(
3149+
course_slot_id__in=pending_drop_slots
3150+
)
3151+
31333152
payload = []
31343153
for reg in regs:
31353154
slot = reg.course_slot_id
@@ -3239,7 +3258,10 @@ def batch_create_requests(request):
32393258
@permission_classes([IsAuthenticated])
32403259
@role_required(['acadadmin'])
32413260
def admin_list_requests(request):
3242-
qs = CourseReplacementRequest.objects.all().order_by('-created_at')
3261+
qs = CourseReplacementRequest.objects.select_related(
3262+
'student', 'student__id__user', 'course_slot', 'old_course', 'new_course'
3263+
).all().order_by('-created_at')
3264+
32433265
year = request.GET.get('academic_year')
32443266
sem = request.GET.get('semester_type')
32453267
if year:
@@ -3251,14 +3273,18 @@ def admin_list_requests(request):
32513273
for r in qs:
32523274
out.append({
32533275
'id': r.id,
3254-
'student': r.student_id,
3276+
'student': r.student.id.user.username,
3277+
'student_name': r.student.id.user.get_full_name() or r.student.id.user.username,
32553278
'slot': r.course_slot.name,
32563279
'old_course': r.old_course.code,
3280+
'old_course_name': r.old_course.name,
32573281
'new_course': r.new_course.code,
3282+
'new_course_name': r.new_course.name,
32583283
'status': r.status,
32593284
'academic_year': r.academic_year,
32603285
'semester_type': r.semester_type,
32613286
'created_at': r.created_at.isoformat(),
3287+
'processed_at': r.processed_at.isoformat() if r.processed_at else None,
32623288
})
32633289
return JsonResponse(out, safe=False)
32643290

@@ -3399,14 +3425,42 @@ def student_registrations_for_drop(request):
33993425
"""
34003426
GET /api/student/registrations/
34013427
List all active registrations for the logged-in student.
3428+
Excludes courses with pending replacement requests.
34023429
"""
34033430
current_user = request.user
34043431
user_details = current_user.extrainfo
34053432
student = Student.objects.get(id=user_details)
34063433
eligibility_resp = get_drop_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
34073434
if isinstance(eligibility_resp, JsonResponse):
34083435
return eligibility_resp
3409-
regs = course_registration.objects.filter(student_id=student, semester_id__semester_no = student.curr_semester_no ).select_related('course_id', 'course_slot_id').order_by('course_slot_id__name')
3436+
3437+
current_year = datetime.datetime.now().year
3438+
academic_year, semester_type = generate_current_session(current_year, student.curr_semester_no)
3439+
3440+
# Exclude slots with pending replacement or drop requests
3441+
pending_replacement_slots = CourseReplacementRequest.objects.filter(
3442+
student=student,
3443+
academic_year=academic_year,
3444+
semester_type=semester_type,
3445+
status='Pending'
3446+
).values_list('course_slot_id', flat=True)
3447+
3448+
pending_drop_slots = CourseDropRequest.objects.filter(
3449+
student=student,
3450+
academic_year=academic_year,
3451+
semester_type=semester_type,
3452+
status='Pending'
3453+
).values_list('course_slot_id', flat=True)
3454+
3455+
regs = course_registration.objects.filter(
3456+
student_id=student,
3457+
semester_id__semester_no=student.curr_semester_no
3458+
).exclude(
3459+
course_slot_id__in=pending_replacement_slots
3460+
).exclude(
3461+
course_slot_id__in=pending_drop_slots
3462+
).select_related('course_id', 'course_slot_id').order_by('course_slot_id__name')
3463+
34103464
out = []
34113465
for reg in regs:
34123466
out.append({

0 commit comments

Comments
 (0)