Skip to content

Commit c19d350

Browse files
authored
Merge pull request #1848 from vikrantwiz02/prod/acad-react
Add programme type filtering and display to XLSheet generation API
2 parents 7ae6d59 + 60b5e12 commit c19d350

File tree

1 file changed

+35
-3
lines changed
  • FusionIIIT/applications/academic_information/api

1 file changed

+35
-3
lines changed

FusionIIIT/applications/academic_information/api/views.py

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -362,16 +362,19 @@ def generate_xlsheet_api(request):
362362
academic_year = request.data.get('academic_year')
363363
semester_type = request.data.get('semester_type')
364364
list_type = request.data.get('list_type', '').strip()
365+
programme_type = request.data.get('programme_type', '').strip()
365366
preview_only = request.data.get('preview_only', False)
366367

367368
if not list_type:
368369
list_type = None
370+
if not programme_type:
371+
programme_type = None
369372

370373
if not all([course_id, academic_year, semester_type]):
371374
return Response({
372375
'error': 'Missing required parameters: course, academic_year, semester_type'
373376
}, status=status.HTTP_400_BAD_REQUEST)
374-
cache_key = f"student_list_{course_id}_{academic_year.replace('-', '_')}_{semester_type.replace(' ', '_')}_{(list_type or 'all').replace(' ', '_')}"
377+
cache_key = f"student_list_{course_id}_{academic_year.replace('-', '_')}_{semester_type.replace(' ', '_')}_{(list_type or 'all').replace(' ', '_')}_{(programme_type or 'all').replace(' ', '_')}"
375378

376379
cached_data = cache.get(cache_key)
377380
if cached_data and not preview_only:
@@ -387,7 +390,8 @@ def generate_xlsheet_api(request):
387390
u.email,
388391
cr.registration_type,
389392
c.code as course_code,
390-
c.name as course_name
393+
c.name as course_name,
394+
s.programme
391395
FROM course_registration cr
392396
INNER JOIN globals_extrainfo ei ON cr.student_id_id = ei.id
393397
INNER JOIN auth_user u ON ei.user_id = u.id
@@ -408,6 +412,16 @@ def generate_xlsheet_api(request):
408412
sql += " AND cr.registration_type = %s"
409413
params.append(list_type)
410414

415+
# Add programme_type filter if specified
416+
if programme_type:
417+
if programme_type.upper() == 'UG':
418+
sql += " AND s.programme IN ('B.Tech', 'B.Des')"
419+
elif programme_type.upper() == 'PG':
420+
sql += " AND s.programme IN ('M.Tech', 'M.Des', 'PhD')"
421+
else:
422+
sql += " AND s.programme = %s"
423+
params.append(programme_type)
424+
411425
sql += " ORDER BY u.username"
412426
try:
413427
with connection.cursor() as cursor:
@@ -426,7 +440,8 @@ def generate_xlsheet_api(request):
426440
'full_name': data['full_name'],
427441
'discipline': data['discipline'],
428442
'email': data['email'],
429-
'registration_type': data['registration_type']
443+
'registration_type': data['registration_type'],
444+
'programme': data.get('programme', '')
430445
})
431446

432447
sql_time = time.time() - start_sql
@@ -459,6 +474,15 @@ def generate_xlsheet_api(request):
459474
else:
460475
list_type_display = f"{list_type} Students"
461476

477+
# Add programme type to display name
478+
if programme_type:
479+
if programme_type.upper() == 'UG':
480+
list_type_display += " (UG Only)"
481+
elif programme_type.upper() == 'PG':
482+
list_type_display += " (PG Only)"
483+
else:
484+
list_type_display += f" ({programme_type} Only)"
485+
462486
processing_time = time.time() - start_time
463487
if preview_only:
464488
preview_students = students[:350] if len(students) > 350 else students
@@ -559,6 +583,14 @@ def generate_xlsheet_api(request):
559583
filename_suffix = "Backlog_Improvement_Students"
560584
else:
561585
filename_suffix = f"{list_type.replace(' ', '_')}_Students"
586+
587+
if programme_type:
588+
if programme_type.upper() == 'UG':
589+
filename_suffix += "_UG"
590+
elif programme_type.upper() == 'PG':
591+
filename_suffix += "_PG"
592+
else:
593+
filename_suffix += f"_{programme_type.replace(' ', '_')}"
562594

563595
filename = f"{course_info['code']}_{filename_suffix}_CourseList.xlsx"
564596
response['Content-Disposition'] = f'attachment; filename="{filename}"'

0 commit comments

Comments
 (0)