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

changes for new config #200

Merged
merged 4 commits into from
Aug 4, 2024
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
Binary file modified .DS_Store
Binary file not shown.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -143,4 +143,5 @@ dmypy.json
dev.env

#vscode settings
.vscode/
.vscode/
.DS_Store
Binary file modified CDC_Backend/.DS_Store
Binary file not shown.
8 changes: 3 additions & 5 deletions CDC_Backend/APIs/companyViews.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,9 @@ def addPlacement(request):
# Add a contact person details in the opening
opening.contact_person_name = data[CONTACT_PERSON_NAME]
# Check if Phone number is Integer
if data[PHONE_NUMBER].isdigit():
opening.phone_number = int(data[PHONE_NUMBER])
else:
raise ValueError('Phone number should be integer')


opening.phone_number = data[PHONE_NUMBER]

opening.email = data[EMAIL]

# Add a company location in the opening
Expand Down
10 changes: 8 additions & 2 deletions CDC_Backend/APIs/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
['EP', 'EP'],
['CIVIL', 'CIVIL'],
['CHEMICAL', 'CHEMICAL'],
['MNC','MNC']
]
ELIGIBLE_CHOICES = [
["Btech", "Btech"],
Expand Down Expand Up @@ -41,6 +42,7 @@
"2020",
]
BATCH_CHOICES = [
["2023","2023"],
["2022", "2022"],
["2021", "2021"],
["2020", "2020"],
Expand All @@ -65,7 +67,8 @@
['7', 'Tier 7'],
['8', 'Open Tier'],
]

bTech = 'Btech'
# not being used anywhere
DEGREE_CHOICES = [
['bTech', 'B.Tech'],
['ms/phd', 'MS/ PhD'],
Expand All @@ -83,7 +86,10 @@
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]"
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
]
CDC_REPS_EMAILS_FOR_ISSUE=[ #add reps emails
"[email protected]",
Expand Down
8 changes: 4 additions & 4 deletions CDC_Backend/APIs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ class Student(models.Model):
default=list, blank=True)
cpi = models.DecimalField(decimal_places=2, max_digits=4)
can_apply = models.BooleanField(default=True, verbose_name='Registered')
can_apply_internship = models.BooleanField(default=True, verbose_name='Internship Registered') #added for internship
can_apply_internship = models.BooleanField(default=True, verbose_name='Internship Registered')
changed_by = models.ForeignKey(User, blank=True, on_delete=models.RESTRICT, default=None, null=True)
degree = models.CharField(choices=DEGREE_CHOICES, blank=False, max_length=10, default=DEGREE_CHOICES[0][0])
degree = models.CharField(choices=ELIGIBLE_CHOICES, blank=False, max_length=10, default=ELIGIBLE_CHOICES[0][0]) # should be ELIGIBLE_CHOICES
isPwd = models.BooleanField(default=False, verbose_name='Person with Disability')
isBacklog = models.BooleanField(default=False, verbose_name='Has Backlog')
history = HistoricalRecords(user_model=User)
Expand Down Expand Up @@ -92,7 +92,7 @@ class Placement(models.Model):
default=list, blank=True)
is_company_details_pdf = models.BooleanField(blank=False, default=False)
contact_person_name = models.CharField(blank=False, max_length=JNF_TEXT_MAX_CHARACTER_COUNT)
phone_number = models.PositiveBigIntegerField(blank=False)
phone_number = models.CharField(max_length=15, blank=False)
email = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="")
city = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="")
state = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="")
Expand Down Expand Up @@ -383,7 +383,7 @@ class Internship(models.Model):
is_selection_procedure_details_pdf = models.BooleanField(blank=False, default=False)
#contact details of company person
contact_person_name = models.CharField(blank=False, max_length=JNF_TEXT_MAX_CHARACTER_COUNT)
phone_number = models.PositiveBigIntegerField(blank=False)
phone_number = models.CharField(max_length=15, blank=False)
email = models.EmailField(blank=False)
# contact_person_designation = models.CharField(blank=False, max_length=JNF_SMALLTEXT_MAX_CHARACTER_COUNT, default="")
# telephone_number = models.PositiveBigIntegerField(blank=True, default=None, null=True)
Expand Down
19 changes: 14 additions & 5 deletions CDC_Backend/APIs/studentViews.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from datetime import datetime as dt
from rest_framework.decorators import api_view
from django.db.models import Q

