Skip to content

Commit 4891541

Browse files
authored
Merge pull request #38 from dbca-wa/compliance_mgt_dev
dbca/compliance_mgt_dev to shibaken/compliance_mgt_dev
2 parents 92f7b1c + 6cc6aa5 commit 4891541

File tree

8 files changed

+112
-46
lines changed

8 files changed

+112
-46
lines changed

wildlifecompliance/components/main/views.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,24 @@
2626
#CompliancePermissionGroup,
2727
ComplianceManagementUserPreferences,
2828
)
29-
from wildlifecompliance.helpers import is_compliance_management_readonly_user
29+
from wildlifecompliance.helpers import (
30+
is_compliance_management_readonly_user,
31+
is_compliance_management_callemail_readonly_user,
32+
prefer_compliance_management,
33+
)
34+
3035

3136
class GeocodingAddressSearchTokenView(views.APIView):
3237
def get(self, request, format=None):
3338
return Response({"access_token": settings.GEOCODING_ADDRESS_SEARCH_TOKEN})
3439

3540

36-
3741
class SystemPreferenceView(views.APIView):
3842
def get(self, request, format=None):
43+
#import ipdb; ipdb.set_trace()
3944
res = { "system": "wildlife_licensing" }
40-
if request.user.is_authenticated():
41-
preference_qs, created = ComplianceManagementUserPreferences.objects.get_or_create(email_user=request.user)
42-
if preference_qs and preference_qs.prefer_compliance_management and is_compliance_management_readonly_user(request):
43-
res = { "system": "compliance_management" }
45+
if prefer_compliance_management(request):
46+
res = { "system": "compliance_management" }
4447
return Response(res)
4548

4649

