Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ac-6 : week-5 : add staff view, complete faculty view, add alumni details #1311

Merged
merged 6 commits into from
Feb 24, 2024
Merged
Changes from 1 commit
Commits
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
Prev Previous commit
Next Next commit
ac-6 : week-5: create api (#1294)
* feat: create api

* feat:create more routes
aryan0723 authored and rush1kesh-010 committed Feb 23, 2024
commit c0b78947dd95fe56840b25a2dda270b4803eb243
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"C. Smilo and Monsters","group":"Codeforces - Codeforces Round 907 (Div. 2)","url":"https://codeforces.com/problemset/problem/1891/C","interactive":false,"memoryLimit":256,"timeLimit":1000,"tests":[{"id":1702363970258,"input":"4\n4\n1 3 1 1\n4\n1 2 1 1\n6\n3 2 1 5 2 4\n2\n1 6","output":"4\n4\n11\n5"}],"testType":"single","input":{"type":"stdin"},"output":{"type":"stdout"},"languages":{"java":{"mainClass":"Main","taskClass":"CSmiloAndMonsters"}},"batch":{"id":"637d1d54-3663-425a-95e0-ed17885bba02","size":1},"srcPath":"c:\\Users\\DELL\\Documents\\Fusion\\Fusion\\C_Smilo_and_Monsters.cpp"}
18 changes: 18 additions & 0 deletions FusionIIIT/applications/department/api/permissions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from rest_framework import permissions
from django.shortcuts import get_object_or_404
from applications.academic_information.models import ExtraInfo
from applications.globals.models import User


class IsFacultyStaffOrReadOnly(permissions.BasePermission):
"""
Custom permission to only allow faculty and staff to edit it.
"""

def has_permission(self, request, view):
# Read permissions are allowed to any request,
# so we'll always allow GET, HEAD or OPTIONS requests.
if request.method in permissions.SAFE_METHODS:
return True
#only faculty and staff are able to make post request
return not request.user.holds_designations.filter(designation__name='student').exists()
62 changes: 62 additions & 0 deletions FusionIIIT/applications/department/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from rest_framework import serializers
from applications.department.models import Announcements
from applications.academic_information.models import Spi, Student
from applications.globals.models import (Designation, ExtraInfo,
HoldsDesignation,Faculty)
from applications.eis.models import (faculty_about, emp_research_projects)


class AnnouncementSerializer(serializers.ModelSerializer):
class Meta:
model = Announcements
fields = ('__all__')

extra_kwargs = {
'maker_id': {'required': False}
}

def create(self, validated_data):
user = self.context['request'].user
user_info = ExtraInfo.objects.all().select_related('user','department').filter(user=user).first()
validated_data['maker_id'] = user_info
return Announcements.objects.create(**validated_data)

class ExtraInfoSerializer(serializers.ModelSerializer):
class Meta:
model = ExtraInfo
fields = ('__all__')

class SpiSerializer(serializers.ModelSerializer):
class Meta:
model = Spi
fields = ('__all__')

class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ('__all__')

class DesignationSerializer(serializers.ModelSerializer):
class Meta:
model = Designation
fields = ('__all__')

class HoldsDesignationSerializer(serializers.ModelSerializer):
class Meta:
model = HoldsDesignation
fields = ('__all__')

class FacultySerializer(serializers.ModelSerializer):
class Meta:
model = Faculty
fields = ('__all__')

class faculty_aboutSerializer(serializers.ModelSerializer):
class Meta:
model = faculty_about
fields = ('__all__')

class emp_research_projectsSerializer(serializers.ModelSerializer):
class Meta:
model = emp_research_projects
fields = ('__all__')
11 changes: 11 additions & 0 deletions FusionIIIT/applications/department/api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.conf.urls import url

from . import views

