From 55b47ae97b6378cdcbf36490ee269faebea6d8ef Mon Sep 17 00:00:00 2001 From: Horilla Date: Fri, 7 Jul 2023 11:06:16 +0530 Subject: [PATCH] [FIX]leave module bug fix --- leave/forms.py | 16 +++++++++++++++- leave/models.py | 30 ++++++++++++++++++++---------- leave/views.py | 20 ++++++++++++++++---- 3 files changed, 51 insertions(+), 15 deletions(-) diff --git a/leave/forms.py b/leave/forms.py index 49dba74d9..818d49898 100644 --- a/leave/forms.py +++ b/leave/forms.py @@ -123,6 +123,8 @@ class LeaveRequestCreationForm(ModelForm): end_date = cleaned_data.get('end_date') employee_id = cleaned_data.get('employee_id') leave_type_id = cleaned_data.get('leave_type_id') + start_date_breakdown = cleaned_data.get('start_date_breakdown') + end_date_breakdown = cleaned_data.get('end_date_breakdown') overlapping_requests = LeaveRequest.objects.filter(employee_id=employee_id, start_date__lte=end_date, end_date__gte=start_date ) @@ -138,8 +140,20 @@ class LeaveRequestCreationForm(ModelForm): available_leave = AvailableLeave.objects.get(employee_id=employee_id, leave_type_id=leave_type_id) total_leave_days = available_leave.available_days + available_leave.carryforward_days - requested_days = (end_date - start_date).days + 1 + if start_date == end_date: + if start_date_breakdown == 'full_day' and end_date_breakdown == 'full_day': + requested_days = 1 + else: + requested_days = 0.5 + else: + start_days = 0 + end_days = 0 + if start_date_breakdown != 'full_day': + start_days = 0.5 + if end_date_breakdown != 'full_day': + end_days = 0.5 + requested_days = (end_date - start_date).days + start_days + end_days - 1 if not requested_days <= total_leave_days: raise forms.ValidationError(_("Employee doesn't have enough leave days..")) diff --git a/leave/models.py b/leave/models.py index 0557f22af..f6150e407 100644 --- a/leave/models.py +++ b/leave/models.py @@ -121,9 +121,9 @@ class AvailableLeave(models.Model): LeaveType, on_delete=models.CASCADE, related_name='employee_available_leave', blank=True, null=True) employee_id = models.ForeignKey( Employee, on_delete=models.DO_NOTHING, related_name='available_leave') - available_days = models.IntegerField(default=0) - carryforward_days = models.IntegerField(default=0) - total_leave_days = models.IntegerField(default=0) + available_days = models.FloatField(default=0) + carryforward_days = models.FloatField(default=0) + total_leave_days = models.FloatField(default=0) assigned_date = models.DateField(default=timezone.now) class Meta: @@ -156,8 +156,8 @@ class LeaveRequest(models.Model): null=True, blank=True, upload_to='leave/leave_attachment') status = models.CharField( max_length=30, choices=LEAVE_STATUS, default='requested') - approved_available_days = models.IntegerField(default=0) - approved_carryforward_days = models.IntegerField(default=0) + approved_available_days = models.FloatField(default=0) + approved_carryforward_days = models.FloatField(default=0) created_at = models.DateTimeField(auto_now="True") @@ -235,12 +235,22 @@ class LeaveRequest(models.Model): def save(self, *args, **kwargs): - self.requested_days = (self.end_date - self.start_date).days + 1 - if self.start_date_breakdown in ["first_half", "second_half"]: - self.requested_days = self.requested_days - 0.5 + if self.start_date == self.end_date: + if self.start_date_breakdown == 'full_day' and self.end_date_breakdown == 'full_day': + self.requested_days = 1 + else: + self.requested_days = 0.5 + else: + start_days = 0 + end_days = 0 + if self.start_date_breakdown != 'full_day': + start_days = 0.5 + + if self.end_date_breakdown != 'full_day': + end_days = 0.5 + + self.requested_days = (self.end_date - self.start_date).days + start_days + end_days - if self.end_date_breakdown in ["first_half", "second_half"]: - self.requested_days = self.requested_days - 0.5 if self.leave_type_id.exclude_company_leave == 'yes' and self.leave_type_id.exclude_holiday == 'yes': self.exclude_all_leaves() diff --git a/leave/views.py b/leave/views.py index cffd9d3fc..2abbc9a53 100644 --- a/leave/views.py +++ b/leave/views.py @@ -869,13 +869,10 @@ def company_leave_filter(request): Returns: GET : return company leave view template """ - print(request.GET) queryset = CompanyLeave.objects.all() previous_data = request.environ["QUERY_STRING"] page_number = request.GET.get("page") - print('queryset', queryset) company_leave_filter = CompanyLeavefilter(request.GET, queryset).qs - print('company_leave_filter', company_leave_filter) page_obj = paginator_qry(company_leave_filter, page_number) return render( request, @@ -965,7 +962,22 @@ def user_leave_request(request, id): start_date = datetime.strptime( request.POST.get('start_date'), "%Y-%m-%d") end_date = datetime.strptime(request.POST.get('end_date'), "%Y-%m-%d") - requested_days = (end_date - start_date).days + 1 + start_date_breakdown = request.POST.get('start_date_breakdown') + end_date_breakdown = request.POST.get('end_date_breakdown') + if start_date == end_date: + if start_date_breakdown == 'full_day' and end_date_breakdown == 'full_day': + requested_days = 1 + else: + requested_days = 0.5 + else: + start_days = 0 + end_days = 0 + if start_date_breakdown != 'full_day': + start_days = 0.5 + + if end_date_breakdown != 'full_day': + end_days = 0.5 + requested_days = (end_date - start_date).days + start_days + end_days leave_type = LeaveType.objects.get(id=id) available_leave = AvailableLeave.objects.get( employee_id=employee, leave_type_id=leave_type)