[ADD] LEAVE: company_id - Company dependent fields to leave models
This commit is contained in:
@@ -182,6 +182,35 @@ class UpdateLeaveTypeForm(ConditionForm):
|
||||
del self.errors["exceed_days"]
|
||||
return cleaned_data
|
||||
|
||||
def cal_effective_requested_days(start_date,end_date,leave_type_id,requested_days):
|
||||
requested_dates = leave_requested_dates(start_date, end_date)
|
||||
holidays = Holiday.objects.all()
|
||||
holiday_dates = holiday_dates_list(holidays)
|
||||
company_leaves = CompanyLeave.objects.all()
|
||||
company_leave_dates = company_leave_dates_list(company_leaves, start_date)
|
||||
if (
|
||||
leave_type_id.exclude_company_leave == "yes"
|
||||
and leave_type_id.exclude_holiday == "yes"
|
||||
):
|
||||
total_leaves = list(set(holiday_dates + company_leave_dates))
|
||||
total_leave_count = sum(
|
||||
requested_date in total_leaves for requested_date in requested_dates
|
||||
)
|
||||
requested_days = requested_days - total_leave_count
|
||||
else:
|
||||
holiday_count = 0
|
||||
if leave_type_id.exclude_holiday == "yes":
|
||||
for requested_date in requested_dates:
|
||||
if requested_date in holiday_dates:
|
||||
holiday_count += 1
|
||||
requested_days = requested_days - holiday_count
|
||||
if leave_type_id.exclude_company_leave == "yes":
|
||||
company_leave_count = sum(
|
||||
requested_date in company_leave_dates
|
||||
for requested_date in requested_dates
|
||||
)
|
||||
requested_days = requested_days - company_leave_count
|
||||
return requested_days
|
||||
|
||||
class LeaveRequestCreationForm(ModelForm):
|
||||
start_date = forms.DateField(widget=forms.DateInput(attrs={"type": "date"}))
|
||||
@@ -232,34 +261,35 @@ class LeaveRequestCreationForm(ModelForm):
|
||||
requested_days = calculate_requested_days(
|
||||
start_date, end_date, start_date_breakdown, end_date_breakdown
|
||||
)
|
||||
requested_dates = leave_requested_dates(start_date, end_date)
|
||||
holidays = Holiday.objects.all()
|
||||
holiday_dates = holiday_dates_list(holidays)
|
||||
company_leaves = CompanyLeave.objects.all()
|
||||
company_leave_dates = company_leave_dates_list(company_leaves, start_date)
|
||||
if (
|
||||
leave_type_id.exclude_company_leave == "yes"
|
||||
and leave_type_id.exclude_holiday == "yes"
|
||||
):
|
||||
total_leaves = list(set(holiday_dates + company_leave_dates))
|
||||
total_leave_count = sum(
|
||||
requested_date in total_leaves for requested_date in requested_dates
|
||||
)
|
||||
requested_days = requested_days - total_leave_count
|
||||
else:
|
||||
holiday_count = 0
|
||||
if leave_type_id.exclude_holiday == "yes":
|
||||
for requested_date in requested_dates:
|
||||
if requested_date in holiday_dates:
|
||||
holiday_count += 1
|
||||
requested_days = requested_days - holiday_count
|
||||
if leave_type_id.exclude_company_leave == "yes":
|
||||
company_leave_count = sum(
|
||||
requested_date in company_leave_dates
|
||||
for requested_date in requested_dates
|
||||
)
|
||||
requested_days = requested_days - company_leave_count
|
||||
if not requested_days <= total_leave_days:
|
||||
# requested_dates = leave_requested_dates(start_date, end_date)
|
||||
# holidays = Holiday.objects.all()
|
||||
# holiday_dates = holiday_dates_list(holidays)
|
||||
# company_leaves = CompanyLeave.objects.all()
|
||||
# company_leave_dates = company_leave_dates_list(company_leaves, start_date)
|
||||
# if (
|
||||
# leave_type_id.exclude_company_leave == "yes"
|
||||
# and leave_type_id.exclude_holiday == "yes"
|
||||
# ):
|
||||
# total_leaves = list(set(holiday_dates + company_leave_dates))
|
||||
# total_leave_count = sum(
|
||||
# requested_date in total_leaves for requested_date in requested_dates
|
||||
# )
|
||||
# requested_days = requested_days - total_leave_count
|
||||
# else:
|
||||
# holiday_count = 0
|
||||
# if leave_type_id.exclude_holiday == "yes":
|
||||
# for requested_date in requested_dates:
|
||||
# if requested_date in holiday_dates:
|
||||
# holiday_count += 1
|
||||
# requested_days = requested_days - holiday_count
|
||||
# if leave_type_id.exclude_company_leave == "yes":
|
||||
# company_leave_count = sum(
|
||||
# requested_date in company_leave_dates
|
||||
# for requested_date in requested_dates
|
||||
# )
|
||||
# requested_days = requested_days - company_leave_count
|
||||
effective_requested_days = cal_effective_requested_days(start_date=start_date,end_date=end_date,leave_type_id=leave_type_id,requested_days=requested_days)
|
||||
if not effective_requested_days <= total_leave_days:
|
||||
raise forms.ValidationError(_("Employee doesn't have enough leave days.."))
|
||||
|
||||
return cleaned_data
|
||||
|
||||
@@ -6,6 +6,7 @@ from django.utils import timezone
|
||||
from django.core.exceptions import ValidationError
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from base.models import Company
|
||||
from employee.models import Employee
|
||||
from .methods import calculate_requested_days
|
||||
from django.core.files.storage import default_storage
|
||||
@@ -163,8 +164,12 @@ class LeaveType(models.Model):
|
||||
)
|
||||
exclude_company_leave = models.CharField(max_length=30, choices=CHOICES)
|
||||
exclude_holiday = models.CharField(max_length=30, choices=CHOICES)
|
||||
company_id = models.ForeignKey(Company,null=True, editable=False, on_delete=models.PROTECT)
|
||||
objects = models.Manager()
|
||||
|
||||
class Meta:
|
||||
ordering = ['-id']
|
||||
|
||||
def get_avatar(self):
|
||||
"""
|
||||
Method will retun the api to the avatar or path to the profile image
|
||||
@@ -186,6 +191,7 @@ class Holiday(models.Model):
|
||||
start_date = models.DateField(verbose_name=_("Start Date"))
|
||||
end_date = models.DateField(null=True, blank=True, verbose_name=_("End Date"))
|
||||
recurring = models.BooleanField(default=False, verbose_name=_("Recurring"))
|
||||
company_id = models.ForeignKey(Company,null=True, editable=False, on_delete=models.PROTECT)
|
||||
objects = models.Manager()
|
||||
|
||||
def __str__(self):
|
||||
@@ -197,6 +203,7 @@ class CompanyLeave(models.Model):
|
||||
max_length=100, choices=WEEKS, blank=True, null=True
|
||||
)
|
||||
based_on_week_day = models.CharField(max_length=100, choices=WEEK_DAYS)
|
||||
company_id = models.ForeignKey(Company,null=True, editable=False, on_delete=models.PROTECT)
|
||||
objects = models.Manager()
|
||||
|
||||
class Meta:
|
||||
|
||||
Reference in New Issue
Block a user