[UPDT] OFFBOARDING: Added the notice period end date from settings.

This commit is contained in:
Horilla
2024-03-21 14:22:49 +05:30
parent 27ef653877
commit d47a55c860
6 changed files with 38 additions and 18 deletions

View File

@@ -125,7 +125,7 @@ def intial_notice_period(request):
Check weather resignation_request enabled of not in offboarding
"""
first = PayrollGeneralSetting.objects.first()
initial = 3
initial = 30
if first:
initial = first.notice_period
return {"get_initial_notice_period": initial}

View File

@@ -1,5 +1,5 @@
from collections.abc import Iterable
from datetime import date
from datetime import date, timedelta
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
@@ -11,6 +11,7 @@ from horilla_audit.models import HorillaAuditInfo, HorillaAuditLog
from notifications.signals import notify
from django.contrib.auth.models import User
from base.thread_local_middleware import _thread_locals
from payroll.models.models import Contract
# Create your models here.
@@ -185,6 +186,18 @@ class ResignationLetter(models.Model):
.filter(offboarding_id=offboarding)
.first()
)
contract_notice_end_date = Contract.objects.filter(
employee_id=self.employee_id, contract_status="active"
).first()
try:
notice_period_ends = (
notice_period_starts + timedelta (contract_notice_end_date.notice_period_in_days)
if contract_notice_end_date
else notice_period_ends
)
except:
notice_period_ends = notice_period_ends
offboarding_employee.notice_period_starts = notice_period_starts
offboarding_employee.notice_period_ends = notice_period_ends
if (

View File

@@ -47,7 +47,7 @@ from notifications.signals import notify
from django.utils.translation import gettext_lazy as _
from onboarding.filters import OnboardingStageFilter
from payroll.models.models import Contract
from payroll.models.models import Contract, PayrollGeneralSetting
from attendance.methods.group_by import group_by_queryset as group_by
from recruitment.pipeline_grouper import group_by_queryset
@@ -66,7 +66,9 @@ def pipeline_grouper(filters={}, offboardings=[]):
all_stages_grouper.append({"grouper": stage, "list": []})
stage_employees = PipelineEmployeeFilter(
filters,
OffboardingEmployee.objects.filter(stage_id=stage),
OffboardingEmployee.objects.filter(
stage_id=stage, employee_id__is_active=True
),
).qs.order_by("stage_id__id")
page_name = "page" + stage.title + str(offboarding.id)
employee_grouper = group_by_queryset(
@@ -236,7 +238,7 @@ def add_employee(request):
if intial_notice_period(request)["get_initial_notice_period"]
else 0
)
end_date = datetime.today() + timedelta(days=default_notice_period * 30)
end_date = datetime.today() + timedelta(days=default_notice_period)
stage_id = request.GET["stage_id"]
instance_id = eval(str(request.GET.get("instance_id")))
instance = None
@@ -391,7 +393,7 @@ def view_notes(request, employee_id=None):
@login_required
@any_manager_can_enter("offboarding.add_offboardingnote")
# @any_manager_can_enter("offboarding.add_offboardingnote")
def add_note(request):
"""
This method is used to create note for the offboarding employee
@@ -773,6 +775,7 @@ def update_status(request):
ids = request.GET.getlist("letter_ids")
status = request.GET["status"]
offboarding_id = request.GET.get("offboarding_id")
default_notice_end = PayrollGeneralSetting.objects.first()
if offboarding_id:
offboarding = Offboarding.objects.get(id=offboarding_id)
notice_period_starts = request.GET.get("notice_period_starts")
@@ -788,6 +791,10 @@ def update_status(request):
).date()
else:
notice_period_ends = None
if default_notice_end:
notice_period_ends = notice_period_starts + timedelta(
days=default_notice_end.notice_period
)
if not notice_period_starts:
notice_period_starts = today
@@ -860,7 +867,7 @@ def get_notice_period(request):
"notice_period_starts": str(datetime.today().date()),
}
if employee_contract:
response["notice_period"] = employee_contract.notice_period_in_month
response["notice_period"] = employee_contract.notice_period_in_days
return JsonResponse(response)
@@ -868,7 +875,7 @@ def get_notice_period_end_date(request):
start_date = request.GET.get("start_date")
start_date = datetime.strptime(start_date, "%Y-%m-%d").date()
notice_period = intial_notice_period(request)["get_initial_notice_period"]
end_date = start_date + timedelta(days=notice_period * 30)
end_date = start_date + timedelta(days=notice_period)
response = {
"end_date": end_date,
}

View File

@@ -136,7 +136,7 @@ class ContractForm(ModelForm):
)
first = PayrollGeneralSetting.objects.first()
if first and self.instance.pk is None:
self.initial["notice_period_in_month"] = first.notice_period
self.initial["notice_period_in_days"] = first.notice_period
def as_p(self):
"""

View File

@@ -227,6 +227,12 @@ class Contract(models.Model):
related_name="contracts",
verbose_name=_("Work Type"),
)
notice_period_in_days = models.IntegerField(
default=30,
help_text=_("Notice period in total days."),
validators=[min_zero],
verbose_name=_("Notice Period"),
)
contract_document = models.FileField(upload_to="uploads/", null=True, blank=True)
is_active = models.BooleanField(default=True)
deduct_leave_from_basic_pay = models.BooleanField(
@@ -234,12 +240,6 @@ class Contract(models.Model):
verbose_name=_("Deduct From Basic Pay"),
help_text=_("Deduct the leave amount from basic pay."),
)
notice_period_in_month = models.IntegerField(
default=3,
help_text=_("Notice period in total months."),
validators=[min_zero],
verbose_name=_("Notice Period"),
)
calculate_daily_leave_amount = models.BooleanField(
default=True,
verbose_name=_("Calculate Daily Leave Amount"),
@@ -1758,9 +1758,9 @@ class PayrollGeneralSetting(models.Model):
"""
notice_period = models.IntegerField(
help_text="Notice period in month",
help_text="Notice period in days",
validators=[min_zero],
default=3,
default=30,
)
company_id = models.ForeignKey(Company, on_delete=models.CASCADE, null=True)

View File

@@ -6,7 +6,7 @@
<form action="{% url 'initial-notice-period' %}">
<div class="oh-label__info" for="default_notice_period">
<label class="oh-label" for="default_notice_period">{% trans "Default Notice Period" %}</label>
<span class="oh-info mr-2" title="{% trans "Set initial notice period (in month)" %}">
<span class="oh-info mr-2" title="{% trans "Set initial notice period (in days)" %}">
</span>
</div>
<input type="number"class="oh-input w-25" name="notice_period" value="{{get_initial_notice_period}}" />