@@ -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