Skip to content
Open
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
7 changes: 5 additions & 2 deletions employer_recommendation_system/emp/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ def save(self, *args, **kwargs):
obj = Discipline.objects.get(name=self.name,date_created=self.date_created)
obj.slug = slugify(obj.id)
obj.save()

def __str__(self):
return self.name

class Education(models.Model):
degree = models.ForeignKey(Degree,null=True,on_delete=models.CASCADE)
Expand All @@ -146,8 +149,8 @@ class Education(models.Model):
end_year = models.IntegerField(choices=END_YEAR_CHOICES, null=True)
gpa = models.CharField(max_length=10,null=True)
order = models.IntegerField(default=1) #1 : Current Education 2: Pas education
# def __str__(self):
# return self.degree.name+'_'+str(self.institute)
def __str__(self):
return self.degree.name+'_'+str(self.institute)


def user_directory_path(instance, filename):
Expand Down
43 changes: 43 additions & 0 deletions employer_recommendation_system/emp/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
from rest_framework import serializers
from emp.models import Student, Skill, SkillGroup, Education


class EducationSerializer(serializers.ModelSerializer):
degree = serializers.CharField(source='degree.name', read_only=True)
acad_discipline = serializers.CharField(source='acad_discipline.name', read_only=True)
class Meta:
model = Education
fields = ['degree', 'acad_discipline','institute', 'start_year', 'end_year', 'gpa', 'order']

class SkillGroupSerializer(serializers.ModelSerializer):
class Meta:
model = SkillGroup
fields = ['name']

class SkillSerializer(serializers.ModelSerializer):
group = SkillGroupSerializer()
class Meta:
model = Skill
fields = ['name', 'group' ]


class StudentSerializer(serializers.ModelSerializer):
email = serializers.CharField(source='user.email', read_only=True)
first_name = serializers.CharField(source='user.first_name', read_only=True)
last_name = serializers.CharField(source='user.last_name', read_only=True)
skills = SkillSerializer(many=True)
education = EducationSerializer(many=True)

class Meta:
model = Student
fields = ['email', 'first_name', 'last_name','gender' ,'phone', 'address',
'github', 'linkedin','alternate_email',
'profile_update_date','joining_immediate',
'avail_for_intern', 'willing_to_relocate',
'skills','education','notified_date']

#todo : add more fields here
#education, spk_institute, skills,
# resume, state, district, city
#certifications, notified_date,
#
4 changes: 4 additions & 0 deletions employer_recommendation_system/emp/urls.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.urls import path
from .views import *
from . import views
from .utility import StudentListView

urlpatterns = [
path('',views.index,name='index'),
Expand Down Expand Up @@ -78,4 +79,7 @@

################### public urls
path('companies',CompanyList.as_view(),name='companies'),

################### v2 apis
path('api/students/',StudentListView.as_view(),name='student-list-api'),
]
98 changes: 98 additions & 0 deletions employer_recommendation_system/emp/utility.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
from rest_framework import generics
from rest_framework.pagination import PageNumberPagination
from django_filters.rest_framework import DjangoFilterBackend
from emp.models import Student
from .serializers import StudentSerializer
from spoken.models import StudentMaster, TestAttendance

def filter_state(queryset, value):
input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')]
spk_student_queryset = StudentMaster.objects.filter(batch__academic__state__name__in=value, student_id__in=input_spk_student_ids).values('student_id')
student_ids = [item['student_id'] for item in spk_student_queryset]
return queryset.filter(spk_student_id__in=student_ids)

def filter_city(queryset, value):
spk_student_queryset = StudentMaster.objects.filter(batch__academic__city__name__in=value).values('student_id')
student_ids = [item['student_id'] for item in spk_student_queryset]
return queryset.filter(spk_student_id__in=student_ids)

def filter_resume(queryset, resume_uploaded):
if resume_uploaded=='yes':
queryset = queryset.filter(resume__isnull=False)
if resume_uploaded=='no':
queryset = queryset.filter(resume__isnull=True)
return queryset

def filter_foss(queryset, foss, grade):
input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')]
spk_student_queryset = TestAttendance.objects.filter(test__foss__foss=foss, mdlgrade__gte=grade, student_id__in=input_spk_student_ids).values('student_id')
student_ids = [item['student_id'] for item in spk_student_queryset]
return queryset.filter(spk_student_id__in=student_ids)

def filter_institute_type(queryset, institute_types):
input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')]
spk_student_queryset = StudentMaster.objects.filter(batch__academic__institution_type__name__in=institute_types, student_id__in=input_spk_student_ids).values('student_id')
student_ids = [item['student_id'] for item in spk_student_queryset]
return queryset.filter(spk_student_id__in=student_ids)

def filter_academic(queryset, academics):
input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')]
spk_student_queryset = StudentMaster.objects.filter(batch__academic_id__in=academics, student_id__in=input_spk_student_ids).values('student_id')
student_ids = [item['student_id'] for item in spk_student_queryset]
return queryset.filter(spk_student_id__in=student_ids)

def filter_acad_start_year(queryset, acad_start_years):
input_spk_student_ids = [item['spk_student_id'] for item in queryset.values('spk_student_id')]
spk_student_queryset = StudentMaster.objects.filter(batch__year__in=acad_start_years, student_id__in=input_spk_student_ids).values('student_id')
student_ids = [item['student_id'] for item in spk_student_queryset]
return queryset.filter(spk_student_id__in=student_ids)

class StudentListView(generics.ListAPIView):
queryset = Student.objects.all()
serializer_class = StudentSerializer
filter_backends = [DjangoFilterBackend]
pagination_class = PageNumberPagination

def get_queryset(self):
queryset = Student.objects.all()
state = self.request.query_params.getlist('state', None)
city = self.request.query_params.getlist('city', None)
is_resume_uploaded = self.request.query_params.get('resume_uploaded', None) #yes, no

institute_type = self.request.query_params.getlist('institute_type', None)
academic = self.request.query_params.getlist('academic', None)
acad_start_year = self.request.query_params.getlist('acad_start_year', None)
department = self.request.query_params.getlist('department', None)
degree = self.request.query_params.getlist('degree', None)

if state:
queryset = filter_state(queryset, state)

if city:
queryset = filter_city(queryset, city)
if is_resume_uploaded:
queryset = filter_resume(queryset, is_resume_uploaded)

if institute_type:
queryset = filter_institute_type(queryset, institute_type)

if academic:
queryset = filter_academic(queryset, academic)

if acad_start_year:
queryset = filter_acad_start_year(queryset, acad_start_year)

if department:
queryset = queryset.filter(education__acad_discipline__name__in=department)

if degree:
queryset = queryset.filter(education__degree__name__in=degree)

for key, value in self.request.query_params.items():
if key.startswith('foss_'):
foss = key.split('_')[1]
grade = value
queryset = filter_foss(queryset, foss, grade)
return queryset


Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
'spoken',
'ckeditor',
'events',
'rest_framework',

]

Expand Down Expand Up @@ -226,4 +227,9 @@
GALLERY_TESTIMONIAL = GALLERY_TESTIMONIAL
CONTACT_MAIL = CONTACT_MAIL

PASS_GRADE=PASS_GRADE
PASS_GRADE=PASS_GRADE

REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS' : 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE' : 25
}