Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
123 changes: 123 additions & 0 deletions FusionIIIT/applications/programme_curriculum/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
from rest_framework import serializers
from applications.programme_curriculum.models import Programme, Discipline, Curriculum, Semester, Course, Batch, CourseSlot, CourseInstructor

# this is for Programme model ....


class ProgrammeSerializer(serializers.ModelSerializer):
discipline = serializers.SerializerMethodField()
programmes = serializers.SerializerMethodField()

def get_discipline(self, obj):
disciplines = obj.get_discipline_objects.all()
return ', '.join([discipline.name for discipline in disciplines]) # Join disciplines into a single string

def get_programmes(self, obj):
return obj.name

class Meta:
model = Programme
fields = [ 'programmes', 'discipline']



# this is for Discipline ...
class DisciplineSerializer(serializers.ModelSerializer):
class Meta:
model = Discipline
fields = "__all__"



# this is for Curriculum ....
# fields in fronted form --> name, version , batch , no of semester
class BatchSerializer(serializers.ModelSerializer):
class Meta:
model = Batch
fields = ['name', 'year']



class CurriculumBatchSerializer(serializers.ModelSerializer):
class Meta:
model = Curriculum
fields = ['name', 'version', 'no_of_semester']

class CurriculumSerializer(serializers.ModelSerializer):
class Meta:
model = Curriculum
fields = ['name', 'version', 'batches', 'no_of_semester']

def to_representation(self, instance):
representation = super().to_representation(instance)
batches = instance.batches.all()
representations = []
for batch in batches:
batch_representation = {
'name': representation['name'],
'version': representation['version'],
'no_of_semester': representation['no_of_semester'],
'batch': f"{representation['name']} {batch.year}"
}
representations.append(batch_representation)
return representations



class ProgrammeInfoSerializer(serializers.ModelSerializer):

class Meta:
model = Programme
fields = ['category', 'name', 'programme_begin_year']




# this is for Semester model ...
# no frontend form for this model ...
class SemesterSerializer(serializers.ModelSerializer):
class Meta:
model = Semester
fields = "__all__"



# this is for course model ...
# fields in frontend form --> coursecode, coursename, credit
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = "__all__"



# this is for Batch model ...
# field in frontend form --> name, discipline, year, curriculum .
# class BatchSerializer(serializers.ModelSerializer):
# class Meta:
# model = Batch
# fields = "__all__"


# for this 2 there is no frontend form ...


# CourseSlot model serializers ...
class CourseSlotSerializer(serializers.ModelSerializer):
class Meta:
model = CourseSlot
fields = "__all__"



# CourseInstructor model serializers ...
class CourseInstructorSerializer(serializers.ModelSerializer):
class Meta:
model = CourseInstructor
fields = "__all__"


class ProgrammePostSerializer(serializers.ModelSerializer):
class Meta:
model = Programme
fields = ['id', 'category', 'name', 'programme_begin_year']
141 changes: 141 additions & 0 deletions FusionIIIT/applications/programme_curriculum/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
from rest_framework import status

from applications.programme_curriculum.models import (
Programme,
Discipline,
Curriculum,
Semester,
Course,
Batch,
CourseSlot,
CourseInstructor,
)

from .serializers import (
ProgrammeSerializer,
CurriculumSerializer,
ProgrammePostSerializer,
SemesterSerializer,
DisciplineSerializer,
CourseSerializer,
CourseSlotSerializer,
BatchSerializer,
ProgrammeInfoSerializer,
)

from applications.programme_curriculum.filters import (
CourseFilter,
BatchFilter,
CurriculumFilter,
)
from rest_framework import generics


@api_view(["GET", "POST"])
def view_ug_programmes(request):
"""
This function is used to display all the ug programmes offered by the institute.
"""
ug = Programme.objects.filter(category="UG")

ug_serializer = ProgrammeSerializer(ug, many=True)

return Response(ug_serializer.data)


@api_view(["GET", "POST"])
def view_pg_programmes(request):
"""
This function is used to display all the ug programmes offered by the institute.
"""
ug = Programme.objects.filter(category="PG")

ug_serializer = ProgrammeSerializer(ug, many=True)

return Response(ug_serializer.data)


@api_view(["GET", "POST"])
def view_phd_programmes(request):
"""
This function is used to display all the ug programmes offered by the institute.
"""
ug = Programme.objects.filter(category="PHD")

ug_serializer = ProgrammeSerializer(ug, many=True)

return Response(ug_serializer.data)


@api_view(["GET"])
def get_programme_info(request):
if request.method == "GET":
# Fetch all programmes
programmes = Programme.objects.all()

# Serialize the data
serializer = ProgrammeInfoSerializer(programmes, many=True)

# Return the serialized data as response
return Response(serializer.data)


@api_view(["GET"])
def view_curriculumns(request):
if request.method == "GET":
# Fetch all programmes
curriculums = Curriculum.objects.all()
serializer = CurriculumSerializer(curriculums, many=True)
return Response(serializer.data)


@api_view(["POST"])
def create_programme(request):
if request.method == "POST":
# Extract data from the request
category = request.data.get("category")
name = request.data.get("name")
programme_begin_year = request.data.get("programme_begin_year")
discipline_names = request.data.get(
"discipline"
) # Assuming discipline names are sent as a list

# Validate data
if not category or not name or not programme_begin_year or not discipline_names:
return Response(
{
"message": "Please provide category, name, programme_begin_year, and discipline in the request body"
},
status=status.HTTP_400_BAD_REQUEST,
)

# Create Programme object
programme = Programme.objects.create(
category=category, name=name, programme_begin_year=programme_begin_year
)

# Find Discipline objects and associate them with the Programme
disciplines = []
for discipline_name in discipline_names:
try:
discipline = Discipline.objects.get(name=discipline_name)
discipline.programmes.add(programme)
disciplines.append(discipline)
except Discipline.DoesNotExist:
# If discipline does not exist, you may handle it according to your application's logic
# For example, you can create the discipline here
pass

# Serialize the Programme object
serializer = ProgrammePostSerializer(programme)

return Response(
{
"programme": serializer.data,
"disciplines": [discipline.name for discipline in disciplines],
},
status=status.HTTP_201_CREATED,
)
10 changes: 9 additions & 1 deletion FusionIIIT/applications/programme_curriculum/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.urls import path, include
from . import views
from django.contrib import admin

from applications.programme_curriculum.api import views as v2
app_name = 'programme_curriculum'

urlpatterns = [
Expand Down Expand Up @@ -66,4 +66,12 @@
path('forward_course_forms/<ProposalId>/',views.forward_course_forms,name='forward_course_forms'),
path('view_inward_files/<ProposalId>/',views.view_inward_files,name='view_inward_files'),
path('outward_files/',views.outward_files,name='outward_files'),

# urls for api view
path('api/programmes_ug/', v2.view_ug_programmes, name='view_ug_programmes_api'),
path('api/programmes_pg/', v2.view_pg_programmes, name='view_pg_programmes_api'),
path('api/programmes_phd/', v2.view_phd_programmes, name='view_phd_programmes_api'),
path('api/programme_info/', v2.get_programme_info, name='programme_info_api'),
path('api/curriculumns/', v2.view_curriculumns, name='curriculumns_api'),
path('api/add_programme/', v2.create_programme, name='add_programme_api'),
]