diff --git a/FusionIIIT/applications/examination/api/urls.py b/FusionIIIT/applications/examination/api/urls.py index 299fe7b5b..15e37a1ab 100644 --- a/FusionIIIT/applications/examination/api/urls.py +++ b/FusionIIIT/applications/examination/api/urls.py @@ -21,6 +21,7 @@ url(r'^generate_transcript_form/' , views.generate_transcript_form , name = 'generate_transcript_form'), +# Here error url(r'^generate_transcript/' , views.generate_transcript , name = 'generate_transcript'), url(r'^getGrades/' , views.get_grade_for_course , name='get_grade_for_course'), @@ -42,4 +43,9 @@ url(r'^submit_grades/$' , views.submit_grades , name='submit_grades/'), + + # Delete this + + url(r'^add_student_details/' , views.add_student_details , name='add_student_details/'), + ] \ No newline at end of file diff --git a/FusionIIIT/applications/examination/api/views.py b/FusionIIIT/applications/examination/api/views.py index 2af39ce84..1eab764ef 100644 --- a/FusionIIIT/applications/examination/api/views.py +++ b/FusionIIIT/applications/examination/api/views.py @@ -13,7 +13,8 @@ ExtraInfo, Faculty, HoldsDesignation) from applications.academic_procedures.models import(course_registration , Register) -from applications.academic_information.models import Course , Curriculum +# from applications.academic_information.models import Course , Curriculum +from applications.programme_curriculum.models import Course , Curriculum from applications.examination.models import(hidden_grades , authentication , grade) from applications.department.models import(Announcements , SpecialRequest) from applications.academic_information.models import(Student) @@ -73,30 +74,64 @@ def fetch_roll_of_courses(request): -@api_view(['GET', 'POST']) +# @api_view(['GET', 'POST']) +# def fetch_student_details(request): +# """ +# This function is used to fetch student details based on course, semester, and batch. + +# @variables: +# course_id - ID of the course for which student details are being fetched +# semester_id - ID of the semester for which student details are being fetched +# batch - Batch for which student details are being fetched +# course_present - Queryset containing student grades filtered by course, semester, and batch +# data - Dictionary containing the data to be returned in JSON format +# """ +# if request.method == 'GET': +# # Retrieve query parameters +# course_id = int(request.query_params.get('course')) +# semester_id = int(request.query_params.get('semester')) +# year = int(request.query_params.get('batch')) +# print(course_id,semester_id,year) +# if course_id is None or semester_id is None or year is None: +# return JsonResponse({'error': 'Incomplete parameters provided'}, status=400) + +# # Filter student grades based on provided parameters +# course_present = Student_grades.objects.filter(course_id=course_id, semester=semester_id, year=year) + +# # Prepare data to return in JSON format +# data = { +# 'registrations': list(course_present.values()) # Convert queryset to list of dictionaries +# } + +# # Return JSON response +# return JsonResponse(data) + + + +@api_view(['GET']) def fetch_student_details(request): """ This function is used to fetch student details based on course, semester, and batch. - - @variables: - course_id - ID of the course for which student details are being fetched - semester_id - ID of the semester for which student details are being fetched - batch - Batch for which student details are being fetched - course_present - Queryset containing student grades filtered by course, semester, and batch - data - Dictionary containing the data to be returned in JSON format """ if request.method == 'GET': # Retrieve query parameters - course_id = int(request.query_params.get('course')) + course_id = request.query_params.get('course') semester_id = request.query_params.get('semester') - batch = request.query_params.get('batch') - print(course_id,semester_id,batch) - if course_id is None or semester_id is None or batch is None: + year = request.query_params.get('year') + + if course_id is None or semester_id is None or year is None: return JsonResponse({'error': 'Incomplete parameters provided'}, status=400) - # Filter student grades based on provided parameters - course_present = Student_grades.objects.filter(course_id=course_id, semester=semester_id, batch=batch) + # Convert parameters to appropriate types + try: + course_id = int(course_id) + semester_id = (semester_id) + year = year + except ValueError: + return JsonResponse({'error': 'Invalid parameter types'}, status=400) + # Filter student grades based on provided parameters + course_present = Student_grades.objects.filter(course_id=course_id, semester=semester_id, year=year) # Prepare data to return in JSON format data = { 'registrations': list(course_present.values()) # Convert queryset to list of dictionaries @@ -104,6 +139,76 @@ def fetch_student_details(request): # Return JSON response return JsonResponse(data) + else: + return JsonResponse({'error': 'Only GET requests are allowed'}, status=405) + + + + + +@api_view(['GET', 'POST']) +def add_student_details(request): + """ + This function is used to add student details to the database. + + @variables: + course_id - ID of the course for which student details are being added + semester - Semester for which student details are being added + year - Year for which student details are being added + roll_no - Roll number of the student + total_marks - Total marks obtained by the student + grade - Grade obtained by the student + batch - Batch for which student details are being added + student_data_list - List of dictionaries containing student details + success_count - Counter to keep track of successfully added students + """ + if request.method == 'POST': + # Extract list of student details from the request + student_data_list = request.data.get('students', []) + + # Validate data + if not student_data_list: + return Response({'error': 'No student data provided'}, status=400) + + # Counter for successfully added students + success_count = 0 + + # Loop through each student data and add to database + for student_data in student_data_list: + # Extract data for each student + course_id = student_data.get('course_id') + semester = student_data.get('semester') + year = student_data.get('year') + roll_no = student_data.get('roll_no') + total_marks = student_data.get('total_marks') + grade = student_data.get('grade') + batch = student_data.get('batch') + + # Validate data for each student + if not all([course_id, semester, year, roll_no, total_marks, grade, batch]): + continue # Skip this student if data is incomplete + + try: + # Get the Course instance + course_instance = Course.objects.get(pk=course_id) + + # Create new Student_grades instance + Student_grades.objects.create( + course_id=course_instance, + semester=semester, + year=year, + roll_no=roll_no, + total_marks=total_marks, + grade=grade, + batch=batch + ) + + success_count += 1 # Increment success count + except Course.DoesNotExist: + continue # Skip this student if course does not exist + + # Return response with success count + return Response({'success': f'{success_count} student(s) added successfully'}, status=201) @@ -418,6 +523,75 @@ def generate_transcript_form(request): +# @api_view(['POST', 'GET']) +# def generate_transcript(request): +# """ +# This function is used to generate a transcript for a student. + +# @variables: +# student_id - ID of the student for whom the transcript is being generated +# semester - Semester for which the transcript is being generated +# student_grades - Queryset containing grades for the student in the specified semester +# transcript_data - List to hold transcript data for each course +# grade - Grade object for each course in the specified semester +# course_info - Dictionary containing course information to be included in the transcript +# student_info - Information about the student, such as CPI (Cumulative Performance Index) +# cpi - Cumulative Performance Index of the student +# course_detail - Details of the course obtained from Curriculum +# """ +# if request.method == 'POST': +# student_id = request.data.get('student_id') +# semester = request.data.get('semester') + +# # Fetch the courses and grades for the student in the specified semester +# student_grades = Student_grades.objects.filter(roll_no=student_id, semester=semester) +# print(student_id,semester) + +# total_course_registered = Student_grades.objects.filter( +# roll_no=student_id, semester__lte=semester) + +# # Prepare data to be returned +# transcript_data = [] +# for grade in student_grades: +# # Access fields of each object +# course_info = { +# 'course_id': grade.course_id.name, +# 'total_marks': grade.total_marks, +# 'grade': grade.grade, +# 'batch': grade.batch, +# } + +# student_info = Student.objects.filter(id=student_id).first() + +# ##### Student Grades fetch all courses before semester find spi and update cpi in student table +# print(student_info.cpi) +# if student_info: +# cpi = student_info.cpi +# course_info['cpi'] = cpi +# else: +# # Handle case where student info is not found +# print("cpi is not there") +# pass +# # Fetch course details from Curriculum +# course_detail = Course.objects.filter(id=grade.course_id.id).first() +# if course_detail: +# # Include additional attributes +# course_info['course_code'] = course_detail.code +# course_info['credits'] = course_detail.credit +# else: +# # If course details not found, assign default values +# course_info['course_code'] = "Unknown" +# course_info['credits'] = 0 + +# transcript_data.append(course_info) + +# return JsonResponse({'transcript': transcript_data}) +# else: +# return JsonResponse({'error': 'Invalid request method'}) + + + + @api_view(['POST', 'GET']) def generate_transcript(request): """ @@ -440,19 +614,27 @@ def generate_transcript(request): # Fetch the courses and grades for the student in the specified semester student_grades = Student_grades.objects.filter(roll_no=student_id, semester=semester) - print(student_id,semester) + print(student_id, semester) + + # Fetch all courses registered by the student up to the specified semester + total_courses_registered = Student_grades.objects.filter( + roll_no=student_id, semester__lte=semester + ).values_list('course_id', flat=True).distinct().count() + # Prepare data to be returned transcript_data = [] for grade in student_grades: # Access fields of each object course_info = { - 'course_id': grade.course_id.course_name, + 'course_id': grade.course_id.name, 'total_marks': grade.total_marks, 'grade': grade.grade, 'batch': grade.batch, } student_info = Student.objects.filter(id=student_id).first() + + ##### Student Grades fetch all courses before semester find spi and update cpi in student table print(student_info.cpi) if student_info: cpi = student_info.cpi @@ -462,11 +644,11 @@ def generate_transcript(request): print("cpi is not there") pass # Fetch course details from Curriculum - course_detail = Curriculum.objects.filter(course_id=grade.course_id).first() + course_detail = Course.objects.filter(id=grade.course_id.id).first() if course_detail: # Include additional attributes - course_info['course_code'] = course_detail.course_code - course_info['credits'] = course_detail.credits + course_info['course_code'] = course_detail.code + course_info['credits'] = course_detail.credit else: # If course details not found, assign default values course_info['course_code'] = "Unknown" @@ -474,7 +656,7 @@ def generate_transcript(request): transcript_data.append(course_info) - return JsonResponse({'transcript': transcript_data}) + return JsonResponse({'transcript': transcript_data, 'total_courses_registered': total_courses_registered}) else: return JsonResponse({'error': 'Invalid request method'}) @@ -482,48 +664,83 @@ def generate_transcript(request): + + + +# @api_view(['POST', 'GET']) +# def get_curriculum_values(request): +# """ +# This function is used to retrieve curriculum values for a given course. + +# @variables: +# course_id - ID of the course for which curriculum values are being retrieved +# curriculum_values - Curriculum object corresponding to the course_id +# """ +# try: +# course_id = request.data.get('course_id') + +# curriculum_values = Course.objects.get(id=course_id) +# print(Curriculum.objects.all()) +# return JsonResponse({ +# 'course_code': curriculum_values.course_code, +# 'credits': curriculum_values.credits, +# 'course_type': curriculum_values.course_type, +# 'programme': curriculum_values.programme, +# 'branch': curriculum_values.branch, +# 'sem': curriculum_values.sem, +# 'optional': curriculum_values.optional, +# 'floated': curriculum_values.floated +# }) +# except Curriculum.DoesNotExist: +# print(Curriculum.objects.all()) +# return JsonResponse({ +# 'course_code': 'Unknown', +# 'credits': 0, +# 'course_type': 'Unknown', +# 'programme': 'Unknown', +# 'branch': 'Unknown', +# 'sem': 0, +# 'optional': False, +# 'floated': False +# }) + + + + @api_view(['POST', 'GET']) def get_curriculum_values(request): """ This function is used to retrieve curriculum values for a given course. - + @variables: course_id - ID of the course for which curriculum values are being retrieved - curriculum_values - Curriculum object corresponding to the course_id + curriculum_values - Course object corresponding to the course_id """ try: course_id = request.data.get('course_id') - curriculum_values = Curriculum.objects.get(course_id=course_id) - print(Curriculum.objects.all()) + course_values = Course.objects.get(id=course_id) + return JsonResponse({ - 'course_code': curriculum_values.course_code, - 'credits': curriculum_values.credits, - 'course_type': curriculum_values.course_type, - 'programme': curriculum_values.programme, - 'branch': curriculum_values.branch, - 'sem': curriculum_values.sem, - 'optional': curriculum_values.optional, - 'floated': curriculum_values.floated + 'code': course_values.code, + 'name': course_values.name, + 'credit': course_values.credit, + 'lecture_hours': course_values.lecture_hours, + 'tutorial_hours': course_values.tutorial_hours, + 'pratical_hours': course_values.pratical_hours, + 'discussion_hours': course_values.discussion_hours, + 'project_hours': course_values.project_hours, + 'pre_requisits': course_values.pre_requisits, + # Add other fields as needed }) - except Curriculum.DoesNotExist: - print(Curriculum.objects.all()) + except Course.DoesNotExist: return JsonResponse({ - 'course_code': 'Unknown', - 'credits': 0, - 'course_type': 'Unknown', - 'programme': 'Unknown', - 'branch': 'Unknown', - 'sem': 0, - 'optional': False, - 'floated': False + 'error': 'Course not found for the given ID', }) - - @api_view(['POST', 'GET']) def get_grade_for_course(course_id, batch, year, semester_id, selected_student_id): """ @@ -570,7 +787,7 @@ def get_course_names(request): if request.method == 'GET': # Retrieve all course names and IDs courses = Course.objects.all() - course_data = [{'id': course.id, 'name': course.course_name} for course in courses] + course_data = [{'id': course.id, 'name': course.name} for course in courses] if not course_data: return JsonResponse({'error': 'No courses found.'}, status=status.HTTP_404_NOT_FOUND) @@ -765,11 +982,14 @@ def get_registered_students_roll_no(request): try: # Filter course registrations by course_id and year - registrations = Register.objects.filter(curr_id=course_id, year=year) + registrations = course_registration.objects.filter(course_id=course_id, working_year=year) + # registrations = Register.objects.filter(curr_id=course_id) + print(registrations) # Serialize the queryset data = [] for registration in registrations: # Access fields of the related Student instance + print(registration) student_data = { 'roll_no': registration.student_id.id.user.username, 'name': registration.student_id.id.user.first_name, # Assuming first_name is a field of the User model @@ -786,11 +1006,11 @@ def get_registered_students_roll_no(request): student_data['grade'] = student_grade.grade student_data['marks'] = student_grade.total_marks - print(student_grade) + # print(student_grade) except Student_grades.DoesNotExist: print("Didn't find grades for roll_no:", registration.student_id.id, "and course_id:", course_id) pass - print(student_data) + # print(student_data) data.append(student_data) # Return the serialized data in the response return JsonResponse({'registrations': data}, status=200) diff --git a/FusionIIIT/applications/examination/models.py b/FusionIIIT/applications/examination/models.py index bad1f1981..5cdced32c 100644 --- a/FusionIIIT/applications/examination/models.py +++ b/FusionIIIT/applications/examination/models.py @@ -2,6 +2,7 @@ from applications.academic_procedures.models import (course_registration) from applications.online_cms.models import (Student_grades) from applications.academic_information.models import Course +from applications.programme_curriculum.models import Course as Courses, CourseInstructor # Create your models here. @@ -20,7 +21,7 @@ class authentication(models.Model): authenticator_2 = models.BooleanField(default=False) authenticator_3 = models.BooleanField(default=False) year = models.DateField(auto_now_add=True) - course_id = models.ForeignKey(Course, on_delete=models.CASCADE, default=1) + course_id = models.ForeignKey(Courses, on_delete=models.CASCADE, default=1) course_year = models.IntegerField(default=2024) @property diff --git a/FusionIIIT/applications/examination/views.py b/FusionIIIT/applications/examination/views.py index 3f38d4a3e..6e7bb47a6 100644 --- a/FusionIIIT/applications/examination/views.py +++ b/FusionIIIT/applications/examination/views.py @@ -1,3 +1,4 @@ +from notifications.signals import notify from django.views import View from django.views.generic import View from django.http import HttpResponse @@ -44,6 +45,9 @@ from rest_framework.permissions import AllowAny from applications.online_cms.models import (Student_grades) +from applications.programme_curriculum.models import Course as Courses, CourseInstructor + + @login_required(login_url='/accounts/login') def exam(request): """ @@ -68,7 +72,7 @@ def exam(request): @login_required(login_url='/accounts/login') def submit(request): - + unique_course_ids = course_registration.objects.values( 'course_id').distinct() @@ -167,7 +171,6 @@ def entergrades(request): registrations = course_registration.objects.filter( course_id__id=course_id, semester_id=semester_id) - context = { 'registrations': registrations } @@ -189,8 +192,6 @@ def verifygrades(request): return render(request, 'examination/verifygrades.html', context) - - def authenticate(request): # new # Retrieve unique course IDs from hidden_grades unique_course_ids = Student_grades.objects.values('course_id').distinct() @@ -200,14 +201,16 @@ def authenticate(request): # new course_id_int=Cast('course_id', IntegerField())) # Retrieve course names and course codes based on unique course IDs - courses_info = Course.objects.filter( + courses_info = Courses.objects.filter( id__in=unique_course_ids.values_list('course_id_int', flat=True)) - - + working_years = Student_grades.objects.values( + 'year').distinct() context = { 'courses_info': courses_info, + 'working_years':working_years } + print(working_years) return render(request, '../templates/examination/authenticate.html', context) @@ -216,7 +219,10 @@ def authenticategrades(request): # new course_id = request.GET.get('course') year = request.GET.get('year') - course_instance = Course.objects.get(id=course_id) + print(course_id) + print(year) + + course_instance = Courses.objects.get(id=course_id) registrations = authentication.objects.filter( course_id=course_instance, course_year=year) @@ -227,7 +233,7 @@ def authenticategrades(request): # new 'year': year } else: - course_instance = Course.objects.get(id=course_id) + course_instance = Courses.objects.get(id=course_id) course_present = Student_grades.objects.filter( course_id=course_id, year=year) if (course_present): @@ -235,7 +241,7 @@ def authenticategrades(request): # new course_id=course_instance, course_year=year) registrations = authentication.objects.filter( course_id=course_instance, course_year=year) - + context = { 'registrations': registrations, 'course_year': year, @@ -248,7 +254,7 @@ def authenticategrades(request): # new return render(request, 'examination/authenticategrades.html', context) -from notifications.signals import notify + # def examination_notif(sender, recipient, type): # try: # url = 'examination:examination' @@ -262,10 +268,11 @@ def authenticategrades(request): # new # module=module, # verb=verb, # flag=flag) - + # except Exception as e: # print("Error sending notification:", e) + @login_required(login_url='/accounts/login') def announcement(request): """ @@ -286,7 +293,7 @@ def announcement(request): user_info = usrnm.extrainfo ann_maker_id = user_info.id requests_received = get_to_request(usrnm) - + if request.method == 'POST': batch = request.POST.get('batch', '') programme = request.POST.get('programme', '') @@ -294,7 +301,7 @@ def announcement(request): upload_announcement = request.FILES.get('upload_announcement') department = request.POST.get('department') ann_date = date.today() - + obj1, created = Announcements.objects.get_or_create( maker_id=user_info, batch=batch, @@ -304,7 +311,7 @@ def announcement(request): department=department, ann_date=ann_date ) - + recipients = User.objects.all() # Modify this query as per your requirements examination_notif(sender=usrnm, recipient=recipients, type=message) @@ -315,10 +322,8 @@ def announcement(request): "request_to": requests_received }) except Exception as e: - - return render(request, 'examination/announcement_req.html', {"error_message": "An error occurred. Please try again later."}) - + return render(request, 'examination/announcement_req.html', {"error_message": "An error occurred. Please try again later."}) class Updatehidden_gradesMultipleView(APIView): @@ -346,7 +351,7 @@ def post(self, request): hidden_grade = hidden_grades.objects.create( course_id=course_id, student_id=student_id, semester_id=semester_id, grade=grade) hidden_grade.save() - + hidden_grade.save() response = HttpResponse(content_type='text/csv') @@ -387,7 +392,7 @@ def post(self, request): hidden_grade = hidden_grades.objects.create( course_id=course_id, student_id=student_id, semester_id=semester_id, grade=grade) hidden_grade.save() - + hidden_grade.save() return render(request, '../templates/examination/grades_updated.html', {}) @@ -402,12 +407,10 @@ def post(self, request, *args, **kwargs): authenticator2 = request.POST.get('authenticator2') authenticator3 = request.POST.get('authenticator3') - - # Retrieve the registration object try: - - course_instance = Course.objects.get(id=course) + + course_instance = Courses.objects.get(id=course) registration = authentication.objects.get( course_id=course_instance, course_year=course_year) except authentication.DoesNotExist: @@ -456,8 +459,6 @@ def post(self, request, *args, **kwargs): return response - - def generate_transcript(request): student_id = request.GET.get('student') @@ -468,15 +469,13 @@ def generate_transcript(request): # Initialize a dictionary to store course grades course_grades = {} - total_course_registered = Register.objects.filter( - student_id=student_id, semester=semester) - + total_course_registered = Student_grades.objects.filter( + roll_no=student_id, semester__lte=semester) + # for each_course in total_course_registered: + # course_name = Curriculum.objects.filter( + # curriculum_id=each_course.curr_id_id) + - - for each_course in total_course_registered: - course_name = Curriculum.objects.filter( - curriculum_id=each_course.curr_id_id) - for course in courses_registered: try: @@ -484,9 +483,9 @@ def generate_transcript(request): grade = Student_grades.objects.get( roll_no=student_id, course_id=course.course_id) - course_detail = Curriculum.objects.get( - course_id=course.course_id, batch=grade.batch) - course_instance = Course.objects.get(id=course.course_id_id) + # course_detail = Curriculum.objects.get( + # course_id=course.course_id, batch=grade.batch) + course_instance = Courses.objects.get(id=course.course_id_id) check_authentication_object = authentication.objects.filter( course_id=course_instance, course_year=grade.year) all_authenticators_true = True @@ -507,8 +506,7 @@ def generate_transcript(request): course_id=course_instance, course_year=grade.year) all_authenticators_true = False - - course_grades[course_detail] = { + course_grades[course_instance] = { 'grade': grade, 'all_authenticators_true': all_authenticators_true } # Store the grade @@ -516,12 +514,11 @@ def generate_transcript(request): # Grade not available course_grades[course] = "Grading not done yet" - context = { 'courses_grades': course_grades, + 'total_course_registered':total_course_registered } - - + # print(context) return render(request, 'examination/generate_transcript.html', context) @@ -534,7 +531,6 @@ def generate_transcript_form(request): batch = request.POST.get('batch') specialization = request.POST.get('specialization') semester = request.POST.get('semester') - if specialization == None: students = Student.objects.filter( @@ -568,14 +564,15 @@ def generate_transcript_form(request): def updateGrades(request): unique_course_ids = Student_grades.objects.values( 'course_id').distinct() - # Cast the course IDs to integers unique_course_ids = unique_course_ids.annotate( course_id_int=Cast('course_id', IntegerField())) # Retrieve course names and course codes based on unique course IDs - courses_info = Course.objects.filter( + + print(unique_course_ids) + courses_info = Courses.objects.filter( id__in=unique_course_ids.values_list('course_id_int', flat=True)) unique_batch_ids = Student_grades.objects.values( @@ -594,8 +591,6 @@ def updateEntergrades(request): semester_id = request.GET.get('semester') batch = request.GET.get('batch') - - course_present = Student_grades.objects.filter( course_id=course_id, semester=semester_id, batch=batch) @@ -619,7 +614,6 @@ def post(self, request): return Response({'error': 'Invalid grade data provided'}, status=status.HTTP_400_BAD_REQUEST) for student_id, semester_id, course_id, grade in zip(student_ids, semester_ids, course_ids, grades): - try: grade_of_student = Student_grades.objects.get( @@ -632,8 +626,6 @@ def post(self, request): course_id=course_id, student_id=student_id, semester_id=semester_id, grade=grade) hidden_grade.save() - - response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="grades.csv"' @@ -649,36 +641,51 @@ def post(self, request): @login_required(login_url='/accounts/login') def submitGrades(request): - unique_course_ids = Register.objects.values( - 'curr_id').distinct() - course_ids = [entry['curr_id'] for entry in unique_course_ids] + unique_course_ids = course_registration.objects.values( + 'course_id').distinct() + working_years = course_registration.objects.values( + 'working_year').distinct() - - courses_info = Curriculum.objects.filter( - curriculum_id__in=course_ids) - + # Cast the course IDs to integers + unique_course_ids = unique_course_ids.annotate( + course_id_int=Cast('course_id', IntegerField())) + + # Retrieve course names and course codes based on unique course IDs + + print(unique_course_ids) + courses_info = Courses.objects.filter( + id__in=unique_course_ids.values_list('course_id_int', flat=True)) context = { 'courses_info': courses_info, + 'working_years': working_years } + print(working_years) + return render(request, '../templates/examination/gradeSubmission.html', context) def submitEntergrades(request): course_id = request.GET.get('course') year = request.GET.get('year') + if year is None or not year.isdigit(): + message = "YEAR SHOULD NOT BE NONE" + context = { + 'message': message + } - - - courses_info = Curriculum.objects.get( - curriculum_id=course_id) + return render(request, '../templates/examination/message.html', context) + return HttpResponse("Invalid year parameter") + # Handle invalid year parameter + # You can return an error response or redirect the user to an error page + courses_info = Courses.objects.get(id=course_id) courses = Student_grades.objects.filter( - course_id=courses_info.course_id, year=year) + course_id=courses_info.id, year=year) if courses: message = "THIS Course was Already Submitted" @@ -688,8 +695,10 @@ def submitEntergrades(request): return render(request, '../templates/examination/message.html', context) - students = Register.objects.filter( - curr_id=course_id, year=year) + students = course_registration.objects.filter( + course_id_id=course_id, working_year=year) + + # print(students) context = { 'registrations': students, @@ -697,7 +706,6 @@ def submitEntergrades(request): 'year': year } - return render(request, '../templates/examination/gradeSubmissionForm.html', context) @@ -718,19 +726,17 @@ def post(self, request): for student_id, batch_id, course_id, semester_id, year_id, mark, grade in zip(student_ids, batch_ids, course_ids, semester_ids, year_ids, marks, grades): # Create an instance of hidden_grades model and save the data - + try: grade_of_student = Student_grades.objects.get( course_id=course_id, roll_no=student_id, semester=semester_id) except Student_grades.DoesNotExist: # If the grade doesn't exist, create a new one - course_instance = Course.objects.get(id=course_id) + course_instance = Courses.objects.get(id=course_id) student_grade = Student_grades.objects.create( course_id=course_instance, roll_no=student_id, semester=semester_id, grade=grade, batch=batch_id, year=year_id, total_marks=mark) student_grade.save() - - response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="grades.csv"' diff --git a/FusionIIIT/applications/online_cms/migrations/0001_initial.py b/FusionIIIT/applications/online_cms/migrations/0001_initial.py index 2990b152b..9f3c47375 100644 --- a/FusionIIIT/applications/online_cms/migrations/0001_initial.py +++ b/FusionIIIT/applications/online_cms/migrations/0001_initial.py @@ -193,4 +193,4 @@ class Migration(migrations.Migration): ('course_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='academic_information.course')), ], ), - ] + ] \ No newline at end of file diff --git a/FusionIIIT/applications/programme_curriculum/migrations/0001_initial.py b/FusionIIIT/applications/programme_curriculum/migrations/0001_initial.py index bb794c796..ea11ebc7c 100644 --- a/FusionIIIT/applications/programme_curriculum/migrations/0001_initial.py +++ b/FusionIIIT/applications/programme_curriculum/migrations/0001_initial.py @@ -207,4 +207,4 @@ class Migration(migrations.Migration): 'unique_together': {('course_id', 'instructor_id', 'batch_id')}, }, ), - ] + ] \ No newline at end of file diff --git a/FusionIIIT/applications/programme_curriculum/models.py b/FusionIIIT/applications/programme_curriculum/models.py index 01d235aa4..e781af115 100644 --- a/FusionIIIT/applications/programme_curriculum/models.py +++ b/FusionIIIT/applications/programme_curriculum/models.py @@ -417,4 +417,4 @@ class Meta: # unique_together = ('file_id', 'current_id','receive_id','receive_design') unique_together = ('file_id', 'current_id','current_design','disciplines') - + \ No newline at end of file diff --git a/FusionIIIT/templates/dashboard/modules.html b/FusionIIIT/templates/dashboard/modules.html index 1a0a493f7..67d9a2a92 100755 --- a/FusionIIIT/templates/dashboard/modules.html +++ b/FusionIIIT/templates/dashboard/modules.html @@ -424,4 +424,4 @@ {% comment %}The Modules End here!{% endcomment %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/FusionIIIT/templates/examination/authenticate.html b/FusionIIIT/templates/examination/authenticate.html index 115fbaef5..3e3d41bea 100644 --- a/FusionIIIT/templates/examination/authenticate.html +++ b/FusionIIIT/templates/examination/authenticate.html @@ -95,7 +95,7 @@