diff --git a/.cph/.C_Smilo_and_Monsters.cpp_aa54fc09d7bbf8dac06557abfb15306b.prob b/.cph/.C_Smilo_and_Monsters.cpp_aa54fc09d7bbf8dac06557abfb15306b.prob new file mode 100644 index 000000000..027eac70b --- /dev/null +++ b/.cph/.C_Smilo_and_Monsters.cpp_aa54fc09d7bbf8dac06557abfb15306b.prob @@ -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"} \ No newline at end of file diff --git a/FusionIIIT/applications/department/api/permissions.py b/FusionIIIT/applications/department/api/permissions.py new file mode 100644 index 000000000..2b870575b --- /dev/null +++ b/FusionIIIT/applications/department/api/permissions.py @@ -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() diff --git a/FusionIIIT/applications/department/api/serializers.py b/FusionIIIT/applications/department/api/serializers.py new file mode 100644 index 000000000..aa005ad31 --- /dev/null +++ b/FusionIIIT/applications/department/api/serializers.py @@ -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__') \ No newline at end of file diff --git a/FusionIIIT/applications/department/api/urls.py b/FusionIIIT/applications/department/api/urls.py new file mode 100644 index 000000000..23cc7ea9f --- /dev/null +++ b/FusionIIIT/applications/department/api/urls.py @@ -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'), + +] diff --git a/FusionIIIT/applications/department/api/views.py b/FusionIIIT/applications/department/api/views.py new file mode 100644 index 000000000..6cb310a57 --- /dev/null +++ b/FusionIIIT/applications/department/api/views.py @@ -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 \ No newline at end of file diff --git a/FusionIIIT/applications/department/models.py b/FusionIIIT/applications/department/models.py index a78b35171..dc9d7cc65 100644 --- a/FusionIIIT/applications/department/models.py +++ b/FusionIIIT/applications/department/models.py @@ -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") diff --git a/FusionIIIT/applications/department/urls.py b/FusionIIIT/applications/department/urls.py index b7338374a..ec74aff9c 100644 --- a/FusionIIIT/applications/department/urls.py +++ b/FusionIIIT/applications/department/urls.py @@ -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[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")) + +] \ No newline at end of file diff --git a/FusionIIIT/applications/department/views.py b/FusionIIIT/applications/department/views.py index d7056e164..2cfccfbfa 100644 --- a/FusionIIIT/applications/department/views.py +++ b/FusionIIIT/applications/department/views.py @@ -313,6 +313,7 @@ def faculty(): } + print(cse_f) return context_f def approved(request): diff --git a/FusionIIIT/applications/globals/migrations/0002_auto_20231128_1529.py b/FusionIIIT/applications/globals/migrations/0002_auto_20231128_1529.py new file mode 100644 index 000000000..31f363439 --- /dev/null +++ b/FusionIIIT/applications/globals/migrations/0002_auto_20231128_1529.py @@ -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), + ), + ] diff --git a/docker-compose.yml b/docker-compose.yml index e353d1423..e0256f11f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -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 diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 655f946fd..f58107a81 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -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 diff --git a/fusionlab_backup_New.sql b/fusionlab_backup_New.sql new file mode 100644 index 000000000..d50b32c16 Binary files /dev/null and b/fusionlab_backup_New.sql differ diff --git a/requirements.txt b/requirements.txt index 4cc3a0a30..fc7464f24 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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