2025-01-03 16:11:04 +05:30
|
|
|
import sys
|
2025-06-11 14:36:06 +05:30
|
|
|
from datetime import datetime
|
2024-05-07 12:23:36 +05:30
|
|
|
|
|
|
|
|
from apscheduler.schedulers.background import BackgroundScheduler
|
2025-06-11 14:36:06 +05:30
|
|
|
|
|
|
|
|
from horilla.signals import post_scheduler, pre_scheduler
|
2023-05-10 15:06:57 +05:30
|
|
|
|
|
|
|
|
|
2023-08-01 16:48:48 +05:30
|
|
|
def leave_reset():
|
2025-06-11 14:36:06 +05:30
|
|
|
pre_scheduler.send(sender=leave_reset)
|
2023-08-01 16:48:48 +05:30
|
|
|
from leave.models import LeaveType
|
2023-05-10 15:06:57 +05:30
|
|
|
|
2025-06-02 16:23:52 +05:30
|
|
|
today = datetime.now()
|
2023-08-01 16:48:48 +05:30
|
|
|
today_date = today.date()
|
|
|
|
|
leave_types = LeaveType.objects.filter(reset=True)
|
|
|
|
|
# Looping through filtered leave types with reset is true
|
|
|
|
|
for leave_type in leave_types:
|
2024-12-26 17:05:24 +05:30
|
|
|
# Looping through all available leaves
|
2023-08-01 16:48:48 +05:30
|
|
|
available_leaves = leave_type.employee_available_leave.all()
|
2023-05-10 15:06:57 +05:30
|
|
|
|
2023-08-01 16:48:48 +05:30
|
|
|
for available_leave in available_leaves:
|
|
|
|
|
reset_date = available_leave.reset_date
|
|
|
|
|
expired_date = available_leave.expired_date
|
|
|
|
|
if reset_date == today_date:
|
2024-01-31 11:54:47 +05:30
|
|
|
available_leave.update_carryforward()
|
2023-08-01 16:48:48 +05:30
|
|
|
# new_reset_date = available_leave.set_reset_date(assigned_date=today_date,available_leave = available_leave)
|
|
|
|
|
new_reset_date = available_leave.set_reset_date(
|
|
|
|
|
assigned_date=today_date, available_leave=available_leave
|
|
|
|
|
)
|
|
|
|
|
available_leave.reset_date = new_reset_date
|
|
|
|
|
available_leave.save()
|
2024-12-26 17:05:24 +05:30
|
|
|
if expired_date and expired_date <= today_date:
|
2023-08-01 16:48:48 +05:30
|
|
|
new_expired_date = available_leave.set_expired_date(
|
|
|
|
|
available_leave=available_leave, assigned_date=today_date
|
|
|
|
|
)
|
|
|
|
|
available_leave.expired_date = new_expired_date
|
|
|
|
|
available_leave.save()
|
2023-05-10 15:06:57 +05:30
|
|
|
|
2024-12-26 17:05:24 +05:30
|
|
|
if (
|
|
|
|
|
leave_type.carryforward_expire_date
|
|
|
|
|
and leave_type.carryforward_expire_date <= today_date
|
|
|
|
|
):
|
|
|
|
|
leave_type.carryforward_expire_date = leave_type.set_expired_date(
|
|
|
|
|
today_date
|
|
|
|
|
)
|
|
|
|
|
leave_type.save()
|
2025-06-11 14:36:06 +05:30
|
|
|
post_scheduler.send(
|
|
|
|
|
sender=leave_reset,
|
|
|
|
|
**{
|
|
|
|
|
"today": today,
|
|
|
|
|
"today_date": today_date,
|
|
|
|
|
"leave_types": leave_types,
|
|
|
|
|
}
|
|
|
|
|
)
|
2024-12-26 17:05:24 +05:30
|
|
|
|
2023-05-10 15:06:57 +05:30
|
|
|
|
2025-01-03 16:11:04 +05:30
|
|
|
if not any(
|
2025-01-07 15:13:47 +05:30
|
|
|
cmd in sys.argv
|
|
|
|
|
for cmd in ["makemigrations", "migrate", "compilemessages", "flush", "shell"]
|
2025-01-03 16:11:04 +05:30
|
|
|
):
|
|
|
|
|
"""
|
|
|
|
|
Initializes and starts background tasks using APScheduler when the server is running.
|
|
|
|
|
"""
|
|
|
|
|
scheduler = BackgroundScheduler()
|
|
|
|
|
scheduler.add_job(leave_reset, "interval", seconds=20)
|
2023-05-10 15:06:57 +05:30
|
|
|
|
2025-10-08 12:32:45 +05:30
|
|
|
scheduler.start()
|