From 5971860c4ffe520d7c5e853300ee48d34d970351 Mon Sep 17 00:00:00 2001 From: aminhashemi92 Date: Fri, 19 Dec 2025 20:00:16 +0330 Subject: [PATCH] Add contractor manager role. --- accounts/management/commands/create_roles.py | 4 ++++ accounts/templatetags/accounts_tags.py | 4 ++++ common/consts.py | 1 + db.sqlite3 | Bin 4792320 -> 4812800 bytes installations/views.py | 2 +- .../templates/processes/request_list.html | 4 ++-- processes/utils.py | 6 +++--- 7 files changed, 15 insertions(+), 6 deletions(-) diff --git a/accounts/management/commands/create_roles.py b/accounts/management/commands/create_roles.py index 92f57c0..cb1305a 100644 --- a/accounts/management/commands/create_roles.py +++ b/accounts/management/commands/create_roles.py @@ -45,6 +45,10 @@ class Command(BaseCommand): "name": "ستاد آب‌منطقه‌ای", "slug": UserRoles.HEADQUARTER, }, + { + "name": "مدیر پیمانکار", + "slug": UserRoles.CONTRACTOR_MANAGER, + }, ] for role in roles: diff --git a/accounts/templatetags/accounts_tags.py b/accounts/templatetags/accounts_tags.py index e2aec6b..7b3831e 100644 --- a/accounts/templatetags/accounts_tags.py +++ b/accounts/templatetags/accounts_tags.py @@ -58,3 +58,7 @@ def is_headquarter(user): def is_customer(user): return _has_profile(user) and user.profile.has_role(UserRoles.CUSTOMER) +@register.filter +def is_contractor_manager(user): + return _has_profile(user) and user.profile.has_role(UserRoles.CONTRACTOR_MANAGER) + diff --git a/common/consts.py b/common/consts.py index c367ad3..37b4258 100644 --- a/common/consts.py +++ b/common/consts.py @@ -11,6 +11,7 @@ class UserRoles(Enum): REGIONAL_WATER_AUTHORITY = "rwa" # کارشناس امور WATER_RESOURCE_MANAGER = "wrm" # مدیر منابع آب HEADQUARTER = "hdq" # ستاد آب منطقه‌ای + CONTRACTOR_MANAGER = "cmn" # مدیر پیمانکار USER_TYPE_CHOICES = [ diff --git a/db.sqlite3 b/db.sqlite3 index b5fffe04fa4ea9590df306ed2db92ea663d93f08..54bffa7728c64dfbc0671b4a94edc9ad49f7be84 100644 GIT binary patch delta 27236 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 Uj#3}%c|Sf->N%w6RDbmU0d4XN{{R30 delta 8748 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 GDf}1VN+$6D diff --git a/installations/views.py b/installations/views.py index ea73453..02325ba 100644 --- a/installations/views.py +++ b/installations/views.py @@ -30,7 +30,7 @@ def installation_assign_step(request, instance_id, step_id): profile = getattr(request.user, 'profile', None) is_manager = False try: - is_manager = bool(profile and profile.has_role(UserRoles.MANAGER)) + is_manager = bool(profile and profile.has_role(UserRoles.MANAGER)) or bool(profile and profile.has_role(UserRoles.CONTRACTOR_MANAGER)) except Exception: is_manager = False diff --git a/processes/templates/processes/request_list.html b/processes/templates/processes/request_list.html index 1ae210a..5549f07 100644 --- a/processes/templates/processes/request_list.html +++ b/processes/templates/processes/request_list.html @@ -155,7 +155,7 @@ {% endfor %} - {% if request.user|is_admin or request.user|is_manager or request.user|is_accountant %} + {% if request.user|is_admin or request.user|is_manager or request.user|is_accountant or request.user|is_contractor_manager %}
{% endif %} - {% if request.user|is_admin or request.user|is_manager or request.user|is_accountant %} + {% if request.user|is_admin or request.user|is_manager or request.user|is_accountant or request.user|is_contractor_manager %}