[FIX] LEAVE : Empty page issues, Compensatory form issues, comment section fixes with employee without work information
This commit is contained in:
@@ -1330,6 +1330,8 @@ class CompensatoryLeaveForm(ModelForm):
|
||||
def clean(self):
|
||||
cleaned_data = super().clean()
|
||||
attendance_id = cleaned_data.get("attendance_id")
|
||||
if attendance_id is None:
|
||||
raise forms.ValidationError({"attendance_id": _("This field is required.")})
|
||||
employee = cleaned_data.get("employee_id")
|
||||
attendance_repeat = False
|
||||
instance_id = None
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
<div class="oh-modal__dialog-header">
|
||||
<span class="oh-modal__dialog-title" id="editDialogDialog">
|
||||
{% if form.instance.id %}
|
||||
{% trans "Update Compensetory Leave Request" %}
|
||||
{% trans "Update Compensatory Leave Request" %}
|
||||
{% else %}
|
||||
{% trans "Create Compensetory Leave Request" %}
|
||||
{% trans "Create Compensatory Leave Request" %}
|
||||
{% endif %}
|
||||
</span>
|
||||
<button class="oh-modal__close" aria-label="Close">
|
||||
|
||||
@@ -35,155 +35,157 @@
|
||||
</div>
|
||||
<div class="oh-main__titlebar oh-main__titlebar--right">
|
||||
|
||||
<form
|
||||
method="post"
|
||||
hx-get="{% url 'filter-compensatory-leave' %}"
|
||||
hx-target="#comp-leave-tabs"
|
||||
id="filterForm"
|
||||
class="d-flex"
|
||||
onsubmit="event.preventDefault()"
|
||||
>
|
||||
<div
|
||||
class="oh-input-group oh-input__search-group"
|
||||
:class="searchShow ? 'oh-input__search-group--show' : ''"
|
||||
{% if comp_leave_requests or my_comp_leave_requests %}
|
||||
<form
|
||||
method="post"
|
||||
hx-get="{% url 'filter-compensatory-leave' %}"
|
||||
hx-target="#comp-leave-tabs"
|
||||
id="filterForm"
|
||||
class="d-flex"
|
||||
onsubmit="event.preventDefault()"
|
||||
>
|
||||
<ion-icon
|
||||
name="search-outline"
|
||||
class="oh-input-group__icon oh-input-group__icon--left"
|
||||
></ion-icon>
|
||||
<input
|
||||
type="text"
|
||||
class="oh-input oh-input__icon"
|
||||
aria-label="Search Input"
|
||||
placeholder="{% trans 'Search' %}"
|
||||
name="search"
|
||||
onkeyup="$('.filterButton')[0].click()"
|
||||
/>
|
||||
</div>
|
||||
<div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="filter" class="mr-1"></ion-icon>{% trans "Filter" %}
|
||||
<div id="filterCount"></div>
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
style="display: none"
|
||||
@click.outside="open = false"
|
||||
class="oh-input-group oh-input__search-group"
|
||||
:class="searchShow ? 'oh-input__search-group--show' : ''"
|
||||
>
|
||||
<div class="oh-dropdown__filter-body">
|
||||
<div class="oh-accordion">
|
||||
<div
|
||||
class="oh-accordion-header"
|
||||
onclick="event.stopImmediatePropagation();$(this).parent().toggleClass('oh-accordion--show');"
|
||||
<ion-icon
|
||||
name="search-outline"
|
||||
class="oh-input-group__icon oh-input-group__icon--left"
|
||||
></ion-icon>
|
||||
<input
|
||||
type="text"
|
||||
class="oh-input oh-input__icon"
|
||||
aria-label="Search Input"
|
||||
placeholder="{% trans 'Search' %}"
|
||||
name="search"
|
||||
onkeyup="$('.filterButton')[0].click()"
|
||||
/>
|
||||
</div>
|
||||
<div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="filter" class="mr-1"></ion-icon>{% trans "Filter" %}
|
||||
<div id="filterCount"></div>
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
style="display: none"
|
||||
@click.outside="open = false"
|
||||
>
|
||||
<div class="oh-dropdown__filter-body">
|
||||
<div class="oh-accordion">
|
||||
<div
|
||||
class="oh-accordion-header"
|
||||
onclick="event.stopImmediatePropagation();$(this).parent().toggleClass('oh-accordion--show');"
|
||||
>
|
||||
{% trans "Compensatory Leave Request" %}
|
||||
</div>
|
||||
<div class="oh-accordion-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Leave Type" %}</label>
|
||||
{{form.leave_type_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Employee" %}</label>
|
||||
{{form.employee_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Created By" %}</label>
|
||||
{{form.created_by__employee_get}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days Up To" %}</label
|
||||
>
|
||||
{{form.number_of_days_up_to}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days More Than " %}</label
|
||||
>
|
||||
{{form.number_of_days_more_than}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Status" %}</label>
|
||||
{{form.status}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh-dropdown__filter-footer">
|
||||
<button
|
||||
class="oh-btn oh-btn--secondary oh-btn--small w-100 filterButton"
|
||||
type="submit"
|
||||
>
|
||||
{% trans "Compensatory Leave Request" %}
|
||||
</div>
|
||||
<div class="oh-accordion-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Leave Type" %}</label>
|
||||
{{form.leave_type_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Employee" %}</label>
|
||||
{{form.employee_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Created By" %}</label>
|
||||
{{form.created_by__employee_get}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days Up To" %}</label
|
||||
>
|
||||
{{form.number_of_days_up_to}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days More Than " %}</label
|
||||
>
|
||||
{{form.number_of_days_more_than}}
|
||||
</div>
|
||||
</div>
|
||||
{% trans "Filter" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Status" %}</label>
|
||||
{{form.status}}
|
||||
</div>
|
||||
{% comment %} <div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="library-outline" class="mr-1"></ion-icon>
|
||||
{% trans "Group By" %}
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
@click.outside="open = false"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="oh-accordion">
|
||||
<label>{% trans "Group By" %}</label>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Field" %}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<select
|
||||
class="oh-select mt-1 w-100"
|
||||
id="id_field"
|
||||
name="field"
|
||||
class="select2-selection select2-selection--single"
|
||||
>
|
||||
{% for field in gp_fields %}
|
||||
<option value="{{ field.0 }}">{% trans field.1 %}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh-dropdown__filter-footer">
|
||||
<button
|
||||
class="oh-btn oh-btn--secondary oh-btn--small w-100 filterButton"
|
||||
type="submit"
|
||||
>
|
||||
{% trans "Filter" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% comment %} <div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="library-outline" class="mr-1"></ion-icon>
|
||||
{% trans "Group By" %}
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
@click.outside="open = false"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="oh-accordion">
|
||||
<label>{% trans "Group By" %}</label>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Field" %}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<select
|
||||
class="oh-select mt-1 w-100"
|
||||
id="id_field"
|
||||
name="field"
|
||||
class="select2-selection select2-selection--single"
|
||||
>
|
||||
{% for field in gp_fields %}
|
||||
<option value="{{ field.0 }}">{% trans field.1 %}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> {% endcomment %}
|
||||
</form>
|
||||
<!-- end of filter -->
|
||||
</div> {% endcomment %}
|
||||
</form>
|
||||
<!-- end of filter -->
|
||||
{% endif %}
|
||||
|
||||
<!-- start of create button -->
|
||||
<div class="oh-btn-group ml-2">
|
||||
|
||||
@@ -47,157 +47,159 @@
|
||||
></ion-icon>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="oh-main__titlebar oh-main__titlebar--right">
|
||||
|
||||
<form
|
||||
method="post"
|
||||
hx-get="{% url 'leave-allocation-request-filter' %}"
|
||||
hx-target="#view-container"
|
||||
id="filterForm"
|
||||
class="d-flex"
|
||||
onsubmit="event.preventDefault()"
|
||||
>
|
||||
<div
|
||||
class="oh-input-group oh-input__search-group"
|
||||
:class="searchShow ? 'oh-input__search-group--show' : ''"
|
||||
{% if leave_allocation_requests or my_leave_allocation_requests %}
|
||||
<form
|
||||
method="post"
|
||||
hx-get="{% url 'leave-allocation-request-filter' %}"
|
||||
hx-target="#view-container"
|
||||
id="filterForm"
|
||||
class="d-flex"
|
||||
onsubmit="event.preventDefault()"
|
||||
>
|
||||
<ion-icon
|
||||
name="search-outline"
|
||||
class="oh-input-group__icon oh-input-group__icon--left"
|
||||
></ion-icon>
|
||||
<input
|
||||
type="text"
|
||||
class="oh-input oh-input__icon"
|
||||
aria-label="Search Input"
|
||||
placeholder="{% trans 'Search' %}"
|
||||
name="search"
|
||||
onkeyup="$('.filterButton')[0].click()"
|
||||
/>
|
||||
</div>
|
||||
<div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="filter" class="mr-1"></ion-icon>{% trans "Filter" %}
|
||||
<div id="filterCount"></div>
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
style="display: none"
|
||||
@click.outside="open = false"
|
||||
class="oh-input-group oh-input__search-group"
|
||||
:class="searchShow ? 'oh-input__search-group--show' : ''"
|
||||
>
|
||||
<div class="oh-dropdown__filter-body">
|
||||
<div class="oh-accordion">
|
||||
<div
|
||||
class="oh-accordion-header"
|
||||
onclick="event.stopImmediatePropagation();$(this).parent().toggleClass('oh-accordion--show');"
|
||||
<ion-icon
|
||||
name="search-outline"
|
||||
class="oh-input-group__icon oh-input-group__icon--left"
|
||||
></ion-icon>
|
||||
<input
|
||||
type="text"
|
||||
class="oh-input oh-input__icon"
|
||||
aria-label="Search Input"
|
||||
placeholder="{% trans 'Search' %}"
|
||||
name="search"
|
||||
onkeyup="$('.filterButton')[0].click()"
|
||||
/>
|
||||
</div>
|
||||
<div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="filter" class="mr-1"></ion-icon>{% trans "Filter" %}
|
||||
<div id="filterCount"></div>
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
style="display: none"
|
||||
@click.outside="open = false"
|
||||
>
|
||||
<div class="oh-dropdown__filter-body">
|
||||
<div class="oh-accordion">
|
||||
<div
|
||||
class="oh-accordion-header"
|
||||
onclick="event.stopImmediatePropagation();$(this).parent().toggleClass('oh-accordion--show');"
|
||||
>
|
||||
{% trans "Leave Allocation Request" %}
|
||||
</div>
|
||||
<div class="oh-accordion-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Leave Type" %}</label>
|
||||
{{form.leave_type_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Employee" %}</label>
|
||||
{{form.employee_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Created By" %}</label>
|
||||
{{form.created_by}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days Up To" %}</label
|
||||
>
|
||||
{{form.number_of_days_up_to}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days More Than " %}</label
|
||||
>
|
||||
{{form.number_of_days_more_than}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Status" %}</label>
|
||||
{{form.status}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh-dropdown__filter-footer">
|
||||
<button
|
||||
class="oh-btn oh-btn--secondary oh-btn--small w-100 filterButton"
|
||||
type="submit"
|
||||
>
|
||||
{% trans "Leave Allocation Request" %}
|
||||
</div>
|
||||
<div class="oh-accordion-body">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Leave Type" %}</label>
|
||||
{{form.leave_type_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Employee" %}</label>
|
||||
{{form.employee_id}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Created By" %}</label>
|
||||
{{form.created_by}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days Up To" %}</label
|
||||
>
|
||||
{{form.number_of_days_up_to}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label"
|
||||
>{% trans "Requested days More Than " %}</label
|
||||
>
|
||||
{{form.number_of_days_more_than}}
|
||||
</div>
|
||||
</div>
|
||||
{% trans "Filter" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Status" %}</label>
|
||||
{{form.status}}
|
||||
</div>
|
||||
<div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="library-outline" class="mr-1"></ion-icon>
|
||||
{% trans "Group By" %}
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
@click.outside="open = false"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="oh-accordion">
|
||||
<label>{% trans "Group By" %}</label>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Field" %}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<select
|
||||
class="oh-select mt-1 w-100"
|
||||
id="id_field"
|
||||
name="field"
|
||||
class="select2-selection select2-selection--single"
|
||||
>
|
||||
{% for field in gp_fields %}
|
||||
<option value="{{ field.0 }}">{% trans field.1 %}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oh-dropdown__filter-footer">
|
||||
<button
|
||||
class="oh-btn oh-btn--secondary oh-btn--small w-100 filterButton"
|
||||
type="submit"
|
||||
>
|
||||
{% trans "Filter" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="oh-dropdown" x-data="{open: false}">
|
||||
<button
|
||||
class="oh-btn ml-2"
|
||||
@click="open = !open"
|
||||
onclick="event.preventDefault()"
|
||||
>
|
||||
<ion-icon name="library-outline" class="mr-1"></ion-icon>
|
||||
{% trans "Group By" %}
|
||||
</button>
|
||||
<div
|
||||
class="oh-dropdown__menu oh-dropdown__menu--right oh-dropdown__filter p-4"
|
||||
x-show="open"
|
||||
@click.outside="open = false"
|
||||
style="display: none"
|
||||
>
|
||||
<div class="oh-accordion">
|
||||
<label>{% trans "Group By" %}</label>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<label class="oh-label">{% trans "Field" %}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||
<div class="oh-input-group">
|
||||
<select
|
||||
class="oh-select mt-1 w-100"
|
||||
id="id_field"
|
||||
name="field"
|
||||
class="select2-selection select2-selection--single"
|
||||
>
|
||||
{% for field in gp_fields %}
|
||||
<option value="{{ field.0 }}">{% trans field.1 %}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- end of filter -->
|
||||
</form>
|
||||
<!-- end of filter -->
|
||||
{% endif %}
|
||||
|
||||
<!-- start of create button -->
|
||||
<div class="oh-btn-group ml-2">
|
||||
|
||||
327
leave/views.py
327
leave/views.py
@@ -3673,7 +3673,11 @@ def leave_allocation_request_delete(request, req_id):
|
||||
hx_target = request.META.get("HTTP_HX_TARGET")
|
||||
if hx_target and hx_target == "view-container":
|
||||
previous_data = request.GET.urlencode()
|
||||
return redirect(f"/leave/leave-allocation-request-filter?{previous_data}")
|
||||
leave_allocations = LeaveAllocationRequest.objects.all()
|
||||
if leave_allocations.exists():
|
||||
return redirect(f"/leave/leave-allocation-request-filter?{previous_data}")
|
||||
else:
|
||||
return HttpResponse("<script>location.reload();</script>")
|
||||
return redirect(leave_allocation_request_view)
|
||||
|
||||
|
||||
@@ -4030,27 +4034,62 @@ def create_leaverequest_comment(request, leave_id):
|
||||
initial={"employee_id": emp.id, "request_id": leave_id}
|
||||
)
|
||||
messages.success(request, _("Comment added successfully!"))
|
||||
|
||||
if leave.employee_id.employee_work_info.reporting_manager_id is not None:
|
||||
if request.user.employee_get.id == leave.employee_id.id:
|
||||
rec = (
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
)
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave request has received a comment.",
|
||||
verb_ar=f"تلقت طلب إجازة {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Urlaubsantrag hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de permiso de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
elif (
|
||||
request.user.employee_get.id
|
||||
== leave.employee_id.employee_work_info.reporting_manager_id.id
|
||||
work_info = EmployeeWorkInformation.objects.filter(
|
||||
employee_id=leave.employee_id
|
||||
)
|
||||
if work_info.exists():
|
||||
if (
|
||||
leave.employee_id.employee_work_info.reporting_manager_id
|
||||
is not None
|
||||
):
|
||||
if request.user.employee_get.id == leave.employee_id.id:
|
||||
rec = (
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
)
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave request has received a comment.",
|
||||
verb_ar=f"تلقت طلب إجازة {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Urlaubsantrag hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de permiso de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
elif (
|
||||
request.user.employee_get.id
|
||||
== leave.employee_id.employee_work_info.reporting_manager_id.id
|
||||
):
|
||||
rec = leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb="Your leave request has received a comment.",
|
||||
verb_ar="تلقى طلب إجازتك تعليقًا.",
|
||||
verb_de="Ihr Urlaubsantrag hat einen Kommentar erhalten.",
|
||||
verb_es="Tu solicitud de permiso ha recibido un comentario.",
|
||||
verb_fr="Votre demande de congé a reçu un commentaire.",
|
||||
redirect=f"/leave/user-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = [
|
||||
leave.employee_id.employee_user_id,
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id,
|
||||
]
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave request has received a comment.",
|
||||
verb_ar=f"تلقت طلب إجازة {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Urlaubsantrag hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de permiso de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
@@ -4063,35 +4102,6 @@ def create_leaverequest_comment(request, leave_id):
|
||||
redirect=f"/leave/user-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = [
|
||||
leave.employee_id.employee_user_id,
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id,
|
||||
]
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave request has received a comment.",
|
||||
verb_ar=f"تلقت طلب إجازة {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Urlaubsantrag hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de permiso de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb="Your leave request has received a comment.",
|
||||
verb_ar="تلقى طلب إجازتك تعليقًا.",
|
||||
verb_de="Ihr Urlaubsantrag hat einen Kommentar erhalten.",
|
||||
verb_es="Tu solicitud de permiso ha recibido un comentario.",
|
||||
verb_fr="Votre demande de congé a reçu un commentaire.",
|
||||
redirect=f"/leave/user-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
return render(
|
||||
request,
|
||||
"leave/leave_request/leave_comment.html",
|
||||
@@ -4221,27 +4231,62 @@ def create_allocationrequest_comment(request, leave_id):
|
||||
initial={"employee_id": emp.id, "request_id": leave_id}
|
||||
)
|
||||
messages.success(request, _("Comment added successfully!"))
|
||||
|
||||
if leave.employee_id.employee_work_info.reporting_manager_id is not None:
|
||||
if request.user.employee_get.id == leave.employee_id.id:
|
||||
rec = (
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
)
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave allocation request has received a comment.",
|
||||
verb_ar=f"تلقت طلب تخصيص الإجازة لـ {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Anfrage zur Urlaubszuweisung hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de asignación de permisos de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande d'allocation de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
elif (
|
||||
request.user.employee_get.id
|
||||
== leave.employee_id.employee_work_info.reporting_manager_id.id
|
||||
work_info = EmployeeWorkInformation.objects.filter(
|
||||
employee_id=leave.employee_id
|
||||
)
|
||||
if work_info.exists():
|
||||
if (
|
||||
leave.employee_id.employee_work_info.reporting_manager_id
|
||||
is not None
|
||||
):
|
||||
if request.user.employee_get.id == leave.employee_id.id:
|
||||
rec = (
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
)
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave allocation request has received a comment.",
|
||||
verb_ar=f"تلقت طلب تخصيص الإجازة لـ {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Anfrage zur Urlaubszuweisung hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de asignación de permisos de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande d'allocation de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
elif (
|
||||
request.user.employee_get.id
|
||||
== leave.employee_id.employee_work_info.reporting_manager_id.id
|
||||
):
|
||||
rec = leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb="Your leave allocation request has received a comment.",
|
||||
verb_ar="تلقى طلب تخصيص الإجازة الخاص بك تعليقًا.",
|
||||
verb_de="Ihr Antrag auf Urlaubszuweisung hat einen Kommentar erhalten.",
|
||||
verb_es="Tu solicitud de asignación de permisos ha recibido un comentario.",
|
||||
verb_fr="Votre demande d'allocation de congé a reçu un commentaire.",
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = [
|
||||
leave.employee_id.employee_user_id,
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id,
|
||||
]
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave allocation request has received a comment.",
|
||||
verb_ar=f"تلقت طلب تخصيص الإجازة لـ {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Anfrage zur Urlaubszuweisung hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de asignación de permisos de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande d'allocation de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
@@ -4254,35 +4299,6 @@ def create_allocationrequest_comment(request, leave_id):
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = [
|
||||
leave.employee_id.employee_user_id,
|
||||
leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id,
|
||||
]
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{leave.employee_id}'s leave allocation request has received a comment.",
|
||||
verb_ar=f"تلقت طلب تخصيص الإجازة لـ {leave.employee_id} تعليقًا.",
|
||||
verb_de=f"{leave.employee_id}s Anfrage zur Urlaubszuweisung hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de asignación de permisos de {leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande d'allocation de congé de {leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb="Your leave allocation request has received a comment.",
|
||||
verb_ar="تلقى طلب تخصيص الإجازة الخاص بك تعليقًا.",
|
||||
verb_de="Ihr Antrag auf Urlaubszuweisung hat einen Kommentar erhalten.",
|
||||
verb_es="Tu solicitud de asignación de permisos ha recibido un comentario.",
|
||||
verb_fr="Votre demande d'allocation de congé a reçu un commentaire.",
|
||||
redirect=f"/leave/leave-allocation-request-view?id={leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
return render(
|
||||
request,
|
||||
"leave/leave_allocation_request/leave_allocation_comment.html",
|
||||
@@ -4672,7 +4688,11 @@ def delete_compensatory_leave(request, comp_id):
|
||||
|
||||
except:
|
||||
messages.error(request, _("Sorry, something went wrong!"))
|
||||
return redirect(filter_compensatory_leave)
|
||||
com_leave_requests = CompensatoryLeaveRequest.objects.all()
|
||||
if com_leave_requests.exists():
|
||||
return redirect(filter_compensatory_leave)
|
||||
else:
|
||||
return HttpResponse("<script>location.reload();</script>")
|
||||
|
||||
|
||||
@login_required
|
||||
@@ -4850,30 +4870,62 @@ def create_compensatory_leave_comment(request, comp_leave_id):
|
||||
initial={"employee_id": emp.id, "request_id": comp_leave}
|
||||
)
|
||||
messages.success(request, _("Comment added successfully!"))
|
||||
|
||||
if (
|
||||
comp_leave.employee_id.employee_work_info.reporting_manager_id
|
||||
is not None
|
||||
):
|
||||
if request.user.employee_get.id == comp_leave.employee_id.id:
|
||||
rec = (
|
||||
comp_leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
)
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{comp_leave.employee_id}'s Compensatory leave request has received a comment.",
|
||||
verb_ar=f"تلقى طلب إجازة الاعتذار لـ {comp_leave.employee_id} تعليقًا.",
|
||||
verb_de=f"Der Antrag auf Freizeitausgleich von {comp_leave.employee_id} hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de permiso compensatorio de {comp_leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé compensatoire de {comp_leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
elif (
|
||||
request.user.employee_get.id
|
||||
== comp_leave.employee_id.employee_work_info.reporting_manager_id.id
|
||||
work_info = EmployeeWorkInformation.objects.filter(
|
||||
employee_id=comp_leave.employee_id
|
||||
)
|
||||
if work_info.exists():
|
||||
if (
|
||||
comp_leave.employee_id.employee_work_info.reporting_manager_id
|
||||
is not None
|
||||
):
|
||||
if request.user.employee_get.id == comp_leave.employee_id.id:
|
||||
rec = (
|
||||
comp_leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id
|
||||
)
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{comp_leave.employee_id}'s Compensatory leave request has received a comment.",
|
||||
verb_ar=f"تلقى طلب إجازة الاعتذار لـ {comp_leave.employee_id} تعليقًا.",
|
||||
verb_de=f"Der Antrag auf Freizeitausgleich von {comp_leave.employee_id} hat einen Kommentar erhalten.",
|
||||
verb_es=f"La solicitud de permiso compensatorio de {comp_leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé compensatoire de {comp_leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
elif (
|
||||
request.user.employee_get.id
|
||||
== comp_leave.employee_id.employee_work_info.reporting_manager_id.id
|
||||
):
|
||||
rec = comp_leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb="Your compensatory leave request has received a comment.",
|
||||
verb_ar="تلقى طلب إجازة العوض الخاص بك تعليقًا.",
|
||||
verb_de="Ihr Antrag auf Freizeitausgleich hat einen Kommentar erhalten.",
|
||||
verb_es="Su solicitud de permiso compensatorio ha recibido un comentario.",
|
||||
verb_fr="Votre demande de congé compensatoire a reçu un commentaire.",
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = [
|
||||
comp_leave.employee_id.employee_user_id,
|
||||
comp_leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id,
|
||||
]
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{comp_leave.employee_id}'s compensatory leave request has received a comment.",
|
||||
verb_ar=f"تلقى طلب إجازة التعويض لـ {comp_leave.employee_id} تعليقًا.",
|
||||
verb_de=f"Der Antrag auf Freizeitausgleich von {comp_leave.employee_id} hat einen Kommentar erhalten.",
|
||||
verb_es=f"El pedido de permiso compensatorio de {comp_leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé compensatoire de {comp_leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = comp_leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
@@ -4886,35 +4938,6 @@ def create_compensatory_leave_comment(request, comp_leave_id):
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = [
|
||||
comp_leave.employee_id.employee_user_id,
|
||||
comp_leave.employee_id.employee_work_info.reporting_manager_id.employee_user_id,
|
||||
]
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb=f"{comp_leave.employee_id}'s compensatory leave request has received a comment.",
|
||||
verb_ar=f"تلقى طلب إجازة التعويض لـ {comp_leave.employee_id} تعليقًا.",
|
||||
verb_de=f"Der Antrag auf Freizeitausgleich von {comp_leave.employee_id} hat einen Kommentar erhalten.",
|
||||
verb_es=f"El pedido de permiso compensatorio de {comp_leave.employee_id} ha recibido un comentario.",
|
||||
verb_fr=f"La demande de congé compensatoire de {comp_leave.employee_id} a reçu un commentaire.",
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
else:
|
||||
rec = comp_leave.employee_id.employee_user_id
|
||||
notify.send(
|
||||
request.user.employee_get,
|
||||
recipient=rec,
|
||||
verb="Your compensatory leave request has received a comment.",
|
||||
verb_ar="تلقى طلب إجازة العوض الخاص بك تعليقًا.",
|
||||
verb_de="Ihr Antrag auf Freizeitausgleich hat einen Kommentar erhalten.",
|
||||
verb_es="Su solicitud de permiso compensatorio ha recibido un comentario.",
|
||||
verb_fr="Votre demande de congé compensatoire a reçu un commentaire.",
|
||||
redirect=f"/leave/view-compensatory-leave?id={comp_leave.id}",
|
||||
icon="chatbox-ellipses",
|
||||
)
|
||||
return render(
|
||||
request,
|
||||
"leave/compensatory_leave/compensatory_leave_comment.html",
|
||||
|
||||
Reference in New Issue
Block a user