Merge branch 'main' into add-migrations
This commit is contained in:
commit
c31ac2e6f3
|
@ -124,7 +124,7 @@ def updateDeadline(request, id, email, user_type):
|
|||
opening.deadline_datetime = datetime.datetime.strptime(data[DEADLINE_DATETIME], '%Y-%m-%d %H:%M:%S %z')
|
||||
opening.changed_by = get_object_or_404(User, id=id)
|
||||
opening.save()
|
||||
send_opening_to_notifications_service(id=opening.id,name=opening.company_name,deadline=data[DEADLINE_DATETIME],role=opening.designation)
|
||||
send_opening_to_notifications_service(id=opening.id,name=opening.company_name,deadline=data[DEADLINE_DATETIME],role=opening.designation,opening_type=opening_type)
|
||||
return Response({'action': "Update Deadline", 'message': "Deadline Updated"},
|
||||
status=status.HTTP_200_OK)
|
||||
except Http404:
|
||||
|
@ -162,7 +162,7 @@ def updateOfferAccepted(request, id, email, user_type):
|
|||
opening.save()
|
||||
if opening.offer_accepted:
|
||||
deadline=deadline_datetime.strftime('%Y-%m-%d %H:%M:%S %z')
|
||||
send_opening_to_notifications_service(id=opening.id,name=opening.company_name,deadline=deadline,role=opening.designation)
|
||||
send_opening_to_notifications_service(id=opening.id,name=opening.company_name,deadline=deadline,role=opening.designation,opening_type=opening_type)
|
||||
send_opening_notifications(opening.id,opening_type)
|
||||
else:
|
||||
raise ValueError("Offer Status already updated")
|
||||
|
@ -767,7 +767,11 @@ def get_eligible_students(request):
|
|||
opening_type= data[OPENING_TYPE]
|
||||
else:
|
||||
opening_type= "Placement"
|
||||
eligible_students=get_eligible_emails(opening_id=opening_id, opening_type=opening_type)
|
||||
if "send_all" in data:
|
||||
send_all = "True"==data["send_all"]
|
||||
else:
|
||||
send_all = False
|
||||
eligible_students=get_eligible_emails(opening_id=opening_id, opening_type=opening_type, send_all=send_all)
|
||||
return Response({'action': "Get Eligible Students", 'message': "Eligible Students Fetched",
|
||||
'eligible_students': eligible_students},
|
||||
status=status.HTTP_200_OK)
|
||||
|
|
|
@ -17,6 +17,8 @@ logger = logging.getLogger('db')
|
|||
RECAPTCHA_VALUE, JOB_LOCATION
|
||||
])
|
||||
def addPlacement(request):
|
||||
logger.info("JNF filled by " + str(request.data['email']))
|
||||
logger.info(request.data)
|
||||
try:
|
||||
data = request.data
|
||||
files = request.FILES
|
||||
|
@ -233,14 +235,14 @@ def addPlacement(request):
|
|||
|
||||
except ValueError as e:
|
||||
store_all_files(request)
|
||||
exception_email(data)
|
||||
#exception_email(data)
|
||||
logger.warning("ValueError in addPlacement: " + str(e))
|
||||
logger.warning(traceback.format_exc())
|
||||
return Response({'action': "Add Placement", 'message': str(e)},
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
except:
|
||||
store_all_files(request)
|
||||
exception_email(data)
|
||||
#exception_email(data)
|
||||
logger.warning("Add New Placement: " + str(sys.exc_info()))
|
||||
logger.warning(traceback.format_exc())
|
||||
return Response({'action': "Add Placement", 'message': "Something went wrong"},
|
||||
|
@ -353,6 +355,7 @@ def autoFillInf(request):
|
|||
CONTACT_PERSON_NAME, PHONE_NUMBER, EMAIL, RECAPTCHA_VALUE])
|
||||
def addInternship(request):
|
||||
logger.info("INF filled by " + str(request.data['email']))
|
||||
logger.info(request.data)
|
||||
try:
|
||||
data = request.data
|
||||
files = request.FILES
|
||||
|
@ -415,13 +418,14 @@ def addInternship(request):
|
|||
internship.is_work_from_home = True
|
||||
else:
|
||||
internship.is_work_from_home = False
|
||||
|
||||
if data[ALLOWED_BATCH] is None or json.loads(data[ALLOWED_BATCH]) == "":
|
||||
raise ValueError('Allowed Branch cannot be empty')
|
||||
elif set(json.loads(data[ALLOWED_BATCH])).issubset(BATCHES):
|
||||
|
||||
if ALLOWED_BATCH in data and (data[ALLOWED_BATCH] is None or json.loads(data[ALLOWED_BATCH]) == ""):
|
||||
raise ValueError('Allowed Batches cannot be empty')
|
||||
elif ALLOWED_BATCH in data and set(json.loads(data[ALLOWED_BATCH])).issubset(BATCHES):
|
||||
internship.allowed_batch = json.loads(data[ALLOWED_BATCH])
|
||||
else:
|
||||
raise ValueError('Allowed Batch must be a subset of ' + str(BATCHES))
|
||||
internship.allowed_batch = ['2021']
|
||||
|
||||
|
||||
if data[ALLOWED_BRANCH] is None or json.loads(data[ALLOWED_BRANCH]) == "":
|
||||
raise ValueError('Allowed Branch cannot be empty')
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
from .models import *
|
||||
from .utils import *
|
||||
import shutil
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
logger=logging.getLogger('db')
|
||||
def clean_up_tests():
|
||||
# Delete all the test internships and placements created
|
||||
try:
|
||||
internships= Internship.objects.filter(company_name="test company",email="notifications@cdc-iitdh.tech")
|
||||
hits_internship=len(internships)
|
||||
for internship in internships:
|
||||
#count number of file
|
||||
files = os.listdir(STORAGE_DESTINATION_COMPANY_ATTACHMENTS+internship.id)
|
||||
if len(files) == 4:
|
||||
print("working fine")
|
||||
else:
|
||||
print("not working fine")
|
||||
logger.error("files submitted in inf are not getting stored for test case"+internship.description)
|
||||
|
||||
#remove folder from the server
|
||||
print("removing folder ",STORAGE_DESTINATION_COMPANY_ATTACHMENTS+internship.id)
|
||||
shutil.rmtree(STORAGE_DESTINATION_COMPANY_ATTACHMENTS+internship.id)
|
||||
|
||||
|
||||
internship.delete()
|
||||
|
||||
placements= Placement.objects.filter(company_name="test company",email="notifications@cdc-iitdh.tech")
|
||||
hits_placement=len(placements)
|
||||
for placement in placements:
|
||||
#count number of file
|
||||
files = os.listdir(STORAGE_DESTINATION_COMPANY_ATTACHMENTS+placement.id)
|
||||
if len(files) == 4:
|
||||
print("working fine")
|
||||
else:
|
||||
print("not working fine")
|
||||
logger.error("files submitted in inf are not getting stored for test case"+placement.description)
|
||||
|
||||
#remove folder from the server
|
||||
print("removing folder ",STORAGE_DESTINATION_COMPANY_ATTACHMENTS+internship.id)
|
||||
shutil.rmtree(STORAGE_DESTINATION_COMPANY_ATTACHMENTS+placement.id)
|
||||
|
||||
|
||||
placement.delete()
|
||||
|
||||
if hits_internship >= 6:
|
||||
print("all hits are working fine")
|
||||
else:
|
||||
print("some hits are not working fine")
|
||||
logger.error("some test hits are not working fine for internship")
|
||||
|
||||
if hits_placement >= 6:
|
||||
print("all hits are working fine")
|
||||
else:
|
||||
print("some hits are not working fine")
|
||||
logger.error("some test hits are not working fine for placement")
|
||||
|
||||
except :
|
||||
logger.error("error in clean up function")
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
|
|
@ -214,14 +214,16 @@ def sendEmail(email_to, subject, data, template, attachment_jnf_response=None):
|
|||
else:
|
||||
recipient_list = [str(email_to), ]
|
||||
|
||||
msg = EmailMultiAlternatives(subject, text_content, email_from,None,bcc=recipient_list)
|
||||
msg.attach_alternative(html_content, "text/html")
|
||||
if attachment_jnf_response:
|
||||
# logger.info(attachment_jnf_response)
|
||||
pdf = pdfkit.from_string(attachment_jnf_response['html'], False,
|
||||
options={"--enable-local-file-access": "", '--dpi': '96'})
|
||||
msg.attach(attachment_jnf_response['name'], pdf, 'application/pdf')
|
||||
msg.send()
|
||||
#batch 100 ppl to send as bcc
|
||||
for i in range(0,len(recipient_list),100):
|
||||
msg = EmailMultiAlternatives(subject, text_content, email_from,None,bcc=recipient_list[i:i+100])
|
||||
msg.attach_alternative(html_content, "text/html")
|
||||
if attachment_jnf_response:
|
||||
# logger.info(attachment_jnf_response)
|
||||
pdf = pdfkit.from_string(attachment_jnf_response['html'], False,
|
||||
options={"--enable-local-file-access": "", '--dpi': '96'})
|
||||
msg.attach(attachment_jnf_response['name'], pdf, 'application/pdf')
|
||||
msg.send()
|
||||
return True
|
||||
except:
|
||||
logger.error("Send Email: " + str(sys.exc_info()))
|
||||
|
@ -248,11 +250,15 @@ def PlacementApplicationConditions(student, placement):
|
|||
return True, "Conditions Satisfied"
|
||||
|
||||
for i in selected_companies:
|
||||
if int(i.placement.tier) < int(placement.tier):
|
||||
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"
|
||||
|
||||
for i in PPO:
|
||||
if int(i.tier) < int(placement.tier):
|
||||
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:
|
||||
|
@ -455,7 +461,7 @@ 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):
|
||||
def get_eligible_emails(opening_id, opening_type=PLACEMENT,send_all=False):
|
||||
try:
|
||||
# print(opening_id, opening_type)
|
||||
if opening_type == PLACEMENT:
|
||||
|
@ -471,6 +477,10 @@ def get_eligible_emails(opening_id, opening_type=PLACEMENT):
|
|||
isinstance(opening,Internship) and InternshipApplicationConditions(student, opening)[0]):
|
||||
try:
|
||||
student_user = get_object_or_404(User, id=student.id)
|
||||
#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:
|
||||
if PlacementApplication.objects.filter(student=student, placement=opening).exists():
|
||||
|
@ -563,12 +573,13 @@ def send_email_for_opening(opening):
|
|||
|
||||
|
||||
@background_task.background(schedule=2)
|
||||
def send_opening_to_notifications_service(id,name,deadline,role):
|
||||
def send_opening_to_notifications_service(id,name,deadline,role,opening_type=PLACEMENT):
|
||||
data={
|
||||
"id":id,
|
||||
"company":name,
|
||||
"deadline":deadline,
|
||||
"role":role
|
||||
"role":role,
|
||||
"opening_type":opening_type
|
||||
}
|
||||
encoded=jwt.encode(data,os.environ.get("JWT_SECRET_KEY"),algorithm="HS256")
|
||||
data_={
|
||||
|
|
|
@ -47,7 +47,8 @@ INSTALLED_APPS = [
|
|||
'background_task',
|
||||
'simple_history',
|
||||
'import_export',
|
||||
'django_extensions'
|
||||
'django_extensions',
|
||||
'django_crontab',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
@ -203,3 +204,7 @@ LOGGING = {
|
|||
}
|
||||
|
||||
# django_heroku.settings(locals())
|
||||
|
||||
CRONJOBS = [
|
||||
('0 8,20 * * *', 'APIs.cron.clean_up_tests')
|
||||
]
|
|
@ -1 +1 @@
|
|||
gunicorn --certfile=/home/cdc/Desktop/1f9476e3959ebe60.crt --keyfile=/home/cdc/Desktop/star_iitdh_key.key --bind localhost:8000 CDC_Backend.wsgi --access-logfile access.log --error-logfile error.log --forwarded-allow-ips="cdc.iitdh.ac.in" &
|
||||
gunicorn --certfile=/home/cdc/Desktop/1f9476e3959ebe60.crt --keyfile=/home/cdc/Desktop/star_iitdh_key.key --bind localhost:8000 CDC_Backend.wsgi --access-logfile access.log --error-logfile error.log --forwarded-allow-ips="cdc.iitdh.ac.in"
|
||||
|
|
|
@ -13,6 +13,7 @@ Django==3.2.13
|
|||
django-background-tasks==1.2.5
|
||||
django-compat==1.0.15
|
||||
django-cors-headers==3.11.0
|
||||
django-crontab==0.7.1
|
||||
django-db-logger==0.1.12
|
||||
django-extensions==3.2.1
|
||||
django-import-export==2.8.0
|
||||
|
|
Loading…
Reference in New Issue