Skip to content

Commit 18f6170

Browse files
authored
Merge pull request #1864 from vikrantwiz02/prod/acad-react
Enhanced course replacement and registration views with additional course and student details
2 parents 81c1545 + 416fa14 commit 18f6170

File tree

3 files changed

+68
-17
lines changed

3 files changed

+68
-17
lines changed

FusionIIIT/applications/academic_procedures/api/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3279,14 +3279,16 @@ def student_list_requests(request):
32793279
else:
32803280
academic_year, semester_type = generate_current_session(datetime.datetime.now().year, student.curr_semester_no)
32813281

3282-
qs = CourseReplacementRequest.objects.filter(student=student, academic_year=academic_year, semester_type = semester_type).order_by('-created_at')
3282+
qs = CourseReplacementRequest.objects.filter(student=student, academic_year=academic_year, semester_type = semester_type).select_related('old_course', 'new_course', 'course_slot').order_by('-created_at')
32833283
out = []
32843284
for r in qs:
32853285
out.append({
32863286
'id': r.id,
32873287
'slot': r.course_slot.name,
32883288
'old_course': r.old_course.code,
3289+
'old_course_name': r.old_course.name,
32893290
'new_course': r.new_course.code,
3291+
'new_course_name': r.new_course.name,
32903292
'status': r.status,
32913293
'academic_year': r.academic_year,
32923294
'semester_type': r.semester_type,
@@ -3404,13 +3406,14 @@ def student_registrations_for_drop(request):
34043406
eligibility_resp = get_drop_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
34053407
if isinstance(eligibility_resp, JsonResponse):
34063408
return eligibility_resp
3407-
regs = course_registration.objects.filter(student_id=student, semester_id__semester_no = student.curr_semester_no ).order_by('course_slot_id__name')
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')
34083410
out = []
34093411
for reg in regs:
34103412
out.append({
34113413
'id': reg.id,
34123414
'slot': reg.course_slot_id.name,
34133415
'course': reg.course_id.code,
3416+
'course_name': reg.course_id.name,
34143417
'academic_year': reg.session,
34153418
'semester_type': reg.semester_type,
34163419
})

FusionIIIT/applications/academic_procedures/views.py

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -894,22 +894,55 @@ def approve_branch_change(request):
894894
choices.append(values[i])
895895
else:
896896
continue
897+
898+
from applications.programme_curriculum.models import Discipline, Batch
899+
897900
changed_branch = []
901+
changed_students = []
902+
898903
for i in range(len(branches)):
899-
get_student = ExtraInfo.objects.all().select_related('user','department').filter(id=choices[i][:7])
900-
get_student = get_student[0]
901-
branch = DepartmentInfo.objects.all().filter(name=branches[i])
902-
get_student.department = branch[0]
904+
get_student = ExtraInfo.objects.select_related('user','department').filter(id=choices[i][:7]).first()
905+
if not get_student:
906+
continue
907+
908+
branch = DepartmentInfo.objects.filter(name=branches[i]).first()
909+
if not branch:
910+
continue
911+
912+
get_student.department = branch
903913
changed_branch.append(get_student)
904-
student = Student.objects.all().select_related('id','id__user','id__department').filter(id=choices[i][:7]).first()
905-
change = BranchChange.objects.select_related('branches','user','user__id','user__id__user','user__id__department').all().filter(user=student)
906-
change = change[0]
907-
change.delete()
914+
915+
# Update Student batch_id to match new discipline
916+
student = Student.objects.select_related('id','id__user','id__department','batch_id').filter(id=choices[i][:7]).first()
917+
if student and student.batch_id:
918+
try:
919+
new_discipline = Discipline.objects.filter(name=branches[i]).first()
920+
if new_discipline:
921+
new_batch = Batch.objects.filter(
922+
year=student.batch_id.year,
923+
name=student.batch_id.name,
924+
discipline=new_discipline
925+
).first()
926+
if new_batch:
927+
student.batch_id = new_batch
928+
changed_students.append(student)
929+
except Exception as e:
930+
pass
931+
932+
if student:
933+
change = BranchChange.objects.filter(user=student).first()
934+
if change:
935+
change.delete()
936+
908937
try:
909-
ExtraInfo.objects.bulk_update(changed_branch,['department'])
938+
if changed_branch:
939+
ExtraInfo.objects.bulk_update(changed_branch, ['department'])
940+
if changed_students:
941+
Student.objects.bulk_update(changed_students, ['batch_id'])
910942
messages.info(request, 'Apply for branch change successfull')
911-
except:
943+
except Exception as e:
912944
messages.info(request, 'Unable to proceed, we will get back to you very soon')
945+
913946
return HttpResponseRedirect('/academic-procedures/main')
914947

915948
else:

FusionIIIT/applications/examination/api/views.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -430,23 +430,37 @@ def download_template(request):
430430
# Get course information from the first matched registration.
431431
course_obj = course_info.first().course_id
432432
response = HttpResponse(content_type="text/csv")
433-
filename = f"{course_obj.code}_template_{session_year}.csv"
433+
course_name_clean = course_obj.name.replace(' ', '_').replace('/', '-')[:50]
434+
semester_type_clean = semester_type.replace(' ', '_')
435+
filename = f"{course_name_clean}_{semester_type_clean}_{session_year}.csv"
434436
response['Content-Disposition'] = f'attachment; filename="{filename}"'
435437

436438
writer = csv.writer(response)
437-
writer.writerow(["roll_no", "name", "grade", "remarks", "semester"])
439+
writer.writerow(["roll_no", "name", "branch", "grade", "remarks", "semester"])
438440

439441
# Write a CSV row for each student registration.
440442
for entry in course_info:
441443
student_entry = entry.student_id
442-
# Assuming student_entry.id_id is the student's roll number.
443444
student_user = User.objects.get(username=student_entry.id_id)
445+
branch_acronym = ""
446+
if student_entry.batch_id:
447+
try:
448+
branch_acronym = student_entry.batch_id.discipline.acronym
449+
except AttributeError:
450+
pass
451+
if not branch_acronym and student_entry.id.department:
452+
branch_acronym = student_entry.id.department.name
453+
semester_no = ""
454+
if entry.course_slot_id and entry.course_slot_id.semester:
455+
semester_no = entry.course_slot_id.semester.semester_no
456+
444457
writer.writerow([
445458
student_entry.id_id,
446459
f"{student_user.first_name} {student_user.last_name}",
460+
branch_acronym,
447461
"",
448462
"",
449-
""
463+
semester_no
450464
])
451465

452466
return response
@@ -3010,10 +3024,11 @@ def post(self, request):
30103024
# Check if the current roll number is registered.
30113025
is_registered = roll_no in registered_rollnos
30123026

3013-
# Add additional data (e.g. name, grades, remarks, semester) as in CSV
3027+
# Add additional data (e.g. name, grades, remarks, semester, branch) as in CSV
30143028
preview_rows.append({
30153029
"roll_no": roll_no,
30163030
"name": row["name"],
3031+
"branch": row.get("branch", ""),
30173032
"grades": row["grade"],
30183033
"remarks": row["remarks"],
30193034
"semester": row["semester"],

0 commit comments

Comments
 (0)