[UPDT] ATTENDANCE: Updated the work record create scheduler

This commit is contained in:
Horilla
2025-04-18 14:04:09 +05:30
parent dcd33847c4
commit 0484949536

View File

@@ -1,35 +1,50 @@
import datetime
import sys
import pytz
from apscheduler.schedulers.background import BackgroundScheduler
from django.conf import settings
today = datetime.datetime.today()
from base.backends import logger
def create_work_record(date=today):
def create_work_record():
from attendance.models import WorkRecords
from employee.models import Employee
work_records = WorkRecords.objects.all()
employees = Employee.objects.all()
if len(work_records.filter(date=date)) == len(employees):
return
else:
for employee in employees:
try:
shift = employee.employee_work_info.shift_id
date = datetime.datetime.today()
work_records = WorkRecords.objects.filter(date=date).values_list(
"employee_id", flat=True
)
employees = Employee.objects.exclude(id__in=work_records)
records_to_create = []
WorkRecords.objects.get_or_create(
employee_id=employee,
date=date,
defaults={
"work_record_type": "DFT",
"shift_id": shift,
"message": "",
},
)
except:
pass
for employee in employees:
try:
shift_schedule = employee.get_shift_schedule()
if shift_schedule is None:
continue
shift = employee.get_shift()
record = WorkRecords(
employee_id=employee,
date=date,
work_record_type="DFT",
shift_id=shift,
message="",
)
records_to_create.append(record)
except Exception as e:
logger.error(f"Error preparing work record for {employee}: {e}")
if records_to_create:
try:
WorkRecords.objects.bulk_create(records_to_create)
print(f"Created {len(records_to_create)} work records for {date}.")
except Exception as e:
logger.error(f"Failed to bulk create work records: {e}")
else:
print(f"No new work records to create for {date}.")
if not any(
@@ -39,12 +54,19 @@ if not any(
"""
Initializes and starts background tasks using APScheduler when the server is running.
"""
scheduler = BackgroundScheduler()
scheduler = BackgroundScheduler(timezone=pytz.timezone(settings.TIME_ZONE))
scheduler.add_job(
create_work_record, "interval", hours=3, misfire_grace_time=3600 * 3
create_work_record, "interval", minutes=30, misfire_grace_time=3600 * 3
)
scheduler.add_job(
create_work_record, "cron", hour=0, minute=30, misfire_grace_time=3600 * 9
create_work_record,
"cron",
hour=0,
minute=30,
misfire_grace_time=3600 * 9,
id="create_daily_work_record",
replace_existing=True,
)
scheduler.start()