[UPDT] ATTENDANCE: Updated the work record create scheduler
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user