@@ -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' ])
32413260def 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