Merge master

This commit is contained in:
Horilla
2025-11-24 17:25:05 +05:30
parent a11cadfc01
commit 576c14ae48
19 changed files with 91 additions and 76 deletions

View File

@@ -80,7 +80,7 @@ class AssetBatchNoNav(HorillaNavView):
super().__init__(**kwargs)
self.search_url = reverse("asset-batch-list")
if self.request.user.has_perm("asset.view_assetlot"):
if self.request.user.has_perm("asset.add_assetlot"):
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#genericModal"

View File

@@ -224,14 +224,14 @@ class AssetCategoryNav(HorillaNavView):
super().__init__(**kwargs)
self.search_url = reverse("asset-category-view-search-filter")
self.actions = []
if self.request.user.has_perm("add_assetcategory"):
if self.request.user.has_perm("asset.add_assetcategory"):
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#genericModal"
hx-get="{reverse('asset-category-creation')}"
hx-target="#genericModalBody"
"""
if self.request.user.has_perm("add_assetcategory"):
if self.request.user.has_perm("asset.add_assetcategory"):
self.actions.append(
{
"action": _("Import"),
@@ -246,7 +246,7 @@ class AssetCategoryNav(HorillaNavView):
},
)
if self.request.user.has_perm("view_asset"):
if self.request.user.has_perm("asset.view_asset"):
self.actions.append(
{
"action": _("Export"),

View File

@@ -1,18 +1,19 @@
{% load i18n %}
{% load i18n %} {% load basefilters %}
<div class="oh-btn-group">
<a data-toggle="oh-modal-toggle"
data-target="#validateAttendanceRequest"
hx-get="{% url 'validate-attendance-request' instance.id %}" hx-trigger="click" hx-target="#validateAttendanceRequestModalBody"
class="oh-btn oh-btn--light-bkg w-100"
title="{% trans 'View' %}"><ion-icon name="eye-outline" role="img"></ion-icon></a>
<a
type="submit"
class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
title="{% trans 'Cancel / Reject' %}"
onclick="event.stopPropagation();return confirm('{% trans "Are you sure want to cancel the request?" %}');"
href="{% url 'cancel-validate-attendance-request' instance.id %}"
>
<ion-icon name="close-circle-outline"></ion-icon>
</a>
{% if request.user.is_superuser or perms.attendance.change_attendance or request.user|is_reportingmanager %}
<a
type="submit"
class="oh-btn oh-btn--danger-outline oh-btn--light-bkg w-100"
title="{% trans 'Cancel / Reject' %}"
onclick="event.stopPropagation();return confirm('{% trans "Are you sure want to cancel the request?" %}');"
href="{% url 'cancel-validate-attendance-request' instance.id %}"
>
<ion-icon name="close-circle-outline"></ion-icon>
</a>
{% endif %}
</div>

View File

@@ -89,11 +89,13 @@
</table>
<div class="oh-modal__button-container text-center">
<div class="oh-btn-group d-flex flex-row-reverse">
<a href="{% url 'cancel-validate-attendance-request' attendance.id %}" data-toggle="oh-modal-toggle"
class="oh-btn oh-btn--secondary w-100">
<ion-icon name="close-circle-outline"></ion-icon>
{% trans "Reject" %}
</a>
{% if request.user.is_superuser or perms.attendance.change_attendance %}
<a href="{% url 'cancel-validate-attendance-request' attendance.id %}" data-toggle="oh-modal-toggle"
class="oh-btn oh-btn--secondary w-100">
<ion-icon name="close-circle-outline"></ion-icon>
{% trans "Reject" %}
</a>
{% endif %}
{% if request.user|is_reportingmanager or perms.attendance.change_attendance %}
{% comment %} <a href="{% url 'approve-validate-attendance-request' attendance.id %}" class="oh-btn oh-btn--success w-100">
<ion-icon name="checkmark-outline"></ion-icon>
@@ -111,7 +113,7 @@
</a>
{% endif %}
{% endif %}
{% if request.user|is_reportingmanager or perms.attendance.change_attendance %}
{% if request.user|is_reportingmanager or perms.attendance.change_attendance or attendance.employee_id == request.user.employee_get%}
<a hx-get="{% url 'update-attendance-request' attendance.id %}?detail_view=true"
hx-target="#genericModalEditBody" data-target="#genericModalEdit"
data-toggle="oh-modal-toggle" class="oh-btn oh-btn--info w-100">

View File

@@ -84,7 +84,7 @@ class CompanyLeaveNavView(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("company-leave-filter")
if self.request.user.has_perm("add_companyleave"):
if self.request.user.has_perm("base.add_companyleave"):
self.create_attrs = f"""
hx-get="{reverse_lazy('company-leave-creation')}"
hx-target="#genericModalBody"
@@ -117,7 +117,7 @@ class CompanyLeaveDetailView(HorillaDetailedView):
@method_decorator(login_required, name="dispatch")
@method_decorator(permission_required("leave.add_companyleave"), name="dispatch")
@method_decorator(permission_required("base.add_companyleave"), name="dispatch")
class CompanyleaveFormView(HorillaFormView):
"""
form view for create button

View File

@@ -47,7 +47,7 @@ class HolidayListView(HorillaListView):
super().__init__(**kwargs)
self.search_url = reverse("holiday-filter")
self.view_id = "holidaydelete"
if self.request.user.has_perm("add_holiday"):
if self.request.user.has_perm("base.add_holiday"):
self.action_method = "holidays_actions"
columns = [
@@ -84,7 +84,7 @@ class HolidayNavView(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("holiday-filter")
if self.request.user.has_perm("add_holiday"):
if self.request.user.has_perm("base.add_holiday"):
self.create_attrs = f"""
hx-get="{reverse_lazy('holiday-creation')}"
hx-target="#genericModalBody"