from .serializers import *
from .utils import *
Expand Down Expand Up @@ -48,7 +50,6 @@ def refresh(request):
@isAuthorized(allowed_users=[STUDENT])
def studentProfile(request, id, email, user_type):
try:
#print(id)
studentDetails = get_object_or_404(Student, id=id)

data = StudentSerializer(studentDetails).data
Expand Down Expand Up @@ -101,10 +102,18 @@ def getDashboard(request, id, email, user_type):
try:
studentDetails = get_object_or_404(Student, id=id)

placements = Placement.objects.filter(allowed_batch__contains=[studentDetails.batch],
allowed_branch__contains=[studentDetails.branch],
deadline_datetime__gte=datetime.datetime.now(),
offer_accepted=True, email_verified=True).order_by('deadline_datetime')
filters = Q(
allowed_branch__contains=[studentDetails.branch],
eligiblestudents__contains=[studentDetails.degree],
deadline_datetime__gte=dt.now(),
offer_accepted=True,
email_verified=True
)

if studentDetails.degree == 'Btech':
filters &= Q(allowed_batch__contains=[studentDetails.batch])

placements = Placement.objects.filter(filters).order_by('deadline_datetime')
filtered_placements = placement_eligibility_filters(studentDetails, placements)

placementsdata = PlacementSerializerForStudent(filtered_placements, many=True).data
Expand Down
95 changes: 62 additions & 33 deletions CDC_Backend/APIs/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,31 +238,38 @@ def PlacementApplicationConditions(student, placement):
PPO_PSU = [i for i in PPO if i.tier == 'psu']
# find length of PPO
if len(selected_companies) + len(PPO) >= MAX_OFFERS_PER_STUDENT:
raise PermissionError("Max Applications Reached for the Season")
raise PermissionError("Max Applications Reached for the Season1")

if len(selected_companies_PSU) > 0:
raise PermissionError('Selected for PSU Can\'t apply anymore')
raise PermissionError('Selected for PSU Can\'t apply anymore2')

if len(PPO_PSU) > 0:
raise PermissionError('Selected for PSU Can\'t apply anymore')
raise PermissionError('Selected for PSU Can\'t apply anymore3')

if placement.tier == 'psu':
return True, "Conditions Satisfied"

for i in selected_companies:
if int(i.placement.tier) != 1 and int(i.placement.tier) <= int(placement.tier):
return False, "Can't apply for this tier"
elif int(i.placement.tier) == 1 and int(placement.tier) != 1:
return False, "Can't apply for this tier"
if 1.5 * i.placement.compensation_CTC > placement.compensation_CTC:
return False, "Can't apply for this Placement, 1.5 times CTC condition not satisfied"

for i in PPO:
if int(i.tier) != 1 and int(i.tier) <= int(placement.tier):
return False, "Can't apply for this tier"
elif int(i.tier) == 1 and int(placement.tier) != 1:
return False, "Can't apply for this tier"

if student.degree != 'bTech' and not placement.rs_eligible:
raise PermissionError("Can't apply for this placement")
if 1.5 * i.compensation > placement.compensation_CTC:
return False, "Can't apply for this Placement, 1.5 times CTC condition not satisfied"
if student.degree not in placement.eligiblestudents:
raise PermissionError("Can't apply for this placement4")
if student.degree == bTech and student.batch not in placement.allowed_batch:
raise PermissionError("Can't apply for this placement5")
if student.branch not in placement.allowed_branch:
raise PermissionError("Can't apply for this placement6")
if student.can_apply == False:
raise PermissionError("Can't apply for this placement7")
if student.isBacklog == True and placement.backlog_eligible == False:
raise PermissionError("Can't apply for this placement8")
if student.isPwd == True and placement.pwd_eligible == False:
raise PermissionError("Can't apply for this placement9")
if placement.cpi_eligible > student.cpi:
raise PermissionError("Can't apply for this placement10")

return True, "Conditions Satisfied"

