62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
import calendar
|
|
import datetime as dt
|
|
import sys
|
|
from datetime import datetime, timedelta
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
today = datetime.now()
|
|
|
|
|
|
def recruitment_close():
|
|
"""
|
|
Closes recruitment campaigns that have reached their end date.
|
|
|
|
"""
|
|
from recruitment.models import Recruitment
|
|
|
|
today_date = today.date()
|
|
|
|
recruitments = Recruitment.objects.filter(closed=False)
|
|
|
|
for rec in recruitments:
|
|
if rec.end_date:
|
|
if rec.end_date == today_date:
|
|
rec.closed = True
|
|
rec.is_published = False
|
|
rec.save()
|
|
|
|
|
|
def candidate_convert():
|
|
"""
|
|
Converts candidates to a "converted" state if they already exist as users.
|
|
"""
|
|
from django.contrib.auth.models import User
|
|
|
|
from recruitment.models import Candidate
|
|
|
|
candidates = Candidate.objects.filter(is_active=True)
|
|
mails = list(Candidate.objects.values_list("email", flat=True))
|
|
existing_emails = list(
|
|
User.objects.filter(username__in=mails).values_list("email", flat=True)
|
|
)
|
|
for cand in candidates:
|
|
if cand.email in existing_emails:
|
|
cand.converted = True
|
|
cand.save()
|
|
|
|
|
|
if not any(
|
|
cmd in sys.argv
|
|
for cmd in ["makemigrations", "migrate", "compilemessages", "flush", "shell"]
|
|
):
|
|
"""
|
|
Initializes and starts background tasks using APScheduler when the server is running.
|
|
"""
|
|
scheduler = BackgroundScheduler()
|
|
scheduler.add_job(candidate_convert, "interval", minutes=5)
|
|
scheduler.add_job(recruitment_close, "interval", hours=1)
|
|
|
|
scheduler.start()
|