diff --git a/leave/forms.py b/leave/forms.py index 272ba7618..618e066c0 100644 --- a/leave/forms.py +++ b/leave/forms.py @@ -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"] \ No newline at end of file + 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() + } + \ No newline at end of file diff --git a/leave/templates/leave/leave_request/leave_requests.html b/leave/templates/leave/leave_request/leave_requests.html index 7d7d7ddf5..5472d6d3f 100644 --- a/leave/templates/leave/leave_request/leave_requests.html +++ b/leave/templates/leave/leave_request/leave_requests.html @@ -95,7 +95,7 @@ {% else %} - diff --git a/leave/templates/leave/user_leave/request_form.html b/leave/templates/leave/user_leave/request_form.html new file mode 100644 index 000000000..fb9ab2a11 --- /dev/null +++ b/leave/templates/leave/user_leave/request_form.html @@ -0,0 +1,84 @@ +{% load i18n %} +{% if form.errors %} + +
+
+ {% for error in form.non_field_errors %} +
+ {{ error }} +
+ {% endfor %} +
+
+{% endif %} + +
+
+
+
+
+ {{form.employee_id}} + {{form.employee_id.errors}} +
+
+
+
+ + {{form.leave_type_id}} + {{form.leave_type_id.errors}} +
+
+
+
+ + {{form.start_date}} + {{form.start_date.errors}} +
+
+
+
+ + {{form.start_date_breakdown}} + {{form.start_date_breakdown.errors}} +
+
+
+
+ + {{form.end_date}} + {{form.end_date.errors}} +
+
+
+
+ + {{form.end_date_breakdown}} + {{form.end_date_breakdown.errors}} +
+
+
+
+ + {{form.attachment}} + {{form.attachment.errors}} +
+
+
+
+ + {{form.description}} + {{form.description.errors}} +
+
+
+
+ +
+
+
+
diff --git a/leave/templates/leave/user_leave/user_leave_view.html b/leave/templates/leave/user_leave/user_leave_view.html index 3f55592cf..cf15264be 100644 --- a/leave/templates/leave/user_leave/user_leave_view.html +++ b/leave/templates/leave/user_leave/user_leave_view.html @@ -59,19 +59,24 @@ - + {% endif %} +
+
+ + +
+
- {% endif %} +
{% if leave_requests %} {% include 'leave/user_leave/user_requests.html' %} {% else %} +
@@ -126,19 +137,44 @@
- -