Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5c61a54
GAD-5: Fix responsiveness (#1125)
Lawful2002 Feb 23, 2023
9a4fc4d
Merge branch 'main' into gad-5
akshatnema Mar 15, 2023
b295d7f
Merge branch 'main' into gad-5
akshatnema Mar 15, 2023
72e34e7
Merge branch 'main' into gad-5
akshatnema Mar 18, 2023
721ee82
Merge branch 'main' into gad-5
akshatnema Mar 19, 2023
91ef4e9
Merge branch 'main' into gad-5
akshatnema Mar 23, 2023
da49572
Merge branch 'main' into gad-5
akshatnema Mar 26, 2023
e49a94c
updated alerts.html and alert1.html for implementing delete notification
kishankoushal Feb 20, 2024
c1359b7
Added pylint (#1302)
hardiksharma11 Mar 11, 2024
ed210c1
Revert "Added pylint (#1302)" (#1324)
ChaudharyRaman Mar 11, 2024
47af12c
GAD -5 Dashboard Changes (#1325)
BlackHAWK2001 Mar 11, 2024
ed642ee
dashboard and usercard updated (#1329)
Arpittak Mar 12, 2024
6de59f0
changes in programme_cuuriculam,adding version to models (#1330)
anudeeps0306 Mar 12, 2024
4ca5ae5
made few changes for delete notification
kishankoushal Mar 13, 2024
5e5c9d5
created sidebar for notifications
kishankoushal Mar 13, 2024
d40e94d
Fixing ui bugs (#1335)
SukulSarve Mar 17, 2024
58a32b0
Merge branch 'FusionIIIT:main' into main
kishankoushal Mar 17, 2024
bd60014
Merge branch 'main' of https://github.com/kishankoushal/Fusion
kishankoushal Mar 17, 2024
b1a62ed
Merge remote-tracking branch 'upstream/gad-5' into gad-5_2021
kishankoushal Mar 18, 2024
f27a5a4
updated dashboard
kishankoushal Mar 18, 2024
c29708d
Merge pull request #1 from kishankoushal/gad-5_2021
kishankoushal Mar 18, 2024
c1d43df
updated dashboard
kishankoushal Mar 19, 2024
a3dbf4b
updated dashboard
kishankoushal Mar 19, 2024
79ec926
Merge remote-tracking branch 'upstream/os-3' into gad-5_2021
kishankoushal Mar 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions FusionIIIT/Fusion/context_processors.py
Original file line number Diff line number Diff line change
@@ -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'),
}
48 changes: 48 additions & 0 deletions FusionIIIT/Fusion/middleware/custom_middleware.py
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions FusionIIIT/Fusion/settings/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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',
],
},
},
Expand Down
3 changes: 2 additions & 1 deletion FusionIIIT/applications/globals/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'),
]
87 changes: 82 additions & 5 deletions FusionIIIT/applications/globals/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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/*
Expand All @@ -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())
Expand Down Expand Up @@ -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("/")
Expand Down Expand Up @@ -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'))
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
office_module_DeanRSPC_notif,
research_procedures_notif)

# import user


class LeaveModuleNotificationAPIView(APIView):
def post(self, request, *args, **kwargs):
Expand Down
4 changes: 3 additions & 1 deletion FusionIIIT/applications/notifications_extension/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ def delete(request, slug=None):
notification = get_object_or_404(
Notification, recipient=request.user, id=notification_id)
notification.delete()
return HttpResponseRedirect('/')
previous_page = request.META.get('HTTP_REFERER', '/')
# Redirect to the previous page or the home page if the referrer is not available
return HttpResponseRedirect(previous_page)
# return HttpResponseRedirect('dashboard/')
def mark_as_read_and_redirect(request, slug=None):
notification_id = slug2id(slug)
Expand Down
53 changes: 30 additions & 23 deletions FusionIIIT/applications/programme_curriculum/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from django.utils.translation import gettext_lazy as _
from django.core.exceptions import ValidationError
from applications.globals.models import ExtraInfo
from django.core.validators import MinValueValidator, MaxValueValidator, DecimalValidator

# Create your models here.

Expand All @@ -26,7 +27,8 @@
('Design', 'Design'),
('Manufacturing', 'Manufacturing'),
('Management Science', 'Management Science'),
('Optional Elective', 'Optional Elective'),
('Open Elective', 'Open Elective'),
('Swayam','Swayam'),
('Project', 'Project'),
('Optional', 'Optional'),
('Others', 'Others')
Expand Down Expand Up @@ -59,7 +61,7 @@ class Programme(models.Model):
name = models.CharField(max_length=70, null=False, unique=True, blank=False)
programme_begin_year = models.PositiveIntegerField(default=datetime.date.today().year, null=False)

def __str__(self):
def _str_(self):
return str(self.category + " - "+ self.name)

@property
Expand Down Expand Up @@ -90,7 +92,7 @@ class Discipline(models.Model):
acronym = models.CharField(max_length=10, null=False, default="", blank=False)
programmes = models.ManyToManyField(Programme, blank=True)

def __str__(self):
def _str_(self):
return str(self.name) + " " + str(self.acronym)

@property
Expand All @@ -117,15 +119,19 @@ class Curriculum(models.Model):
'''
programme = models.ForeignKey(Programme, on_delete=models.CASCADE, null=False)
name = models.CharField(max_length=100, null=False, blank=False)
version = models.PositiveIntegerField(default=1, null=False)
version = models.DecimalField(
max_digits=2,
decimal_places=1,
default=1.0,
validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)])
working_curriculum = models.BooleanField(default=True, null=False)
no_of_semester = models.PositiveIntegerField(default=1, null=False)
min_credit = models.PositiveIntegerField(default=0, null=False)

class Meta:
unique_together = ('name', 'version',)

def __str__(self):
def _str_(self):
return str(self.name + " v" + str(self.version))

@property
Expand Down Expand Up @@ -166,8 +172,8 @@ class Semester(models.Model):
class Meta:
unique_together = ('curriculum', 'semester_no',)

def __str__(self):
return str(Curriculum.__str__(self.curriculum) + ", sem-" + str(self.semester_no))
def _str_(self):
return str(Curriculum._str_(self.curriculum) + ", sem-" + str(self.semester_no))

@property
def courseslots(self):
Expand Down Expand Up @@ -207,8 +213,13 @@ class Course(models.Model):


'''
code = models.CharField(max_length=10, null=False, unique=True, blank=False)
name = models.CharField(max_length=100, null=False, unique=True, blank=False)
code = models.CharField(max_length=10, null=False, blank=False)
name = models.CharField(max_length=100, null=False, blank=False)
version = models.DecimalField(
max_digits=2,
decimal_places=1,
default=1.0,
validators=[MinValueValidator(1.0), DecimalValidator(max_digits=2, decimal_places=1)])
credit = models.PositiveIntegerField(default=0, null=False, blank=False)
lecture_hours = PositiveIntegerField(null=True, )
tutorial_hours = PositiveIntegerField(null=True)
Expand All @@ -228,12 +239,14 @@ class Course(models.Model):
ref_books = models.TextField()
working_course = models.BooleanField(default=True)
disciplines = models.ManyToManyField(Discipline, blank=True)
latest_version = models.BooleanField(default=True)

class Meta:
unique_together = ('code', 'name',)
unique_together = ('code','version')

def __str__(self):
return str(self.code + " - " +self.name)
def _str_(self):
return str(self.code + " - " +self.name+"- v"+str(self.version))


@property
def courseslots(self):
Expand Down Expand Up @@ -268,7 +281,7 @@ class Batch(models.Model):
class Meta:
unique_together = ('name', 'discipline', 'year',)

def __str__(self):
def _str_(self):
return str(self.name) + " " + str(self.discipline.acronym) + " " + str(self.year)


Expand All @@ -277,11 +290,6 @@ class CourseSlot(models.Model):
Current Purpose : To store the details regarding a course slot
Course slot : is defined as per the curriculum for a programme to have specific type of courses
for a given semester





ATTRIBUTES :

semester(programme_curriculum.Semester) - [not nullable] to denote link to the semester details for which the courseslot is made
Expand All @@ -304,8 +312,8 @@ class CourseSlot(models.Model):
max_registration_limit = models.PositiveIntegerField(default = 1000)


def __str__(self):
return str(Semester.__str__(self.semester) + ", " + self.name)
def _str_(self):
return str(Semester._str_(self.semester) + ", " + self.name)

class Meta:
unique_together = ('semester', 'name', 'type')
Expand All @@ -324,6 +332,5 @@ class Meta:
unique_together = ('course_id', 'instructor_id', 'batch_id')


def __self__(self):
return '{} - {}'.format(self.course_id, self.instructor_id)

def _self_(self):
return '{} - {}'.format(self.course_id, self.instructor_id)
1 change: 0 additions & 1 deletion FusionIIIT/notification/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from django.shortcuts import render
from requests import Response
from notifications.signals import notify

# Create your views here.

def leave_module_notif(sender, recipient, type, date=None):
Expand Down
Loading