Skip to content

Commit 81c1545

Browse files
authored
Merge pull request #1863 from vikrantwiz02/prod/acad-react
Seperated the Date event of ADD, DROP, REPLACE
2 parents 58028ce + d3b0543 commit 81c1545

File tree

1 file changed

+87
-31
lines changed
  • FusionIIIT/applications/academic_procedures/api

1 file changed

+87
-31
lines changed

FusionIIIT/applications/academic_procedures/api/views.py

Lines changed: 87 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ def add_course(request):
250250
id__user=request.user
251251
)
252252

253-
eligibility_resp = get_add_drop_replace_registration_eligibility(
253+
eligibility_resp = get_add_registration_eligibility(
254254
timezone.now().date(),
255255
student.curr_semester_no,
256256
datetime.datetime.now().year
@@ -375,7 +375,7 @@ def get_student_add_course_slots(request):
375375
'error': 'Student information not found'
376376
}, status=status.HTTP_400_BAD_REQUEST)
377377

378-
eligibility_resp = get_add_drop_replace_registration_eligibility(
378+
eligibility_resp = get_add_registration_eligibility(
379379
timezone.now().date(),
380380
student.curr_semester_no,
381381
datetime.datetime.now().year
@@ -2281,20 +2281,47 @@ def course_registration_view(request):
22812281
return Response({"error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
22822282

22832283

2284-
def get_add_drop_replace_registration_eligibility(current_date, user_sem, year = datetime.datetime.now().year):
2284+
def get_add_registration_eligibility(current_date, user_sem, year = datetime.datetime.now().year):
22852285
try:
2286-
add_drop_date = Calendar.objects.get(description=f"Add/Drop/Replace {user_sem} {year}")
2287-
add_drop_start_date = add_drop_date.from_date
2288-
add_drop_end_date = add_drop_date.to_date
2289-
if current_date<add_drop_start_date:
2290-
return JsonResponse({f"error": "Add/Drop/Replace will start from {add_drop_start_date} to {add_drop_end_date}"}, status=400)
2291-
elif current_date > add_drop_end_date:
2292-
return JsonResponse({f"error": "Add/Drop/Replace has ended"}, status=400)
2286+
add_date = Calendar.objects.get(description=f"Add {user_sem} {year}")
2287+
add_start_date = add_date.from_date
2288+
add_end_date = add_date.to_date
2289+
if current_date<add_start_date:
2290+
return JsonResponse({f"error": f"Add course will start from {add_start_date} to {add_end_date}"}, status=400)
2291+
elif current_date > add_end_date:
2292+
return JsonResponse({f"error": "Add course period has ended"}, status=400)
22932293
except Calendar.DoesNotExist:
2294-
return JsonResponse({f"error": "Add/Drop/Replace Date is not yet Decided"}, status=400)
2294+
return JsonResponse({f"error": "Add course date is not yet decided"}, status=400)
22952295
except Exception as e:
2296-
pass
2296+
return JsonResponse({f"error": str(e)}, status=400)
22972297

2298+
def get_drop_registration_eligibility(current_date, user_sem, year = datetime.datetime.now().year):
2299+
try:
2300+
drop_date = Calendar.objects.get(description=f"Drop {user_sem} {year}")
2301+
drop_start_date = drop_date.from_date
2302+
drop_end_date = drop_date.to_date
2303+
if current_date<drop_start_date:
2304+
return JsonResponse({f"error": f"Drop course will start from {drop_start_date} to {drop_end_date}"}, status=400)
2305+
elif current_date > drop_end_date:
2306+
return JsonResponse({f"error": "Drop course period has ended"}, status=400)
2307+
except Calendar.DoesNotExist:
2308+
return JsonResponse({f"error": "Drop course date is not yet decided"}, status=400)
2309+
except Exception as e:
2310+
return JsonResponse({f"error": str(e)}, status=400)
2311+
2312+
def get_replace_registration_eligibility(current_date, user_sem, year = datetime.datetime.now().year):
2313+
try:
2314+
replace_date = Calendar.objects.get(description=f"Replace {user_sem} {year}")
2315+
replace_start_date = replace_date.from_date
2316+
replace_end_date = replace_date.to_date
2317+
if current_date<replace_start_date:
2318+
return JsonResponse({f"error": f"Replace course will start from {replace_start_date} to {replace_end_date}"}, status=400)
2319+
elif current_date > replace_end_date:
2320+
return JsonResponse({f"error": "Replace course period has ended"}, status=400)
2321+
except Calendar.DoesNotExist:
2322+
return JsonResponse({f"error": "Replace course date is not yet decided"}, status=400)
2323+
except Exception as e:
2324+
return JsonResponse({f"error": str(e)}, status=400)
22982325

22992326
def get_pre_registration_eligibility(current_date, user_sem, year = datetime.datetime.now().year):
23002327
try:
@@ -2549,20 +2576,19 @@ def get_swayam_registration_data(request):
25492576
user_details = current_user.extrainfo # assuming extrainfo holds the student id/reference
25502577
student = Student.objects.get(id=user_details)
25512578
semester_no = student.curr_semester_no
2552-
next_sem_no = semester_no + 1 # adjust if needed (e.g. semester_no+1)
25532579
try:
2554-
next_semester = Semester.objects.get(
2580+
current_semester = Semester.objects.get(
25552581
curriculum=student.batch_id.curriculum,
2556-
semester_no=next_sem_no
2582+
semester_no=semester_no
25572583
)
25582584
except Semester.DoesNotExist:
25592585
return JsonResponse({"error": "Not Eligible for Swayam Registration"}, status=400)
25602586

2561-
eligibility_resp = get_swayam_registration_eligibility(timezone.now().date(), next_sem_no)
2587+
eligibility_resp = get_swayam_registration_eligibility(timezone.now().date(), semester_no)
25622588
if isinstance(eligibility_resp, JsonResponse):
25632589
return eligibility_resp
25642590
# For Swayam registration, fetch only those course slots whose name starts with "SW".
2565-
course_slots = CourseSlot.objects.filter(semester=next_semester, name__startswith="SW")
2591+
course_slots = CourseSlot.objects.filter(semester=current_semester, name__startswith="SW")
25662592
data = []
25672593
for slot in course_slots:
25682594
courses = slot.courses.all()
@@ -2579,7 +2605,7 @@ def get_swayam_registration_data(request):
25792605
"sno": slot.id,
25802606
"slot_name": slot.name,
25812607
"slot_type": slot.type,
2582-
"semester": next_sem_no,
2608+
"semester": semester_no,
25832609
"course_choices": course_choices,
25842610
})
25852611
return JsonResponse(data, safe=False)
@@ -2625,38 +2651,68 @@ def submit_swayam_registration(request):
26252651
user_details = current_user.extrainfo
26262652
student = Student.objects.get(id=user_details)
26272653
semester_no = student.curr_semester_no
2628-
next_sem_no = semester_no + 1
26292654
try:
26302655
semester = Semester.objects.get(
26312656
curriculum=student.batch_id.curriculum,
2632-
semester_no=next_sem_no
2657+
semester_no=semester_no
26332658
)
26342659
except Semester.DoesNotExist:
26352660
return JsonResponse({"error": "Not Eligible for Swayam Registration"}, status=400)
26362661
except Student.DoesNotExist:
26372662
return Response({"error": "Student not found"}, status=404)
26382663

2639-
eligibility_resp = get_swayam_registration_eligibility(timezone.now().date(), next_sem_no)
2664+
eligibility_resp = get_swayam_registration_eligibility(timezone.now().date(), semester_no)
26402665
if isinstance(eligibility_resp, JsonResponse):
26412666
return eligibility_resp
2667+
26422668
registrations = payload.get("registrations", [])
2669+
errors = []
2670+
success_count = 0
2671+
26432672
for reg in registrations:
26442673
slot_id = reg.get("slot_id")
26452674
course_id = reg.get("course_id")
26462675
selected_option = reg.get("selected_option")
26472676
remark = reg.get("remark")
2677+
26482678
try:
26492679
course = Courses.objects.get(id=course_id)
26502680
except Courses.DoesNotExist:
2681+
errors.append(f"Course with ID {course_id} does not exist")
26512682
continue
26522683

2653-
course_registration.objects.create(
2684+
# Check if already registered for this course
2685+
existing_registration = course_registration.objects.filter(
26542686
course_id=course,
2655-
semester_id_id=semester.id,
2656-
student_id=student,
2657-
course_slot_id_id=slot_id,
2658-
)
2659-
return JsonResponse({"status": "success"}, status=201)
2687+
semester_id=semester,
2688+
student_id=student
2689+
).first()
2690+
2691+
if existing_registration:
2692+
errors.append(f"Already registered for course: {course.code} - {course.name}")
2693+
continue
2694+
2695+
try:
2696+
course_registration.objects.create(
2697+
course_id=course,
2698+
semester_id_id=semester.id,
2699+
student_id=student,
2700+
course_slot_id_id=slot_id
2701+
)
2702+
success_count += 1
2703+
except Exception as e:
2704+
errors.append(f"Failed to register for {course.code}: {str(e)}")
2705+
2706+
if errors and success_count == 0:
2707+
return JsonResponse({"error": ", ".join(errors)}, status=400)
2708+
elif errors:
2709+
return JsonResponse({
2710+
"status": "partial_success",
2711+
"message": f"Registered {success_count} course(s) successfully",
2712+
"errors": errors
2713+
}, status=200)
2714+
2715+
return JsonResponse({"status": "success", "message": f"Successfully registered {success_count} course(s)"}, status=201)
26602716

26612717

26622718
@api_view(['GET'])
@@ -3070,7 +3126,7 @@ def registered_slots(request):
30703126
user_details = current_user.extrainfo
30713127
student = Student.objects.get(id=user_details)
30723128
session, semester_type = generate_current_session(datetime.datetime.now().year, student.curr_semester_no)
3073-
eligibility_resp = get_add_drop_replace_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
3129+
eligibility_resp = get_replace_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
30743130
if isinstance(eligibility_resp, JsonResponse):
30753131
return eligibility_resp
30763132
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')
@@ -3103,7 +3159,7 @@ def batch_create_requests(request):
31033159
current_user = request.user
31043160
user_details = current_user.extrainfo
31053161
student = Student.objects.get(id=user_details)
3106-
eligibility_resp = get_add_drop_replace_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
3162+
eligibility_resp = get_replace_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
31073163
if isinstance(eligibility_resp, JsonResponse):
31083164
return eligibility_resp
31093165
data = json.loads(request.body).get('requests', [])
@@ -3345,7 +3401,7 @@ def student_registrations_for_drop(request):
33453401
current_user = request.user
33463402
user_details = current_user.extrainfo
33473403
student = Student.objects.get(id=user_details)
3348-
eligibility_resp = get_add_drop_replace_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
3404+
eligibility_resp = get_drop_registration_eligibility(timezone.now().date(), student.curr_semester_no, datetime.datetime.now().year)
33493405
if isinstance(eligibility_resp, JsonResponse):
33503406
return eligibility_resp
33513407
regs = course_registration.objects.filter(student_id=student, semester_id__semester_no = student.curr_semester_no ).order_by('course_slot_id__name')
@@ -3382,7 +3438,7 @@ def drop_course(request):
33823438

33833439
student = Student.objects.select_related('id__user', 'batch_id').get(id=user_details)
33843440

3385-
eligibility_resp = get_add_drop_replace_registration_eligibility(
3441+
eligibility_resp = get_drop_registration_eligibility(
33863442
timezone.now().date(),
33873443
student.curr_semester_no,
33883444
datetime.datetime.now().year

0 commit comments

Comments
 (0)