[UPDT] LEAVE: User leave creation from My Leave Request page view

This commit is contained in:
Horilla
2023-10-18 11:04:27 +05:30
parent cc689c9a63
commit c8358e5629
10 changed files with 302 additions and 96 deletions

View File

@@ -455,6 +455,14 @@ class UserLeaveRequestForm(ModelForm):
def __init__(self, *args, employee=None, **kwargs):
super(UserLeaveRequestForm, self).__init__(*args, **kwargs)
def as_p(self, *args, **kwargs):
"""
Render the form fields as HTML table rows with Bootstrap styling.
"""
context = {"form": self}
table_html = render_to_string("attendance_form.html", context)
return table_html
class Meta:
model = LeaveRequest
fields = [
@@ -507,7 +515,49 @@ class HolidaysColumnExportForm(forms.Form):
)
class RejectForm(forms.Form):
reason = forms.CharField(label=_("Rejection Reason"), widget=forms.Textarea(attrs={"rows":4,"class":"p-4"}))
reason = forms.CharField(label=_("Rejection Reason"), widget=forms.Textarea(attrs={"rows":4,"class":"p-4 oh-input w-100"}))
class Meta:
model = LeaveRequest
fields = ["reject_reason"]
fields = ["reject_reason"]
class UserLeaveRequestCreationForm(ModelForm):
start_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
end_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
def clean(self):
cleaned_data = super().clean()
start_date = cleaned_data.get('start_date')
end_date = cleaned_data.get('end_date')
employee_id = cleaned_data.get('employee_id')
leave_type_id = cleaned_data.get('leave_type_id')
overlapping_requests = LeaveRequest.objects.filter(employee_id=employee_id,
start_date__lte=end_date, end_date__gte=start_date
)
if not start_date <= end_date:
raise forms.ValidationError(_("End date should not be less than start date."))
if not AvailableLeave.objects.filter(employee_id=employee_id, leave_type_id=leave_type_id).exists():
raise forms.ValidationError(_("Employee has no leave type.."))
if overlapping_requests.exists():
raise forms.ValidationError(_("Employee has already a leave request for this date range.."))
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 not requested_days <= total_leave_days:
raise forms.ValidationError(_("Employee doesn't have enough leave days.."))
return cleaned_data
class Meta:
model = LeaveRequest
fields = ['leave_type_id', 'employee_id', 'start_date', 'start_date_breakdown','end_date','end_date_breakdown', 'description', 'attachment']
widgets = {
'employee_id': forms.HiddenInput()
}