From 85f9eb64a935c359d99e253e00a9502bcc737f1f Mon Sep 17 00:00:00 2001 From: Horilla Date: Sat, 31 May 2025 12:42:14 +0530 Subject: [PATCH] CBV Updates: 31st May --- employee/cbv/accessibility.py | 8 +-- employee/cbv/employee_profile.py | 84 +++++++++++++++++++++----------- employee/cbv/employees.py | 45 +++++++++++++++++ 3 files changed, 105 insertions(+), 32 deletions(-) diff --git a/employee/cbv/accessibility.py b/employee/cbv/accessibility.py index 1a2b330a9..7f9b7940f 100644 --- a/employee/cbv/accessibility.py +++ b/employee/cbv/accessibility.py @@ -15,11 +15,11 @@ def edit_accessibility( """ To access edit """ - employee = Employee.objects.get(id=instance.pk) + # employee = Employee.objects.get(id=instance.pk) if ( (request.user.has_perm("employee.change_employee")) or check_manager(request.user.employee_get, instance) - or request.user == employee.employee_user_id + or request.user == instance.employee_user_id ): return True return False @@ -31,11 +31,11 @@ def password_reset_accessibility( """ To password reset """ - employee = Employee.objects.get(id=instance.pk) + # employee = Employee.objects.get(id=instance.pk) if ( (request.user.has_perm("employee.add_employee")) or check_manager(request.user.employee_get, instance) - or request.user == employee.employee_user_id + or request.user == instance.employee_user_id ): return True return False diff --git a/employee/cbv/employee_profile.py b/employee/cbv/employee_profile.py index d304298af..08178ec5e 100644 --- a/employee/cbv/employee_profile.py +++ b/employee/cbv/employee_profile.py @@ -2,12 +2,11 @@ This page handles the cbv methods of employee individual view """ -from audioop import reverse - from django.contrib import messages from django.contrib.auth.models import Group from django.http import HttpResponse from django.shortcuts import redirect, render +from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.views import View @@ -15,6 +14,7 @@ from django.views import View from base import views as base_views from base.cbv.mail_log_tab import MailLogTabList from base.cbv.work_shift_tab import WorkAndShiftTabView +from base.context_processors import enable_profile_edit from base.forms import AddToUserGroupForm from employee import views from employee.filters import EmployeeFilter @@ -23,6 +23,8 @@ from horilla import settings from horilla_views.cbv_methods import login_required, permission_required from horilla_views.generic.cbv.views import HorillaProfileView +Employee.cbv_employee_profile_edi_url = reverse_lazy("edit-profile") + class EmployeeProfileView(HorillaProfileView): """ @@ -36,40 +38,66 @@ class EmployeeProfileView(HorillaProfileView): push_url = "employee-view-individual" key_name = "obj_id" - actions = [ - { - "title": "Edit", - "src": f"/{settings.STATIC_URL}images/ui/editing.png", - "accessibility": "employee.cbv.accessibility.edit_accessibility", - "attrs": """ + def __init__(self, **kwargs): + super().__init__(**kwargs) + employee = self.request.user.employee_get + if self.request.user.has_perm("employee.change_employee"): + + self.actions = [ + { + "title": "Edit", + "src": f"/{settings.STATIC_URL}images/ui/editing.png", + "accessibility": "employee.cbv.accessibility.edit_accessibility", + "attrs": """ onclick="window.location.href='{get_update_url}'" """, - }, - { - "title": "Block Account", - "src": f"/{settings.STATIC_URL}images/ui/block-user.png", - "accessibility": "employee.cbv.accessibility.block_account_accessibility", - "attrs": """ + }, + { + "title": "Block Account", + "src": f"/{settings.STATIC_URL}images/ui/block-user.png", + "accessibility": "employee.cbv.accessibility.block_account_accessibility", + "attrs": """ id="block-account" """, - }, - { - "title": "Un-Block Account", - "src": f"/{settings.STATIC_URL}images/ui/unlock.png", - "accessibility": "employee.cbv.accessibility.un_block_account_accessibility", - "attrs": """ + }, + { + "title": "Un-Block Account", + "src": f"/{settings.STATIC_URL}images/ui/unlock.png", + "accessibility": "employee.cbv.accessibility.un_block_account_accessibility", + "attrs": """ id="block-account" """, - }, - { - "title": "Send password reset link", - "src": f"/{settings.STATIC_URL}images/ui/key.png", - "accessibility": "employee.cbv.accessibility.password_reset_accessibility", - "attrs": """ + }, + { + "title": "Send password reset link", + "src": f"/{settings.STATIC_URL}images/ui/key.png", + "accessibility": "employee.cbv.accessibility.password_reset_accessibility", + "attrs": """ onclick="$('#reset-button').click();" """, - }, - ] + }, + ] + elif employee.pk == kwargs["pk"] and enable_profile_edit(self.request).get( + "profile_edit_enabled" + ): + self.actions = [ + { + "title": "Edit Profile", + "src": f"/{settings.STATIC_URL}images/ui/editing.png", + "accessibility": "employee.cbv.accessibility.edit_accessibility", + "attrs": """ + onclick="window.location.href='{cbv_employee_profile_edi_url}'" + """, + }, + { + "title": "Send password reset link", + "src": f"/{settings.STATIC_URL}images/ui/key.png", + "accessibility": "employee.cbv.accessibility.password_reset_accessibility", + "attrs": """ + onclick="$('#reset-button').click();" + """, + }, + ] EmployeeProfileView.add_tab( diff --git a/employee/cbv/employees.py b/employee/cbv/employees.py index d2908cd0f..e390c1624 100644 --- a/employee/cbv/employees.py +++ b/employee/cbv/employees.py @@ -11,11 +11,15 @@ from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from accessibility.cbv_decorators import enter_if_accessible +from accessibility.models import DefaultAccessibility +from base.context_processors import enable_profile_edit from base.methods import is_reportingmanager from employee.filters import EmployeeFilter from employee.forms import BulkUpdateFieldForm, EmployeeExportExcelForm from employee.models import Employee, EmployeeBankDetails, EmployeeWorkInformation +from employee.templatetags.employee_filter import edit_accessibility from employee.views import _check_reporting_manager +from horilla.horilla_middlewares import _thread_locals from horilla.signals import post_generic_delete from horilla_views.cbv_methods import login_required from horilla_views.forms import DynamicBulkUpdateForm @@ -27,6 +31,30 @@ from horilla_views.generic.cbv.views import ( ) +def profile_edit_accessibility_display(self): + """ + Profile edit accessible + """ + request = _thread_locals.request + if self.pk in request.all_edit_accessible_employees: + return "Revoke Profile Edit Access" + return "Add Profile Edit Access" + + +def toggle_profile_edit_access_url(self): + """ + toggle profiel edit access url get method + """ + return ( + reverse("profile-edit-access", kwargs={"emp_id": self.pk}) + + "?feature=profile_edit" + ) + + +Employee.profile_edit_accessibility_display = profile_edit_accessibility_display +Employee.toggle_profile_edit_access_url = toggle_profile_edit_access_url + + @method_decorator(login_required, name="dispatch") @method_decorator( enter_if_accessible( @@ -467,6 +495,11 @@ class EmployeeCard(HorillaCardView): def __init__(self, **kwargs: Any) -> None: super().__init__(**kwargs) self.search_url = reverse("employees-card") + self.request.all_edit_accessible_employees = ( + DefaultAccessibility.objects.filter(feature="profile_edit").values_list( + "employees__pk", flat=True + ) + ) if self.request.user.has_perm( "employee.change_employee" ) or is_reportingmanager(self.request): @@ -505,6 +538,18 @@ class EmployeeCard(HorillaCardView): """, }, ] + if enable_profile_edit(self.request).get("profile_edit_enabled"): + self.actions.append( + { + "action": "profile_edit_accessibility_display", + "accessibility": "employee.cbv.accessibility.action_accessible", + "attrs": """ + href="{toggle_profile_edit_access_url}" + class="oh-dropdown__link" + style="cursor: pointer;" + """, + } + ) else: self.actions = None