Expand All @@ -275,9 +282,23 @@ def PlacementApplicationConditions(student, placement):
def InternshipApplicationConditions(student, internship):
try:
selected_companies = InternshipApplication.objects.filter(student=student, selected=True)
if len(selected_companies)>=1:
# print("selected companies > 1")
if len(selected_companies) >= 1:
return False, "You have already secured a Internship"
if student.degree not in internship.eligiblestudents:
raise PermissionError("Can't apply for this Internship")
if student.branch not in internship.allowed_branch:
raise PermissionError("Can't apply for this Internship")
if student.degree == 'bTech' and student.batch not in internship.allowed_batch:
raise PermissionError("Can't apply for this Internship")
if student.can_apply_internship == False:
raise PermissionError("Can't apply for this Internship")
if student.isBacklog == True and internship.backlog_eligible == False:
raise PermissionError("Can't apply for this Internship")
if student.isPwd == True and internship.pwd_eligible == False:
raise PermissionError("Can't apply for this Internship")
if internship.cpi_eligible > student.cpi:
raise PermissionError("Can't apply for this Internship")

return True, "Conditions Satisfied"

except PermissionError as e:
Expand Down Expand Up @@ -410,6 +431,8 @@ def placement_eligibility_filters(student, placements):
except:
logger.warning("Utils - placement_eligibility_filters: " + str(sys.exc_info()))
return placements


def internship_eligibility_filters(student, internships):
try:
filtered_internships = []
Expand Down Expand Up @@ -461,42 +484,48 @@ def send_opening_notifications(opening_id, opening_type=PLACEMENT):
logger.warning('Utils - send_opening_notifications: ' + str(sys.exc_info()))
return False

def get_eligible_emails(opening_id, opening_type=PLACEMENT,send_all=False):

def get_eligible_emails(opening_id, opening_type='PLACEMENT', send_all=False):
try:
# print(opening_id, opening_type)
if opening_type == PLACEMENT:
if opening_type == 'PLACEMENT':
opening = get_object_or_404(Placement, id=opening_id)
else:
opening = get_object_or_404(Internship, id=opening_id)
emails=[]

emails = []
students = Student.objects.all()

for student in students.iterator():
if student.branch in opening.allowed_branch:
if student.degree == 'bTech' or opening.rs_eligible is True:
if (isinstance(opening,Placement) and PlacementApplicationConditions(student, opening)[0]) or (
isinstance(opening,Internship) and InternshipApplicationConditions(student, opening)[0]):
try:
if student.branch in opening.allowed_branch and student.degree in opening.eligiblestudents:
if student.degree == 'Btech' and student.batch in opening.allowed_batch:
if (isinstance(opening, Placement) and PlacementApplicationConditions(student, opening)[0]) or (
isinstance(opening, Internship) and InternshipApplicationConditions(student, opening)[0]):
if (opening_type == 'PLACEMENT' and student.can_apply) or (
opening_type == 'INTERNSHIP' and student.can_apply_internship):
student_user = get_object_or_404(User, id=student.id)
#if send_all True send all students eligible for the opening

# if send_all True send all students eligible for the opening
if send_all:
emails.append(student_user.email)
continue
# check if he applied
if opening_type == PLACEMENT:

# check if the student applied
if opening_type == 'PLACEMENT':
if PlacementApplication.objects.filter(student=student, placement=opening).exists():
continue
else:
if InternshipApplication.objects.filter(student=student, internship=opening).exists():
continue

emails.append(student_user.email)
except Exception as e:
logger.warning('Utils - send_opening_notifications: For Loop' + str(e))
return False, []

return True, emails
except:
logger.warning('Utils - send_opening_notifications: ' + str(sys.exc_info()))

except Exception as e:
logger.warning('Utils - send_opening_notifications: ' + str(e))
return False, []


def exception_email(opening):
opening = opening.dict()
data = {
Expand Down
2 changes: 1 addition & 1 deletion CDC_Backend/CDC_Backend/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

ALLOWED_HOSTS = ['cdc.iitdh.ac.in', 'localhost']

ADMINS = [ ('Karthik Mv', '200010030@iitdh.ac.in')]
ADMINS = [ ('Jaya Surya', '210020040@iitdh.ac.in')]
# Application definition

INSTALLED_APPS = [
Expand Down
Loading