urlpatterns = [
url(r'announcements/$', views.ListCreateAnnouncementView.as_view(),name='announcements'),
url(r'dep-main/$', views.DepMainAPIView.as_view(), name='depmain'),
url(r'fac-view/$', views.FacAPIView.as_view(), name='facapi'),
url(r'staff-view/$',views.StaffAPIView.as_view(),name='staffapi'),

]
171 changes: 171 additions & 0 deletions FusionIIIT/applications/department/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
from rest_framework import generics
from rest_framework.views import APIView
from applications.department.models import Announcements
from applications.academic_information.models import Spi, Student
from applications.globals.models import (Designation, ExtraInfo,
HoldsDesignation,Faculty)
from applications.eis.models import (faculty_about, emp_research_projects)
from .serializers import (AnnouncementSerializer,ExtraInfoSerializer,SpiSerializer,StudentSerializer,DesignationSerializer
,HoldsDesignationSerializer,FacultySerializer,faculty_aboutSerializer,emp_research_projectsSerializer)
from rest_framework.permissions import IsAuthenticated
from .permissions import IsFacultyStaffOrReadOnly
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.contrib.auth.models import User
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth.decorators import login_required
from django.urls import reverse
from datetime import date
from notification.views import department_notif


class ListCreateAnnouncementView(generics.ListCreateAPIView):
queryset = Announcements.objects.all()
serializer_class = AnnouncementSerializer
permission_classes = (IsAuthenticated, IsFacultyStaffOrReadOnly)


class DepMainAPIView(APIView):
def get(self, request):
user = request.user
usrnm = get_object_or_404(User, username=user.username)
user_info = ExtraInfo.objects.all().select_related('user', 'department').filter(user=usrnm).first()
ann_maker_id = user_info.id
user_info = ExtraInfo.objects.all().select_related('user', 'department').get(id=ann_maker_id)

fac_view = user.holds_designations.filter(designation__name='faculty').exists()
student = user.holds_designations.filter(designation__name='student').exists()
staff = user.holds_designations.filter(designation__name='staff').exists()

context = browse_announcements()
context_f = faculty()
user_designation = ""

if fac_view:
user_designation = "faculty"
elif student:
user_designation = "student"
else:
user_designation = "staff"

# serailizing the data
# announcements_serailizer = AnnouncementSerializer(context, many=True)


response_data = {
"user_designation": user_designation,
"announcements": context,
"fac_list": context_f
}


return Response(data = response_data, status=status.HTTP_200_OK)
# return Response(data = response_data, status=status.HTTP_200_OK)

class FacAPIView(APIView):
def get(self,request):
usrnm = get_object_or_404(User, username=request.user.username)
user_info = ExtraInfo.objects.all().select_related('user','department').filter(user=usrnm).first()


context = browse_announcements()


# Serialize the data into JSON formats
data = {
"user_designation": user_info.user_type,
"announcements": list(context.values()), # Assuming 'context' is a dictionary
}

return Response(data)

class StaffAPIView(APIView):
def get(self,request):
usrnm = get_object_or_404(User, username=request.user.username)
user_info = ExtraInfo.objects.all().select_related('user','department').filter(user=usrnm).first()


context = browse_announcements()


# Serialize the data into JSON formats
data = {
"user_designation": user_info.user_type,
"announcements": list(context.values()), # Assuming 'context' is a dictionary
}

return Response(data)


def browse_announcements():
"""
This function is used to browse Announcements Department-Wise
made by different faculties and admin.

@variables:
cse_ann - Stores CSE Department Announcements
ece_ann - Stores ECE Department Announcements
me_ann - Stores ME Department Announcements
sm_ann - Stores SM Department Announcements
all_ann - Stores Announcements intended for all Departments
context - Dictionary for storing all above data

"""
cse_ann = Announcements.objects.filter(department="CSE")
ece_ann = Announcements.objects.filter(department="ECE")
me_ann = Announcements.objects.filter(department="ME")
sm_ann = Announcements.objects.filter(department="SM")
all_ann = Announcements.objects.filter(department="ALL")

# serailizing the data
cse_ann_serialized = AnnouncementSerializer(cse_ann, many=True)
ece_ann_serialized = AnnouncementSerializer(ece_ann, many=True)
me_ann_serialized = AnnouncementSerializer(me_ann, many=True)
sm_ann_serialized = AnnouncementSerializer(sm_ann, many=True)
all_ann_serialized = AnnouncementSerializer(all_ann, many=True)

context = {
"cse" : cse_ann_serialized.data,
"ece" : ece_ann_serialized.data,
"me" : me_ann_serialized.data,
"sm" : sm_ann_serialized.data,
"all" : all_ann_serialized.data
}

return context

