[UPDT] LEAVE: User leave creation from My Leave Request page view
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user