wildlifecompliance/components/users/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,7 @@ def update_system_preference(self, request, *args, **kwargs):
566566
try:
567567
prefer_compliance_management = request.data.get('prefer_compliance_management', False)
568568
user_instance = self.get_object()
569-
system_preference_instance, created = ComplianceManagementUserPreferences.objects.get_or_create(email_user_id=user_instance.id)
569+
system_preference_instance = ComplianceManagementUserPreferences.objects.get(email_user_id=user_instance.id)
570570
serializer = UpdateComplianceManagementUserPreferencesSerializer(
571571
system_preference_instance,
572572
data={

wildlifecompliance/components/users/permissions.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@
122122
'per_district': False,
123123
'permissions': ['compliance_management_readonly']
124124
},
125+
{
126+
'name': 'Compliance Management Call/Email Read-Only',
127+
'per_district': False,
128+
'permissions': ['compliance_management_callemail_readonly']
129+
},
125130
{
126131
'name': 'Wildlife Compliance Admin - Compliance',
127132
'per_district': False,
@@ -180,6 +185,11 @@
180185
'app_label': 'wildlifecompliance',
181186
'model': 'compliancepermissiongroup',
182187
},
188+
'compliance_management_callemail_readonly': {
189+
'name': 'Compliance Management Call/Email Read-Only',
190+
'app_label': 'wildlifecompliance',
191+
'model': 'compliancepermissiongroup',
192+
},
183193
'wildlife_compliance_admin_compliance': {
184194
'name': 'Wildlife Compliance Admin - Compliance',
185195
'app_label': 'wildlifecompliance',

wildlifecompliance/helpers.py

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,13 @@ def is_new_to_wildlifelicensing(request=None):
3131
and request.user.dob \
3232
and request.user.residential_address \
3333
and (request.user.phone_number or request.user.mobile_number) \
34-
and request.user.identification else False
34+
and (request.user.identification or prefer_compliance_management(request)) else False
3535

3636
if not SecureBaseUtils.is_wildlifelicensing_request(request):
3737
has_user_details = True
3838

3939
if is_internal(request):
4040
has_user_details = True
41-
4241
return not has_user_details
4342

4443
def belongs_to(user, group_name):
@@ -160,31 +159,57 @@ def is_officer(request):
160159
return request.user.is_authenticated() and (belongs_to_list(
161160
request.user, licence_officer_groups) or request.user.is_superuser)
162161

162+
def is_external_url(request):
163+
external = False
164+
if request.path[:10] == '/external/':
165+
external = True
166+
return external
167+
163168
def prefer_compliance_management(request):
164169
ret_value = False
165170

166171
if request.user.is_authenticated():
167-
preference_qs, created = ComplianceManagementUserPreferences.objects.get_or_create(email_user=request.user)
168-
if preference_qs and preference_qs.prefer_compliance_management and is_compliance_management_readonly_user(request):
172+
preference = ComplianceManagementUserPreferences.objects.get(email_user=request.user)
173+
#if preference.prefer_compliance_management and (
174+
# is_compliance_management_readonly_user(request) or is_compliance_management_callemail_readonly_user(request)
175+
# ):
176+
#if preference.prefer_compliance_management or is_compliance_management_callemail_readonly_user(request):
177+
if preference.prefer_compliance_management:
169178
ret_value = True
170179

171180
return ret_value
172181

182+
#def is_compliance_internal_user(request):
183+
# compliance_groups = [group.name for group in CompliancePermissionGroup.objects.filter(
184+
# permissions__codename__in=['volunteer',
185+
# 'triage_call_email',
186+
# 'issuing_officer',
187+
# 'officer',
188+
# 'infringement_notice_coordinator',
189+
# # 'branch_manager',
190+
# 'manager'])]
191+
# return request.user.is_authenticated() and (belongs_to_list(
192+
# request.user, compliance_groups) or request.user.is_superuser)
193+
173194
def is_compliance_internal_user(request):
174-
compliance_groups = [group.name for group in CompliancePermissionGroup.objects.filter(
175-
permissions__codename__in=['volunteer',
176-
'triage_call_email',
177-
'issuing_officer',
178-
'officer',
179-
'infringement_notice_coordinator',
180-
# 'branch_manager',
181-
'manager'])]
182-
return request.user.is_authenticated() and (belongs_to_list(
183-
request.user, compliance_groups) or request.user.is_superuser)
195+
compliance_user = False
196+
if request.user.is_authenticated() and (
197+
is_compliance_management_readonly_user(request) or
198+
is_compliance_management_callemail_readonly_user(request) or
199+
request.user.is_superuser
200+
):
201+
compliance_user = True
202+
return compliance_user
184203

185204
def is_compliance_management_readonly_user(request):
186205
compliance_group = CompliancePermissionGroup.objects.get(permissions__codename='compliance_management_readonly')
187-
return request.user.is_authenticated() and (belongs_to(request.user, compliance_group.name) or request.user.is_superuser)
206+
#return request.user.is_authenticated() and (belongs_to(request.user, compliance_group.name) or request.user.is_superuser)
207+
return request.user.is_authenticated() and belongs_to(request.user, compliance_group.name)
208+
209+
def is_compliance_management_callemail_readonly_user(request):
210+
compliance_group = CompliancePermissionGroup.objects.get(permissions__codename='compliance_management_callemail_readonly')
211+
#return request.user.is_authenticated() and (belongs_to(request.user, compliance_group.name) or request.user.is_superuser)
212+
return request.user.is_authenticated() and belongs_to(request.user, compliance_group.name)
188213

189214
def is_able_to_view_sanction_outcome_pdf(user):
190215
compliance_groups = [group.name for group in CompliancePermissionGroup.objects.filter(

wildlifecompliance/middleware.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
SecureBaseUtils,
99
SecureAuthorisationEnforcer,
1010
)
11+
from wildlifecompliance.components.users.models import ComplianceManagementUserPreferences
12+
from wildlifecompliance.helpers import is_compliance_management_callemail_readonly_user
1113

1214
logger = logging.getLogger(__name__)
1315
# logger = logging
@@ -18,6 +20,12 @@ class FirstTimeNagScreenMiddleware(object):
1820
Generic FirstTimeNagScreenMiddleware.
1921
'''
2022
def process_request(self, request):
23+
if request.method == 'GET' and request.user.is_authenticated(
24+
) and 'api' not in request.path and 'admin' not in request.path:
25+
preference, created = ComplianceManagementUserPreferences.objects.get_or_create(email_user=request.user)
26+
if is_compliance_management_callemail_readonly_user(request) and not preference.prefer_compliance_management:
27+
preference.prefer_compliance_management = True
28+
preference.save()
2129

2230
if SecureBaseUtils.is_wildlifelicensing_request(request):
2331
# Apply WildifeLicensing first-time checks.
@@ -44,7 +52,6 @@ def process_request(self, request):
4452
(not (
4553
request.user.phone_number or request.user.mobile_number
4654
)):
47-
4855
path_ft = reverse('first_time')
4956
path_logout = reverse('accounts:logout')
5057
request.session['new_to_wildlifecompliance'] = True

wildlifecompliance/templates/wildlifecompliance/base.html

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
{% is_compliance_internal_user as is_compliance_internal_login %}
1313
{% prefer_compliance_management as prefer_compliance_management %}
1414
{% is_compliance_management_readonly_user as is_compliance_management_readonly_user %}
15+
{% is_compliance_management_callemail_readonly_user as is_compliance_management_callemail_readonly_user %}
1516
{% system_maintenance_due as system_maintenance_due %}
17+
{% is_external_url as is_external_url %}
1618
{% RAND_HASH as RAND_HASH %}
1719

1820
<!DOCTYPE html>
@@ -67,7 +69,13 @@
6769
<div id="navbar" class="navbar-collapse collapse">
6870
<ul class="nav navbar-nav">
6971
{% block left_menu_items %}
70-
{% if is_internal_login and not prefer_compliance_management %}
72+
{% if is_compliance_management_callemail_readonly_user and not is_external_url %}
73+
<a class="navbar-brand" href="/internal/call_email"><div style="inline"><img src="{% static 'wildlifecompliance/img/dpaw_small.png' %}">Home</div></a>
74+
{% elif is_external_url %}
75+
<!-- External user -->
76+
<a class="navbar-brand" href="/external/"><div style="inline"><img src="{% static 'wildlifecompliance/img/dpaw_small.png' %}">Home</div></a>
77+
<li><a href="/external/sanction_outcome">Sanction Outcome</a></li>
78+
{% elif is_internal_login and not prefer_compliance_management %}
7179
<a class="navbar-brand" href="{% url 'wc_home' %}"><div style="inline"><img src="{% static 'wildlifecompliance/img/dpaw_small.png' %}">Home</div></a>
7280
<li><a href="/internal/licences">Licences</a></li>
7381
<li><a href="/internal/returns">Returns</a></li>
@@ -80,10 +88,6 @@
8088
<li><a href="/internal/object">Objects</a></li>
8189
<li><a href="/internal/sanction_outcome">Sanction Outcomes</a></li>
8290
<li><a href="/internal/legal_case">Cases</a></li>
83-
{% else %}
84-
<!-- External user -->
85-
<a class="navbar-brand" href="/external/"><div style="inline"><img src="{% static 'wildlifecompliance/img/dpaw_small.png' %}">Home</div></a>
86-
<li><a href="/external/sanction_outcome">Sanction Outcome</a></li>
8791
{% endif %}
8892

8993
{% if is_officer_login %}
@@ -114,20 +118,22 @@
114118
<span class="caret"></span>
115119
</a>
116120
<ul class="dropdown-menu">
117-
{% if is_internal_login and is_compliance_management_readonly_user and not prefer_compliance_management %}
118-
<form name="update-system-preference" method="post" action="/api/users/{{request.user.id}}/update_system_preference/">
119-
{% csrf_token %}
120-
<input type="hidden" name="prefer_compliance_management" value="True"/>
121-
<input type="submit" class="submit" value="Show Compliance Management" />
122-
</form>
123-
<li role="separator" class="divider"></li>
124-
{% elif is_compliance_internal_login and prefer_compliance_management %}
125-
<form name="update-system-preference" method="post" action="/api/users/{{request.user.id}}/update_system_preference/">
126-
{% csrf_token %}
127-
<input type="hidden" name="prefer_compliance_management" value="False"/>
128-
<input type="submit" class="submit" value="Show Wildlife Licencing" />
129-
</form>
130-
<li role="separator" class="divider"></li>
121+
{% if not is_compliance_management_callemail_readonly_user %}
122+
{% if is_compliance_internal_login and not prefer_compliance_management %}
123+
<form name="update-system-preference" method="post" action="/api/users/{{request.user.id}}/update_system_preference/">
124+
{% csrf_token %}
125+
<input type="hidden" name="prefer_compliance_management" value="True"/>
126+
<input type="submit" class="submit" value="Show Compliance Management" />
127+
</form>
128+
<li role="separator" class="divider"></li>
129+
{% elif is_compliance_internal_login and prefer_compliance_management %}
130+
<form name="update-system-preference" method="post" action="/api/users/{{request.user.id}}/update_system_preference/">
131+
{% csrf_token %}
132+
<input type="hidden" name="prefer_compliance_management" value="False"/>
133+
<input type="submit" class="submit" value="Show Wildlife Licencing" />
134+
</form>
135+
<li role="separator" class="divider"></li>
136+
{% endif %}
131137
{% endif %}
132138
{% if is_wildlifecompliance_admin_login %}
133139
<li><a href="{% url 'admin:index' %}">Admin</a></li>

wildlifecompliance/templatetags/users.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ def is_compliance_management_readonly_user(context):
6262
request = context['request']
6363
return wildlifecompliance_helpers.is_compliance_management_readonly_user(request)
6464

65+
@register.simple_tag(takes_context=True)
66+
def is_compliance_management_callemail_readonly_user(context):
67+
request = context['request']
68+
return wildlifecompliance_helpers.is_compliance_management_callemail_readonly_user(request)
69+
70+
@register.simple_tag(takes_context=True)
71+
def is_external_url(context):
72+
request = context['request']
73+
return wildlifecompliance_helpers.is_external_url(request)
6574

6675
@register.simple_tag()
6776
def system_maintenance_due():

wildlifecompliance/views.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,16 @@
1111
from datetime import datetime, timedelta
1212

1313
from wildlifecompliance.helpers import is_internal, prefer_compliance_management, is_model_backend, in_dbca_domain, \
14-
is_compliance_internal_user, is_wildlifecompliance_admin
14+
is_compliance_internal_user, is_wildlifecompliance_admin, is_compliance_management_callemail_readonly_user, belongs_to
1515
from wildlifecompliance.forms import *
1616
from wildlifecompliance.components.applications.models import Application
1717
from wildlifecompliance.components.call_email.models import CallEmail
1818
from wildlifecompliance.components.returns.models import Return
1919
from wildlifecompliance.components.main import utils
2020
from wildlifecompliance.exceptions import BindApplicationException
2121
from django.core.management import call_command
22+
from wildlifecompliance.components.users.models import CompliancePermissionGroup
23+
2224

2325
logger = logging.getLogger(__name__)
2426
# logger = logging
@@ -44,10 +46,11 @@ class ExternalReturnView(DetailView):
4446

4547

4648
class InternalView(UserPassesTestMixin, TemplateView):
49+
#class InternalView(TemplateView):
4750
template_name = 'wildlifecompliance/dash/index.html'
4851

4952
def test_func(self):
50-
return is_internal(self.request)
53+
return is_internal(self.request) or is_compliance_management_callemail_readonly_user(self.request)
5154

5255
def get_context_data(self, **kwargs):
5356
context = super(InternalView, self).get_context_data(**kwargs)
@@ -83,8 +86,11 @@ def get(self, *args, **kwargs):
8386
print('is_compliance_internal_user: {}'.format(is_compliance_internal_user(self.request)))
8487
print('is_wildlifecompliance_admin: {}'.format(is_wildlifecompliance_admin(self.request)))
8588
print('prefer compliance management: {}'.format(prefer_compliance_management(self.request)))
86-
if is_internal(self.request) and prefer_compliance_management(self.request):
87-
return redirect('internal/call_email/')
89+
if (
90+
(is_internal(self.request) and prefer_compliance_management(self.request)) or
91+
is_compliance_management_callemail_readonly_user(self.request)
92+
):
93+
return redirect('internal')
8894
elif is_internal(self.request):
8995
return redirect('internal')
9096
return redirect('external')

0 commit comments

Comments
 (0)