From 05da33e6fe8d978183c22971edcc757fd72d8dfd Mon Sep 17 00:00:00 2001 From: Horilla Date: Fri, 23 Feb 2024 12:06:56 +0530 Subject: [PATCH] [UPDT] LEAVE: Leave request creation method updates --- leave/forms.py | 159 +++++----- .../leave/leave_request/group_by.html | 141 +++++---- .../leave/leave_request/leave_requests.html | 289 +++++++++--------- .../leave/leave_request/one_request_view.html | 4 +- .../leave/leave_request/user_cancel_form.html | 54 ++-- .../leave/user_leave/user_request_view.html | 18 +- .../leave/user_leave/user_requests.html | 4 +- leave/views.py | 2 +- 8 files changed, 350 insertions(+), 321 deletions(-) diff --git a/leave/forms.py b/leave/forms.py index f1ab3b2d3..cb3c15611 100644 --- a/leave/forms.py +++ b/leave/forms.py @@ -79,12 +79,12 @@ class ModelForm(forms.ModelForm): ), ): field.widget.attrs.update({"class": "oh-switch__checkbox"}) - try: - self.fields["employee_id"].initial = request.user.employee_get + try: + self.fields["employee_id"].initial = request.user.employee_get except: pass - try: + try: self.fields["company_id"].initial = request.user.employee_get.get_company except: pass @@ -98,9 +98,9 @@ class ConditionForm(forms.ModelForm): for field_name, field in self.fields.items(): widget = field.widget if isinstance(widget, (forms.Select,)): - field.widget.attrs[ - "style" - ] = "width:100%; height:50px;border: 1px solid hsl(213deg,22%,84%);border-radius: 0rem;padding: 0.8rem 1.25rem;" + field.widget.attrs["style"] = ( + "width:100%; height:50px;border: 1px solid hsl(213deg,22%,84%);border-radius: 0rem;padding: 0.8rem 1.25rem;" + ) elif isinstance(widget, (forms.DateInput)): field.widget.attrs.update({"class": "oh-input oh-calendar-input w-100"}) field.initial = date.today() @@ -128,16 +128,17 @@ class ConditionForm(forms.ModelForm): ), ): field.widget.attrs.update({"class": "oh-switch__checkbox"}) - try: - self.fields["employee_id"].initial = request.user.employee_get + try: + self.fields["employee_id"].initial = request.user.employee_get except: pass - try: + try: self.fields["company_id"].initial = request.user.employee_get.get_company except: pass + class LeaveTypeForm(ConditionForm): class Meta: @@ -179,9 +180,9 @@ class UpdateLeaveTypeForm(ConditionForm): for index, visible in enumerate(self.visible_fields()): if list(self.fields.keys())[index] in empty_fields: - visible.field.widget.attrs[ - "style" - ] = "display:none;width:100%; height:50px;border: 1px solid hsl(213deg,22%,84%);border-radius: 0rem;padding: 0.8rem 1.25rem;" + visible.field.widget.attrs["style"] = ( + "display:none;width:100%; height:50px;border: 1px solid hsl(213deg,22%,84%);border-radius: 0rem;padding: 0.8rem 1.25rem;" + ) visible.field.widget.attrs["data-hidden"] = True class Meta: @@ -198,7 +199,8 @@ class UpdateLeaveTypeForm(ConditionForm): del self.errors["exceed_days"] return cleaned_data -def cal_effective_requested_days(start_date,end_date,leave_type_id,requested_days): + +def cal_effective_requested_days(start_date, end_date, leave_type_id, requested_days): requested_dates = leave_requested_dates(start_date, end_date) holidays = Holiday.objects.all() holiday_dates = holiday_dates_list(holidays) @@ -228,6 +230,7 @@ def cal_effective_requested_days(start_date,end_date,leave_type_id,requested_day requested_days = requested_days - company_leave_count return requested_days + class LeaveRequestCreationForm(ModelForm): start_date = forms.DateField(widget=forms.DateInput(attrs={"type": "date"})) end_date = forms.DateField(widget=forms.DateInput(attrs={"type": "date"})) @@ -243,6 +246,8 @@ class LeaveRequestCreationForm(ModelForm): attachment = cleaned_data.get("attachment") overlapping_requests = LeaveRequest.objects.filter( employee_id=employee_id, start_date__lte=end_date, end_date__gte=start_date + ).exclude( + id=self.instance.id, ) if leave_type_id.require_attachment == "yes": if attachment is None: @@ -256,14 +261,16 @@ class LeaveRequestCreationForm(ModelForm): if start_date == end_date: if start_date_breakdown != end_date_breakdown: raise forms.ValidationError( - _("There is a mismatch in the breakdown of the start date and end date.") + _( + "There is a mismatch in the breakdown of the start date and end 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(): + if overlapping_requests.exclude(status__in=['cancelled', 'rejected']).exists(): raise forms.ValidationError( _("Employee has already a leave request for this date range..") ) @@ -277,8 +284,13 @@ class LeaveRequestCreationForm(ModelForm): requested_days = calculate_requested_days( start_date, end_date, start_date_breakdown, end_date_breakdown ) - effective_requested_days = cal_effective_requested_days(start_date=start_date,end_date=end_date,leave_type_id=leave_type_id,requested_days=requested_days) - leave_dates = leave_requested_dates(start_date,end_date) + effective_requested_days = cal_effective_requested_days( + start_date=start_date, + end_date=end_date, + leave_type_id=leave_type_id, + requested_days=requested_days, + ) + leave_dates = leave_requested_dates(start_date, end_date) month_year = [f"{date.year}-{date.strftime('%m')}" for date in leave_dates] today = datetime.today() unique_dates = list(set(month_year)) @@ -312,7 +324,6 @@ class LeaveRequestCreationForm(ModelForm): } ) - def as_p(self, *args, **kwargs): """ Render the form fields as HTML table rows with Bootstrap styling. @@ -357,13 +368,15 @@ class LeaveRequestUpdationForm(ModelForm): if start_date == end_date: if start_date_breakdown != end_date_breakdown: raise forms.ValidationError( - _("There is a mismatch in the breakdown of the start date and end date.") + _( + "There is a mismatch in the breakdown of the start date and end 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(): + if overlapping_requests.exclude(status__in=["cancelled", "rejected"]).exists(): raise forms.ValidationError( _("Employee has already a leave request for this date range..") ) @@ -376,8 +389,13 @@ class LeaveRequestUpdationForm(ModelForm): requested_days = calculate_requested_days( start_date, end_date, start_date_breakdown, end_date_breakdown ) - effective_requested_days = cal_effective_requested_days(start_date=start_date,end_date=end_date,leave_type_id=leave_type_id,requested_days=requested_days) - leave_dates = leave_requested_dates(start_date,end_date) + effective_requested_days = cal_effective_requested_days( + start_date=start_date, + end_date=end_date, + leave_type_id=leave_type_id, + requested_days=requested_days, + ) + leave_dates = leave_requested_dates(start_date, end_date) month_year = [f"{date.year}-{date.strftime('%m')}" for date in leave_dates] today = datetime.today() unique_dates = list(set(month_year)) @@ -391,7 +409,7 @@ class LeaveRequestUpdationForm(ModelForm): raise forms.ValidationError(_("Employee doesn't have enough leave days..")) return cleaned_data - + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -430,7 +448,6 @@ class LeaveRequestUpdationForm(ModelForm): "end_date_breakdown", "description", "attachment", - "status", ] @@ -476,10 +493,10 @@ class HolidayForm(ModelForm): labels = { "name": _("Name"), } - + def __init__(self, *args, **kwargs): super(HolidayForm, self).__init__(*args, **kwargs) - self.fields['name'].widget.attrs['autocomplete'] = 'name' + self.fields["name"].widget.attrs["autocomplete"] = "name" class LeaveOneAssignForm(HorillaModelForm): @@ -498,8 +515,8 @@ class LeaveOneAssignForm(HorillaModelForm): class Meta: model = AvailableLeave fields = ["employee_id"] - - def __init__(self,*args, **kwargs): + + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) reload_queryset(self.fields) @@ -527,28 +544,25 @@ class UserLeaveRequestForm(ModelForm): end_date = cleaned_data.get("end_date") employee_id = cleaned_data.get("employee_id") start_date_breakdown = cleaned_data.get("start_date_breakdown") - end_date_breakdown = cleaned_data.get('end_date_breakdown') + end_date_breakdown = cleaned_data.get("end_date_breakdown") 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 - ).exclude( - id=self.instance.id, - status__in=['cancelled_and_rejected', 'rejected'] - ) + employee_id=employee_id, start_date__lte=end_date, end_date__gte=start_date + ).exclude(id=self.instance.id) if start_date == end_date: if start_date_breakdown != end_date_breakdown: raise forms.ValidationError( - _("There is a mismatch in the breakdown of the start date and end date.") + _( + "There is a mismatch in the breakdown of the start date and end date." + ) ) if not start_date <= end_date: raise forms.ValidationError( _("End date should not be less than start date.") ) - if overlapping_requests.exists(): + if overlapping_requests.exclude(status__in=["cancelled", "rejected"]).exists(): raise forms.ValidationError( - _("Employee has already a leave request for this date range..") + _("Employee has already a leave request for this date range.....") ) requested_days = calculate_requested_days( start_date, end_date, start_date_breakdown, end_date_breakdown @@ -559,17 +573,25 @@ class UserLeaveRequestForm(ModelForm): total_leave_days = ( available_leave.available_days + available_leave.carryforward_days ) - effective_requested_days = cal_effective_requested_days(start_date=start_date,end_date=end_date,leave_type_id=leave_type_id,requested_days=requested_days) + effective_requested_days = cal_effective_requested_days( + start_date=start_date, + end_date=end_date, + leave_type_id=leave_type_id, + requested_days=requested_days, + ) if not effective_requested_days <= total_leave_days: raise forms.ValidationError(_("Employee doesn't have enough leave days..")) return cleaned_data def __init__(self, *args, employee=None, **kwargs): - leave_type = kwargs.pop('initial', None) + leave_type = kwargs.pop("initial", None) super(UserLeaveRequestForm, self).__init__(*args, **kwargs) - self.fields['leave_type_id'].queryset = LeaveType.objects.filter(id=leave_type["leave_type_id"].id) - self.fields['leave_type_id'].initial= leave_type["leave_type_id"].id - self.fields['leave_type_id'].empty_label= None + if leave_type: + self.fields["leave_type_id"].queryset = LeaveType.objects.filter( + id=leave_type["leave_type_id"].id + ) + self.fields["leave_type_id"].initial = leave_type["leave_type_id"].id + self.fields["leave_type_id"].empty_label = None def as_p(self, *args, **kwargs): """ @@ -666,7 +688,7 @@ class UserLeaveRequestCreationForm(ModelForm): context = {"form": self} table_html = render_to_string("attendance_form.html", context) return table_html - + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -675,7 +697,7 @@ class UserLeaveRequestCreationForm(ModelForm): "onchange": "typeChange($(this))", } ) - + def clean(self): cleaned_data = super().clean() start_date = cleaned_data.get("start_date") @@ -683,11 +705,10 @@ class UserLeaveRequestCreationForm(ModelForm): 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') + 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 - ) - + ).exclude(id=self.instance.id) if not start_date <= end_date: raise forms.ValidationError( _("End date should not be less than start date.") @@ -695,14 +716,16 @@ class UserLeaveRequestCreationForm(ModelForm): if start_date == end_date: if start_date_breakdown != end_date_breakdown: raise forms.ValidationError( - _("There is a mismatch in the breakdown of the start date and end date.") + _( + "There is a mismatch in the breakdown of the start date and end 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(): + if overlapping_requests.exclude(status__in=['cancelled', 'rejected']).exists(): raise forms.ValidationError( _("Employee has already a leave request for this date range..") ) @@ -736,7 +759,7 @@ class UserLeaveRequestCreationForm(ModelForm): ] widgets = { "employee_id": forms.HiddenInput(), - 'requested_days': forms.HiddenInput() + "requested_days": forms.HiddenInput(), } @@ -796,14 +819,16 @@ class LeaveRequestExportForm(forms.Form): ) - class AssignLeaveForm(HorillaForm): """ Form for Payslip """ + leave_type_id = forms.ModelChoiceField( queryset=LeaveType.objects.all(), - widget=forms.SelectMultiple(attrs={"class": "oh-select oh-select-2 mb-2","required": True}), + widget=forms.SelectMultiple( + attrs={"class": "oh-select oh-select-2 mb-2", "required": True} + ), empty_label=None, label="Leave Type", required=False, @@ -815,7 +840,7 @@ class AssignLeaveForm(HorillaForm): filter_class=EmployeeFilter, filter_instance_contex_name="f", filter_template_path="employee_filters.html", - required = True, + required=True, ), label="Employee", ) @@ -825,18 +850,10 @@ class AssignLeaveForm(HorillaForm): employee_id = cleaned_data.get("employee_id") leave_type_id = cleaned_data.get("leave_type_id") - if not employee_id : - raise forms.ValidationError( - { - "employee_id": "This field is required" - } - ) - if not leave_type_id : - raise forms.ValidationError( - { - "leave_type_id": "This field is required" - } - ) + if not employee_id: + raise forms.ValidationError({"employee_id": "This field is required"}) + if not leave_type_id: + raise forms.ValidationError({"leave_type_id": "This field is required"}) return cleaned_data def __init__(self, *args, **kwargs): @@ -845,7 +862,7 @@ class AssignLeaveForm(HorillaForm): self.fields["employee_id"].widget.attrs.update( {"required": True, "id": uuid.uuid4()} ), - self.fields['leave_type_id'].label = "Leave Type" + self.fields["leave_type_id"].label = "Leave Type" class LeaverequestcommentForm(ModelForm): @@ -859,8 +876,7 @@ class LeaverequestcommentForm(ModelForm): """ model = LeaverequestComment - fields = ('comment',) - + fields = ("comment",) class LeaveCommentForm(ModelForm): @@ -916,7 +932,7 @@ class LeaveallocationrequestcommentForm(ModelForm): """ model = LeaveallocationrequestComment - fields = ('comment',) + fields = ("comment",) class LeaveAllocationCommentForm(ModelForm): @@ -959,4 +975,3 @@ class LeaveAllocationCommentForm(ModelForm): if commit: instance.files.add(*multiple_files_ids) return instance, files - diff --git a/leave/templates/leave/leave_request/group_by.html b/leave/templates/leave/leave_request/group_by.html index dc22eb4b4..253675817 100644 --- a/leave/templates/leave/leave_request/group_by.html +++ b/leave/templates/leave/leave_request/group_by.html @@ -110,79 +110,90 @@ {% endif %} {% if not dashboard %} - -
- +
- -
-
-
- {% if request.user|is_reportingmanager or perms.attendance.chanage_penaltyaccount or request.user|is_leave_approval_manager %} - - {% endif %} - - {% endif %} - {% if request.user|is_reportingmanager or perms.attendance.delete_leaverequest %} - group_by - -
-
-
- {% if leave_request.get_penalties_count %} -
- {% trans "Penalties" %} :{{leave_request.get_penalties_count}} + + {% endif %} + + {% endif %} + {% if request.user|is_reportingmanager or perms.attendance.delete_leaverequest %} + group_by +
- {% endif %} -
-
-
- {% if leave_request.status == 'requested' or leave_request.status == 'rejected' %} - - - - {% else %} - - - - {% endif %} - {% if leave_request.status != 'rejected' %} - - - - - {% else %} - - - - {% endif %}
-
+
+ {% if leave_request.get_penalties_count %} +
+ {% trans "Penalties" %} :{{leave_request.get_penalties_count}} +
+ {% endif %} +
+
+
+ {% if leave_request.status == 'cancelled' %} + {% if leave_request.end_date >= current_date %} + + + + {% else %} + + + + {% endif %} + {% else %} + {% if leave_request.is_approved and leave_request.status == 'requested' and leave_request.end_date >= current_date %} + current_date.month %} onclick = "leaveRequestConfirm('This leave request is for the month of {{leave_request.start_date|date:'F'}}. Approval depends on the {{leave_request.employee_id.get_full_name}} having available leave days for this month.',event);" {% else %} onclick = "return confirm('Do You really want to Approve this request?')"; {% endif %}> + + + {% else %} + + + + {% endif %} + {% if leave_request.status != 'rejected' and leave_request.end_date >= current_date %} + + + + + {% else %} + + + + + {% endif %} + + {% endif %} +
+
{% endif %}
{% endfor %} diff --git a/leave/templates/leave/leave_request/leave_requests.html b/leave/templates/leave/leave_request/leave_requests.html index 34010e0ec..a553fb8f8 100644 --- a/leave/templates/leave/leave_request/leave_requests.html +++ b/leave/templates/leave/leave_request/leave_requests.html @@ -49,186 +49,181 @@ {% endif %} {% if leave_requests %} -
-
-
-
- {% if not request.GET.dashboard %} -
-
- -
-
+
+
+
+
+ {% if not request.GET.dashboard %} +
+
+ +
+
+ {% endif %} +
{% trans "Employee" %}
+
{% trans "Leave Type" %}
+
{% trans "Start Date" %}
+
{% trans "End Date" %}
+
{% trans "Requested Days" %}
+
{% trans "Status" %}
+ {% if not dashboard %} +
{% trans "Comment" %}
+ {% if request.user|is_reportingmanager or perms.leave.chanage_leaverequest or perms.leave.delete_leaverequest or request.user|is_leave_approval_manager %} +
{% trans "Actions" %}
+ {% endif %} +
{% trans "Penalties" %}
+
{% trans "Confirmation" %}
+ {% endif %} +
+
+
+ {% for leave_request in leave_requests %} +
+ {% if not request.GET.dashboard %} +
+
+ +
+
+ {% endif %} +
+
+
+ +
+ {{leave_request.employee_id}} +
+
+
{{leave_request.leave_type_id}}
+
{{leave_request.start_date}}
+
{{leave_request.end_date}}
+
{{leave_request.requested_days}}
+
+ {% if leave_request.multiple_approvals and leave_request.status == "requested" %} +
+ {{leave_request.multiple_approvals.approved|length}} / {{leave_request.multiple_approvals.managers|length}} {% trans "Approved" %} +
+ {% else %} + {{leave_request.get_status_display}} {% endif %} -
{% trans "Employee" %}
-
{% trans "Leave Type" %}
-
{% trans "Start Date" %}
-
{% trans "End Date" %}
-
{% trans "Requested Days" %}
-
{% trans "Status" %}
- {% if not dashboard %} -
{% trans "Comment" %}
- {% if request.user|is_reportingmanager or perms.leave.chanage_leaverequest or perms.leave.delete_leaverequest or request.user|is_leave_approval_manager %} -
{% trans "Actions" %}
- {% endif %} -
{% trans "Penalties" %}
-
{% trans "Confirmation" %}
+
+ {% if not dashboard %} +
+ +
+
+
+ {% if request.user|is_reportingmanager or perms.attendance.chanage_penaltyaccount or request.user|is_leave_approval_manager %} + + {% endif %} + {% if request.user|is_reportingmanager or perms.leave.chanage_leaverequest or perms.leave.delete_leaverequest or request.user|is_leave_approval_manager%} + {% if request.user|is_reportingmanager or perms.leave.chanage_leaverequest or request.user|is_leave_approval_manager %} + + {% endif %} + {% if request.user|is_reportingmanager or perms.leave.delete_leaverequest or request.user|is_leave_approval_manager %} + + {% endif %} + {% endif %} +
+
+ {% endif %} +
+ {% if leave_request.get_penalties_count %} +
{% trans "Penalties" %} :{{leave_request.get_penalties_count}}
{% endif %}
-
-
- {% for leave_request in leave_requests %} -
- {% if not request.GET.dashboard %} -
-
- -
-
- {% endif %} -
-
-
- -
- {{leave_request.employee_id}} -
-
-
{{leave_request.leave_type_id}}
-
{{leave_request.start_date}}
-
{{leave_request.end_date}}
-
{{leave_request.requested_days}}
-
- {% if leave_request.multiple_approvals and leave_request.status == "requested" %} -
- {{leave_request.multiple_approvals.approved|length}} / {{leave_request.multiple_approvals.managers|length}} {% trans "Approved" %} -
- {% else %} - {{leave_request.get_status_display}} - {% endif %} -
- {% if not dashboard %} -
- -
-
-
- {% if request.user|is_reportingmanager or perms.attendance.chanage_penaltyaccount or request.user|is_leave_approval_manager %} - - {% endif %} - {% if request.user|is_reportingmanager or perms.leave.chanage_leaverequest or perms.leave.delete_leaverequest or request.user|is_leave_approval_manager%} - {% if request.user|is_reportingmanager or perms.leave.chanage_leaverequest or request.user|is_leave_approval_manager %} - - {% endif %} - {% if request.user|is_reportingmanager or perms.leave.delete_leaverequest or request.user|is_leave_approval_manager %} - - {% endif %} - {% endif %} -
-
- {% endif %} -
- {% if leave_request.get_penalties_count %} -
{% trans "Penalties" %} :{{leave_request.get_penalties_count}}
- {% endif %} -
-
-
- {% if leave_request.status == 'cancelled' %} - {% if leave_request.end_date >= current_date %} +
+
+ {% if leave_request.status == 'cancelled' %} + {% if leave_request.end_date >= current_date %} - {% else %} + {% else %} - {% endif %} - {% else %} - {% if leave_request.is_approved and leave_request.status == 'requested' and leave_request.end_date >= current_date %} + {% endif %} + {% else %} + {% if leave_request.is_approved and leave_request.status == 'requested' and leave_request.end_date >= current_date %} current_date.month %} onclick = "leaveRequestConfirm('This leave request is for the month of {{leave_request.start_date|date:'F'}}. Approval depends on the {{leave_request.employee_id.get_full_name}} having available leave days for this month.',event);" {% else %} onclick = "return confirm('Do You really want to Approve this request?')"; {% endif %}> - {% else %} + {% else %} - {% endif %} - {% if leave_request.status != 'rejected' and leave_request.end_date >= current_date %} + {% endif %} + {% if leave_request.status != 'rejected' and leave_request.end_date >= current_date %} - - {% else %} + {% else %} + class="oh-btn oh-btn--danger oh-btn--disabled w-100" > - - {% endif %} - {% endif %} -
-
-
- {% endfor %} - -
-
+ {% endif %} +
+
+
+ {% endfor %} +
+
+
+{% elif dashboard and request.GET.dashboard != 'card' %} +
+
+ +

{% trans "You have No leave requests for this month." %}

- {% elif dashboard and request.GET.dashboard != 'card' %} -
-
- -

{% trans "You have No leave requests for this month." %}

-
-
- {% else %} -
-
- -

{% trans "You have No leave requests for this filter." %}

-
+
+{% else %} +
+
+ +

{% trans "You have No leave requests for this filter." %}

+
{% endif %} diff --git a/leave/templates/leave/leave_request/one_request_view.html b/leave/templates/leave/leave_request/one_request_view.html index c28c9efcd..556b74595 100644 --- a/leave/templates/leave/leave_request/one_request_view.html +++ b/leave/templates/leave/leave_request/one_request_view.html @@ -96,7 +96,7 @@
{{leave_request.reject_reason}}
- {% elif leave_request.status == "rejected" or leave_request.status == "cancelled_and_rejected" %} + {% elif leave_request.status == "rejected" or leave_request.status == "cancelled" %}
{% trans "Reason for Rejection" %} @@ -127,7 +127,7 @@ {% endif %} - {% if leave_request.status != 'rejected' and leave_request.status != 'cancelled_and_rejected' and leave_request.end_date >= current_date %} + {% if leave_request.status != 'rejected' and leave_request.status != 'cancelled' and leave_request.end_date >= current_date %} diff --git a/leave/templates/leave/leave_request/user_cancel_form.html b/leave/templates/leave/leave_request/user_cancel_form.html index 3545ca7d6..ea5fa731d 100644 --- a/leave/templates/leave/leave_request/user_cancel_form.html +++ b/leave/templates/leave/leave_request/user_cancel_form.html @@ -1,22 +1,40 @@ -{% load i18n %} -{% if form.errors %} +{% load i18n %} {% if form.errors %} -
-
- {% for error in form.non_field_errors %} -
- {{ error }} -
- {% endfor %} -
-
+
+
+ {% for error in form.non_field_errors %} +
{{ error }}
+ {% endfor %} +
+
{% endif %} -
-
+
+

+ {% trans "Cancel Request" %} +

+ +
+
+ +
+
- - {{form.reason}} - {{form.errors}} + + {{form.reason}} {{form.errors}} +
+
+ +
- - \ No newline at end of file + +
diff --git a/leave/templates/leave/user_leave/user_request_view.html b/leave/templates/leave/user_leave/user_request_view.html index ee1543ba4..6fa9fa55a 100644 --- a/leave/templates/leave/user_leave/user_request_view.html +++ b/leave/templates/leave/user_leave/user_request_view.html @@ -341,22 +341,12 @@ diff --git a/leave/templates/leave/user_leave/user_requests.html b/leave/templates/leave/user_leave/user_requests.html index 1bd239b5e..51ee4ffbc 100644 --- a/leave/templates/leave/user_leave/user_requests.html +++ b/leave/templates/leave/user_leave/user_requests.html @@ -120,9 +120,9 @@
{% if leave_request.status == 'approved' and leave_request.end_date >= current_date %} {% trans "Cancel" %} diff --git a/leave/views.py b/leave/views.py index b6cad4d4a..8da91ea45 100644 --- a/leave/views.py +++ b/leave/views.py @@ -1738,7 +1738,7 @@ def user_leave_request(request, id): overlapping_requests = LeaveRequest.objects.filter( employee_id=employee, start_date__lte=end_date, end_date__gte=start_date - ).exclude(status="cancelled") + ).exclude(status__in=["cancelled","rejected"]) if overlapping_requests.exists(): form.add_error( None, _("There is already a leave request for this date range..")