From 438222a1f2eebf456f81400d7b664cab4c4ef9a6 Mon Sep 17 00:00:00 2001 From: Vikrant Kumar Date: Sat, 13 Jun 2026 13:11:14 +0530 Subject: [PATCH] Add login_required decorator to various views in programme_curriculum - Secured multiple views by adding @login_required to ensure only authenticated users can access them. - Updated views related to programmes, curriculums, courses, disciplines, batches, and course proposals. --- .../academic_information/views.py | 18 + .../applications/academic_procedures/views.py | 82 + FusionIIIT/applications/examination/views.py | 7 + FusionIIIT/applications/globals/views.py | 2652 +++++++++-------- FusionIIIT/applications/online_cms/views.py | 1 + .../applications/otheracademic/views.py | 140 + .../programme_curriculum/views.py | 47 + 7 files changed, 1623 insertions(+), 1324 deletions(-) diff --git a/FusionIIIT/applications/academic_information/views.py b/FusionIIIT/applications/academic_information/views.py index 1081e550d..0a3cfeffd 100755 --- a/FusionIIIT/applications/academic_information/views.py +++ b/FusionIIIT/applications/academic_information/views.py @@ -71,6 +71,7 @@ def user_check(request): return False +@login_required(login_url='/accounts/login') def get_context(request): """ This function gets basic gata from database to send to template @@ -842,6 +843,7 @@ def update_calendar(request): #Generate Attendance Sheet +@login_required(login_url='/accounts/login') def sem_for_generate_sheet(): """ This function generates semester grade sheet @@ -1424,6 +1426,7 @@ def add_new_profile (request): return render(request, "ais/ais.html", context) +@login_required(login_url='/accounts/login') def get_faculty_list(): """ to get faculty list from database @@ -1580,6 +1583,7 @@ def float_course_submit(request): # # ---------------------senator------------------ # @csrf_exempt +@login_required(login_url='/accounts/login') def senator(request): # """ # to add a new student senator @@ -1635,6 +1639,7 @@ def senator(request): # return HttpResponseRedirect('/aims/') # @csrf_exempt +@login_required(login_url='/accounts/login') def deleteSenator(request, pk): # """ # to remove a senator from the position @@ -1662,6 +1667,7 @@ def deleteSenator(request, pk): # # ##########covenors and coconvenors################## # @csrf_exempt +@login_required(login_url='/accounts/login') def add_convenor(request): # """ # to add a new student convenor/coconvenor @@ -1709,6 +1715,7 @@ def add_convenor(request): # return JsonResponse(data) # @csrf_exempt +@login_required(login_url='/accounts/login') def deleteConvenor(request, pk): # """ # to remove a convenor/coconvenor from the position @@ -1744,6 +1751,7 @@ def deleteConvenor(request, pk): # # ##########Senate meeting Minute################## # @csrf_exempt +@login_required(login_url='/accounts/login') def addMinute(request): # """ # to add a new senate meeting minute object to the database. @@ -1780,6 +1788,7 @@ def addMinute(request): # return render(request, "ais/ais.html", {}) +@login_required(login_url='/accounts/login') def deleteMinute(request): # """ # to delete an existing senate meeting minute object from the database. @@ -1803,6 +1812,7 @@ def deleteMinute(request): # # ##########Student basic profile################## # @csrf_exempt +@login_required(login_url='/accounts/login') def add_basic_profile(request): # """ # It adds the basic profile information like username,password, name, @@ -1853,6 +1863,7 @@ def add_basic_profile(request): # @csrf_exempt +@login_required(login_url='/accounts/login') def delete_basic_profile(request, pk): # """ # Deletes the student from the database @@ -1884,6 +1895,7 @@ def delete_basic_profile(request, pk): # ''' +@login_required(login_url='/accounts/login') def delete_advanced_profile(request): # """ # to delete the advance information of the student @@ -1929,6 +1941,7 @@ def delete_advanced_profile(request): # return HttpResponse("Data Deleted Successfully") +@login_required(login_url='/accounts/login') def add_advanced_profile(request): # """ # It adds the advance profile information like hall no, room no, @@ -1994,6 +2007,7 @@ def add_advanced_profile(request): +@login_required(login_url='/accounts/login') def add_optional(request): # """ # acadmic admin to update the additional courses @@ -2021,6 +2035,7 @@ def add_optional(request): # return HttpResponseRedirect('/academic-procedures/') +@login_required(login_url='/accounts/login') def min_cred(request): # """ # to set minimum credit for a current semester that a student must take @@ -2046,6 +2061,7 @@ def min_cred(request): # return HttpResponse("Worked") +@login_required(login_url='/accounts/login') def view_course(request): # if request.method == "POST": # programme=request.POST['programme'] @@ -2069,6 +2085,7 @@ def view_course(request): +@login_required(login_url='/accounts/login') def delete_grade(request): # """ # It deletes the grade of the student @@ -2155,6 +2172,7 @@ def verify_grade(request): return HttpResponseRedirect('/aims/') +@login_required(login_url='/accounts/login') def confirm_grades(request): # if user_check(request): # return HttpResponseRedirect('/academic-procedures/') diff --git a/FusionIIIT/applications/academic_procedures/views.py b/FusionIIIT/applications/academic_procedures/views.py index 4bdc6838b..a1f6f2a77 100644 --- a/FusionIIIT/applications/academic_procedures/views.py +++ b/FusionIIIT/applications/academic_procedures/views.py @@ -659,6 +659,7 @@ def academic_procedures_student(request): return HttpResponse('user not found') +@login_required(login_url='/accounts/login') def dues_pdf(request): template = get_template('academic_procedures/dues_pdf.html') current_user = get_object_or_404(User, username=request.user.username) @@ -686,6 +687,7 @@ def dues_pdf(request): return HttpResponse("PDF could not be generated") +@login_required(login_url='/accounts/login') def facultyData(request): current_value = request.POST['current_value'] try: @@ -713,6 +715,7 @@ def facultyData(request): +@login_required(login_url='/accounts/login') def get_course_to_show_pg(initial_courses, final_register): ''' This function fetches the PG courses from the database and store them into list x. @@ -736,6 +739,7 @@ def get_course_to_show_pg(initial_courses, final_register): +@login_required(login_url='/accounts/login') def get_pg_course(usersem, specialization): ''' This function fetches the PG Spcialization courses from the database and store them into list result. @@ -767,6 +771,7 @@ def get_pg_course(usersem, specialization): +@login_required(login_url='/accounts/login') def get_add_course(branch, final): ''' This function shows the courses that were added after pre-registration. @@ -838,6 +843,7 @@ def apply_branch_change(request): return context +@login_required(login_url='/accounts/login') def branch_change_request(request): ''' This function is used to apply the branch change request. @@ -950,6 +956,7 @@ def approve_branch_change(request): return HttpResponseRedirect('/academic-procedures/main') # Function returning Branch , Banch data which was required many times +@login_required(login_url='/accounts/login') def get_batch_query_detail(month, year): ''' This function is used to get the batch's detail simply return branch which is required often. @@ -1166,6 +1173,7 @@ def verify_course(request): # view to add Course for a student +@login_required(login_url='/accounts/login') def acad_add_course(request): if(request.method == "POST"): if user_check(request): @@ -1200,6 +1208,7 @@ def acad_add_course(request): +@login_required(login_url='/accounts/login') def acad_branch_change(request): ''' This function is used to approve the branch changes requested by the students. @@ -1413,9 +1422,11 @@ def phd_details(request): # # # +@login_required(login_url='/accounts/login') def get_student_register(id): return Register.objects.all().select_related('curr_id','student_id','curr_id__course_id','student_id__id','student_id__id__user','student_id__id__department').filter(student_id = id) +@login_required(login_url='/accounts/login') def get_pre_registration_eligibility(current_date, user_sem, year): ''' This function is used to extract the elgibility of pre-registration for a given semester @@ -1450,6 +1461,7 @@ def get_pre_registration_eligibility(current_date, user_sem, year): except Exception as e: return False, None +@login_required(login_url='/accounts/login') def get_final_registration_eligibility(current_date): try: frd = Calendar.objects.all().filter(description="Physical Reporting at the Institute").first() @@ -1462,6 +1474,7 @@ def get_final_registration_eligibility(current_date): except Exception as e: return False +@login_required(login_url='/accounts/login') def get_add_or_drop_course_date_eligibility(current_date): try: add_drop_course_date = Calendar.objects.all().filter(description="Last Date for Adding/Dropping of course").first() @@ -1474,6 +1487,7 @@ def get_add_or_drop_course_date_eligibility(current_date): except Exception as e: return False +@login_required(login_url='/accounts/login') def get_course_verification_date_eligibilty(current_date): try: course_verification_date = Calendar.objects.all().filter(description="course verification date").first() @@ -1486,6 +1500,7 @@ def get_course_verification_date_eligibilty(current_date): except Exception as e: return False +@login_required(login_url='/accounts/login') def get_swayam_registration_eligibility(current_date, user_sem, year): try: swayam_registration_date = Calendar.objects.all().filter(description=f"Swayam Registration {user_sem} {year}").first() @@ -1498,6 +1513,7 @@ def get_swayam_registration_eligibility(current_date, user_sem, year): except Exception as e: return False +@login_required(login_url='/accounts/login') def get_drop_course_date_eligibility(current_date, user_sem, year): try: drop_course_date = Calendar.objects.all().filter(description=f"Drop course {user_sem} {year}").first() @@ -1510,9 +1526,11 @@ def get_drop_course_date_eligibility(current_date, user_sem, year): except Exception as e: return False +@login_required(login_url='/accounts/login') def get_user_branch(user_details): return user_details.department.name +@login_required(login_url='/accounts/login') def get_acad_year(user_sem, year): if user_sem%2 == 1: acad_year = str(year) + "-" + str(year+1) @@ -1661,10 +1679,12 @@ def auto_pre_registration(request): else: return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def get_student_registrtion_check(obj, sem): return StudentRegistrationChecks.objects.all().filter(student_id = obj, semester_id = sem).first() +@login_required(login_url='/accounts/login') def final_registration(request): if request.method == 'POST': if request.POST.get('type_reg') == "register" : @@ -1711,6 +1731,7 @@ def final_registration(request): return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def allot_courses(request): if user_check(request): return HttpResponseRedirect('/academic-procedures/main') @@ -1898,10 +1919,12 @@ def user_check(request): else: return False +@login_required(login_url='/accounts/login') def get_cpi(id): obj = Student.objects.select_related('id','id__user','id__department').get(id = id) return obj.cpi +@login_required(login_url='/accounts/login') def register(request): if request.method == 'POST': try: @@ -1943,6 +1966,7 @@ def register(request): return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def add_courses(request): """ This function is used to add courses for currernt semester @@ -1996,6 +2020,7 @@ def add_courses(request): return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def drop_course(request): if request.method == 'POST': try: @@ -2022,6 +2047,7 @@ def drop_course(request): else: return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def replace_courses(request): """ This function is used to replace elective courses which have been registered @@ -2071,6 +2097,7 @@ def replace_courses(request): +@login_required(login_url='/accounts/login') def add_thesis(request): if request.method == 'POST': try: @@ -2160,6 +2187,7 @@ def add_thesis(request): return HttpResponseRedirect('/academic-procedures/main/') +@login_required(login_url='/accounts/login') def get_final_registration_choices(branch_courses,batch): course_option = [] unavailable_courses = [] @@ -2174,6 +2202,7 @@ def get_final_registration_choices(branch_courses,batch): course_option.append((courseslot, lis)) return course_option, unavailable_courses +@login_required(login_url='/accounts/login') def get_add_course_options(branch_courses, current_register, batch): course_option = [] @@ -2194,6 +2223,7 @@ def get_add_course_options(branch_courses, current_register, batch): course_option.append((courseslot, lis)) return course_option +@login_required(login_url='/accounts/login') def get_drop_course_options(current_register): courses = [] for item in current_register: @@ -2201,6 +2231,7 @@ def get_drop_course_options(current_register): courses.append(item[1]) return courses +@login_required(login_url='/accounts/login') def get_replace_course_options( current_register, batch): replace_options = [] @@ -2222,6 +2253,7 @@ def get_replace_course_options( current_register, batch): +@login_required(login_url='/accounts/login') def get_user_semester(roll_no, ug_flag, masters_flag, phd_flag): roll = str(roll_no) now = demo_date @@ -2248,6 +2280,7 @@ def get_user_semester(roll_no, ug_flag, masters_flag, phd_flag): +@login_required(login_url='/accounts/login') def get_branch_courses(roll_no, user_sem, branch): roll = str(roll_no) try: @@ -2267,6 +2300,7 @@ def get_branch_courses(roll_no, user_sem, branch): return course_list +@login_required(login_url='/accounts/login') def get_sem_courses(sem_id, batch): courses = [] course_slots = CourseSlot.objects.all().filter(semester_id = sem_id) @@ -2275,6 +2309,7 @@ def get_sem_courses(sem_id, batch): return courses +@login_required(login_url='/accounts/login') def get_currently_registered_courses(id, user_sem): obj = Register.objects.all().select_related('curr_id','student_id','curr_id__course_id','student_id__id','student_id__id__user','student_id__id__department').filter(student_id=id, semester=user_sem) ans = [] @@ -2283,6 +2318,7 @@ def get_currently_registered_courses(id, user_sem): ans.append(course) return ans +@login_required(login_url='/accounts/login') def get_currently_registered_course(id, sem_id, courseregobj=False): if (type(sem_id) == int): obj = course_registration.objects.all().filter(student_id = id, semester_id__semester_no=sem_id) @@ -2297,6 +2333,7 @@ def get_currently_registered_course(id, sem_id, courseregobj=False): return courses +@login_required(login_url='/accounts/login') def get_current_credits(obj): credits = 0 for i in obj: @@ -2305,6 +2342,7 @@ def get_current_credits(obj): +@login_required(login_url='/accounts/login') def get_faculty_list(): f1 = HoldsDesignation.objects.select_related().filter(designation=Designation.objects.get(name = "Assistant Professor")) f2 = HoldsDesignation.objects.select_related().filter(designation=Designation.objects.get(name = "Professor")) @@ -2317,6 +2355,7 @@ def get_faculty_list(): return faculty_list +@login_required(login_url='/accounts/login') def get_thesis_flag(student): obj = ThesisTopicProcess.objects.all().select_related().filter(student_id = student) if(obj): @@ -2414,6 +2453,7 @@ def acad_person(request): return HttpResponse('user not found') +@login_required(login_url='/accounts/login') def acad_proced_global_context(): year = demo_date.year month = demo_date.month @@ -2493,6 +2533,7 @@ def acad_proced_global_context(): +@login_required(login_url='/accounts/login') def get_batch_all(): result_year = [] if demo_date.month >=7: @@ -2502,6 +2543,7 @@ def get_batch_all(): result_year = [demo_date.year-1,demo_date.year-2, demo_date.year-3, demo_date.year-4] return result_year +@login_required(login_url='/accounts/login') def announce_results(request): i = int(request.POST.get('id')) year = get_batch_all() @@ -2528,6 +2570,7 @@ def announce_results(request): +@login_required(login_url='/accounts/login') def get_batch_grade_verification_data(list): semester_marks = [] @@ -2662,6 +2705,7 @@ def get_batch_grade_verification_data(list): return batch_grade_data_set +@login_required(login_url='/accounts/login') def get_batch_branch_data(result_year): batches = [] @@ -2794,12 +2838,14 @@ def course_list(request): return HttpResponse(json.dumps({'html': html}),content_type="application/json") +@login_required(login_url='/accounts/login') def process_verification_request(request): if request.is_ajax(): return verify_registration(request) return JsonResponse({'status': 'Failed'}, status=400) +@login_required(login_url='/accounts/login') def auto_process_verification_request(request): if request.is_ajax(): return auto_verify_registration(request) @@ -2918,6 +2964,7 @@ def auto_verify_registration(request): academics_module_notif(academicadmin, student_id.id.user, 'Registration Declined - '+reject_reason) return JsonResponse({'status': 'success', 'message': 'Successfully Rejected'}) +@login_required(login_url='/accounts/login') def get_registration_courses(courses): x = [[]] @@ -2940,6 +2987,7 @@ def get_registration_courses(courses): return x +@login_required(login_url='/accounts/login') def teaching_credit_register(request) : if request.method == 'POST': try: @@ -2977,6 +3025,7 @@ def teaching_credit_register(request) : +@login_required(login_url='/accounts/login') def course_marks_data(request): try: course_id = request.POST.get('course_id') @@ -3047,6 +3096,7 @@ def course_marks_data(request): +@login_required(login_url='/accounts/login') def submit_marks(request): try: print(request.POST) @@ -3138,6 +3188,7 @@ def submit_marks(request): +@login_required(login_url='/accounts/login') def verify_course_marks_data(request): try: curriculum_id = request.POST.get('curriculum_id') @@ -3175,6 +3226,7 @@ def verify_course_marks_data(request): ##########GLOBAL VARIABLE############### ######################################## +@login_required(login_url='/accounts/login') def verify_marks(request): try: global verified_marks_students @@ -3216,6 +3268,7 @@ def verify_marks(request): +@login_required(login_url='/accounts/login') def render_to_pdf(template_src, context_dict): template = get_template(template_src) html = template.render(context_dict) @@ -3225,6 +3278,7 @@ def render_to_pdf(template_src, context_dict): return HttpResponse(result.getvalue(), content_type='application/pdf') return None +@login_required(login_url='/accounts/login') def generate_grade_pdf(request): instructor = Curriculum_Instructor.objects.all().select_related('curriculum_id','instructor_id','curriculum_id__course_id','instructor_id__department','instructor_id__user').filter(curriculum_id = verified_marks_students_curr).first() context = {'verified_marks_students' : verified_marks_students, @@ -3238,6 +3292,7 @@ def generate_grade_pdf(request): return HttpResponse("PDF could not be generated") +@login_required(login_url='/accounts/login') def generate_result_pdf(request): batch = request.POST.get('batch') branch = request.POST.get('branch') @@ -3312,6 +3367,7 @@ def generate_result_pdf(request): return HttpResponse("PDF could not be generated") +@login_required(login_url='/accounts/login') def generate_grade_sheet_pdf(request): batch = request.POST.get('batch') branch = request.POST.get('branch') @@ -3419,6 +3475,7 @@ def generate_course_registration_receipt(request): except Exception as e: return JsonResponse({'error': 'Unable to retrieve data', 'details': str(e)}) +@login_required(login_url='/accounts/login') def get_spi(course_list,grade_list): spi = 0.0 credits = 0 @@ -3496,6 +3553,7 @@ def get_spi(course_list,grade_list): +@login_required(login_url='/accounts/login') def manual_grade_submission(request): if request.method == 'POST' and request.FILES: @@ -3627,6 +3685,7 @@ def manual_grade_submission(request): +@login_required(login_url='/accounts/login') def test(request): br_up = [] st_list = Student.objects.select_related('id','id__user','id__department').all() @@ -3644,6 +3703,7 @@ def test(request): return render(request,'../templates/academic_procedures/test.html',{}) +@login_required(login_url='/accounts/login') def test_ret(request): try: data = render_to_string('academic_procedures/test_render.html', @@ -3654,6 +3714,7 @@ def test_ret(request): return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def Bonafide_form(request): template = get_template('academic_procedures/bonafide_pdf.html') current_user = get_object_or_404(User, username=request.user.username) @@ -3750,6 +3811,7 @@ def ACF(request): return HttpResponse(content) +@login_required(login_url='/accounts/login') def update_assistantship(request): if request.method == 'POST': r = request.POST.get('remark') @@ -3773,6 +3835,7 @@ def update_assistantship(request): return HttpResponseRedirect('/academic-procedures/main/') +@login_required(login_url='/accounts/login') def update_hod_assistantship(request): if request.method == 'POST': d = request.POST.get('dict') @@ -3787,6 +3850,7 @@ def update_hod_assistantship(request): +@login_required(login_url='/accounts/login') def update_acad_assis(request): if request.method == 'POST': d = request.POST.get('dict') @@ -3802,6 +3866,7 @@ def update_acad_assis(request): return HttpResponse('success') +@login_required(login_url='/accounts/login') def update_account_assistantship(request): if request.method == 'POST': di = request.POST.get('dict') @@ -3817,6 +3882,7 @@ def update_account_assistantship(request): return HttpResponse('success') +@login_required(login_url='/accounts/login') def assis_stat(request): if request.method == 'POST': flag= request.POST.get('flag') @@ -3901,6 +3967,7 @@ def PHDPE(request): return HttpResponse(content) +@login_required(login_url='/accounts/login') def update_mtechsg(request): if request.method == 'POST': i = request.POST.get('obj_id') @@ -3922,6 +3989,7 @@ def update_mtechsg(request): +@login_required(login_url='/accounts/login') def update_phdform(request): if request.method == 'POST': i = request.POST.get('obj_id') @@ -3952,6 +4020,7 @@ def update_phdform(request): return HttpResponse(content) +@login_required(login_url='/accounts/login') def update_dues(request): if request.method == "POST": i = request.POST.get('obj_id') @@ -4005,6 +4074,7 @@ def update_dues(request): return HttpResponse(content) +@login_required(login_url='/accounts/login') def mdue(request): if request.method == 'POST': rollno = request.POST.get('rollno') @@ -4040,6 +4110,7 @@ def mdue(request): +@login_required(login_url='/accounts/login') def get_detailed_sem_courses(sem_id): course_slots = CourseSlot.objects.filter(semester_id=sem_id) # Serialize queryset of course slots into JSON @@ -4058,6 +4129,7 @@ def get_detailed_sem_courses(sem_id): return course_slots_data +@login_required(login_url='/accounts/login') def get_next_sem_courses(request): if request.method == 'POST': data = json.loads(request.body) @@ -4080,6 +4152,7 @@ def get_next_sem_courses(request): return JsonResponse({'error': 'Invalid request'}) +@login_required(login_url='/accounts/login') def add_course_to_slot(request): if request.method == 'POST': data = json.loads(request.body) @@ -4100,6 +4173,7 @@ def add_course_to_slot(request): return JsonResponse({'error': 'Invalid request method.'}, status=405) +@login_required(login_url='/accounts/login') def remove_course_from_slot(request): if request.method == 'POST': data = json.loads(request.body) @@ -4119,6 +4193,7 @@ def remove_course_from_slot(request): return JsonResponse({'error': 'Invalid request method.'}, status=405) +@login_required(login_url='/accounts/login') def add_one_course(request): if request.method == 'POST': try: @@ -4164,6 +4239,7 @@ def add_one_course(request): else: return JsonResponse({'message': 'Invalid request method'}, status=405) +@login_required(login_url='/accounts/login') def replace_one_course(request): if request.method == 'POST' : try: @@ -4191,6 +4267,7 @@ def replace_one_course(request): else : return JsonResponse({'message': 'Invalid request method'}, status=405) +@login_required(login_url='/accounts/login') def get_sem_swayam(sem_id, batch): courses = [] course_slots = CourseSlot.objects.all().filter(type='Swayam') @@ -4200,6 +4277,7 @@ def get_sem_swayam(sem_id, batch): return courses +@login_required(login_url='/accounts/login') def replaceSwayam(request): if(request.POST): # print(f"++++++++++++++++++++++++++++++++++++++++++++++++{request.POST}") @@ -4289,6 +4367,7 @@ def replaceSwayam(request): obj = json.dumps(maindict) return HttpResponse(obj, content_type='application/json') +@login_required(login_url='/accounts/login') def get_currently_registered_elective(student_id, semester_id): registrations = course_registration.objects.filter(student_id=student_id, semester_id=semester_id) courses = [] @@ -4299,6 +4378,7 @@ def get_currently_registered_elective(student_id, semester_id): +@login_required(login_url='/accounts/login') def swayam_replace(request): if request.method == 'POST': csrf_token = request.POST.get('csrfmiddlewaretoken', None) @@ -4380,6 +4460,7 @@ def swayam_replace(request): else: return HttpResponseRedirect('/academic-procedures/main') +@login_required(login_url='/accounts/login') def register_backlog_course(request): if request.method == 'POST': try: @@ -4416,6 +4497,7 @@ def register_backlog_course(request): return JsonResponse({'message': 'Adding Backlog Failed ' +str(e)}, status=500) +@login_required(login_url='/accounts/login') def get_current_semester_swayam_course_slots(curr_sem_id): courseslot_list = CourseSlot.objects.filter(semester = curr_sem_id, name__startswith='SW') return courseslot_list diff --git a/FusionIIIT/applications/examination/views.py b/FusionIIIT/applications/examination/views.py index 101c98d9b..c56366400 100644 --- a/FusionIIIT/applications/examination/views.py +++ b/FusionIIIT/applications/examination/views.py @@ -150,6 +150,7 @@ def timetable(request): return render(request, '../templates/examination/timetable.html', {}) +@login_required(login_url='/accounts/login') def browse_announcements(): """ This function is used to browse Announcements Department-Wise @@ -181,6 +182,7 @@ def browse_announcements(): return context +@login_required(login_url='/accounts/login') def get_to_request(username): """ This function is used to get requests for the receiver @@ -193,6 +195,7 @@ def get_to_request(username): return req +@login_required(login_url='/accounts/login') def entergrades(request): course_id = request.GET.get('course') semester_id = request.GET.get('semester') @@ -213,6 +216,7 @@ def entergrades(request): return render(request, 'examination/entergrades.html', context) +@login_required(login_url='/accounts/login') def verifygrades(request): course_id = request.GET.get('course') semester_id = request.GET.get('semester') @@ -227,6 +231,7 @@ def verifygrades(request): return render(request, 'examination/verifygrades.html', context) +@login_required(login_url='/accounts/login') def authenticate(request): # new # Retrieve unique course IDs from hidden_grades unique_course_ids = Student_grades.objects.values('course_id').distinct() @@ -1873,6 +1878,7 @@ def generate_result(request): return JsonResponse({'error': 'Invalid request method'}, status=405) +@login_required(login_url='/accounts/login') def checkresult(request): des = request.session.get("currentDesignationSelected") if des == "student": @@ -1885,6 +1891,7 @@ def checkresult(request): return render(request, "../templates/examination/check_result.html") +@login_required(login_url='/accounts/login') def grades_report(request): if request.method == 'POST': des = request.session.get("currentDesignationSelected") diff --git a/FusionIIIT/applications/globals/views.py b/FusionIIIT/applications/globals/views.py index 9109d748b..d8fe9d05b 100644 --- a/FusionIIIT/applications/globals/views.py +++ b/FusionIIIT/applications/globals/views.py @@ -1,1325 +1,1329 @@ -from audioop import reverse -import json - -from django.contrib.auth import logout -from django.contrib.auth.decorators import login_required -from django.contrib.auth.models import User -from django.contrib.auth import get_user_model -from django.core.files.storage import FileSystemStorage -from django.db.models import Q -from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound -from django.shortcuts import get_object_or_404, redirect, render -from django.conf import settings -from django.utils import timezone -from PIL import Image - -from applications.academic_information.models import Student -from applications.globals.forms import IssueForm, WebFeedbackForm -from applications.globals.models import (ExtraInfo, Feedback, HoldsDesignation, - Issue, IssueImage, DepartmentInfo,ModuleAccess) -from applications.gymkhana.views import coordinator_club -from applications.placement_cell.forms import (AddAchievement, AddCourse, - AddEducation, AddExperience, - AddPatent, AddProfile, - AddProject, AddPublication, - AddSkill) -from applications.placement_cell.models import (Achievement, Course, Education, - Experience, Has, Patent, - Project, Publication, Skill, PlacementStatus) -from Fusion.settings.common import LOGIN_URL -from notifications.models import Notification -from .models import * -from applications.hostel_management.models import (HallCaretaker,HallWarden) - - -from django.contrib.auth.views import PasswordResetView -from django.shortcuts import render -from django.utils.timezone import now -from datetime import timedelta -from .models import PasswordResetTracker - -class RateLimitedPasswordResetView(PasswordResetView): - template_name = 'registration/password_reset_form.html' # Customize as needed - - def post(self, request, *args, **kwargs): - email = request.POST.get('email') - if not email: - return self.form_invalid(self.get_form()) # Default behavior for invalid forms - - # Check if the email exists in the tracker table - tracker, created = PasswordResetTracker.objects.get_or_create(email=email) - - # Enforce rate limiting: Check if the reset was within the last 24 hours - if tracker.last_reset and now() - tracker.last_reset < timedelta(days=1): - # Pass error message to the template - return render( - request, - self.template_name, - { - 'form': self.get_form(), # Include the form for re-rendering - 'error_message': "Password can only be reset once every 24 hours.", - }, - ) - - # Update the tracker with the current timestamp - tracker.last_reset = now() - tracker.save() - - # Proceed with the standard password reset process - return super().post(request, *args, **kwargs) - - - -def index(request): - context = {} - if(str(request.user)!="AnonymousUser"): - return HttpResponseRedirect('/dashboard/') - else: - return render(request, "globals/index1.html", context) - -# Reset all passwords to 'user@123' in DEV environment -def reset_all_pass(request): - if settings.ALLOW_PASS_RESET: - UserMod = get_user_model() - arr = UserMod.objects.all() - for e in arr: - print(e.username) - u = User.objects.get(username=e.username) - u.set_password('user@123') - u.save() - context = {"done": len(arr)} - return HttpResponse(json.dumps(context), "application/json") - else: - return HttpResponseNotFound("Not allowed") - - -@login_required(login_url=LOGIN_URL) -def about(request): - teams = { - 'uiTeam': { - 'teamId': "uiTeam", - 'teamName': "Frontend Team", - }, - - 'qaTeam': { - 'teamId': "qaTeam", - 'teamName': "Quality Analysis Team", - }, - - 'academics_a_Team': { - 'teamId': "academics_a_Team", - 'teamName': "Academics (A) Module Team", - }, - - 'academics_b_Team': { - 'teamId': "academics_b_Team", - 'teamName': "Academics (B) Module Team", - }, - - 'spacsTeam': { - 'teamId': "spacsTeam", - 'teamName': "Awards & Scholarship Module Team", - }, - - 'messTeam': { - 'teamId': "messTeam", - 'teamName': "Central Mess Module Team", - }, - - 'complaintTeam': { - 'teamId': "complaintTeam", - 'teamName': "Complaint Module Team", - }, - - 'eisTeam': { - 'teamId': "eisTeam", - 'teamName': "EIS Module Team", - }, - - 'filetrackingTeam': { - 'teamId': "filetrackingTeam", - 'teamName': "File Tracking Module Team", - }, - - 'gymkhanaTeam': { - 'teamId': "gymkhanaTeam", - 'teamName': "Gymkhana Module Team", - }, - - 'leaveTeam': { - 'teamId': "leaveTeam", - 'teamName': "Leave Module Team", - }, - - 'phcTeam': { - 'teamId': "phcTeam", - 'teamName': "Primary Health Center Module Team", - }, - - 'placementTeam': { - 'teamId': "placementTeam", - 'teamName': "Placement Module Team", - }, - - 'vhTeam': { - 'teamId': "vhTeam", - 'teamName': "Visitors Hostel Module Team", - }, - } - - context = {'teams': teams, - 'psgTeam': { - 'dev1': {'devName': 'Anuraag Singh', - 'devImage': 'team/2015043.jpeg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'Head UI Developer' - }, - - 'dev3': {'devName': 'M. Arshad Siddiqui', - 'devImage': 'team/2015153.jpg', - 'devTitle': 'Database Designer' - }, - - 'dev4': {'devName': 'Pranjul Shukla', - 'devImage': 'team/2015325.jpg', - 'devTitle': 'Developer' - }, - - 'dev5': {'devName': 'Saket Patel', - 'devImage': 'team/2015329.jpg', - 'devTitle': 'Head Developer' - }, - }, - - 'uiTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'Head UI Developer' - }, - - 'dev2': {'devName': 'Ravuri Abhignya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'qaTeam': { - 'dev1': {'devName': 'Anuj Upadhaya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Member' - }, - - 'dev2': {'devName': 'Avinash Kumar', - 'devImage': 'team/2015058.jpg', - 'devTitle': 'Head' - }, - - 'dev3': {'devName': 'G. Vijay Ram', - 'devImage': 'team/2015095.jpg', - 'devTitle': 'Member' - }, - }, - - 'academics_a_Team': { - 'dev1': {'devName': 'Anuraag Singh', - 'devImage': 'team/2015043.jpeg', - 'devTitle': '2015043' - }, - - 'dev2': {'devName': 'Achint Mistry', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015009' - }, - - 'dev3': {'devName': 'Harshit Choubey', - 'devImage': 'team/2015103.jpeg', - 'devTitle': '2015103' - }, - - 'dev4': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Rollnum' - }, - }, - - 'academics_b_Team': { - 'dev1': {'devName': 'Mayank Saurabh', - 'devImage': 'team/2015153.jpg', - 'devTitle': 'UI Developer' - }, - - 'dev2': {'devName': 'Narosenla Longkumer', - 'devImage': 'team/2015165.jpg', - 'devTitle': '2015165' - }, - - 'dev3': {'devName': 'Rambha Sirisha', - 'devImage': 'team/2015203.jpg', - 'devTitle': '2015203' - }, - - 'dev4': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - - 'dev5': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - }, - - - 'complaintTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Amresh Kumar Verma', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015027' - }, - - 'dev3': {'devName': 'Rishti Gupta', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015209' - }, - - 'dev4': {'devName': 'Shubham Yadav', - 'devImage': 'team/2015248.jpg', - 'devTitle': '2015248' - }, - - 'dev5': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '' - }, - }, - - 'eisTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Mayank Saurabh', - 'devImage': 'team/2015147.jpg', - 'devTitle': 'UI Developer' - }, - - 'dev3': {'devName': 'M. Arshad Siddiqui', - 'devImage': 'team/2015153.jpg', - 'devTitle': 'Backend Developer' - }, - }, - - 'filetrackingTeam': { - 'dev1': {'devName': 'Mayank Saurabh', - 'devImage': 'team/2015147.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Deepak Chhipa', - 'devImage': 'team/2015076.jpg', - 'devTitle': '2015076' - }, - - 'dev3': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - - 'dev4': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - - 'dev5': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - }, - - 'gymkhanaTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'UI/UX Developer' - }, - }, - - - 'leaveTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Saket Patel', - 'devImage': 'team/2015329.jpg', - 'devTitle': 'Backend Developer' - }, - }, - - 'messTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Ankita Makker', - 'devImage': 'team/2015034.jpg', - 'devTitle': '2015034' - }, - - 'dev3': {'devName': 'K. Venkateshwar Reddy', - 'devImage': 'team/2015117.jpg', - 'devTitle': '2015117' - }, - - 'dev4': {'devName': 'Pratibha Singh', - 'devImage': 'team/2015189.jpg', - 'devTitle': '2015189' - }, - - 'dev5': {'devName': 'Varnika Jain', - 'devImage': 'team/2015268.jpg', - 'devTitle': '2015268' - }, - }, - - 'phcTeam': { - 'dev1': {'devName': 'Ravuri Abhignya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'B. Krishnanjali', - 'devImage': 'team/2015061.jpeg', - 'devTitle': '2015061' - }, - - 'dev3': {'devName': 'K. Jahnavi', - 'devImage': 'team/2015120.jpeg', - 'devTitle': '2015120' - }, - - 'dev4': {'devName': 'K. Sai Srikar', - 'devImage': 'team/2015127.jpg', - 'devTitle': '2015127' - }, - - 'dev5': {'devName': 'Priyanka Agarwal', - 'devImage': 'team/2015192.jpg', - 'devTitle': '2015192' - }, - }, - - - 'placementTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'team/2015121.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Avinash Kumar', - 'devImage': 'team/2015058.jpg', - 'devTitle': '2015058' - }, - - 'dev3': {'devName': 'Arpit Jain', - 'devImage': 'team/2015047.jpg', - 'devTitle': '2015047' - }, - - 'dev4': {'devName': 'Gautam Yadav', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015093' - }, - - 'dev5': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - }, - - 'spacsTeam': { - 'dev1': {'devName': 'Ravuri Abhignya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Atla Shashidhar Reddy', - 'devImage': 'team/2015056.jpeg', - 'devTitle': '2015056' - }, - - 'dev3': {'devName': 'Gopisetti Pramod Kumar', - 'devImage': 'team/2015314.jpg', - 'devTitle': '2015314' - }, - - 'dev4': {'devName': 'Segu Balaji', - 'devImage': 'team/2015335.png', - 'devTitle': '2015335' - }, - - 'dev5': {'devName': '', - 'devImage': 'zlatan.jpg', - 'devTitle': '' - }, - }, - - 'vhTeam': { - 'dev1': {'devName': 'Ravuri Abhignya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev2': {'devName': 'Imdad Ali', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - - 'dev3': {'devName': 'Prashant Shivam', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - - 'dev4': {'devName': 'Riya Goyal', - 'devImage': 'team/2015210.png', - 'devTitle': '2015210' - }, - - 'dev5': {'devName': 'Anuj Upadhyay', - 'devImage': 'zlatan.jpg', - 'devTitle': '2015' - }, - }, - } - return render(request, "globals/about.html", context) - -def login(request): - context = {} - return render(request, "globals/login.html", context) - -def about(request): - - teams = { - - - 'uiTeam': { - 'teamId': "uiTeam", - 'teamName': "UI/UX", - }, - - 'AcademicsTeam': { - 'teamId': "AcademicsTeam", - 'teamName': "Academics Module", - }, - - 'eisTeam': { - 'teamId': "eisTeam", - 'teamName': "EIS Module", - }, - - 'leaveTeam': { - 'teamId': "leaveTeam", - 'teamName': "Leave Module", - }, - - 'CourseManagementTeam': { - 'teamId': "CourseManagementTeam", - 'teamName': "Course Management Module", - }, - - 'complaintTeam': { - 'teamId': "complaintTeam", - 'teamName': "Complaint Module", - }, - - 'CentralMessTeam': { - 'teamId': "CentralMessTeam", - 'teamName': "Mess Module", - }, - - 'PlacementTeam': { - 'teamId': "PlacementTeam", - 'teamName': "Placement Module", - }, - - 'ScholarshipTeam': { - 'teamId': "ScholarshipTeam", - 'teamName': "Awards and Scholarship Module", - }, - } - - context = {'teams': teams, - 'psgTeam': { - 'dev1': {'devName': 'Anuraag Singh', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Kanishka Munshi', - 'devImage': 'zlatan.jpg', - 'devTitle': 'UI/UX Developer' - }, - - 'dev3': {'devName': 'M. Arshad Siddiqui', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Database Designer' - }, - - 'dev4': {'devName': 'Pranjul Shukla', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev5': {'devName': 'Saket Patel', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - 'AcademicsTeam': { - 'dev1': {'devName': 'Anuraag Singh', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Steering Group' - }, - - 'dev2': {'devName': 'Achint Mistri', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev3': {'devName': 'Harshit Choubey', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev4': {'devName': 'Narosena Longkumar', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - 'uiTeam': { - 'dev1': {'devName': 'Kanishka Munshi', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Head UI Developer' - }, - - 'dev2': {'devName': 'Mayank Saurabh', - 'devImage': 'zlatan.jpg', - 'devTitle': 'UI Developer' - }, - - 'dev3': {'devName': 'Ravuri Abhignya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'UI Developer' - }, - }, - - 'complaintTeam': { - 'dev1': {'devName': 'Saksham Agarwal', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Rishti Gupta', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev3': {'devName': 'Shubham Yadav', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev4': {'devName': 'Amresh Kumar Verma', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - 'eisTeam': { - - 'dev1': {'devName': 'M. Arshad Siddiqui', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'leaveTeam': { - 'dev1': {'devName': 'Pranjul Shukla', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Saket Patel', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'CentralMessTeam': { - 'dev1': {'devName': 'Ankita Makker', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Vernika Jain', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'PlacementTeam': { - 'dev1': {'devName': 'Arpit Jain', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Gautam Yadav', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'ComplaintTeam': { - 'dev1': {'devName': 'Srigari Avilash Kumar', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'NakulArya', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'ScholarshipTeam': { - 'dev1': {'devName': 'Segu Balaji', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'M. Shrisha', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev3': {'devName': 'Atla Shashidar Reddy', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - - 'CourseManagementTeam': { - 'dev1': {'devName': 'Animesh Pandey', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - - 'dev2': {'devName': 'Paras Rastogi', - 'devImage': 'zlatan.jpg', - 'devTitle': 'Developer' - }, - }, - } - return render(request, "globals/about.html", context) - -@login_required(login_url=LOGIN_URL) -def dashboard(request): - # cse_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'CSE')) - # ece_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'ECE')) - # me_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'ME')) - # des_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'Design')) - # ns_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'Natural Science')) - # cse_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'CSE')) - # ece_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'ECE')) - # me_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'ME')) - # des_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'Design')) - # ns_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'Natural Science')) - # students_2017 = Student.objects.filter(batch = 2017) - # students_2016 = Student.objects.filter(batch = 2016) - # students_2015 = Student.objects.filter(batch = 2015) - # students_2019 = Student.objects.filter(batch = 2019) - # students_2018 = Student.objects.filter(batch = 2018) - # data = {'cse': cse_faculty, - # 'ece': ece_faculty, - # 'me': me_faculty, - # 'des': des_faculty, - # 'ns': ns_faculty, - # 'students_2019': students_2019, - # 'students_2018': students_2018, - # 'students_2017': students_2017, - # 'students_2016': students_2016, - # 'students_2015': students_2015} - user=request.user - notifs=request.user.notifications.all() - name = request.user.first_name +"_"+ request.user.last_name - desig = list(HoldsDesignation.objects.select_related('user','working','designation').all().filter(working = request.user).values_list('designation')) - b = [i for sub in desig for i in sub] - design = HoldsDesignation.objects.select_related('user','designation').filter(working=request.user) - - designation=[] - for i in design: - designation.append(str(i.designation)) - - roll_ = [] - for i in b : - name_ = get_object_or_404(Designation, id = i) - roll_.append(str(name_.name)) - - hall_caretakers = HallCaretaker.objects.all().select_related() - hall_wardens = HallWarden.objects.all().select_related() - - hall_caretaker_user = [] - for caretaker in hall_caretakers: - hall_caretaker_user.append(caretaker.staff.id.user) - - hall_warden_user = [] - for warden in hall_wardens: - hall_warden_user.append(warden.faculty.id.user) - print("modules are") - print(request.session.get('moduleAccessRights')) - context={ - 'notifications':notifs, - 'Curr_desig' : roll_, - 'club_details' : coordinator_club(request), - 'designation' : designation, - 'hall_caretaker': hall_caretaker_user, - 'hall_warden': hall_warden_user, - - } - # a=HoldsDesignation.objects.select_related('user','working','designation').filter(designation = user) - print(context) - print(type(user.extrainfo.user_type)) - if(request.user.get_username() == 'director'): - return render(request, "dashboard/director_dashboard2.html", {}) - elif( "dean_rspc" in designation): - return render(request, "dashboard/dashboard.html", context) - elif user.extrainfo.user_type != "student": - print ("inside") - designat = HoldsDesignation.objects.select_related().filter(user=user) - response = {'designat':designat} - context.update(response) - return render(request, "dashboard/dashboard.html", context) - else: - print ("inside2") - - return render(request, "dashboard/dashboard.html", context) - - -@login_required(login_url=LOGIN_URL) -def profile(request, username=None): - """ - Generic endpoint for views. - If it's a faculty, redirects to /eis/profile/* - If it's a student, displays the profile. - If the department is 'department: Academics:, redirects to /aims/ - Otherwise, redirects to root - - Args: - username: Username of the user. If None, - displays the profile of currently logged-in user - """ - - - - user = get_object_or_404(User, Q(username=username)) if username else request.user - editable = request.user == user - print("editable",editable) - profile = get_object_or_404(ExtraInfo, Q(user=user)) - print("profile",profile) - if(str(user.extrainfo.user_type)=='faculty'): - print("profile") - return HttpResponseRedirect('/eis/profile/' + (username if username else '')) - if(str(user.extrainfo.department)=='department: Academics'): - print("profile2") - return HttpResponseRedirect('/aims') - - array = [ - "student", - "CC convenor", - "Mechatronic convenor", - "mess_committee", - "mess_convener", - "alumini", - "Electrical_AE", - "Electrical_JE", - "Civil_AE", - "Civil_JE", - "co-ordinator", - "co co-ordinator", - "Convenor", - "Convener", - "cc1convener", - "CC2 convener", - "mess_convener_mess2", - "mess_committee_mess2" -] - - # queryset = HoldsDesignation.objects.select_related('user','working','designation').filter(Q(working=user)) - - # for obj in queryset: - # designation_name = obj.designation.name - # print("designation_name",designation_name) - - # design = False - # if designation_name in array: - # design = True - # print("design",design) - # print("designation_name",designation_name) - # if design: - # current = HoldsDesignation.objects.select_relapted('user','working','designation').filter(Q(working=user, designation__name=designation_name)) - # for obj in current: - # obj.designation.name = obj.designation.name.replace(designation_name, 'student') - - designation_name = "" - design = False - - current = HoldsDesignation.objects.select_related('user', 'working', 'designation').filter(Q(working=user)) - - for obj in current: - designation_name = obj.designation.name - if designation_name in array: - design = True - break - - if design: - current = HoldsDesignation.objects.filter(working=user, designation__name=designation_name) - for obj in current: - obj.designation.name = obj.designation.name.replace(designation_name, 'student') - - print(user.extrainfo.user_type) - print("current",current) - if current: - print("profile3") - student = get_object_or_404(Student, Q(id=profile.id)) - print("student",student) - if editable and request.method == 'POST': - if 'studentapprovesubmit' in request.POST: - status = PlacementStatus.objects.select_related('notify_id','unique_id__id__user','unique_id__id__department').filter(pk=request.POST['studentapprovesubmit']).update(invitation='ACCEPTED', timestamp=timezone.now()) - if 'studentdeclinesubmit' in request.POST: - status = PlacementStatus.objects.select_related('notify_id','unique_id__id__user','unique_id__id__department').filter(Q(pk=request.POST['studentdeclinesubmit'])).update(invitation='REJECTED', timestamp=timezone.now()) - if 'educationsubmit' in request.POST: - form = AddEducation(request.POST) - if form.is_valid(): - institute = form.cleaned_data['institute'] - degree = form.cleaned_data['degree'] - grade = form.cleaned_data['grade'] - stream = form.cleaned_data['stream'] - sdate = form.cleaned_data['sdate'] - edate = form.cleaned_data['edate'] - education_obj = Education.objects.create(unique_id=student, degree=degree, - grade=grade, institute=institute, - stream=stream, sdate=sdate, edate=edate) - education_obj.save() - if 'profilesubmit' in request.POST: - about_me = request.POST.get('about') - age = request.POST.get('age') - address = request.POST.get('address') - contact = request.POST.get('contact') - extrainfo_obj = ExtraInfo.objects.select_related('user','department').get(user=user) - extrainfo_obj.about_me = about_me - extrainfo_obj.date_of_birth = age - extrainfo_obj.address = address - extrainfo_obj.phone_no = contact - extrainfo_obj.save() - profile = get_object_or_404(ExtraInfo, Q(user=user)) - if 'picsubmit' in request.POST: - form = AddProfile(request.POST, request.FILES) - extrainfo_obj = ExtraInfo.objects.select_related('user','department').get(user=user) - extrainfo_obj.profile_picture = form.cleaned_data["pic"] - extrainfo_obj.save() - if 'skillsubmit' in request.POST: - form = AddSkill(request.POST) - if form.is_valid(): - skill = form.cleaned_data['skill'] - skill_rating = form.cleaned_data['skill_rating'] - try: - skill_id = Skill.objects.get(skill=skill) - except Exception as e: - skill_id = Skill.objects.create(skill=skill) - skill_id.save() - has_obj = Has.objects.create(unique_id=student, - skill_id=skill_id, - skill_rating = skill_rating) - has_obj.save() - if 'achievementsubmit' in request.POST: - form = AddAchievement(request.POST) - if form.is_valid(): - achievement = form.cleaned_data['achievement'] - achievement_type = form.cleaned_data['achievement_type'] - description = form.cleaned_data['description'] - issuer = form.cleaned_data['issuer'] - date_earned = form.cleaned_data['date_earned'] - achievement_obj = Achievement.objects.create(unique_id=student, - achievement=achievement, - achievement_type=achievement_type, - description=description, - issuer=issuer, - date_earned=date_earned) - achievement_obj.save() - if 'publicationsubmit' in request.POST: - form = AddPublication(request.POST) - if form.is_valid(): - publication_title = form.cleaned_data['publication_title'] - description = form.cleaned_data['description'] - publisher = form.cleaned_data['publisher'] - publication_date = form.cleaned_data['publication_date'] - publication_obj = Publication.objects.create(unique_id=student, - publication_title= - publication_title, - publisher=publisher, - description=description, - publication_date=publication_date) - publication_obj.save() - if 'patentsubmit' in request.POST: - form = AddPatent(request.POST) - if form.is_valid(): - patent_name = form.cleaned_data['patent_name'] - description = form.cleaned_data['description'] - patent_office = form.cleaned_data['patent_office'] - patent_date = form.cleaned_data['patent_date'] - patent_obj = Patent.objects.create(unique_id=student, patent_name=patent_name, - patent_office=patent_office, - description=description, - patent_date=patent_date) - patent_obj.save() - if 'coursesubmit' in request.POST: - form = AddCourse(request.POST) - if form.is_valid(): - course_name = form.cleaned_data['course_name'] - description = form.cleaned_data['description'] - license_no = form.cleaned_data['license_no'] - sdate = form.cleaned_data['sdate'] - edate = form.cleaned_data['edate'] - course_obj = Course.objects.create(unique_id=student, course_name=course_name, - license_no=license_no, - description=description, - sdate=sdate, edate=edate) - course_obj.save() - if 'projectsubmit' in request.POST: - form = AddProject(request.POST) - if form.is_valid(): - project_name = form.cleaned_data['project_name'] - project_status = form.cleaned_data['project_status'] - summary = form.cleaned_data['summary'] - project_link = form.cleaned_data['project_link'] - sdate = form.cleaned_data['sdate'] - edate = form.cleaned_data['edate'] - project_obj = Project.objects.create(unique_id=student, summary=summary, - project_name=project_name, - project_status=project_status, - project_link=project_link, - sdate=sdate, edate=edate) - project_obj.save() - if 'experiencesubmit' in request.POST: - form = AddExperience(request.POST) - if form.is_valid(): - title = form.cleaned_data['title'] - status = form.cleaned_data['status'] - company = form.cleaned_data['company'] - location = form.cleaned_data['location'] - description = form.cleaned_data['description'] - sdate = form.cleaned_data['sdate'] - edate = form.cleaned_data['edate'] - experience_obj = Experience.objects.create(unique_id=student, title=title, - company=company, location=location, - status=status, - description=description, - sdate=sdate, edate=edate) - experience_obj.save() - if 'deleteskill' in request.POST: - hid = request.POST['deleteskill'] - hs = Has.objects.select_related('skill_id','unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deleteedu' in request.POST: - hid = request.POST['deleteedu'] - hs = Education.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deletecourse' in request.POST: - hid = request.POST['deletecourse'] - hs = Course.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deleteexp' in request.POST: - hid = request.POST['deleteexp'] - hs = Experience.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deletepro' in request.POST: - hid = request.POST['deletepro'] - hs = Project.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deleteach' in request.POST: - hid = request.POST['deleteach'] - hs = Achievement.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deletepub' in request.POST: - hid = request.POST['deletepub'] - hs = Publication.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - if 'deletepat' in request.POST: - hid = request.POST['deletepat'] - hs = Patent.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) - hs.delete() - - form = AddEducation(initial={}) - form1 = AddProfile(initial={}) - form10 = AddSkill(initial={}) - form11 = AddCourse(initial={}) - form12 = AddAchievement(initial={}) - form5 = AddPublication(initial={}) - form6 = AddProject(initial={}) - form7 = AddPatent(initial={}) - form8 = AddExperience(initial={}) - form14 = AddProfile() - skills = Has.objects.select_related('skill_id','unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - education = Education.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - course = Course.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - experience = Experience.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - project = Project.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - achievement = Achievement.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - publication = Publication.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - patent = Patent.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) - context = {'user': user, 'profile': profile, 'skills': skills, - 'educations': education, 'courses': course, 'experiences': experience, - 'projects': project, 'achievements': achievement, 'publications': publication, - 'patent': patent, 'form': form, 'form1': form1, 'form14': form14, - 'form5': form5, 'form6': form6, 'form7': form7, 'form8': form8, - 'form10':form10, 'form11':form11, 'form12':form12, 'current':current, - 'editable': editable - } - if 'skillsubmit' in request.POST or 'deleteskill' in request.POST: - return render(request, "globals/student_profile2.html", context) - if 'coursesubmit' in request.POST or 'educationsubmit' in request.POST or 'deleteedu' in request.POST or 'deletecourse' in request.POST: - return render(request, "globals/student_profile3.html", context) - if 'experiencesubmit' in request.POST or 'projectsubmit' in request.POST or 'deleteexp' in request.POST or 'deletepro' in request.POST: - return render(request, "globals/student_profile4.html", context) - if 'achievementsubmit' in request.POST or 'deleteach' in request.POST: - return render(request, "globals/student_profile5.html", context) - # print("context",context) - return render(request, "globals/student_profile.html", context) - else: - return redirect("/") - -@login_required(login_url=LOGIN_URL) -def logout_view(request): - logout(request) - return redirect("/") - - -""" Views for Feedback and Issue reports """ - - -@login_required(login_url=LOGIN_URL) -def feedback(request): - feeds = Feedback.objects.select_related('user').all().order_by("rating").exclude(user=request.user) - if feeds.count() > 5: - feeds = feeds[:5] - rated = [] - for feed in feeds: - rated.append(range(feed.rating)) - feeds = zip(feeds, rated) - if request.method == "POST": - try: - feedback = Feedback.objects.select_related('user').get(user=request.user) - except Exception as e: - feedback = None - if feedback: - form = WebFeedbackForm(request.POST or None, instance=feedback) - else: - form = WebFeedbackForm(request.POST or None) - feedback = form.save(commit=False) - user_rating = request.POST.get("rating") - feedback.user = request.user - if int(user_rating) > 0 and int(user_rating) < 6: - feedback.rating = user_rating - feedback.save() - form = WebFeedbackForm(instance=feedback) - stars = [] - for i in range(0, int(feedback.rating)): - stars.append(1) - rating = 0 - for feed in Feedback.objects.all(): - rating = rating + feed.rating - if Feedback.objects.all().count() > 0: - rating = round(rating/Feedback.objects.all().count(),1) - context = { - 'form': form, - "feedback": feedback, - 'rating': rating, - "stars": stars, - "reviewed": True, - "feeds": feeds - } - return render(request, "globals/feedback.html", context) - rating = 0 - for feed in Feedback.objects.all(): - rating = rating + feed.rating - if Feedback.objects.all().count() > 0: - rating = round(rating/Feedback.objects.all().count(),1) - try: - feedback = Feedback.objects.select_related('user').get(user=request.user) - form = WebFeedbackForm(instance=feedback) - except Exception as e: - form = WebFeedbackForm() - context = {"form": form, "rating": rating, "feeds": feeds} - return render(request, "globals/feedback.html", context) - stars = [] - for i in range(0, int(feedback.rating)): - stars.append(1) - context = { - "rating": rating, - "feedback": feedback, - "stars": stars, - "form": form, - "reviewed": True, - "feeds": feeds - } - return render(request, "globals/feedback.html", context) - - -@login_required(login_url=LOGIN_URL) -def issue(request): - if request.method == "POST": - form = IssueForm(request.POST or None) - if form.is_valid(): - issue = form.save(commit=False) - issue.user = request.user - issue.save() - for image in request.FILES.getlist('images'): - try: - Image.open(image) - image = IssueImage.objects.create(image=image, user=request.user) - issue.images.add(image) - except Exception as e: - pass - issue.save() - openissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=False) - closedissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=True) - form = IssueForm() - context = {"form": form, "openissue": openissue, "closedissue": closedissue, } - return render(request, "globals/issue.html", context) - openissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=False) - closedissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=True) - form = IssueForm(request.POST) - context = {"form": form, "openissue": openissue, "closedissue": closedissue, } - return render(request, "globals/issue.html", context) - openissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=False) - closedissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=True) - form = IssueForm() - context = {"form": form, "openissue": openissue, "closedissue": closedissue, } - return render(request, "globals/issue.html", context) - - -@login_required(login_url=LOGIN_URL) -def view_issue(request, id): - if request.method == "POST": - issue = get_object_or_404(Issue, id=id, user=request.user) - form = IssueForm(request.POST or None, instance=issue) - if form.is_valid(): - issue.save() - remove = request.POST.get("remove-images") - if remove: - for img in issue.images.all(): - img.delete() - for image in request.FILES.getlist('images'): - try: - Image.open(image) - image = IssueImage.objects.create(image=image, user=request.user) - issue.images.add(image) - except Exception as e: - pass - issue.save() - form = IssueForm(instance=issue) - context = { - "form": form, - "issue": issue, - } - return render(request, "globals/view_issue.html", context) - form = IssueForm(request.POST or None) - context = { - "form": form, - "issue": issue, - } - return render(request, "globals/view_issue.html", context) - issue = get_object_or_404(Issue, id=id) - form = None - if request.user == issue.user: - form = IssueForm(instance=issue) - context = { - "form": form, - "issue": issue, - } - return render(request, "globals/view_issue.html", context) - - -@login_required(login_url=LOGIN_URL) -def support_issue(request, id): - issue = get_object_or_404(Issue, id=id) - supported = True - if request.user in issue.support.all(): - issue.support.remove(request.user) - supported = False - else: - issue.support.add(request.user) - support_count = issue.support.all().count() - context = { - "supported": supported, - "support_count": support_count, - } - return HttpResponse(json.dumps(context), "application/json") - -@login_required(login_url=LOGIN_URL) -def search(request): - """ - Search endpoint. - Renders search results populated with results from 'q' GET query. - If length of the query is less than 3 or no results are found, shows a - helpful message instead. - Algorithm: Includes the first 15 users whose first/last name starts with the query words. - Thus, searching 'Atu Gu' will return 'Atul Gupta' as one result. - - Note: All the words in the query must be matched. - While, searching 'Atul Kumar', the word 'Kumar' won't match either 'Atul' or 'Gupta' - and thus it won't be included in the search results. - """ - key = request.GET['q'] - if len(key) < 3: - return render(request, "globals/search.html", {'sresults': ()}) - words = (w.strip() for w in key.split()) - name_q = Q() - for token in words: - name_q = name_q & (Q(first_name__icontains=token) | Q(last_name__icontains=token))#search constraints - search_results = User.objects.filter(name_q)[:15] - if len(search_results) == 0: - search_results = [] - context = {'sresults':search_results} - return render(request, "globals/search.html", context), - -@login_required(login_url=LOGIN_URL) -def update_global_variable(request): - if request.method == 'POST': - selected_option = request.POST.get('dropdown') - request.session['currentDesignationSelected'] = selected_option - module_access = ModuleAccess.objects.filter(designation=selected_option).first() - if module_access: - access_rights = {} - - field_names = [field.name for field in ModuleAccess._meta.get_fields() if field.name not in ['id', 'designation']] - - for field_name in field_names: - access_rights[field_name] = getattr(module_access, field_name) - - request.session['moduleAccessRights'] = access_rights - - print(selected_option) - print(request.session['currentDesignationSelected']) - return HttpResponseRedirect('/dashboard') - # Redirect to home if not a POST request or some issue occurs +from audioop import reverse +import json + +from django.contrib.auth import logout +from django.contrib.auth.decorators import login_required +from django.contrib.auth.models import User +from django.contrib.auth import get_user_model +from django.core.files.storage import FileSystemStorage +from django.db.models import Q +from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound +from django.shortcuts import get_object_or_404, redirect, render +from django.conf import settings +from django.utils import timezone +from PIL import Image + +from applications.academic_information.models import Student +from applications.globals.forms import IssueForm, WebFeedbackForm +from applications.globals.models import (ExtraInfo, Feedback, HoldsDesignation, + Issue, IssueImage, DepartmentInfo,ModuleAccess) +from applications.gymkhana.views import coordinator_club +from applications.placement_cell.forms import (AddAchievement, AddCourse, + AddEducation, AddExperience, + AddPatent, AddProfile, + AddProject, AddPublication, + AddSkill) +from applications.placement_cell.models import (Achievement, Course, Education, + Experience, Has, Patent, + Project, Publication, Skill, PlacementStatus) +from Fusion.settings.common import LOGIN_URL +from notifications.models import Notification +from .models import * +from applications.hostel_management.models import (HallCaretaker,HallWarden) + + +from django.contrib.auth.views import PasswordResetView +from django.shortcuts import render +from django.utils.timezone import now +from datetime import timedelta +from .models import PasswordResetTracker + +class RateLimitedPasswordResetView(PasswordResetView): + template_name = 'registration/password_reset_form.html' # Customize as needed + + def post(self, request, *args, **kwargs): + email = request.POST.get('email') + if not email: + return self.form_invalid(self.get_form()) # Default behavior for invalid forms + + # Check if the email exists in the tracker table + tracker, created = PasswordResetTracker.objects.get_or_create(email=email) + + # Enforce rate limiting: Check if the reset was within the last 24 hours + if tracker.last_reset and now() - tracker.last_reset < timedelta(days=1): + # Pass error message to the template + return render( + request, + self.template_name, + { + 'form': self.get_form(), # Include the form for re-rendering + 'error_message': "Password can only be reset once every 24 hours.", + }, + ) + + # Update the tracker with the current timestamp + tracker.last_reset = now() + tracker.save() + + # Proceed with the standard password reset process + return super().post(request, *args, **kwargs) + + + +@login_required(login_url='/accounts/login') +def index(request): + context = {} + if(str(request.user)!="AnonymousUser"): + return HttpResponseRedirect('/dashboard/') + else: + return render(request, "globals/index1.html", context) + +# Reset all passwords to 'user@123' in DEV environment +@login_required(login_url='/accounts/login') +def reset_all_pass(request): + if settings.ALLOW_PASS_RESET: + UserMod = get_user_model() + arr = UserMod.objects.all() + for e in arr: + print(e.username) + u = User.objects.get(username=e.username) + u.set_password('user@123') + u.save() + context = {"done": len(arr)} + return HttpResponse(json.dumps(context), "application/json") + else: + return HttpResponseNotFound("Not allowed") + + +@login_required(login_url=LOGIN_URL) +def about(request): + teams = { + 'uiTeam': { + 'teamId': "uiTeam", + 'teamName': "Frontend Team", + }, + + 'qaTeam': { + 'teamId': "qaTeam", + 'teamName': "Quality Analysis Team", + }, + + 'academics_a_Team': { + 'teamId': "academics_a_Team", + 'teamName': "Academics (A) Module Team", + }, + + 'academics_b_Team': { + 'teamId': "academics_b_Team", + 'teamName': "Academics (B) Module Team", + }, + + 'spacsTeam': { + 'teamId': "spacsTeam", + 'teamName': "Awards & Scholarship Module Team", + }, + + 'messTeam': { + 'teamId': "messTeam", + 'teamName': "Central Mess Module Team", + }, + + 'complaintTeam': { + 'teamId': "complaintTeam", + 'teamName': "Complaint Module Team", + }, + + 'eisTeam': { + 'teamId': "eisTeam", + 'teamName': "EIS Module Team", + }, + + 'filetrackingTeam': { + 'teamId': "filetrackingTeam", + 'teamName': "File Tracking Module Team", + }, + + 'gymkhanaTeam': { + 'teamId': "gymkhanaTeam", + 'teamName': "Gymkhana Module Team", + }, + + 'leaveTeam': { + 'teamId': "leaveTeam", + 'teamName': "Leave Module Team", + }, + + 'phcTeam': { + 'teamId': "phcTeam", + 'teamName': "Primary Health Center Module Team", + }, + + 'placementTeam': { + 'teamId': "placementTeam", + 'teamName': "Placement Module Team", + }, + + 'vhTeam': { + 'teamId': "vhTeam", + 'teamName': "Visitors Hostel Module Team", + }, + } + + context = {'teams': teams, + 'psgTeam': { + 'dev1': {'devName': 'Anuraag Singh', + 'devImage': 'team/2015043.jpeg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'Head UI Developer' + }, + + 'dev3': {'devName': 'M. Arshad Siddiqui', + 'devImage': 'team/2015153.jpg', + 'devTitle': 'Database Designer' + }, + + 'dev4': {'devName': 'Pranjul Shukla', + 'devImage': 'team/2015325.jpg', + 'devTitle': 'Developer' + }, + + 'dev5': {'devName': 'Saket Patel', + 'devImage': 'team/2015329.jpg', + 'devTitle': 'Head Developer' + }, + }, + + 'uiTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'Head UI Developer' + }, + + 'dev2': {'devName': 'Ravuri Abhignya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'qaTeam': { + 'dev1': {'devName': 'Anuj Upadhaya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Member' + }, + + 'dev2': {'devName': 'Avinash Kumar', + 'devImage': 'team/2015058.jpg', + 'devTitle': 'Head' + }, + + 'dev3': {'devName': 'G. Vijay Ram', + 'devImage': 'team/2015095.jpg', + 'devTitle': 'Member' + }, + }, + + 'academics_a_Team': { + 'dev1': {'devName': 'Anuraag Singh', + 'devImage': 'team/2015043.jpeg', + 'devTitle': '2015043' + }, + + 'dev2': {'devName': 'Achint Mistry', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015009' + }, + + 'dev3': {'devName': 'Harshit Choubey', + 'devImage': 'team/2015103.jpeg', + 'devTitle': '2015103' + }, + + 'dev4': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Rollnum' + }, + }, + + 'academics_b_Team': { + 'dev1': {'devName': 'Mayank Saurabh', + 'devImage': 'team/2015153.jpg', + 'devTitle': 'UI Developer' + }, + + 'dev2': {'devName': 'Narosenla Longkumer', + 'devImage': 'team/2015165.jpg', + 'devTitle': '2015165' + }, + + 'dev3': {'devName': 'Rambha Sirisha', + 'devImage': 'team/2015203.jpg', + 'devTitle': '2015203' + }, + + 'dev4': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + + 'dev5': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + }, + + + 'complaintTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Amresh Kumar Verma', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015027' + }, + + 'dev3': {'devName': 'Rishti Gupta', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015209' + }, + + 'dev4': {'devName': 'Shubham Yadav', + 'devImage': 'team/2015248.jpg', + 'devTitle': '2015248' + }, + + 'dev5': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '' + }, + }, + + 'eisTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Mayank Saurabh', + 'devImage': 'team/2015147.jpg', + 'devTitle': 'UI Developer' + }, + + 'dev3': {'devName': 'M. Arshad Siddiqui', + 'devImage': 'team/2015153.jpg', + 'devTitle': 'Backend Developer' + }, + }, + + 'filetrackingTeam': { + 'dev1': {'devName': 'Mayank Saurabh', + 'devImage': 'team/2015147.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Deepak Chhipa', + 'devImage': 'team/2015076.jpg', + 'devTitle': '2015076' + }, + + 'dev3': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + + 'dev4': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + + 'dev5': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + }, + + 'gymkhanaTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'UI/UX Developer' + }, + }, + + + 'leaveTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Saket Patel', + 'devImage': 'team/2015329.jpg', + 'devTitle': 'Backend Developer' + }, + }, + + 'messTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Ankita Makker', + 'devImage': 'team/2015034.jpg', + 'devTitle': '2015034' + }, + + 'dev3': {'devName': 'K. Venkateshwar Reddy', + 'devImage': 'team/2015117.jpg', + 'devTitle': '2015117' + }, + + 'dev4': {'devName': 'Pratibha Singh', + 'devImage': 'team/2015189.jpg', + 'devTitle': '2015189' + }, + + 'dev5': {'devName': 'Varnika Jain', + 'devImage': 'team/2015268.jpg', + 'devTitle': '2015268' + }, + }, + + 'phcTeam': { + 'dev1': {'devName': 'Ravuri Abhignya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'B. Krishnanjali', + 'devImage': 'team/2015061.jpeg', + 'devTitle': '2015061' + }, + + 'dev3': {'devName': 'K. Jahnavi', + 'devImage': 'team/2015120.jpeg', + 'devTitle': '2015120' + }, + + 'dev4': {'devName': 'K. Sai Srikar', + 'devImage': 'team/2015127.jpg', + 'devTitle': '2015127' + }, + + 'dev5': {'devName': 'Priyanka Agarwal', + 'devImage': 'team/2015192.jpg', + 'devTitle': '2015192' + }, + }, + + + 'placementTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'team/2015121.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Avinash Kumar', + 'devImage': 'team/2015058.jpg', + 'devTitle': '2015058' + }, + + 'dev3': {'devName': 'Arpit Jain', + 'devImage': 'team/2015047.jpg', + 'devTitle': '2015047' + }, + + 'dev4': {'devName': 'Gautam Yadav', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015093' + }, + + 'dev5': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + }, + + 'spacsTeam': { + 'dev1': {'devName': 'Ravuri Abhignya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Atla Shashidhar Reddy', + 'devImage': 'team/2015056.jpeg', + 'devTitle': '2015056' + }, + + 'dev3': {'devName': 'Gopisetti Pramod Kumar', + 'devImage': 'team/2015314.jpg', + 'devTitle': '2015314' + }, + + 'dev4': {'devName': 'Segu Balaji', + 'devImage': 'team/2015335.png', + 'devTitle': '2015335' + }, + + 'dev5': {'devName': '', + 'devImage': 'zlatan.jpg', + 'devTitle': '' + }, + }, + + 'vhTeam': { + 'dev1': {'devName': 'Ravuri Abhignya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev2': {'devName': 'Imdad Ali', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + + 'dev3': {'devName': 'Prashant Shivam', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + + 'dev4': {'devName': 'Riya Goyal', + 'devImage': 'team/2015210.png', + 'devTitle': '2015210' + }, + + 'dev5': {'devName': 'Anuj Upadhyay', + 'devImage': 'zlatan.jpg', + 'devTitle': '2015' + }, + }, + } + return render(request, "globals/about.html", context) + +@login_required(login_url='/accounts/login') +def login(request): + context = {} + return render(request, "globals/login.html", context) + +@login_required(login_url='/accounts/login') +def about(request): + + teams = { + + + 'uiTeam': { + 'teamId': "uiTeam", + 'teamName': "UI/UX", + }, + + 'AcademicsTeam': { + 'teamId': "AcademicsTeam", + 'teamName': "Academics Module", + }, + + 'eisTeam': { + 'teamId': "eisTeam", + 'teamName': "EIS Module", + }, + + 'leaveTeam': { + 'teamId': "leaveTeam", + 'teamName': "Leave Module", + }, + + 'CourseManagementTeam': { + 'teamId': "CourseManagementTeam", + 'teamName': "Course Management Module", + }, + + 'complaintTeam': { + 'teamId': "complaintTeam", + 'teamName': "Complaint Module", + }, + + 'CentralMessTeam': { + 'teamId': "CentralMessTeam", + 'teamName': "Mess Module", + }, + + 'PlacementTeam': { + 'teamId': "PlacementTeam", + 'teamName': "Placement Module", + }, + + 'ScholarshipTeam': { + 'teamId': "ScholarshipTeam", + 'teamName': "Awards and Scholarship Module", + }, + } + + context = {'teams': teams, + 'psgTeam': { + 'dev1': {'devName': 'Anuraag Singh', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Kanishka Munshi', + 'devImage': 'zlatan.jpg', + 'devTitle': 'UI/UX Developer' + }, + + 'dev3': {'devName': 'M. Arshad Siddiqui', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Database Designer' + }, + + 'dev4': {'devName': 'Pranjul Shukla', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev5': {'devName': 'Saket Patel', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + 'AcademicsTeam': { + 'dev1': {'devName': 'Anuraag Singh', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Steering Group' + }, + + 'dev2': {'devName': 'Achint Mistri', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev3': {'devName': 'Harshit Choubey', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev4': {'devName': 'Narosena Longkumar', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + 'uiTeam': { + 'dev1': {'devName': 'Kanishka Munshi', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Head UI Developer' + }, + + 'dev2': {'devName': 'Mayank Saurabh', + 'devImage': 'zlatan.jpg', + 'devTitle': 'UI Developer' + }, + + 'dev3': {'devName': 'Ravuri Abhignya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'UI Developer' + }, + }, + + 'complaintTeam': { + 'dev1': {'devName': 'Saksham Agarwal', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Rishti Gupta', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev3': {'devName': 'Shubham Yadav', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev4': {'devName': 'Amresh Kumar Verma', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + 'eisTeam': { + + 'dev1': {'devName': 'M. Arshad Siddiqui', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'leaveTeam': { + 'dev1': {'devName': 'Pranjul Shukla', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Saket Patel', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'CentralMessTeam': { + 'dev1': {'devName': 'Ankita Makker', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Vernika Jain', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'PlacementTeam': { + 'dev1': {'devName': 'Arpit Jain', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Gautam Yadav', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'ComplaintTeam': { + 'dev1': {'devName': 'Srigari Avilash Kumar', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'NakulArya', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'ScholarshipTeam': { + 'dev1': {'devName': 'Segu Balaji', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'M. Shrisha', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev3': {'devName': 'Atla Shashidar Reddy', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + + 'CourseManagementTeam': { + 'dev1': {'devName': 'Animesh Pandey', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + + 'dev2': {'devName': 'Paras Rastogi', + 'devImage': 'zlatan.jpg', + 'devTitle': 'Developer' + }, + }, + } + return render(request, "globals/about.html", context) + +@login_required(login_url=LOGIN_URL) +def dashboard(request): + # cse_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'CSE')) + # ece_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'ECE')) + # me_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'ME')) + # des_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'Design')) + # ns_faculty = ExtraInfo.objects.filter(user_type = 'faculty', department = DepartmentInfo.objects.get(name = 'Natural Science')) + # cse_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'CSE')) + # ece_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'ECE')) + # me_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'ME')) + # des_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'Design')) + # ns_students = ExtraInfo.objects.filter(user_type = 'student', department = DepartmentInfo.objects.get(name = 'Natural Science')) + # students_2017 = Student.objects.filter(batch = 2017) + # students_2016 = Student.objects.filter(batch = 2016) + # students_2015 = Student.objects.filter(batch = 2015) + # students_2019 = Student.objects.filter(batch = 2019) + # students_2018 = Student.objects.filter(batch = 2018) + # data = {'cse': cse_faculty, + # 'ece': ece_faculty, + # 'me': me_faculty, + # 'des': des_faculty, + # 'ns': ns_faculty, + # 'students_2019': students_2019, + # 'students_2018': students_2018, + # 'students_2017': students_2017, + # 'students_2016': students_2016, + # 'students_2015': students_2015} + user=request.user + notifs=request.user.notifications.all() + name = request.user.first_name +"_"+ request.user.last_name + desig = list(HoldsDesignation.objects.select_related('user','working','designation').all().filter(working = request.user).values_list('designation')) + b = [i for sub in desig for i in sub] + design = HoldsDesignation.objects.select_related('user','designation').filter(working=request.user) + + designation=[] + for i in design: + designation.append(str(i.designation)) + + roll_ = [] + for i in b : + name_ = get_object_or_404(Designation, id = i) + roll_.append(str(name_.name)) + + hall_caretakers = HallCaretaker.objects.all().select_related() + hall_wardens = HallWarden.objects.all().select_related() + + hall_caretaker_user = [] + for caretaker in hall_caretakers: + hall_caretaker_user.append(caretaker.staff.id.user) + + hall_warden_user = [] + for warden in hall_wardens: + hall_warden_user.append(warden.faculty.id.user) + print("modules are") + print(request.session.get('moduleAccessRights')) + context={ + 'notifications':notifs, + 'Curr_desig' : roll_, + 'club_details' : coordinator_club(request), + 'designation' : designation, + 'hall_caretaker': hall_caretaker_user, + 'hall_warden': hall_warden_user, + + } + # a=HoldsDesignation.objects.select_related('user','working','designation').filter(designation = user) + print(context) + print(type(user.extrainfo.user_type)) + if(request.user.get_username() == 'director'): + return render(request, "dashboard/director_dashboard2.html", {}) + elif( "dean_rspc" in designation): + return render(request, "dashboard/dashboard.html", context) + elif user.extrainfo.user_type != "student": + print ("inside") + designat = HoldsDesignation.objects.select_related().filter(user=user) + response = {'designat':designat} + context.update(response) + return render(request, "dashboard/dashboard.html", context) + else: + print ("inside2") + + return render(request, "dashboard/dashboard.html", context) + + +@login_required(login_url=LOGIN_URL) +def profile(request, username=None): + """ + Generic endpoint for views. + If it's a faculty, redirects to /eis/profile/* + If it's a student, displays the profile. + If the department is 'department: Academics:, redirects to /aims/ + Otherwise, redirects to root + + Args: + username: Username of the user. If None, + displays the profile of currently logged-in user + """ + + + + user = get_object_or_404(User, Q(username=username)) if username else request.user + editable = request.user == user + print("editable",editable) + profile = get_object_or_404(ExtraInfo, Q(user=user)) + print("profile",profile) + if(str(user.extrainfo.user_type)=='faculty'): + print("profile") + return HttpResponseRedirect('/eis/profile/' + (username if username else '')) + if(str(user.extrainfo.department)=='department: Academics'): + print("profile2") + return HttpResponseRedirect('/aims') + + array = [ + "student", + "CC convenor", + "Mechatronic convenor", + "mess_committee", + "mess_convener", + "alumini", + "Electrical_AE", + "Electrical_JE", + "Civil_AE", + "Civil_JE", + "co-ordinator", + "co co-ordinator", + "Convenor", + "Convener", + "cc1convener", + "CC2 convener", + "mess_convener_mess2", + "mess_committee_mess2" +] + + # queryset = HoldsDesignation.objects.select_related('user','working','designation').filter(Q(working=user)) + + # for obj in queryset: + # designation_name = obj.designation.name + # print("designation_name",designation_name) + + # design = False + # if designation_name in array: + # design = True + # print("design",design) + # print("designation_name",designation_name) + # if design: + # current = HoldsDesignation.objects.select_relapted('user','working','designation').filter(Q(working=user, designation__name=designation_name)) + # for obj in current: + # obj.designation.name = obj.designation.name.replace(designation_name, 'student') + + designation_name = "" + design = False + + current = HoldsDesignation.objects.select_related('user', 'working', 'designation').filter(Q(working=user)) + + for obj in current: + designation_name = obj.designation.name + if designation_name in array: + design = True + break + + if design: + current = HoldsDesignation.objects.filter(working=user, designation__name=designation_name) + for obj in current: + obj.designation.name = obj.designation.name.replace(designation_name, 'student') + + print(user.extrainfo.user_type) + print("current",current) + if current: + print("profile3") + student = get_object_or_404(Student, Q(id=profile.id)) + print("student",student) + if editable and request.method == 'POST': + if 'studentapprovesubmit' in request.POST: + status = PlacementStatus.objects.select_related('notify_id','unique_id__id__user','unique_id__id__department').filter(pk=request.POST['studentapprovesubmit']).update(invitation='ACCEPTED', timestamp=timezone.now()) + if 'studentdeclinesubmit' in request.POST: + status = PlacementStatus.objects.select_related('notify_id','unique_id__id__user','unique_id__id__department').filter(Q(pk=request.POST['studentdeclinesubmit'])).update(invitation='REJECTED', timestamp=timezone.now()) + if 'educationsubmit' in request.POST: + form = AddEducation(request.POST) + if form.is_valid(): + institute = form.cleaned_data['institute'] + degree = form.cleaned_data['degree'] + grade = form.cleaned_data['grade'] + stream = form.cleaned_data['stream'] + sdate = form.cleaned_data['sdate'] + edate = form.cleaned_data['edate'] + education_obj = Education.objects.create(unique_id=student, degree=degree, + grade=grade, institute=institute, + stream=stream, sdate=sdate, edate=edate) + education_obj.save() + if 'profilesubmit' in request.POST: + about_me = request.POST.get('about') + age = request.POST.get('age') + address = request.POST.get('address') + contact = request.POST.get('contact') + extrainfo_obj = ExtraInfo.objects.select_related('user','department').get(user=user) + extrainfo_obj.about_me = about_me + extrainfo_obj.date_of_birth = age + extrainfo_obj.address = address + extrainfo_obj.phone_no = contact + extrainfo_obj.save() + profile = get_object_or_404(ExtraInfo, Q(user=user)) + if 'picsubmit' in request.POST: + form = AddProfile(request.POST, request.FILES) + extrainfo_obj = ExtraInfo.objects.select_related('user','department').get(user=user) + extrainfo_obj.profile_picture = form.cleaned_data["pic"] + extrainfo_obj.save() + if 'skillsubmit' in request.POST: + form = AddSkill(request.POST) + if form.is_valid(): + skill = form.cleaned_data['skill'] + skill_rating = form.cleaned_data['skill_rating'] + try: + skill_id = Skill.objects.get(skill=skill) + except Exception as e: + skill_id = Skill.objects.create(skill=skill) + skill_id.save() + has_obj = Has.objects.create(unique_id=student, + skill_id=skill_id, + skill_rating = skill_rating) + has_obj.save() + if 'achievementsubmit' in request.POST: + form = AddAchievement(request.POST) + if form.is_valid(): + achievement = form.cleaned_data['achievement'] + achievement_type = form.cleaned_data['achievement_type'] + description = form.cleaned_data['description'] + issuer = form.cleaned_data['issuer'] + date_earned = form.cleaned_data['date_earned'] + achievement_obj = Achievement.objects.create(unique_id=student, + achievement=achievement, + achievement_type=achievement_type, + description=description, + issuer=issuer, + date_earned=date_earned) + achievement_obj.save() + if 'publicationsubmit' in request.POST: + form = AddPublication(request.POST) + if form.is_valid(): + publication_title = form.cleaned_data['publication_title'] + description = form.cleaned_data['description'] + publisher = form.cleaned_data['publisher'] + publication_date = form.cleaned_data['publication_date'] + publication_obj = Publication.objects.create(unique_id=student, + publication_title= + publication_title, + publisher=publisher, + description=description, + publication_date=publication_date) + publication_obj.save() + if 'patentsubmit' in request.POST: + form = AddPatent(request.POST) + if form.is_valid(): + patent_name = form.cleaned_data['patent_name'] + description = form.cleaned_data['description'] + patent_office = form.cleaned_data['patent_office'] + patent_date = form.cleaned_data['patent_date'] + patent_obj = Patent.objects.create(unique_id=student, patent_name=patent_name, + patent_office=patent_office, + description=description, + patent_date=patent_date) + patent_obj.save() + if 'coursesubmit' in request.POST: + form = AddCourse(request.POST) + if form.is_valid(): + course_name = form.cleaned_data['course_name'] + description = form.cleaned_data['description'] + license_no = form.cleaned_data['license_no'] + sdate = form.cleaned_data['sdate'] + edate = form.cleaned_data['edate'] + course_obj = Course.objects.create(unique_id=student, course_name=course_name, + license_no=license_no, + description=description, + sdate=sdate, edate=edate) + course_obj.save() + if 'projectsubmit' in request.POST: + form = AddProject(request.POST) + if form.is_valid(): + project_name = form.cleaned_data['project_name'] + project_status = form.cleaned_data['project_status'] + summary = form.cleaned_data['summary'] + project_link = form.cleaned_data['project_link'] + sdate = form.cleaned_data['sdate'] + edate = form.cleaned_data['edate'] + project_obj = Project.objects.create(unique_id=student, summary=summary, + project_name=project_name, + project_status=project_status, + project_link=project_link, + sdate=sdate, edate=edate) + project_obj.save() + if 'experiencesubmit' in request.POST: + form = AddExperience(request.POST) + if form.is_valid(): + title = form.cleaned_data['title'] + status = form.cleaned_data['status'] + company = form.cleaned_data['company'] + location = form.cleaned_data['location'] + description = form.cleaned_data['description'] + sdate = form.cleaned_data['sdate'] + edate = form.cleaned_data['edate'] + experience_obj = Experience.objects.create(unique_id=student, title=title, + company=company, location=location, + status=status, + description=description, + sdate=sdate, edate=edate) + experience_obj.save() + if 'deleteskill' in request.POST: + hid = request.POST['deleteskill'] + hs = Has.objects.select_related('skill_id','unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deleteedu' in request.POST: + hid = request.POST['deleteedu'] + hs = Education.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deletecourse' in request.POST: + hid = request.POST['deletecourse'] + hs = Course.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deleteexp' in request.POST: + hid = request.POST['deleteexp'] + hs = Experience.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deletepro' in request.POST: + hid = request.POST['deletepro'] + hs = Project.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deleteach' in request.POST: + hid = request.POST['deleteach'] + hs = Achievement.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deletepub' in request.POST: + hid = request.POST['deletepub'] + hs = Publication.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + if 'deletepat' in request.POST: + hid = request.POST['deletepat'] + hs = Patent.objects.select_related('unique_id__id__user','unique_id__id__department').get(Q(pk=hid)) + hs.delete() + + form = AddEducation(initial={}) + form1 = AddProfile(initial={}) + form10 = AddSkill(initial={}) + form11 = AddCourse(initial={}) + form12 = AddAchievement(initial={}) + form5 = AddPublication(initial={}) + form6 = AddProject(initial={}) + form7 = AddPatent(initial={}) + form8 = AddExperience(initial={}) + form14 = AddProfile() + skills = Has.objects.select_related('skill_id','unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + education = Education.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + course = Course.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + experience = Experience.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + project = Project.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + achievement = Achievement.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + publication = Publication.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + patent = Patent.objects.select_related('unique_id__id__user','unique_id__id__department').filter(Q(unique_id=student)) + context = {'user': user, 'profile': profile, 'skills': skills, + 'educations': education, 'courses': course, 'experiences': experience, + 'projects': project, 'achievements': achievement, 'publications': publication, + 'patent': patent, 'form': form, 'form1': form1, 'form14': form14, + 'form5': form5, 'form6': form6, 'form7': form7, 'form8': form8, + 'form10':form10, 'form11':form11, 'form12':form12, 'current':current, + 'editable': editable + } + if 'skillsubmit' in request.POST or 'deleteskill' in request.POST: + return render(request, "globals/student_profile2.html", context) + if 'coursesubmit' in request.POST or 'educationsubmit' in request.POST or 'deleteedu' in request.POST or 'deletecourse' in request.POST: + return render(request, "globals/student_profile3.html", context) + if 'experiencesubmit' in request.POST or 'projectsubmit' in request.POST or 'deleteexp' in request.POST or 'deletepro' in request.POST: + return render(request, "globals/student_profile4.html", context) + if 'achievementsubmit' in request.POST or 'deleteach' in request.POST: + return render(request, "globals/student_profile5.html", context) + # print("context",context) + return render(request, "globals/student_profile.html", context) + else: + return redirect("/") + +@login_required(login_url=LOGIN_URL) +def logout_view(request): + logout(request) + return redirect("/") + + +""" Views for Feedback and Issue reports """ + + +@login_required(login_url=LOGIN_URL) +def feedback(request): + feeds = Feedback.objects.select_related('user').all().order_by("rating").exclude(user=request.user) + if feeds.count() > 5: + feeds = feeds[:5] + rated = [] + for feed in feeds: + rated.append(range(feed.rating)) + feeds = zip(feeds, rated) + if request.method == "POST": + try: + feedback = Feedback.objects.select_related('user').get(user=request.user) + except Exception as e: + feedback = None + if feedback: + form = WebFeedbackForm(request.POST or None, instance=feedback) + else: + form = WebFeedbackForm(request.POST or None) + feedback = form.save(commit=False) + user_rating = request.POST.get("rating") + feedback.user = request.user + if int(user_rating) > 0 and int(user_rating) < 6: + feedback.rating = user_rating + feedback.save() + form = WebFeedbackForm(instance=feedback) + stars = [] + for i in range(0, int(feedback.rating)): + stars.append(1) + rating = 0 + for feed in Feedback.objects.all(): + rating = rating + feed.rating + if Feedback.objects.all().count() > 0: + rating = round(rating/Feedback.objects.all().count(),1) + context = { + 'form': form, + "feedback": feedback, + 'rating': rating, + "stars": stars, + "reviewed": True, + "feeds": feeds + } + return render(request, "globals/feedback.html", context) + rating = 0 + for feed in Feedback.objects.all(): + rating = rating + feed.rating + if Feedback.objects.all().count() > 0: + rating = round(rating/Feedback.objects.all().count(),1) + try: + feedback = Feedback.objects.select_related('user').get(user=request.user) + form = WebFeedbackForm(instance=feedback) + except Exception as e: + form = WebFeedbackForm() + context = {"form": form, "rating": rating, "feeds": feeds} + return render(request, "globals/feedback.html", context) + stars = [] + for i in range(0, int(feedback.rating)): + stars.append(1) + context = { + "rating": rating, + "feedback": feedback, + "stars": stars, + "form": form, + "reviewed": True, + "feeds": feeds + } + return render(request, "globals/feedback.html", context) + + +@login_required(login_url=LOGIN_URL) +def issue(request): + if request.method == "POST": + form = IssueForm(request.POST or None) + if form.is_valid(): + issue = form.save(commit=False) + issue.user = request.user + issue.save() + for image in request.FILES.getlist('images'): + try: + Image.open(image) + image = IssueImage.objects.create(image=image, user=request.user) + issue.images.add(image) + except Exception as e: + pass + issue.save() + openissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=False) + closedissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=True) + form = IssueForm() + context = {"form": form, "openissue": openissue, "closedissue": closedissue, } + return render(request, "globals/issue.html", context) + openissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=False) + closedissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=True) + form = IssueForm(request.POST) + context = {"form": form, "openissue": openissue, "closedissue": closedissue, } + return render(request, "globals/issue.html", context) + openissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=False) + closedissue = Issue.objects.select_related('user').prefetch_related('images','support').filter(closed=True) + form = IssueForm() + context = {"form": form, "openissue": openissue, "closedissue": closedissue, } + return render(request, "globals/issue.html", context) + + +@login_required(login_url=LOGIN_URL) +def view_issue(request, id): + if request.method == "POST": + issue = get_object_or_404(Issue, id=id, user=request.user) + form = IssueForm(request.POST or None, instance=issue) + if form.is_valid(): + issue.save() + remove = request.POST.get("remove-images") + if remove: + for img in issue.images.all(): + img.delete() + for image in request.FILES.getlist('images'): + try: + Image.open(image) + image = IssueImage.objects.create(image=image, user=request.user) + issue.images.add(image) + except Exception as e: + pass + issue.save() + form = IssueForm(instance=issue) + context = { + "form": form, + "issue": issue, + } + return render(request, "globals/view_issue.html", context) + form = IssueForm(request.POST or None) + context = { + "form": form, + "issue": issue, + } + return render(request, "globals/view_issue.html", context) + issue = get_object_or_404(Issue, id=id) + form = None + if request.user == issue.user: + form = IssueForm(instance=issue) + context = { + "form": form, + "issue": issue, + } + return render(request, "globals/view_issue.html", context) + + +@login_required(login_url=LOGIN_URL) +def support_issue(request, id): + issue = get_object_or_404(Issue, id=id) + supported = True + if request.user in issue.support.all(): + issue.support.remove(request.user) + supported = False + else: + issue.support.add(request.user) + support_count = issue.support.all().count() + context = { + "supported": supported, + "support_count": support_count, + } + return HttpResponse(json.dumps(context), "application/json") + +@login_required(login_url=LOGIN_URL) +def search(request): + """ + Search endpoint. + Renders search results populated with results from 'q' GET query. + If length of the query is less than 3 or no results are found, shows a + helpful message instead. + Algorithm: Includes the first 15 users whose first/last name starts with the query words. + Thus, searching 'Atu Gu' will return 'Atul Gupta' as one result. + + Note: All the words in the query must be matched. + While, searching 'Atul Kumar', the word 'Kumar' won't match either 'Atul' or 'Gupta' + and thus it won't be included in the search results. + """ + key = request.GET['q'] + if len(key) < 3: + return render(request, "globals/search.html", {'sresults': ()}) + words = (w.strip() for w in key.split()) + name_q = Q() + for token in words: + name_q = name_q & (Q(first_name__icontains=token) | Q(last_name__icontains=token))#search constraints + search_results = User.objects.filter(name_q)[:15] + if len(search_results) == 0: + search_results = [] + context = {'sresults':search_results} + return render(request, "globals/search.html", context), + +@login_required(login_url=LOGIN_URL) +def update_global_variable(request): + if request.method == 'POST': + selected_option = request.POST.get('dropdown') + request.session['currentDesignationSelected'] = selected_option + module_access = ModuleAccess.objects.filter(designation=selected_option).first() + if module_access: + access_rights = {} + + field_names = [field.name for field in ModuleAccess._meta.get_fields() if field.name not in ['id', 'designation']] + + for field_name in field_names: + access_rights[field_name] = getattr(module_access, field_name) + + request.session['moduleAccessRights'] = access_rights + + print(selected_option) + print(request.session['currentDesignationSelected']) + return HttpResponseRedirect('/dashboard') + # Redirect to home if not a POST request or some issue occurs return HttpResponseRedirect(reverse('home')) \ No newline at end of file diff --git a/FusionIIIT/applications/online_cms/views.py b/FusionIIIT/applications/online_cms/views.py index 27acb4498..4bc83ac52 100644 --- a/FusionIIIT/applications/online_cms/views.py +++ b/FusionIIIT/applications/online_cms/views.py @@ -1525,6 +1525,7 @@ def add_questions_to_practice_contest(request, course_code, practice_contest_id) ) return redirect('/ocms/' + course_code + '/edit_quiz/' + quiz_id) +@login_required(login_url='/accounts/login') def add_practice_question(request, course_code, practice_contest_code): user = request.user extrainfo = ExtraInfo.objects.select_related().get(user=user) diff --git a/FusionIIIT/applications/otheracademic/views.py b/FusionIIIT/applications/otheracademic/views.py index b099f2f78..2693d1528 100644 --- a/FusionIIIT/applications/otheracademic/views.py +++ b/FusionIIIT/applications/otheracademic/views.py @@ -115,6 +115,7 @@ def leave_form_submit(request): return HttpResponseRedirect('/otheracademic/leaveform') +@login_required(login_url='/accounts/login') def leaveApproveForm(request): """ View function for accessing the leave approval form. @@ -134,6 +135,7 @@ def leaveApproveForm(request): return HttpResponse("Not available for you or You are not a HOD.") +@login_required(login_url='/accounts/login') def leaveStatus(request): """ View function for accessing the leave status page for the student. @@ -146,6 +148,7 @@ def leaveStatus(request): return render(request, 'otheracademic/leaveStatus.html', {'form_data': form_data, 'roll_no' : roll_no}) +@login_required(login_url='/accounts/login') def leaveStatus_Dip(request): """ View function for track the record of leave applied. @@ -182,6 +185,7 @@ def approve_leave(request, leave_id): return redirect('/otheracademic/leaveApproveForm') +@login_required(login_url='/accounts/login') def reject_leave(request, leave_id): """ View function for rejecting a leave request. @@ -223,6 +227,7 @@ def leavePG(request): return HttpResponse("NOT AVAILABLE") +@login_required(login_url='/accounts/login') def leavePgSubmit(request): """ View function for submitting a leave form by postgraduate students. @@ -295,6 +300,7 @@ def leavePgSubmit(request): return HttpResponseRedirect('/otheracademic/leavePG') +@login_required(login_url='/accounts/login') def leaveApproveTA(request): """ View function for accessing the leave approval page for TA supervisors. @@ -310,6 +316,7 @@ def leaveApproveTA(request): return render(request, 'otheracademic/leaveApproveTA.html', {'form_data': form_data,'roll_no' : roll_no}) +@login_required(login_url='/accounts/login') def approve_leave_ta(request, leave_id): """ View function for approving a leave request by TA supervisor. @@ -352,6 +359,7 @@ def approve_leave_ta(request, leave_id): return redirect('/otheracademic/leaveApproveTA') # Redirect to appropriate page after approval +@login_required(login_url='/accounts/login') def reject_leave_ta(request, leave_id): """ View function for rejecting a leave request by TA supervisor. @@ -369,6 +377,7 @@ def reject_leave_ta(request, leave_id): return redirect('/otheracademic/leaveApproveTA') # Redirect to appropriate page after rejection +@login_required(login_url='/accounts/login') def leaveApproveThesis(request): """ View function for accessing the leave approval page for TA supervisors. @@ -384,6 +393,7 @@ def leaveApproveThesis(request): return render(request, 'otheracademic/leaveApproveThesis.html', {'form_data': form_data, 'roll_no' : roll_no}) +@login_required(login_url='/accounts/login') def approve_leave_thesis(request, leave_id): """ View function for approving a leave request by TA supervisor. @@ -425,6 +435,7 @@ def approve_leave_thesis(request, leave_id): return redirect('/otheracademic/leaveApproveThesis') # Redirect to appropriate page after approval +@login_required(login_url='/accounts/login') def reject_leave_thesis(request, leave_id): """ View function for rejecting a leave request by TA supervisor. @@ -440,6 +451,7 @@ def reject_leave_thesis(request, leave_id): return redirect('/otheracademic/leaveApproveThesis') # Redirect to appropriate page after rejection +@login_required(login_url='/accounts/login') def leaveApproveHOD(request): """ View function for accessing the leave approval page for HOD. @@ -458,6 +470,7 @@ def leaveApproveHOD(request): else: return HttpResponse("Not Avaible For You...OR You are not the HOD") +@login_required(login_url='/accounts/login') def approve_leave_hod(request, leave_id): """ View function for approving a leave request by HOD. @@ -476,6 +489,7 @@ def approve_leave_hod(request, leave_id): return redirect('/otheracademic/leaveApproveHOD') # Redirect to appropriate page after approval +@login_required(login_url='/accounts/login') def reject_leave_hod(request, leave_id): """ View function for rejecting a leave request by HOD. @@ -491,6 +505,7 @@ def reject_leave_hod(request, leave_id): return redirect('/otheracademic/leaveApproveHOD') # Redirect to appropriate page after rejection +@login_required(login_url='/accounts/login') def leaveStatusPG(request): """ View function for accessing the leave status page for postgraduate students. @@ -503,6 +518,7 @@ def leaveStatusPG(request): return render(request, 'otheracademic/leaveStatusPG.html', {'form_data': form_data, 'roll_no': roll_no}) +@login_required(login_url='/accounts/login') def leaveStatusPG_Dip(request): """ View function for accessing the leave logged data of PG . @@ -523,6 +539,7 @@ def leaveStatusPG_Dip(request): +@login_required(login_url='/accounts/login') def graduateseminar(request): """ This function is used to log the graduate seminar form and show the status. @@ -535,6 +552,7 @@ def graduateseminar(request): else : return HttpResponse("Not Available for You") +@login_required(login_url='/accounts/login') def graduate_form_submit(request): if request.method == 'POST': # Extract data from the request @@ -553,12 +571,14 @@ def graduate_form_submit(request): graduate.save() return redirect('/otheracademic/graduateseminar') +@login_required(login_url='/accounts/login') def graduate_status(request): form_data = GraduateSeminarFormTable.objects.all() roll_no = request.user.username return render(request, 'otheracademic/graduateSeminarStatus.html',{'form_data' : form_data, 'roll_no' : roll_no }) +@login_required(login_url='/accounts/login') def graduateSeminarStatus_Dip(request): receiver_value = User.objects.get(username=request.user.username) receiver_value_designation= HoldsDesignation.objects.filter(user=receiver_value) @@ -581,6 +601,7 @@ def graduateSeminarStatus_Dip(request): +@login_required(login_url='/accounts/login') def bonafide(request): """ This function is used for solve the problem of Bonafied.In this Student apply for the bonafide . @@ -596,6 +617,7 @@ def bonafide(request): +@login_required(login_url='/accounts/login') def bonafide_form_submit(request): """ Bonafide form submitted to acadadmin @@ -633,6 +655,7 @@ def bonafide_form_submit(request): return HttpResponseRedirect('/otheracademic/bonafide') +@login_required(login_url='/accounts/login') def bonafideApproveForm(request): """ @@ -647,6 +670,7 @@ def bonafideApproveForm(request): else: return HttpResponse("Not available For You") +@login_required(login_url='/accounts/login') def approve_bonafide(request, leave_id): """ @@ -661,6 +685,7 @@ def approve_bonafide(request, leave_id): otheracademic_notif(request.user,bonafide_aceptor, 'bonafide_accept', 1, 'student', message) return redirect('/otheracademic/bonafideApproveForm') # Redirect to appropriate page after approval +@login_required(login_url='/accounts/login') def reject_bonafide(request, leave_id): """ Reject Bonafide Form @@ -673,6 +698,7 @@ def reject_bonafide(request, leave_id): otheracademic_notif(request.user,bonafide_aceptor, 'bonafide_accept', 1, 'student', message) return redirect('/otheracademic/bonafideApproveForm') # Redirect to appropriate page after rejection +@login_required(login_url='/accounts/login') def bonafideStatus(request): """ Bonafide Status shown to student with option of download @@ -688,6 +714,7 @@ def bonafideStatus(request): +@login_required(login_url='/accounts/login') def upload_file(request, entry_id): """ @@ -709,6 +736,7 @@ def upload_file(request, entry_id): +@login_required(login_url='/accounts/login') def nodues(request): """ No Dues Form where student can apply for no dues @@ -716,10 +744,12 @@ def nodues(request): return render(request,'otheracademic/noduesverification.html') +@login_required(login_url='/accounts/login') def PG_page(request): return render(request,'otheracademic/PG_page.html') +@login_required(login_url='/accounts/login') def nodues_status(request): form_data = NoDues.objects.all() roll_no = request.user.username @@ -727,11 +757,13 @@ def nodues_status(request): return render(request, 'otheracademic/nodues_status.html',{'form_data' : form_data, 'roll_no' : roll_no }) +@login_required(login_url='/accounts/login') def noduesStatus_acad(request): form_data = NoDues.objects.all() return render(request, 'otheracademic/noduesStatus_acad.html',{'form_data' : form_data }) +@login_required(login_url='/accounts/login') def nodues_apply(request): form_data = NoDues.objects.all() roll_no = request.user.username @@ -739,6 +771,7 @@ def nodues_apply(request): +@login_required(login_url='/accounts/login') def update_dues_status(request): if request.method == 'POST': roll_no = request.POST.get('roll_no') @@ -1090,6 +1123,7 @@ def submit_nodues_form(request): +@login_required(login_url='/accounts/login') def approve_BTP(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.btp_supervisor_clear= True @@ -1104,6 +1138,7 @@ def approve_BTP(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/BTP_nodues') # Red +@login_required(login_url='/accounts/login') def approve_BTP_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.btp_supervisor_clear= True @@ -1113,6 +1148,7 @@ def approve_BTP_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_BTP(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.btp_supervisor_clear= False @@ -1127,6 +1163,7 @@ def reject_BTP(request, no_dues_id): +@login_required(login_url='/accounts/login') def approve_bank(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.bank_clear= True @@ -1137,6 +1174,7 @@ def approve_bank(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Bank_nodues') # Red +@login_required(login_url='/accounts/login') def approve_bank_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.bank_clear= True @@ -1146,6 +1184,7 @@ def approve_bank_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_bank(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.bank_clear= False @@ -1157,6 +1196,7 @@ def reject_bank(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Bank_nodues') # Red +@login_required(login_url='/accounts/login') def approve_CSE(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.cc_clear= True @@ -1167,6 +1207,7 @@ def approve_CSE(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/CSE_nodues') # Red +@login_required(login_url='/accounts/login') def approve_CSE_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.cc_clear= True @@ -1176,6 +1217,7 @@ def approve_CSE_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_CSE(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.cc_clear= False @@ -1186,6 +1228,7 @@ def reject_CSE(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/CSE_nodues') # Red +@login_required(login_url='/accounts/login') def approve_design_project(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.design_project_clear= True @@ -1196,6 +1239,7 @@ def approve_design_project(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Design_nodues') # Red +@login_required(login_url='/accounts/login') def approve_design_project_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.design_project_clear= True @@ -1205,6 +1249,7 @@ def approve_design_project_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_design_project(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.design_project_clear= False @@ -1215,6 +1260,7 @@ def reject_design_project(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Design_nodues') # Red +@login_required(login_url='/accounts/login') def approve_design_studio(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.design_studio_clear= True @@ -1225,6 +1271,7 @@ def approve_design_studio(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Design_nodues') # Red +@login_required(login_url='/accounts/login') def approve_design_studio_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.design_studio_clear= True @@ -1232,6 +1279,7 @@ def approve_design_studio_not(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Design_nodues_not') # Red +@login_required(login_url='/accounts/login') def reject_design_studio(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.design_studio_clear= False @@ -1244,6 +1292,7 @@ def reject_design_studio(request, no_dues_id): +@login_required(login_url='/accounts/login') def approve_icard(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.icard_dsa_clear= True @@ -1254,6 +1303,7 @@ def approve_icard(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_icard_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.icard_dsa_clear= True @@ -1263,6 +1313,7 @@ def approve_icard_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_icard(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.icard_dsa_clear= False @@ -1273,6 +1324,7 @@ def reject_icard(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_placement(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.placement_cell_clear= True @@ -1283,6 +1335,7 @@ def approve_placement(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_placement_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.placement_cell_clear= True @@ -1292,6 +1345,7 @@ def approve_placement_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_placement(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.placement_cell_clear= False @@ -1302,6 +1356,7 @@ def reject_placement(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_account(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.account_clear= True @@ -1312,6 +1367,7 @@ def approve_account(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Bank_nodues') # Red +@login_required(login_url='/accounts/login') def approve_account_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.account_clear= True @@ -1321,6 +1377,7 @@ def approve_account_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_account(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.account_clear= False @@ -1331,6 +1388,7 @@ def reject_account(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Bank_nodues') # Red +@login_required(login_url='/accounts/login') def approve_alumni(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.alumni_clear= True @@ -1341,6 +1399,7 @@ def approve_alumni(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_alumni_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.alumni_clear= True @@ -1350,6 +1409,7 @@ def approve_alumni_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_alumni(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.alumni_clear= False @@ -1360,6 +1420,7 @@ def reject_alumni(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_gym(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.student_gymkhana_clear= True @@ -1370,6 +1431,7 @@ def approve_gym(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_gym_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.student_gymkhana_clear= True @@ -1379,6 +1441,7 @@ def approve_gym_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_gym(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.student_gymkhana_clear= False @@ -1389,6 +1452,7 @@ def reject_gym(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_discipline(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.discipline_office_clear= True @@ -1399,6 +1463,7 @@ def approve_discipline(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/discipline_nodues') # Red +@login_required(login_url='/accounts/login') def approve_discipline_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.discipline_office_clear= True @@ -1408,6 +1473,7 @@ def approve_discipline_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_discipline(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.discipline_office_clear= False @@ -1418,6 +1484,7 @@ def reject_discipline(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/dsa_nodues') # Red +@login_required(login_url='/accounts/login') def approve_signal(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.signal_processing_lab_clear= True @@ -1428,6 +1495,7 @@ def approve_signal(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Ece_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_signal_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.signal_processing_lab_clear= True @@ -1437,6 +1505,7 @@ def approve_signal_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_signal(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.signal_processing_lab_clear= False @@ -1448,6 +1517,7 @@ def reject_signal(request, no_dues_id): return redirect('/otheracademic/Ece_nodues') # Red +@login_required(login_url='/accounts/login') def approve_vlsi(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.vlsi_clear= True @@ -1458,6 +1528,7 @@ def approve_vlsi(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Ece_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_vlsi_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.vlsi_clear= True @@ -1467,6 +1538,7 @@ def approve_vlsi_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_vlsi(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.vlsi_clear= False @@ -1477,6 +1549,7 @@ def reject_vlsi(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Ece_nodues') # Red +@login_required(login_url='/accounts/login') def approve_ece(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.ece_clear= True @@ -1487,6 +1560,7 @@ def approve_ece(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Ece_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_ece_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.ece_clear= True @@ -1496,6 +1570,7 @@ def approve_ece_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_ece(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.ece_clear= False @@ -1507,6 +1582,7 @@ def reject_ece(request, no_dues_id): return redirect('/otheracademic/Ece_nodues') # Red +@login_required(login_url='/accounts/login') def approve_hostel(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.hostel_clear= True @@ -1517,6 +1593,7 @@ def approve_hostel(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/hostel_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_hostel_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.hostel_clear= True @@ -1526,6 +1603,7 @@ def approve_hostel_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_hostel(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.hostel_clear= False @@ -1538,6 +1616,7 @@ def reject_hostel(request, no_dues_id): +@login_required(login_url='/accounts/login') def approve_library(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.library_clear= True @@ -1548,6 +1627,7 @@ def approve_library(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/library_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_library_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.library_clear= True @@ -1557,6 +1637,7 @@ def approve_library_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_library(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.library_clear= False @@ -1568,6 +1649,7 @@ def reject_library(request, no_dues_id): return redirect('/otheracademic/library_nodues') # Red +@login_required(login_url='/accounts/login') def approve_workshop(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.workshop_clear= True @@ -1578,6 +1660,7 @@ def approve_workshop(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/ME_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_workshop_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.workshop_clear= True @@ -1587,6 +1670,7 @@ def approve_workshop_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_workshop(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.workshop_clear= False @@ -1598,6 +1682,7 @@ def reject_workshop(request, no_dues_id): return redirect('/otheracademic/ME_nodues') # Red +@login_required(login_url='/accounts/login') def approve_mecha(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.mechatronics_lab_clear= True @@ -1608,6 +1693,7 @@ def approve_mecha(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/ME_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_mecha_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.mechatronics_lab_clear= True @@ -1617,6 +1703,7 @@ def approve_mecha_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_mecha(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.mechatronics_lab_clear= False @@ -1628,6 +1715,7 @@ def reject_mecha(request, no_dues_id): return redirect('/otheracademic/ME_nodues') # Red +@login_required(login_url='/accounts/login') def approve_mess(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.mess_clear= True @@ -1638,6 +1726,7 @@ def approve_mess(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/mess_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_mess_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.mess_clear= True @@ -1647,6 +1736,7 @@ def approve_mess_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_mess(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.mess_clear= False @@ -1657,6 +1747,7 @@ def reject_mess(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/mess_nodues') # Red +@login_required(login_url='/accounts/login') def approve_physics(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.physics_lab_clear= True @@ -1667,6 +1758,7 @@ def approve_physics(request, no_dues_id): leave_entry.save() return redirect('/otheracademic/Physics_nodues') # Realumni +@login_required(login_url='/accounts/login') def approve_physics_not(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.physics_lab_clear= True @@ -1676,6 +1768,7 @@ def approve_physics_not(request, no_dues_id): +@login_required(login_url='/accounts/login') def reject_physics(request, no_dues_id): leave_entry = NoDues.objects.get(id=no_dues_id) leave_entry.physics_lab_clear= False @@ -1687,6 +1780,7 @@ def reject_physics(request, no_dues_id): return redirect('/otheracademic/Physics_nodues') # Red +@login_required(login_url='/accounts/login') def Bank_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1695,6 +1789,7 @@ def Bank_nodues(request): # form_data=NoDues.objects.all() return render(request,'otheracademic/Bank_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Bank_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1702,6 +1797,7 @@ def Bank_nodues_not(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Bank_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def BTP_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1709,6 +1805,7 @@ def BTP_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/BTP_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def BTP_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1716,6 +1813,7 @@ def BTP_nodues_not(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/BTP_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def CSE_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1723,6 +1821,7 @@ def CSE_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/CSE_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def CSE_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1731,6 +1830,7 @@ def CSE_nodues_not(request): return render(request,'otheracademic/CSE_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Design_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1738,6 +1838,7 @@ def Design_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Design_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Design_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1746,6 +1847,7 @@ def Design_nodues_not(request): return render(request,'otheracademic/Design_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def dsa_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1753,6 +1855,7 @@ def dsa_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/dsa_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def dsa_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1761,6 +1864,7 @@ def dsa_nodues_not(request): return render(request,'otheracademic/dsa_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Ece_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1768,6 +1872,7 @@ def Ece_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Ece_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Ece_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1776,6 +1881,7 @@ def Ece_nodues_not(request): return render(request,'otheracademic/Ece_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def hostel_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1783,6 +1889,7 @@ def hostel_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/hostel_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def hostel_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1791,6 +1898,7 @@ def hostel_nodues_not(request): return render(request,'otheracademic/hostel_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def ME_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1798,6 +1906,7 @@ def ME_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/ME_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def ME_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1806,6 +1915,7 @@ def ME_nodues_not(request): return render(request,'otheracademic/ME_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def mess_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1813,6 +1923,7 @@ def mess_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/mess_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def mess_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1821,6 +1932,7 @@ def mess_nodues_not(request): return render(request,'otheracademic/mess_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Physics_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1828,6 +1940,7 @@ def Physics_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Physics_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def Physics_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1835,6 +1948,7 @@ def Physics_nodues_not(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Physics_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def discipline_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1842,6 +1956,7 @@ def discipline_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Discipline_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def discipline_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1849,6 +1964,7 @@ def discipline_nodues_not(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/Discipline_nodues_not.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def library_nodues(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1856,6 +1972,7 @@ def library_nodues(request): form_data = NoDues.objects.filter(id__in=leave_ids) return render(request,'otheracademic/library_nodues.html',{'form_data': form_data}) +@login_required(login_url='/accounts/login') def library_nodues_not(request): inbox=view_inbox(username=request.user.username,designation="student",src_module="otheracademic") leave_ids=[msg ['src_object_id'] for msg in inbox if msg['subject']=='no_dues'] @@ -1869,6 +1986,7 @@ def library_nodues_not(request): +@login_required(login_url='/accounts/login') def noduesStatus_acad(request): if(request.user.username == "acadadmin"): form_data = NoDues.objects.all() @@ -1876,11 +1994,13 @@ def noduesStatus_acad(request): else : return HttpResponse("Not Available for you.") +@login_required(login_url='/accounts/login') def nodues_apply(request): return render(request,'otheracademic/nodues_apply.html') +@login_required(login_url='/accounts/login') def update_dues_status(request): if request.method == 'POST': roll_no = request.POST.get('roll_no') @@ -2003,6 +2123,7 @@ def assistantship_form_submission(request): +@login_required(login_url='/accounts/login') def assistantship_form_approval(request): # Retrieve data from the database inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") @@ -2017,6 +2138,7 @@ def assistantship_form_approval(request): roll_no = request.user.username return render(request, 'otheracademic/assistantship_approval.html', {'form_data': form_data, 'roll_no' : roll_no}) +@login_required(login_url='/accounts/login') def assistantship_thesis(request): # Retrieve data from the database inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") @@ -2029,6 +2151,7 @@ def assistantship_thesis(request): return render(request, 'otheracademic/thesis_supervisor_approve.html', {'form_data': form_data, 'roll_no' : roll_no}) +@login_required(login_url='/accounts/login') def assistantship_hod(request): # Retrieve data from the database inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") @@ -2043,12 +2166,14 @@ def assistantship_hod(request): +@login_required(login_url='/accounts/login') def assistantship_status(request): form_data = AssistantshipClaimFormStatusUpd.objects.all() roll_no = request.user.username return render(request, 'otheracademic/assistantship_status.html', { 'form_data' : form_data, 'roll_no' : roll_no}) +@login_required(login_url='/accounts/login') def assistantship_log(request): user=get_object_or_404(User,username=request.user.username) if(user.extrainfo.department.name == 'Academics'): @@ -2057,6 +2182,7 @@ def assistantship_log(request): else: return HttpResponse("Not Avalable For You.") +@login_required(login_url='/accounts/login') def find_id_from_inbox(inbox_data, src_obj_id): for item in inbox_data: if item.get('src_object_id') == src_obj_id: @@ -2065,6 +2191,7 @@ def find_id_from_inbox(inbox_data, src_obj_id): +@login_required(login_url='/accounts/login') def assistanship_ta_approve(request, ass_id): # Obtain inbox data inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") @@ -2102,6 +2229,7 @@ def assistanship_ta_approve(request, ass_id): +@login_required(login_url='/accounts/login') def assistanship_ta_reject(request, ass_id): leave_entry = AssistantshipClaimFormStatusUpd.objects.get(id = ass_id) leave_entry.TA_rejected = True @@ -2112,6 +2240,7 @@ def assistanship_ta_reject(request, ass_id): messages.success(request, "Successfully rejected.") return redirect('/otheracademic/approveform') +@login_required(login_url='/accounts/login') def assistanship_thesis_approve(request, ass_id): leave_entry = get_object_or_404(AssistantshipClaimFormStatusUpd, id=ass_id) @@ -2148,6 +2277,7 @@ def assistanship_thesis_approve(request, ass_id): +@login_required(login_url='/accounts/login') def assistanship_thesis_reject(request, ass_id): leave_entry = AssistantshipClaimFormStatusUpd.objects.get(id = ass_id) leave_entry.Ths_rejected = True @@ -2159,6 +2289,7 @@ def assistanship_thesis_reject(request, ass_id): return redirect('/otheracademic/assitantship/thesis_approveform') +@login_required(login_url='/accounts/login') def assistanship_hod_approve(request, ass_id): inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") @@ -2193,6 +2324,7 @@ def assistanship_hod_approve(request, ass_id): +@login_required(login_url='/accounts/login') def assistanship_hod_reject(request, ass_id): leave_entry = AssistantshipClaimFormStatusUpd.objects.get(id = ass_id) leave_entry.HOD_rejected = True @@ -2205,6 +2337,7 @@ def assistanship_hod_reject(request, ass_id): return redirect('/otheracademic/assitantship/hod_approveform') +@login_required(login_url='/accounts/login') def assistantship_acad_approveform(request): inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") print(inbox) @@ -2219,6 +2352,7 @@ def assistantship_acad_approveform(request): return HttpResponse("Not Avalable For You.") +@login_required(login_url='/accounts/login') def assistanship_acad_approve(request, ass_id): # Obtain inbox data inbox = view_inbox(username=request.user.username, designation="student", src_module="otheracademic") @@ -2256,6 +2390,7 @@ def assistanship_acad_approve(request, ass_id): +@login_required(login_url='/accounts/login') def assistanship_acad_reject(request, ass_id): leave_entry = AssistantshipClaimFormStatusUpd.objects.get(id = ass_id) leave_entry.Acad_rejected = True @@ -2269,18 +2404,23 @@ def assistanship_acad_reject(request, ass_id): +@login_required(login_url='/accounts/login') def othersPage(request): return render(request, 'otheracademic/othersPage.html') +@login_required(login_url='/accounts/login') def othersLeave(request): return render(request, 'otheracademic/othersLeave.html') +@login_required(login_url='/accounts/login') def othersNoDues(request): return render(request, 'otheracademic/othersNoDues.html') +@login_required(login_url='/accounts/login') def othersAssistantship(request): return render(request, 'otheracademic/othersAssistantship.html') +@login_required(login_url='/accounts/login') def othersGraduate(request): return render(request, 'otheracademic/othersGraduate.html') diff --git a/FusionIIIT/applications/programme_curriculum/views.py b/FusionIIIT/applications/programme_curriculum/views.py index 0903acf41..577de2422 100644 --- a/FusionIIIT/applications/programme_curriculum/views.py +++ b/FusionIIIT/applications/programme_curriculum/views.py @@ -52,6 +52,7 @@ def programme_curriculum(request): +@login_required(login_url='/accounts/login') def view_all_programmes(request): """ This function is used to display all the programmes offered by the institute. @@ -81,6 +82,7 @@ def view_all_programmes(request): return render(request, url, {'ug': ug, 'pg': pg, 'phd': phd,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_curriculums_of_a_programme(request, programme_id): """ This function is used to Display Curriculum of a specific Programmes. @@ -119,6 +121,7 @@ def view_curriculums_of_a_programme(request, programme_id): return render(request,url, {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_all_working_curriculums(request): """ views all the working curriculums offered by the institute """ @@ -141,6 +144,7 @@ def view_all_working_curriculums(request): curriculums = curriculumfilter.qs return render(request,url+'view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_semesters_of_a_curriculum(request, curriculum_id): """ This function is used to Display all Semester of a Curriculum. @@ -196,6 +200,7 @@ def view_semesters_of_a_curriculum(request, curriculum_id): return render(request, url+'view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_a_semester_of_a_curriculum(request, semester_id): """ views a specfic semester of a specfic curriculum """ url='programme_curriculum/' @@ -216,6 +221,7 @@ def view_a_semester_of_a_curriculum(request, semester_id): return render(request, url+'view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_a_courseslot(request, courseslot_id): """ view a course slot """ url='programme_curriculum/' @@ -233,6 +239,7 @@ def view_a_courseslot(request, courseslot_id): return render(request, url+'view_a_courseslot.html', {'course_slot': course_slot,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_all_courses(request): """ views all the course slots of a specfic semester """ url='programme_curriculum/' @@ -255,6 +262,7 @@ def view_all_courses(request): return render(request, url+'view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_a_course(request, course_id): """ views the details of a Course """ url='programme_curriculum/' @@ -272,6 +280,7 @@ def view_a_course(request, course_id): return render(request, url+'view_a_course.html', {'course': course,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_all_discplines(request): """ views the details of a Course """ url='programme_curriculum/' @@ -290,6 +299,7 @@ def view_all_discplines(request): return render(request, url+'view_all_disciplines.html', {'disciplines': disciplines,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_all_batches(request): """ views the details of a Course """ url='programme_curriculum/' @@ -347,6 +357,7 @@ def admin_view_all_programmes(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_programmes.html', {'ug': ug, 'pg': pg, "phd": phd}) +@login_required(login_url='/accounts/login') def admin_view_curriculums_of_a_programme(request, programme_id): """ This function is used to Display Curriculum of a specific Programmes. @@ -382,6 +393,7 @@ def admin_view_curriculums_of_a_programme(request, programme_id): return render(request,'programme_curriculum/acad_admin/admin_view_curriculums_of_a_programme.html', {'program': program, 'past_curriculums': past_curriculums, 'working_curriculums': working_curriculums, 'curriculumfilter': curriculumfilter}) +@login_required(login_url='/accounts/login') def admin_view_all_working_curriculums(request): """ views all the working curriculums offered by the institute """ @@ -403,6 +415,7 @@ def admin_view_all_working_curriculums(request): return render(request,'programme_curriculum/acad_admin/admin_view_all_working_curriculums.html',{'curriculums':curriculums, 'curriculumfilter': curriculumfilter}) +@login_required(login_url='/accounts/login') def admin_view_semesters_of_a_curriculum(request, curriculum_id): """ gets all the semesters of a specfic curriculum """ @@ -448,6 +461,7 @@ def admin_view_semesters_of_a_curriculum(request, curriculum_id): return render(request, 'programme_curriculum/acad_admin/admin_view_semesters_of_a_curriculum.html', {'curriculum': curriculum, 'semesters': semesters, 'semester_slots': transpose_semester_slots, 'semester_credits': semester_credits, 'all_batches':all_batches}) +@login_required(login_url='/accounts/login') def admin_view_a_semester_of_a_curriculum(request, semester_id): """ This function is used to Display all Semester of a Curriculum. @@ -474,6 +488,7 @@ def admin_view_a_semester_of_a_curriculum(request, semester_id): return render(request, 'programme_curriculum/acad_admin/admin_view_a_semester_of_a_curriculum.html', {'semester': semester, 'course_slots': course_slots}) +@login_required(login_url='/accounts/login') def admin_view_a_courseslot(request, courseslot_id): """ view a course slot """ @@ -494,6 +509,7 @@ def admin_view_a_courseslot(request, courseslot_id): return render(request, 'programme_curriculum/acad_admin/admin_view_a_courseslot.html', {'course_slot': course_slot}) +@login_required(login_url='/accounts/login') def admin_view_all_courses(request): """ views all the course slots of a specfic semester """ @@ -516,6 +532,7 @@ def admin_view_all_courses(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter}) +@login_required(login_url='/accounts/login') def admin_view_a_course(request, course_id): """ views the details of a Course """ @@ -532,6 +549,7 @@ def admin_view_a_course(request, course_id): return render(request, 'programme_curriculum/acad_admin/admin_view_a_course.html', {'course': course}) +@login_required(login_url='/accounts/login') def admin_view_all_discplines(request): """ views the details of a Course """ @@ -548,6 +566,7 @@ def admin_view_all_discplines(request): return render(request, 'programme_curriculum/acad_admin/admin_view_all_disciplines.html', {'disciplines': disciplines}) +@login_required(login_url='/accounts/login') def admin_view_all_batches(request): """ views the details of a Course """ @@ -576,6 +595,7 @@ def admin_view_all_batches(request): +@login_required(login_url='/accounts/login') def add_discipline_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -599,6 +619,7 @@ def add_discipline_form(request): return render(request, 'programme_curriculum/acad_admin/add_discipline_form.html',{'form':form}) +@login_required(login_url='/accounts/login') def edit_discipline_form(request, discipline_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -624,6 +645,7 @@ def edit_discipline_form(request, discipline_id): +@login_required(login_url='/accounts/login') def add_programme_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -650,6 +672,7 @@ def add_programme_form(request): +@login_required(login_url='/accounts/login') def edit_programme_form(request, programme_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -674,6 +697,7 @@ def edit_programme_form(request, programme_id): return render(request, 'programme_curriculum/acad_admin/add_programme_form.html',{'form':form, 'submitbutton': submitbutton}) +@login_required(login_url='/accounts/login') def add_curriculum_form(request): """ This function is used to add Curriculum and Semester into Curriculum and Semester table. @@ -770,6 +794,7 @@ def edit_curriculum_form(request, curriculum_id): return render(request, 'programme_curriculum/acad_admin/add_curriculum_form.html',{'form':form, 'submitbutton': submitbutton}) +@login_required(login_url='/accounts/login') def add_course_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -796,6 +821,7 @@ def add_course_form(request): return render(request,'programme_curriculum/acad_admin/course_form.html',{'form':form,'submitbutton': submitbutton}) +@login_required(login_url='/accounts/login') def update_course_form(request, course_id): des = HoldsDesignation.objects.all().filter(user = request.user).first() if request.session['currentDesignationSelected']== "student": @@ -854,6 +880,7 @@ def update_course_form(request, course_id): return render(request,'programme_curriculum/acad_admin/course_form.html',{'course':course, 'form':form, 'submitbutton': submitbutton,'version_error':version_error}) +@login_required(login_url='/accounts/login') def add_courseslot_form(request): user_details = ExtraInfo.objects.get(user = request.user) @@ -881,6 +908,7 @@ def add_courseslot_form(request): return render(request, 'programme_curriculum/acad_admin/add_courseslot_form.html',{'form':form, 'submitbutton': submitbutton, 'curriculum_id': curriculum_id}) +@login_required(login_url='/accounts/login') def edit_courseslot_form(request, courseslot_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -906,6 +934,7 @@ def edit_courseslot_form(request, courseslot_id): return render(request,'programme_curriculum/acad_admin/add_courseslot_form.html',{'courseslot':courseslot, 'form':form, 'submitbutton':submitbutton, 'curriculum_id': curriculum_id}) +@login_required(login_url='/accounts/login') def delete_courseslot(request, courseslot_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -931,6 +960,7 @@ def delete_courseslot(request, courseslot_id): # views.py +@login_required(login_url='/accounts/login') def add_batch_form(request): user_details = ExtraInfo.objects.get(user=request.user) des = HoldsDesignation.objects.all().filter(user=request.user).first() @@ -957,6 +987,7 @@ def add_batch_form(request): return render(request, 'programme_curriculum/acad_admin/add_batch_form.html', {'form': form, 'submitbutton': submitbutton}) +@login_required(login_url='/accounts/login') def edit_batch_form(request, batch_id): user_details = ExtraInfo.objects.get(user = request.user) @@ -985,6 +1016,7 @@ def edit_batch_form(request, batch_id): return render(request,'programme_curriculum/acad_admin/add_batch_form.html',{'batch':batch, 'form':form, 'submitbutton':submitbutton}) +@login_required(login_url='/accounts/login') def instigate_semester(request, semester_id): """ This function is used to add the semester information. @@ -1027,6 +1059,7 @@ def instigate_semester(request, semester_id): return render(request,'programme_curriculum/acad_admin/instigate_semester_form.html',{'semester':semester, 'form':form, 'submitbutton':submitbutton, 'curriculum_id':curriculum_id}) +@login_required(login_url='/accounts/login') def replicate_curriculum(request, curriculum_id): """ This function is used to replicate the previous curriculum into a new curriculum. @@ -1132,6 +1165,7 @@ def faculty_view_all_courses(request): return render(request, 'programme_curriculum/faculty/faculty_view_all_courses.html', {'courses': courses, 'coursefilter': coursefilter,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def faculty_view_a_course(request, course_id): """ views the details of a Course """ @@ -1150,6 +1184,7 @@ def faculty_view_a_course(request, course_id): return render(request, 'programme_curriculum/faculty/faculty_view_a_course.html', {'course': course,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def view_a_course_proposal_form(request,CourseProposal_id): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).first() @@ -1170,6 +1205,7 @@ def view_a_course_proposal_form(request,CourseProposal_id): return render(request, 'programme_curriculum/faculty/view_a_course_proposal.html', {'proposal': proposalform,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def new_course_proposal_file(request): des = HoldsDesignation.objects.all().filter(user = request.user).first() if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": @@ -1199,6 +1235,7 @@ def new_course_proposal_file(request): +@login_required(login_url='/accounts/login') def filetracking(request,proposal_id): @@ -1246,6 +1283,7 @@ def filetracking(request,proposal_id): +@login_required(login_url='/accounts/login') def inward_files(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).last() @@ -1276,6 +1314,7 @@ def inward_files(request): +@login_required(login_url='/accounts/login') def outward_files(request): user_details = ExtraInfo.objects.get(user = request.user) des = HoldsDesignation.objects.all().filter(user = request.user).last() @@ -1306,6 +1345,7 @@ def outward_files(request): return render(request, 'programme_curriculum/faculty/outward_course_forms.html',{'courseProposals': courseProposal,'design':request.session['currentDesignationSelected'],'data':data,'notifications': notifs,}) +@login_required(login_url='/accounts/login') def update_course_proposal_file(request, course_id): des = HoldsDesignation.objects.all().filter(user = request.user).first() if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor": @@ -1364,6 +1404,7 @@ def update_course_proposal_file(request, course_id): +@login_required(login_url='/accounts/login') def forward_course_forms(request,ProposalId): de= ProposalId des = HoldsDesignation.objects.all().filter(user = request.user).first() @@ -1488,6 +1529,7 @@ def forward_course_forms(request,ProposalId): return render(request,'programme_curriculum/faculty/forward.html',{'form':form,'receive_date':file.receive_date,'proposal':file2,'submitbutton': submitbutton,'id':Proposal_D}) +@login_required(login_url='/accounts/login') def view_inward_files(request,ProposalId): if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" or request.session['currentDesignationSelected'] == "Dean Academic": @@ -1519,6 +1561,7 @@ def view_inward_files(request,ProposalId): return render(request,'programme_curriculum/faculty/view_file.html',{'form':form,'receive_date':file.receive_date,'proposal':file2,'trackings':courseProposal,'file_info':file_data,'file_sucess':file_data2}) +@login_required(login_url='/accounts/login') def reject_form(request,ProposalId): if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" or request.session['currentDesignationSelected'] == "Dean Academic": @@ -1548,6 +1591,7 @@ def reject_form(request,ProposalId): return HttpResponseRedirect('/programme_curriculum/inward_files/') +@login_required(login_url='/accounts/login') def tracking_unarchive(request,ProposalId): if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" or request.session['currentDesignationSelected'] == "Dean Academic": pass @@ -1574,6 +1618,7 @@ def tracking_unarchive(request,ProposalId): +@login_required(login_url='/accounts/login') def tracking_archive(request,ProposalId): if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" or request.session['currentDesignationSelected'] == "Dean Academic": @@ -1598,6 +1643,7 @@ def tracking_archive(request,ProposalId): messages.success(request, "File Archived") return HttpResponseRedirect('/programme_curriculum/inward_files/') +@login_required(login_url='/accounts/login') def file_archive(request,FileId): if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" or request.session['currentDesignationSelected'] == "Dean Academic": pass @@ -1613,6 +1659,7 @@ def file_archive(request,FileId): file.save() return HttpResponseRedirect('/programme_curriculum/view_course_proposal_forms/') +@login_required(login_url='/accounts/login') def file_unarchive(request,FileId): if request.session['currentDesignationSelected'] == "Associate Professor" or request.session['currentDesignationSelected'] == "Professor" or request.session['currentDesignationSelected'] == "Assistant Professor" or request.session['currentDesignationSelected'] == "Dean Academic": pass