diff --git a/FusionIIIT/Fusion/context_processors.py b/FusionIIIT/Fusion/context_processors.py new file mode 100644 index 000000000..54566d56e --- /dev/null +++ b/FusionIIIT/Fusion/context_processors.py @@ -0,0 +1,5 @@ +def global_vars(request): + return { + 'global_var': request.session.get('currentDesignationSelected', 'default_value'), + 'global_var2': request.session.get('allDesignations', 'default_value2'), + } \ No newline at end of file diff --git a/FusionIIIT/Fusion/middleware/custom_middleware.py b/FusionIIIT/Fusion/middleware/custom_middleware.py new file mode 100644 index 000000000..f77873534 --- /dev/null +++ b/FusionIIIT/Fusion/middleware/custom_middleware.py @@ -0,0 +1,48 @@ +# custom_middleware.py +from django.contrib.auth.signals import user_logged_in +from django.dispatch import receiver +from applications.globals.models import (ExtraInfo, Feedback, HoldsDesignation, + Issue, IssueImage, DepartmentInfo) +from django.shortcuts import get_object_or_404, redirect, render + +def user_logged_in_middleware(get_response): + @receiver(user_logged_in) + def user_logged_in_handler(sender, user, request, **kwargs): + if 'function_executed' not in request.session: + # Run the function only if the flag is not set + # Assuming user is a model with the desired data field, retrieve the data + # For example, if your User model has a field named 'custom_field', you can access it like: + if user.is_authenticated: + desig = list(HoldsDesignation.objects.select_related('user','working','designation').all().filter(working = request.user).values_list('designation')) + print(desig) + b = [i for sub in desig for i in sub] + design = HoldsDesignation.objects.select_related('user','designation').filter(working=request.user) + + designation=[] + + designation.append(str(user.extrainfo.user_type)) + for i in design: + if str(i.designation) != str(user.extrainfo.user_type): + print('-------') + print(i.designation) + print(user.extrainfo.user_type) + print('') + designation.append(str(i.designation)) + + for i in designation: + print(i) + + request.session['currentDesignationSelected'] = designation[0] + request.session['allDesignations'] = designation + print("logged iN") + + # Set the flag in the session to indicate that the function has bee+n executed + request.session['function_executed'] = True + + def middleware(request): + if request.user.is_authenticated: + user_logged_in_handler(request.user, request.user, request) + response = get_response(request) + return response + + return middleware \ No newline at end of file diff --git a/FusionIIIT/Fusion/settings/common.py b/FusionIIIT/Fusion/settings/common.py index b98ea6960..fabe81ec2 100644 --- a/FusionIIIT/Fusion/settings/common.py +++ b/FusionIIIT/Fusion/settings/common.py @@ -163,6 +163,7 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'Fusion.middleware.custom_middleware.user_logged_in_middleware', ] ROOT_URLCONF = 'Fusion.urls' @@ -178,6 +179,7 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'Fusion.context_processors.global_vars', ], }, }, diff --git a/FusionIIIT/applications/filetracking/views.py b/FusionIIIT/applications/filetracking/views.py index 397045b39..c100a3d92 100644 --- a/FusionIIIT/applications/filetracking/views.py +++ b/FusionIIIT/applications/filetracking/views.py @@ -16,6 +16,7 @@ from .sdk.methods import * from .decorators import * + @login_required(login_url="/accounts/login/") @user_is_student def filetracking(request): @@ -39,7 +40,7 @@ def filetracking(request): holdsdesignations - The HoldsDesignation object. context - Holds data needed to make necessary changes in the template. """ - print(request.POST) + if request.method == "POST": try: if 'save' in request.POST: @@ -132,35 +133,37 @@ def filetracking(request): extrainfo = ExtraInfo.objects.select_related('user', 'department').all() holdsdesignations = HoldsDesignation.objects.select_related( 'user', 'working', 'designation').all() - designations = get_designation(request.user) + + designation_name = request.session.get('currentDesignationSelected', 'default_value') + username = request.user + designation_id = get_HoldsDesignation_obj( + username, designation_name).id context = { 'file': file, 'extrainfo': extrainfo, 'holdsdesignations': holdsdesignations, - 'designations': designations, + 'designation_name': designation_name, + 'designation_id': designation_id } return render(request, 'filetracking/composefile.html', context) @login_required(login_url="/accounts/login") def draft_design(request): + """ + This function redirects the user to the drafts page of designation selected in dropdown + @param: + request - trivial. """ - The function is used to get the designation of the user and renders it on draft template. - @param: - request - trivial. - - @variables: + dropdown_design = request.session.get( + 'currentDesignationSelected', 'default_value') + username = request.user + dropdown_HoldsDesignation_obj = get_HoldsDesignation_obj( + username, dropdown_design) - - context - Holds data needed to make necessary changes in the template. - """ - designation = get_designation(request.user) - context = { - 'designation': designation, - } - return render(request, 'filetracking/draft_design.html', context) + return redirect('/filetracking/drafts/' + str(dropdown_HoldsDesignation_obj.id)) @login_required(login_url="/accounts/login") @@ -178,6 +181,8 @@ def drafts_view(request, id): + + """ user_HoldsDesignation_obj = HoldsDesignation.objects.select_related( 'user', 'working', 'designation').get(pk=id) @@ -196,9 +201,28 @@ def drafts_view(request, id): draft_files = add_uploader_department_to_files_list(draft_files) + user_HoldsDesignation_obj = HoldsDesignation.objects.select_related( + 'user', 'working', 'designation').get(pk=id) + s = str(user_HoldsDesignation_obj).split(" - ") + designation = s[1] + draft_files = view_drafts( + username=user_HoldsDesignation_obj.user, + designation=user_HoldsDesignation_obj.designation, + src_module='filetracking' + ) + + # Correct upload_date type + for f in draft_files: + f['upload_date'] = parse_datetime(f['upload_date']) + f['uploader'] = get_extra_info_object_from_id(f['uploader']) + + draft_files = add_uploader_department_to_files_list(draft_files) + context = { 'draft_files': draft_files, 'designations': designation, + 'draft_files': draft_files, + 'designations': designation, } return render(request, 'filetracking/drafts.html', context) @@ -216,15 +240,38 @@ def outbox_view(request, id): id - user id @variables: + outward_files - File objects filtered by current_id i.e, present working user. outward_files - File objects filtered by current_id i.e, present working user. context - Holds data needed to make necessary changes in the template. + """ user_HoldsDesignation_obj = HoldsDesignation.objects.select_related( 'user', 'working', 'designation').get(pk=id) s = str(user_HoldsDesignation_obj).split(" - ") designation = s[1] + outward_files = view_outbox(username=user_HoldsDesignation_obj.user, + designation=user_HoldsDesignation_obj.designation, + src_module='filetracking') + + for f in outward_files: + last_forw_tracking = get_last_forw_tracking_for_user(file_id=f['id'], + username=user_HoldsDesignation_obj.user, + designation=user_HoldsDesignation_obj.designation) + f['sent_to_user'] = last_forw_tracking.receiver_id + f['sent_to_design'] = last_forw_tracking.receive_design + f['last_sent_date'] = last_forw_tracking.forward_date + + f['upload_date'] = parse_datetime(f['upload_date']) + f['uploader'] = get_extra_info_object_from_id(f['uploader']) + + outward_files = add_uploader_department_to_files_list(outward_files) + user_HoldsDesignation_obj = HoldsDesignation.objects.select_related( + 'user', 'working', 'designation').get(pk=id) + s = str(user_HoldsDesignation_obj).split(" - ") + designation = s[1] + outward_files = view_outbox(username=user_HoldsDesignation_obj.user, designation=user_HoldsDesignation_obj.designation, src_module='filetracking') @@ -246,6 +293,8 @@ def outbox_view(request, id): 'out_files': outward_files, 'viewer_designation': designation, + 'out_files': outward_files, + 'viewer_designation': designation, } return render(request, 'filetracking/outbox.html', context) @@ -259,8 +308,10 @@ def inbox_view(request, id): @param: request - trivial. id - HoldsDesignation object id + id - HoldsDesignation object id @variables: + inward_files - File object with additional sent by information inward_files - File object with additional sent by information context - Holds data needed to make necessary changes in the template. @@ -289,51 +340,74 @@ def inbox_view(request, id): inward_files = add_uploader_department_to_files_list(inward_files) + user_HoldsDesignation_obj = HoldsDesignation.objects.select_related( + 'user', 'working', 'designation').get(pk=id) + s = str(user_HoldsDesignation_obj).split(" - ") + designation = s[1] + inward_files = view_inbox( + username=user_HoldsDesignation_obj.user, + designation=user_HoldsDesignation_obj.designation, + src_module='filetracking' + ) + + # correct upload_date type and add recieve_date + for f in inward_files: + f['upload_date'] = parse_datetime(f['upload_date']) + + last_recv_tracking = get_last_recv_tracking_for_user(file_id=f['id'], + username=user_HoldsDesignation_obj.user, + designation=user_HoldsDesignation_obj.designation) + f['receive_date'] = last_recv_tracking.receive_date + f['uploader'] = get_extra_info_object_from_id(f['uploader']) + + inward_files = add_uploader_department_to_files_list(inward_files) + + context = { 'in_file': inward_files, 'designations': designation, + 'in_file': inward_files, + 'designations': designation, } return render(request, 'filetracking/inbox.html', context) + return render(request, 'filetracking/inbox.html', context) @login_required(login_url="/accounts/login") def outward(request): """ - This function fetches the different designations of the user and renders it on outward template + This function redirects the user to the outbox page of designation selected in dropdown @param: request - trivial. + """ - @variables: - context - Holds the different designation data of the user + dropdown_design = request.session.get( + 'currentDesignationSelected', 'default_value') + username = request.user + dropdown_HoldsDesignation_obj = get_HoldsDesignation_obj( + username, dropdown_design) + + return redirect('/filetracking/outbox/' + str(dropdown_HoldsDesignation_obj.id)) - """ - designation = get_designation(request.user) - context = { - 'designation': designation, - } - return render(request, 'filetracking/outward.html', context) @login_required(login_url="/accounts/login") def inward(request): - """ - This function fetches the different designations of the user and renders it on inward template - - + """ + This function redirects the user to the inbox page of designation selected in dropdown @param: request - trivial. - - @variables: - context - Holds the different designation data of the user """ - designation = get_designation(request.user) - context = { - 'designation': designation, - } - return render(request, 'filetracking/inward.html', context) + dropdown_design = request.session.get( + 'currentDesignationSelected', 'default_value') + username = request.user + dropdown_HoldsDesignation_obj = get_HoldsDesignation_obj( + username, dropdown_design) + + return redirect('/filetracking/inbox/' + str(dropdown_HoldsDesignation_obj.id)) @login_required(login_url = "/accounts/login") @@ -527,13 +601,19 @@ def forward(request, id): @login_required(login_url="/accounts/login") def archive_design(request): - designation = HoldsDesignation.objects.select_related( - 'user', 'working', 'designation').filter(user=request.user) + """ + This function redirects the user to the archive page of designation selected in dropdown + @param: + request - trivial. + """ - context = { - 'designation': designation, - } - return render(request, 'filetracking/archive_design.html', context) + dropdown_design = request.session.get( + 'currentDesignationSelected', 'default_value') + username = request.user + dropdown_HoldsDesignation_obj = get_HoldsDesignation_obj( + username, dropdown_design) + + return redirect('/filetracking/archive/' + str(dropdown_HoldsDesignation_obj.id)) @login_required(login_url="/accounts/login") diff --git a/FusionIIIT/applications/globals/urls.py b/FusionIIIT/applications/globals/urls.py index f8d82ee71..2dea4e77d 100644 --- a/FusionIIIT/applications/globals/urls.py +++ b/FusionIIIT/applications/globals/urls.py @@ -23,5 +23,6 @@ # Endpoint to reset all passwords in DEV environment url(r'^resetallpass/$', views.reset_all_pass, name='resetallpass'), # API urls - url(r'^api/', include('applications.globals.api.urls')) + url(r'^api/', include('applications.globals.api.urls')), + url(r'^update_global_variable/$', views.update_global_variable, name='update_global_var'), ] diff --git a/FusionIIIT/applications/globals/views.py b/FusionIIIT/applications/globals/views.py index a7f3886c9..5b023abb5 100644 --- a/FusionIIIT/applications/globals/views.py +++ b/FusionIIIT/applications/globals/views.py @@ -740,21 +740,26 @@ def dashboard(request): } # 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': + 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): +def profile(request, username=None): """ Generic endpoint for views. If it's a faculty, redirects to /eis/profile/* @@ -768,16 +773,76 @@ def profile(request, username=None): """ 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') - current = HoldsDesignation.objects.select_related('user','working','designation').filter(Q(working=user, designation__name="student")) + + 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()) @@ -979,6 +1044,7 @@ def profile(request, username=None): 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("/") @@ -1176,4 +1242,15 @@ def search(request): if len(search_results) == 0: search_results = [] context = {'sresults':search_results} - return render(request, "globals/search.html", context) + 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 + print(selected_option) + print(request.session['currentDesignationSelected']) + return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) + # Redirect to home if not a POST request or some issue occurs + return HttpResponseRedirect(reverse('home')) diff --git a/FusionIIIT/templates/academic_procedures/academic.html b/FusionIIIT/templates/academic_procedures/academic.html old mode 100755 new mode 100644 index 6b04a54fb..35eebf446 --- a/FusionIIIT/templates/academic_procedures/academic.html +++ b/FusionIIIT/templates/academic_procedures/academic.html @@ -22,6 +22,39 @@ } + + {% endblock css %} @@ -30,13 +63,12 @@ {% include 'dashboard/navbar.html' %} {% endblock %} -
+
- {% comment %}The left-margin segment!{% endcomment %} -
+ {% comment %}The left-rail segment starts here!{% endcomment %} -
+
{% comment %}The user image card starts here!{% endcomment %} {% block usercard %} {% include 'globals/usercard.html' %} @@ -46,8 +78,8 @@
{% comment %}The Tab-Menu starts here!{% endcomment %} -