def faculty():
"""
This function is used to Return data of Faculties Department-Wise.

@variables:
cse_f - Stores data of faculties from CSE Department
ece_f - Stores data of faculties from ECE Department
me_f - Stores data of faculties from ME Department
sm_f - Stores data of faculties from ME Department
context_f - Stores all above variables in Dictionary

"""
cse_f=ExtraInfo.objects.filter(department__name='CSE',user_type='faculty')
ece_f=ExtraInfo.objects.filter(department__name='ECE',user_type='faculty')
me_f=ExtraInfo.objects.filter(department__name='ME',user_type='faculty')
sm_f=ExtraInfo.objects.filter(department__name='SM',user_type='faculty')
staff=ExtraInfo.objects.filter(user_type='staff')

# serailizing the data
cse_f = ExtraInfoSerializer(cse_f, many=True)
ece_f = ExtraInfoSerializer(ece_f, many=True)
me_f = ExtraInfoSerializer(me_f, many=True)
sm_f = ExtraInfoSerializer(sm_f, many=True)
staff = ExtraInfoSerializer(staff, many=True)


context_f = {
"cse_f" : cse_f.data,
"ece_f" : ece_f.data,
"me_f" : me_f.data,
"sm_f" : sm_f.data,
"staff" : staff.data,
}
return context_f
2 changes: 1 addition & 1 deletion FusionIIIT/applications/department/models.py
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ def __str__(self):

class Announcements(models.Model):
maker_id = models.ForeignKey(ExtraInfo, on_delete=models.CASCADE)
ann_date = models.DateTimeField(default="04-04-2021")
ann_date = models.DateTimeField(auto_now_add=True)
message = models.CharField(max_length=200)
batch = models.CharField(max_length=40,default="Year-1")
department = models.CharField(max_length=40,default="ALL")
8 changes: 6 additions & 2 deletions FusionIIIT/applications/department/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.conf.urls import url
from django.urls import include

from . import views

@@ -11,5 +12,8 @@
url(r'^staffView/$', views.staff_view, name='staff_view'),
url(r'^All_Students/(?P<bid>[0-9]+)/$', views.all_students,name='all_students'),
url(r'^approved/$', views.approved, name='approved'),
url(r'^deny/$', views.deny, name='deny')
]
url(r'^deny/$', views.deny, name='deny'),

url(r'^api/', include("applications.department.api.urls"))

]
1 change: 1 addition & 0 deletions FusionIIIT/applications/department/views.py
Original file line number Diff line number Diff line change
@@ -313,6 +313,7 @@ def faculty():


}
print(cse_f)
return context_f

def approved(request):
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.5 on 2023-11-28 15:29

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('globals', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='extrainfo',
name='user_status',
field=models.CharField(choices=[('NEW', 'NEW'), ('PRESENT', 'PRESENT')], default='PRESENT', max_length=50),
),
]
18 changes: 1 addition & 17 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,5 @@
version: "3.9"
services:
db:
image: postgres:13-alpine
restart: always
volumes:
- /private/var/lib/postgresql:/var/lib/postgresql/data
environment:
- PGDATA=/var/lib/postgresql/data/some_name/
- POSTGRES_DB=fusionlab
- POSTGRES_USER=fusion_admin
- POSTGRES_PASSWORD=hello123
ports:
- "5432:5432"
app:
build:
context: .
@@ -20,9 +8,5 @@ services:
volumes:
- .:/home/app
ports:
- 8000:8000
- 8000
command: /bin/bash docker-entrypoint.sh
environment:
- DB_HOST=db
depends_on:
- db
11 changes: 3 additions & 8 deletions docker-entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
#!/bin/bash

# Apply database migrations
echo "Apply database migrations"
# python FusionIIIT/manage.py makemigrations
# python FusionIIIT/manage.py migrate

# Start server
python FusionIIIT/manage.py makemigrations &&
python FusionIIIT/manage.py migrate &&
echo "Starting server"
python FusionIIIT/manage.py runserver 0.0.0.0:8000
python FusionIIIT/manage.py runserver
Binary file added fusionlab_backup_New.sql
Binary file not shown.
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
amqp==5.0.2
arabic-reshaper==2.1.1
arabic-reshaper==3.0.0
asgiref==3.3.1
attrs==20.3.0
beautifulsoup4==4.9.3