Skip to content

Commit

Permalink
[UPDT] LEAVE: Changed signals to signals.py
Browse files Browse the repository at this point in the history
  • Loading branch information
horilla-opensource committed Feb 28, 2025
1 parent add2f4f commit 2f1a11c
Show file tree
Hide file tree
Showing 4 changed files with 249 additions and 105 deletions.
4 changes: 0 additions & 4 deletions leave/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@

from .models import (
AvailableLeave,
CompanyLeave,
Holiday,
LeaveAllocationRequest,
LeaveallocationrequestComment,
LeaveGeneralSetting,
Expand All @@ -25,8 +23,6 @@
admin.site.register(LeaveType)
admin.site.register(LeaveRequest)
admin.site.register(AvailableLeave)
admin.site.register(Holiday)
admin.site.register(CompanyLeave)
admin.site.register(LeaveAllocationRequest, SimpleHistoryAdmin)
admin.site.register(LeaveRequestConditionApproval)
admin.site.register(LeaverequestComment)
Expand Down
3 changes: 2 additions & 1 deletion leave/apps.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.apps import AppConfig
from django.apps import AppConfig, apps


class LeaveConfig(AppConfig):
Expand All @@ -10,6 +10,7 @@ def ready(self):

from horilla.horilla_settings import APPS
from horilla.urls import urlpatterns
from leave import signals

APPS.append("leave")
urlpatterns.append(
Expand Down
191 changes: 91 additions & 100 deletions leave/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,19 @@
import logging
import math
import operator
import threading
from datetime import date, datetime, timedelta

from dateutil.relativedelta import relativedelta
from django.apps import apps
from django.conf import settings
from django.contrib import messages
from django.core.exceptions import ValidationError
from django.core.files.storage import default_storage
from django.db import models
from django.db.models import Q
from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
from django.db.models import Q, Sum
from django.utils import timezone
from django.utils.translation import gettext_lazy as _

from base.horilla_company_manager import HorillaCompanyManager
from base.methods import get_date_range
from base.models import (
Company,
CompanyLeaves,
Expand All @@ -31,12 +26,10 @@
)
from employee.models import Employee, EmployeeWorkInformation
from horilla import horilla_middlewares
from horilla.methods import get_horilla_model_class
from horilla.models import HorillaModel
from horilla_audit.methods import get_diff
from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog
from leave.methods import calculate_requested_days
from leave.threading import LeaveClashThread

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -341,9 +334,6 @@ def __str__(self):
return f"{dict(WEEK_DAYS).get(self.based_on_week_day)} | {dict(WEEKS).get(self.based_on_week)}"


from django.db.models import Sum


class AvailableLeave(HorillaModel):
employee_id = models.ForeignKey(
Employee,
Expand Down Expand Up @@ -1242,93 +1232,94 @@ class OverrideLeaveRequests(LeaveRequest):
Class to override Attendance model save method
"""

pass
# Additional fields and methods specific to AnotherModel
@receiver(pre_save, sender=LeaveRequest)
def leaverequest_pre_save(sender, instance, **_kwargs):
"""
Overriding LeaveRequest model save method
"""
WorkRecords = get_horilla_model_class(
app_label="attendance", model="workrecords"
)
if (
instance.start_date == instance.end_date
and instance.end_date_breakdown != instance.start_date_breakdown
):
instance.end_date_breakdown = instance.start_date_breakdown
super(LeaveRequest, instance).save()

period_dates = get_date_range(instance.start_date, instance.end_date)
if instance.status == "approved":
for date in period_dates:
try:
work_entry = (
WorkRecords.objects.filter(
date=date,
employee_id=instance.employee_id,
)
if WorkRecords.objects.filter(
date=date,
employee_id=instance.employee_id,
).exists()
else WorkRecords()
)
work_entry.employee_id = instance.employee_id
work_entry.is_leave_record = True
work_entry.day_percentage = (
0.50
if instance.start_date == date
and instance.start_date_breakdown == "first_half"
or instance.end_date == date
and instance.end_date_breakdown == "second_half"
else 0.00
)
status = (
"CONF"
if instance.start_date == date
and instance.start_date_breakdown == "first_half"
or instance.end_date == date
and instance.end_date_breakdown == "second_half"
else "ABS"
)
work_entry.work_record_type = status
work_entry.date = date
work_entry.message = (
"Absent"
if status == "ABS"
else _("Half day Attendance need to validate")
)
work_entry.save()
except:
pass

else:
for date in period_dates:
WorkRecords.objects.filter(
is_leave_record=True,
date=date,
employee_id=instance.employee_id,
).delete()


@receiver(post_save, sender=LeaveRequest)
def update_available(sender, instance, **kwargs):
"""
post save method to update the available leaves
"""

_sender = sender

def update_leaves():
try:
if instance.leave_type_id:
available_leaves = instance.employee_id.available_leave.filter(
leave_type_id=instance.leave_type_id
)
for assigned in available_leaves:
assigned.save()
except Exception as e:
pass

thread = threading.Thread(target=update_leaves)
thread.start()
# @receiver(pre_save, sender=LeaveRequest)
# def leaverequest_pre_save(sender, instance, **_kwargs):
# """
# Overriding LeaveRequest model save method
# """
# WorkRecords = get_horilla_model_class(
# app_label="attendance", model="workrecords"
# )
# if (
# instance.start_date == instance.end_date
# and instance.end_date_breakdown != instance.start_date_breakdown
# ):
# instance.end_date_breakdown = instance.start_date_breakdown
# super(LeaveRequest, instance).save()

# period_dates = get_date_range(instance.start_date, instance.end_date)
# if instance.status == "approved":
# for date in period_dates:
# try:
# work_entry = (
# WorkRecords.objects.filter(
# date=date,
# employee_id=instance.employee_id,
# )
# if WorkRecords.objects.filter(
# date=date,
# employee_id=instance.employee_id,
# ).exists()
# else WorkRecords()
# )
# work_entry.employee_id = instance.employee_id
# work_entry.is_leave_record = True
# work_entry.day_percentage = (
# 0.50
# if instance.start_date == date
# and instance.start_date_breakdown == "first_half"
# or instance.end_date == date
# and instance.end_date_breakdown == "second_half"
# else 0.00
# )
# status = (
# "CONF"
# if instance.start_date == date
# and instance.start_date_breakdown == "first_half"
# or instance.end_date == date
# and instance.end_date_breakdown == "second_half"
# else "ABS"
# )
# work_entry.work_record_type = status
# work_entry.date = date
# work_entry.message = (
# "Absent"
# if status == "ABS"
# else _("Half day Attendance need to validate")
# )
# work_entry.save()
# except:
# pass

# else:
# for date in period_dates:
# WorkRecords.objects.filter(
# is_leave_record=True,
# date=date,
# employee_id=instance.employee_id,
# ).delete()


# @receiver(post_save, sender=LeaveRequest)
# def update_available(sender, instance, **kwargs):
# """
# post save method to update the available leaves
# """

# _sender = sender

# def update_leaves():
# try:
# if instance.leave_type_id:
# available_leaves = instance.employee_id.available_leave.filter(
# leave_type_id=instance.leave_type_id
# )
# for assigned in available_leaves:
# assigned.save()
# except Exception as e:
# pass

# thread = threading.Thread(target=update_leaves)
# thread.start()
Loading

0 comments on commit 2f1a11c

Please sign in to comment.