diff --git a/base/context_processors.py b/base/context_processors.py index c43cb313e..e6dda2b62 100644 --- a/base/context_processors.py +++ b/base/context_processors.py @@ -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} diff --git a/offboarding/models.py b/offboarding/models.py index c1f34819d..caae90342 100644 --- a/offboarding/models.py +++ b/offboarding/models.py @@ -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 ( diff --git a/offboarding/views.py b/offboarding/views.py index 62ced30d6..f2361a968 100644 --- a/offboarding/views.py +++ b/offboarding/views.py @@ -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, } diff --git a/payroll/forms/forms.py b/payroll/forms/forms.py index ddeea9f75..41e04a54b 100644 --- a/payroll/forms/forms.py +++ b/payroll/forms/forms.py @@ -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): """ diff --git a/payroll/models/models.py b/payroll/models/models.py index 8be97b680..db15cef8a 100644 --- a/payroll/models/models.py +++ b/payroll/models/models.py @@ -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) diff --git a/payroll/templates/payroll/settings/settings.html b/payroll/templates/payroll/settings/settings.html index 3b775fc00..e6e30a480 100644 --- a/payroll/templates/payroll/settings/settings.html +++ b/payroll/templates/payroll/settings/settings.html @@ -6,7 +6,7 @@
- +