Skip to content

Commit 366f353

Browse files
committed
Enhance student management with specialization and curriculum validation
- Added `specialization` field to `StudentBatchUpload` model for better tracking of student specializations. - Updated `jee_app_no` field help text to reflect new naming conventions. - Introduced helper functions for curriculum validation and retrieval based on batch and specialization. - Refactored existing views to utilize new validation functions for batch and curriculum checks during student uploads and updates. - Enhanced request data parsing to accommodate new field mappings for specialization and curriculum.
1 parent 7509f73 commit 366f353

File tree

7 files changed

+655
-221
lines changed

7 files changed

+655
-221
lines changed

FusionIIIT/applications/programme_curriculum/api/serializers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,18 @@ class Meta:
3333
# this is for Curriculum ....
3434
# fields in fronted form --> name, version , batch , no of semester
3535
class BatchSerializer(serializers.ModelSerializer):
36+
curriculum_display = serializers.SerializerMethodField()
37+
3638
class Meta:
3739
model = Batch
3840
fields = '__all__'
41+
42+
def get_curriculum_display(self, obj):
43+
"""
44+
Get appropriate curriculum display for both single and multi-curriculum batches
45+
"""
46+
from applications.programme_curriculum.api.views_student_management import get_batch_curriculum_display
47+
return get_batch_curriculum_display(obj)
3948

4049

4150

FusionIIIT/applications/programme_curriculum/api/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
path('admin_add_course/', views.add_course_form, name='add_course_form'),
3737
path('admin_add_courseslot/', views.add_courseslot_form, name='add_courseslot_form'),
3838
path('admin_add_course/', views.add_course_form, name='add_course_form'),
39-
path('admin_add_batch/', views.add_batch_form, name='add_batch_form'),
39+
path('admin_add_batch/', views_student_management.create_batch, name='admin_add_batch'),
4040

4141
path('admin_update_course/<course_id>/', views.update_course_form, name='update_course_form'),
4242
path('admin_course_audit_logs/<course_id>/', views.course_audit_logs, name='course_audit_logs'),

FusionIIIT/applications/programme_curriculum/api/views.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from ..filters import CourseFilter, BatchFilter, CurriculumFilter
1414

1515
from .serializers import CourseSerializer,CurriculumSerializer,BatchSerializer
16+
from .views_student_management import get_batch_curriculum_display, get_available_curriculums_for_batch
1617
from django.core.serializers import serialize
1718
from django.db import IntegrityError, transaction
1819
from django.utils import timezone
@@ -880,13 +881,17 @@ def admin_view_all_batches(request):
880881
# Use centralized filled seats calculation function
881882
filled_seats = calculate_batch_filled_seats(batch)
882883
available_seats = max(0, batch.total_seats - filled_seats)
884+
885+
from .views_student_management import get_batch_curriculum_display
886+
curriculum_display = get_batch_curriculum_display(batch)
883887

884888
batch_data.append({
885889
'batch_id': batch.id,
886890
'name': batch.name,
887891
'discipline': str(batch.discipline.acronym),
888892
'year': batch.year,
889-
'curriculum': batch.curriculum.name if batch.curriculum else None,
893+
'curriculum': curriculum_display if curriculum_display != "No curriculum assigned" else (batch.curriculum.name if batch.curriculum else None),
894+
'curriculum_display': curriculum_display,
890895
'id': batch.curriculum.id if batch.curriculum else None,
891896
'curriculumVersion': batch.curriculum.version if batch.curriculum else None,
892897
'running_batch': batch.running_batch,
@@ -907,12 +912,17 @@ def admin_view_all_batches(request):
907912
filled_seats = calculate_batch_filled_seats(batch)
908913
available_seats = max(0, batch.total_seats - filled_seats)
909914

915+
# Get curriculum display for multi-curriculum support
916+
from .views_student_management import get_batch_curriculum_display
917+
curriculum_display = get_batch_curriculum_display(batch)
918+
910919
finished_batch_data.append({
911920
'batch_id': batch.id,
912921
'name': batch.name,
913922
'discipline': str(batch.discipline.acronym),
914923
'year': batch.year,
915-
'curriculum': batch.curriculum.name if batch.curriculum else None,
924+
'curriculum': curriculum_display if curriculum_display != "No curriculum assigned" else (batch.curriculum.name if batch.curriculum else None),
925+
'curriculum_display': curriculum_display,
916926
'id': batch.curriculum.id if batch.curriculum else None,
917927
'curriculumVersion': batch.curriculum.version if batch.curriculum else None,
918928
'running_batch': batch.running_batch,
@@ -1807,8 +1817,10 @@ def edit_batch_form(request, batch_id):
18071817
'name': batch.name,
18081818
'year': batch.year,
18091819
'curriculum_id': batch.curriculum_id,
1820+
'curriculum_display': get_batch_curriculum_display(batch),
18101821
'running_batch': batch.running_batch,
18111822
'total_seats': batch.total_seats, # Add total_seats to GET response
1823+
'available_curriculums': get_available_curriculums_for_batch(batch),
18121824
}
18131825

18141826
curricula_data = None
@@ -1835,7 +1847,7 @@ def edit_batch_form(request, batch_id):
18351847
try:
18361848
batch = Batch.objects.get(id=batch_id)
18371849
except Batch.DoesNotExist:
1838-
return JsonResponse({'error': 'Batch not found'}, status=status.HTTP_404_NOT_FOUND)
1850+
return JsonResponse({'error': 'Batch not found'}, status=404)
18391851

18401852
# Parse the incoming JSON data
18411853
data = json.loads(request.body)
@@ -1856,7 +1868,7 @@ def edit_batch_form(request, batch_id):
18561868
discipline = Discipline.objects.get(id=discipline_id)
18571869
batch.discipline = discipline
18581870
except Discipline.DoesNotExist:
1859-
return JsonResponse({'error': 'Invalid discipline ID'}, status=status.HTTP_400_BAD_REQUEST)
1871+
return JsonResponse({'error': 'Invalid discipline ID'}, status=400)
18601872

18611873
# Update curriculum (if provided)
18621874
curriculum_id = data.get('disciplineBatch')
@@ -1865,18 +1877,17 @@ def edit_batch_form(request, batch_id):
18651877
curriculum = Curriculum.objects.get(id=curriculum_id)
18661878
batch.curriculum = curriculum
18671879
except Curriculum.DoesNotExist:
1868-
return JsonResponse({'error': 'Invalid curriculum ID'}, status=status.HTTP_400_BAD_REQUEST)
1880+
return JsonResponse({'error': 'Invalid curriculum ID'}, status=400)
18691881
else:
18701882
batch.curriculum = None # Set curriculum to None if not provided
18711883

18721884
# Save the updated batch
18731885
batch.save()
18741886

1875-
return JsonResponse({'status': status.HTTP_200_OK, 'message': 'Batch updated successfully'})
1887+
return JsonResponse({'status': 'success', 'message': 'Batch updated successfully'})
18761888
except Exception as e:
1877-
return JsonResponse({'status': 'error', 'message': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
1878-
return JsonResponse({'error': 'Invalid request method'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)
1879-
1889+
return JsonResponse({'status': 'error', 'message': str(e)}, status=500)
1890+
return JsonResponse({'error': 'Invalid request method'}, status=405)
18801891

18811892
def instigate_semester(request, semester_id):
18821893
"""

0 commit comments

Comments
 (0)