View File

@@ -43,13 +43,13 @@ class BiometricNavBar(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("biometric-card-view")
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#genericModal"
hx-target="#genericModalBody"
hx-get="{reverse('biometric-device-add')}"
"""
if self.request.user.has_perm("biometric.add_biometricdevices"):
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#genericModal"
hx-target="#genericModalBody"
hx-get="{reverse('biometric-device-add')}"
"""
nav_title = _("Biometric Devices")
filter_body_template = "cbv/biometric_filter.html"

View File

@@ -141,8 +141,8 @@ def workshift_accessibility(
if (
request.user == employee.employee_user_id
or check_manages
or request.user.has_perm("attendance.view_worktyperequest")
or request.user.has_perm("attendance.view_shiftrequest")
or request.user.has_perm("base.view_worktyperequest")
or request.user.has_perm("base.view_shiftrequest")
):
return True
return False

View File

@@ -82,6 +82,7 @@ class DocumentRequestCreateForm(HorillaFormView):
return super().form_valid(form)
@method_decorator(login_required, name="dispatch")
class DocumentCreateForm(HorillaFormView):
"""
form view for upload document
@@ -135,6 +136,7 @@ class DocumentRejectCbvForm(HorillaFormView):
return super().form_valid(form)
@method_decorator(login_required, name="dispatch")
class DocumentUploadForm(HorillaFormView):
"""
form view for upload documents on document request and employee individual view

View File

@@ -14,6 +14,8 @@ from horilla_views.cbv_methods import login_required, permission_required
from horilla_views.generic.cbv.views import HorillaFormView
@method_decorator(login_required, name="dispatch")
@method_decorator(permission_required(perm="employee.add_policy"), name="dispatch")
class PolicyFormView(HorillaFormView):
"""
form view for create policy

View File

@@ -63,7 +63,7 @@ class MailAutomation(HorillaModel):
default="email",
max_length=50,
choices=SEND_OPTIONS,
verbose_name=_("Choose Delivary Channel"),
verbose_name=_("Choose Delivery Channel"),
)
template_attachments = models.ManyToManyField(
HorillaMailTemplate,

View File

@@ -124,12 +124,13 @@ class AssignedLeaveNavView(HorillaNavView):
},
]
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#objectCreateModal"
hx-target="#objectCreateModalTarget"
hx-get="{reverse_lazy('assign')}"
"""
if self.request.user.has_perm("leave.add_availableleave"):
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#objectCreateModal"
hx-target="#objectCreateModalTarget"
hx-get="{reverse_lazy('assign')}"
"""
nav_title = _("All Assigned Leaves")
filter_instance = AssignedLeaveFilter()

View File

@@ -243,12 +243,13 @@ class LeaveRequestsNavView(HorillaNavView):
},
]
self.create_attrs = f"""
hx-get="{reverse_lazy("request-creation")}"
hx-target="#genericModalBody"
data-target="#genericModal"
data-toggle="oh-modal-toggle"
"""
if self.request.user.has_perm("leave.add_leaverequest"):
self.create_attrs = f"""
hx-get="{reverse_lazy("request-creation")}"
hx-target="#genericModalBody"
data-target="#genericModal"
data-toggle="oh-modal-toggle"
"""
nav_title = _("Leave Requests")
filter_instance = LeaveRequestFilter()

View File

@@ -173,9 +173,10 @@ class AllowanceNavView(HorillaNavView):
super().__init__(**kwargs)
self.search_url = reverse("allowances-list-view")
self.create_attrs = f"""
href="{reverse_lazy('create-allowance')}"
"""
if self.request.user.has_perm("payroll.add_allowance"):
self.create_attrs = f"""
href="{reverse_lazy('create-allowance')}"
"""
self.view_types = [
{

View File

@@ -148,9 +148,10 @@ class ContractsNav(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("contract-filter")
self.create_attrs = f"""
href={reverse('contract-create')}
"""
if self.request.user.has_perm("payroll.add_contract"):
self.create_attrs = f"""
href={reverse('contract-create')}
"""
self.actions = [
{
"action": _("Export"),

View File

@@ -32,9 +32,10 @@ class DeductionNav(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("deduction-view-list")
self.create_attrs = f"""
href={reverse('create-deduction')}
"""
if self.request.user.has_perm("payroll.add_deduction"):
self.create_attrs = f"""
href={reverse('create-deduction')}
"""
self.view_types = [
{
"type": "list",

View File

@@ -53,12 +53,13 @@ class BonusPointSettingNavView(views.HorillaNavView):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.create_attrs = f"""
hx-get="{reverse_lazy("create-bonus-point-setting")}"
hx-target="#genericModalBody"
data-toggle="oh-modal-toggle"
data-target="#genericModal"
"""
if self.request.user.has_perm("pms.add_bonuspointsetting"):
self.create_attrs = f"""
hx-get="{reverse_lazy("create-bonus-point-setting")}"
hx-target="#genericModalBody"
data-toggle="oh-modal-toggle"
data-target="#genericModal"
"""
nav_title = _("Bonus Point Setting")
search_url = reverse_lazy("bonus-point-setting-list-view")
@@ -66,7 +67,7 @@ class BonusPointSettingNavView(views.HorillaNavView):
@method_decorator(login_required, name="dispatch")
@method_decorator(permission_required("pms.change_bonuspointsetting"), name="dispatch")
@method_decorator(permission_required("pms.add_bonuspointsetting"), name="dispatch")
class BonusPointSettingFormView(views.HorillaFormView):
"""
BonusPointSettingForm View

View File

@@ -93,12 +93,13 @@ class RejectReasonNav(HorillaNavView):
def __init__(self, **kwargs: Any) -> None:
super().__init__(**kwargs)
self.search_url = reverse("candidate-reject-reasons-list")
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#genericModal"
hx-target="#genericModalBody"
hx-get="{reverse('create-reject-reason-view')}"
"""
if self.request.user.has_perm("recruitment.add_rejectreason"):
self.create_attrs = f"""
data-toggle="oh-modal-toggle"
data-target="#genericModal"
hx-target="#genericModalBody"
hx-get="{reverse('create-reject-reason-view')}"
"""
nav_title = _("Reject Reasons")
filter_instance = RejectReasonFilter()

View File

@@ -45,12 +45,13 @@ class LinkedInSettingNavView(views.HorillaNavView):
def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs)
self.create_attrs = f"""
hx-get="{reverse_lazy("create-linkedin-account")}"
hx-target="#genericModalBody"
data-toggle="oh-modal-toggle"
data-target="#genericModal"
"""
if self.request.user.has_perm("recruitment.add_linkedinaccount"):
self.create_attrs = f"""
hx-get="{reverse_lazy("create-linkedin-account")}"
hx-target="#genericModalBody"
data-toggle="oh-modal-toggle"
data-target="#genericModal"
"""
nav_title = _("LinkedIn Accounts")
search_url = reverse_lazy("linkedin-setting-list")
@@ -59,7 +60,7 @@ class LinkedInSettingNavView(views.HorillaNavView):
@method_decorator(login_required, name="dispatch")
@method_decorator(
permission_required("recruitment.change_linkedinaccount"), name="dispatch"
permission_required("recruitment.add_linkedinaccount"), name="dispatch"
)
class LinkedInAccountFormView(views.HorillaFormView):
"""