wbcompliance 2.2.1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wbcompliance/__init__.py +1 -0
- wbcompliance/admin/__init__.py +16 -0
- wbcompliance/admin/compliance_form.py +56 -0
- wbcompliance/admin/compliance_task.py +135 -0
- wbcompliance/admin/compliance_type.py +8 -0
- wbcompliance/admin/risk_management/__init__.py +3 -0
- wbcompliance/admin/risk_management/checks.py +7 -0
- wbcompliance/admin/risk_management/incidents.py +50 -0
- wbcompliance/admin/risk_management/rules.py +63 -0
- wbcompliance/admin/utils.py +46 -0
- wbcompliance/apps.py +14 -0
- wbcompliance/factories/__init__.py +21 -0
- wbcompliance/factories/compliance.py +246 -0
- wbcompliance/factories/risk_management/__init__.py +12 -0
- wbcompliance/factories/risk_management/backends.py +42 -0
- wbcompliance/factories/risk_management/checks.py +12 -0
- wbcompliance/factories/risk_management/incidents.py +84 -0
- wbcompliance/factories/risk_management/rules.py +100 -0
- wbcompliance/filters/__init__.py +2 -0
- wbcompliance/filters/compliances.py +189 -0
- wbcompliance/filters/risk_management/__init__.py +3 -0
- wbcompliance/filters/risk_management/checks.py +22 -0
- wbcompliance/filters/risk_management/incidents.py +113 -0
- wbcompliance/filters/risk_management/rules.py +110 -0
- wbcompliance/filters/risk_management/tables.py +112 -0
- wbcompliance/filters/risk_management/utils.py +3 -0
- wbcompliance/management/__init__.py +10 -0
- wbcompliance/migrations/0001_initial_squashed_squashed_0010_alter_checkedobjectincidentrelationship_resolved_by_and_more.py +1744 -0
- wbcompliance/migrations/0011_alter_riskrule_parameters.py +21 -0
- wbcompliance/migrations/0012_alter_compliancetype_options.py +20 -0
- wbcompliance/migrations/0013_alter_riskrule_unique_together.py +16 -0
- wbcompliance/migrations/0014_alter_reviewcompliancetask_year.py +27 -0
- wbcompliance/migrations/0015_auto_20240103_0957.py +43 -0
- wbcompliance/migrations/0016_checkedobjectincidentrelationship_report_details_and_more.py +37 -0
- wbcompliance/migrations/0017_alter_rulebackend_incident_report_template.py +20 -0
- wbcompliance/migrations/0018_alter_rulecheckedobjectrelationship_unique_together.py +39 -0
- wbcompliance/migrations/0019_rulegroup_riskrule_activation_date_and_more.py +60 -0
- wbcompliance/migrations/__init__.py +0 -0
- wbcompliance/models/__init__.py +20 -0
- wbcompliance/models/compliance_form.py +626 -0
- wbcompliance/models/compliance_task.py +800 -0
- wbcompliance/models/compliance_type.py +133 -0
- wbcompliance/models/enums.py +13 -0
- wbcompliance/models/risk_management/__init__.py +4 -0
- wbcompliance/models/risk_management/backend.py +139 -0
- wbcompliance/models/risk_management/checks.py +194 -0
- wbcompliance/models/risk_management/dispatch.py +41 -0
- wbcompliance/models/risk_management/incidents.py +619 -0
- wbcompliance/models/risk_management/mixins.py +115 -0
- wbcompliance/models/risk_management/rules.py +654 -0
- wbcompliance/permissions.py +32 -0
- wbcompliance/serializers/__init__.py +30 -0
- wbcompliance/serializers/compliance_form.py +320 -0
- wbcompliance/serializers/compliance_task.py +463 -0
- wbcompliance/serializers/compliance_type.py +26 -0
- wbcompliance/serializers/risk_management/__init__.py +19 -0
- wbcompliance/serializers/risk_management/checks.py +53 -0
- wbcompliance/serializers/risk_management/incidents.py +227 -0
- wbcompliance/serializers/risk_management/rules.py +158 -0
- wbcompliance/tasks.py +112 -0
- wbcompliance/tests/__init__.py +0 -0
- wbcompliance/tests/conftest.py +63 -0
- wbcompliance/tests/disable_signals.py +82 -0
- wbcompliance/tests/mixins.py +17 -0
- wbcompliance/tests/risk_management/__init__.py +0 -0
- wbcompliance/tests/risk_management/models/__init__.py +0 -0
- wbcompliance/tests/risk_management/models/test_backends.py +0 -0
- wbcompliance/tests/risk_management/models/test_checks.py +55 -0
- wbcompliance/tests/risk_management/models/test_incidents.py +327 -0
- wbcompliance/tests/risk_management/models/test_rules.py +255 -0
- wbcompliance/tests/signals.py +89 -0
- wbcompliance/tests/test_filters.py +23 -0
- wbcompliance/tests/test_models.py +57 -0
- wbcompliance/tests/test_serializers.py +48 -0
- wbcompliance/tests/test_views.py +377 -0
- wbcompliance/tests/tests.py +21 -0
- wbcompliance/urls.py +238 -0
- wbcompliance/viewsets/__init__.py +40 -0
- wbcompliance/viewsets/buttons/__init__.py +9 -0
- wbcompliance/viewsets/buttons/compliance_form.py +78 -0
- wbcompliance/viewsets/buttons/compliance_task.py +149 -0
- wbcompliance/viewsets/buttons/risk_managment/__init__.py +3 -0
- wbcompliance/viewsets/buttons/risk_managment/checks.py +11 -0
- wbcompliance/viewsets/buttons/risk_managment/incidents.py +51 -0
- wbcompliance/viewsets/buttons/risk_managment/rules.py +35 -0
- wbcompliance/viewsets/compliance_form.py +425 -0
- wbcompliance/viewsets/compliance_task.py +513 -0
- wbcompliance/viewsets/compliance_type.py +38 -0
- wbcompliance/viewsets/display/__init__.py +22 -0
- wbcompliance/viewsets/display/compliance_form.py +317 -0
- wbcompliance/viewsets/display/compliance_task.py +453 -0
- wbcompliance/viewsets/display/compliance_type.py +22 -0
- wbcompliance/viewsets/display/risk_managment/__init__.py +11 -0
- wbcompliance/viewsets/display/risk_managment/checks.py +46 -0
- wbcompliance/viewsets/display/risk_managment/incidents.py +155 -0
- wbcompliance/viewsets/display/risk_managment/rules.py +146 -0
- wbcompliance/viewsets/display/risk_managment/tables.py +51 -0
- wbcompliance/viewsets/endpoints/__init__.py +27 -0
- wbcompliance/viewsets/endpoints/compliance_form.py +207 -0
- wbcompliance/viewsets/endpoints/compliance_task.py +193 -0
- wbcompliance/viewsets/endpoints/compliance_type.py +9 -0
- wbcompliance/viewsets/endpoints/risk_managment/__init__.py +12 -0
- wbcompliance/viewsets/endpoints/risk_managment/checks.py +16 -0
- wbcompliance/viewsets/endpoints/risk_managment/incidents.py +36 -0
- wbcompliance/viewsets/endpoints/risk_managment/rules.py +32 -0
- wbcompliance/viewsets/endpoints/risk_managment/tables.py +14 -0
- wbcompliance/viewsets/menu/__init__.py +17 -0
- wbcompliance/viewsets/menu/compliance_form.py +49 -0
- wbcompliance/viewsets/menu/compliance_task.py +130 -0
- wbcompliance/viewsets/menu/compliance_type.py +17 -0
- wbcompliance/viewsets/menu/risk_management.py +56 -0
- wbcompliance/viewsets/risk_management/__init__.py +21 -0
- wbcompliance/viewsets/risk_management/checks.py +49 -0
- wbcompliance/viewsets/risk_management/incidents.py +204 -0
- wbcompliance/viewsets/risk_management/mixins.py +52 -0
- wbcompliance/viewsets/risk_management/rules.py +179 -0
- wbcompliance/viewsets/risk_management/tables.py +96 -0
- wbcompliance/viewsets/titles/__init__.py +17 -0
- wbcompliance/viewsets/titles/compliance_form.py +101 -0
- wbcompliance/viewsets/titles/compliance_task.py +60 -0
- wbcompliance/viewsets/titles/compliance_type.py +13 -0
- wbcompliance/viewsets/titles/risk_managment/__init__.py +1 -0
- wbcompliance/viewsets/titles/risk_managment/checks.py +0 -0
- wbcompliance/viewsets/titles/risk_managment/incidents.py +0 -0
- wbcompliance/viewsets/titles/risk_managment/rules.py +0 -0
- wbcompliance/viewsets/titles/risk_managment/tables.py +7 -0
- wbcompliance-2.2.1.dist-info/METADATA +7 -0
- wbcompliance-2.2.1.dist-info/RECORD +129 -0
- wbcompliance-2.2.1.dist-info/WHEEL +5 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcompliance.models import ComplianceType, ReviewComplianceTask
|
|
3
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ComplianceTaskGroupEndpointConfig(EndpointViewConfig):
|
|
7
|
+
def get_endpoint(self, **kwargs):
|
|
8
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
9
|
+
return super().get_endpoint()
|
|
10
|
+
return None
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ComplianceTaskEndpointConfig(EndpointViewConfig):
|
|
14
|
+
def get_endpoint(self, **kwargs):
|
|
15
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
16
|
+
return super().get_endpoint()
|
|
17
|
+
return None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ComplianceTaskComplianceTaskGroupEndpointConfig(ComplianceTaskEndpointConfig):
|
|
21
|
+
def get_endpoint(self, **kwargs):
|
|
22
|
+
if group_id := self.view.kwargs.get("group_id", None):
|
|
23
|
+
return reverse(
|
|
24
|
+
"wbcompliance:compliancetaskgroup-compliancetask-list", args=[group_id], request=self.request
|
|
25
|
+
)
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ComplianceTaskInstanceEndpointConfig(EndpointViewConfig):
|
|
30
|
+
def get_endpoint(self, **kwargs):
|
|
31
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
32
|
+
return super().get_endpoint()
|
|
33
|
+
return None
|
|
34
|
+
|
|
35
|
+
def get_create_endpoint(self, **kwargs):
|
|
36
|
+
return None
|
|
37
|
+
|
|
38
|
+
def get_delete_endpoint(self, **kwargs):
|
|
39
|
+
if self.request.user.is_superuser:
|
|
40
|
+
return super().get_delete_endpoint()
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class ComplianceTaskInstanceComplianceTaskEndpointConfig(ComplianceTaskInstanceEndpointConfig):
|
|
45
|
+
def get_endpoint(self, **kwargs):
|
|
46
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
47
|
+
return reverse(
|
|
48
|
+
"wbcompliance:compliancetask-compliancetaskinstance-list",
|
|
49
|
+
args=[self.view.kwargs["task_id"]],
|
|
50
|
+
request=self.request,
|
|
51
|
+
)
|
|
52
|
+
return None
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class ComplianceTaskMatrixEndpointConfig(EndpointViewConfig):
|
|
56
|
+
def get_endpoint(self, **kwargs):
|
|
57
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
58
|
+
return reverse("wbcompliance:compliancetaskmatrix-list", [], request=self.request)
|
|
59
|
+
return None
|
|
60
|
+
|
|
61
|
+
def get_create_endpoint(self, **kwargs):
|
|
62
|
+
return None
|
|
63
|
+
|
|
64
|
+
def get_instance_endpoint(self, **kwargs):
|
|
65
|
+
return None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class ComplianceActionEndpointConfig(EndpointViewConfig):
|
|
69
|
+
def get_endpoint(self, **kwargs):
|
|
70
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
71
|
+
return super().get_endpoint()
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class ComplianceEventEndpointConfig(EndpointViewConfig):
|
|
76
|
+
def get_endpoint(self, **kwargs):
|
|
77
|
+
return super().get_endpoint()
|
|
78
|
+
|
|
79
|
+
def get_instance_endpoint(self, **kwargs):
|
|
80
|
+
if self.instance:
|
|
81
|
+
obj = self.view.get_object()
|
|
82
|
+
if not ComplianceType.is_administrator(self.request.user) and obj.creator != self.request.user.profile:
|
|
83
|
+
return None
|
|
84
|
+
return super().get_instance_endpoint()
|
|
85
|
+
|
|
86
|
+
def get_delete_endpoint(self, **kwargs):
|
|
87
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
88
|
+
return super().get_delete_endpoint()
|
|
89
|
+
return None
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class ReviewComplianceTaskEndpointConfig(EndpointViewConfig):
|
|
93
|
+
def get_endpoint(self, **kwargs):
|
|
94
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
95
|
+
return super().get_endpoint()
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
def get_instance_endpoint(self, **kwargs):
|
|
99
|
+
if self.instance:
|
|
100
|
+
if not ComplianceType.is_administrator(self.request.user):
|
|
101
|
+
return None
|
|
102
|
+
if obj_id := self.view.kwargs.get("pk", None):
|
|
103
|
+
obj = ReviewComplianceTask.objects.get(id=obj_id)
|
|
104
|
+
if obj.status != ReviewComplianceTask.Status.DRAFT:
|
|
105
|
+
return None
|
|
106
|
+
return super().get_instance_endpoint()
|
|
107
|
+
|
|
108
|
+
def get_delete_endpoint(self, **kwargs):
|
|
109
|
+
if not ComplianceType.is_administrator(self.request.user):
|
|
110
|
+
return None
|
|
111
|
+
if obj_id := self.view.kwargs.get("pk", None):
|
|
112
|
+
obj = ReviewComplianceTask.objects.get(id=obj_id)
|
|
113
|
+
if obj.status != ReviewComplianceTask.Status.DRAFT or obj.is_instance:
|
|
114
|
+
return None
|
|
115
|
+
return super().get_delete_endpoint()
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
class AbstractComplianceTaskReviewEndpointConfig(EndpointViewConfig):
|
|
119
|
+
def get_instance_endpoint(self, **kwargs):
|
|
120
|
+
if self.instance:
|
|
121
|
+
if not ComplianceType.is_administrator(self.request.user):
|
|
122
|
+
return None
|
|
123
|
+
if review_id := self.view.kwargs.get("review_id", None):
|
|
124
|
+
obj = ReviewComplianceTask.objects.get(id=review_id)
|
|
125
|
+
if obj.status != ReviewComplianceTask.Status.DRAFT:
|
|
126
|
+
return None
|
|
127
|
+
return super().get_instance_endpoint()
|
|
128
|
+
|
|
129
|
+
def get_create_endpoint(self, **kwargs):
|
|
130
|
+
if not ComplianceType.is_administrator(self.request.user):
|
|
131
|
+
return None
|
|
132
|
+
if review_id := self.view.kwargs.get("review_id", None):
|
|
133
|
+
obj = ReviewComplianceTask.objects.get(id=review_id)
|
|
134
|
+
if obj.status != ReviewComplianceTask.Status.DRAFT:
|
|
135
|
+
return None
|
|
136
|
+
return super().get_create_endpoint()
|
|
137
|
+
|
|
138
|
+
def get_delete_endpoint(self, **kwargs):
|
|
139
|
+
if not ComplianceType.is_administrator(self.request.user):
|
|
140
|
+
return None
|
|
141
|
+
if review_id := self.view.kwargs.get("review_id", None):
|
|
142
|
+
obj = ReviewComplianceTask.objects.get(id=review_id)
|
|
143
|
+
if obj.status != ReviewComplianceTask.Status.DRAFT:
|
|
144
|
+
return None
|
|
145
|
+
return super().get_delete_endpoint()
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class ComplianceTaskReviewNoGroupEndpointConfig(AbstractComplianceTaskReviewEndpointConfig):
|
|
149
|
+
def get_endpoint(self, **kwargs):
|
|
150
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
151
|
+
if review_id := self.view.kwargs.get("review_id", None):
|
|
152
|
+
return reverse(
|
|
153
|
+
"wbcompliance:review-compliancetasknogroup-list", args=[review_id], request=self.request
|
|
154
|
+
)
|
|
155
|
+
return None
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class ComplianceTaskReviewGroupEndpointConfig(AbstractComplianceTaskReviewEndpointConfig):
|
|
159
|
+
def get_endpoint(self, **kwargs):
|
|
160
|
+
if (
|
|
161
|
+
ComplianceType.is_administrator(self.request.user)
|
|
162
|
+
and (review_id := self.view.kwargs.get("review_id", None))
|
|
163
|
+
and (group_id := self.view.kwargs.get("group_id", None))
|
|
164
|
+
):
|
|
165
|
+
return reverse(
|
|
166
|
+
"wbcompliance:review-compliancetaskgroup-list", args=[review_id, group_id], request=self.request
|
|
167
|
+
)
|
|
168
|
+
return None
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class ComplianceTaskInstanceReviewNoGroupEndpointConfig(ComplianceTaskInstanceEndpointConfig):
|
|
172
|
+
def get_endpoint(self, **kwargs):
|
|
173
|
+
if ComplianceType.is_administrator(self.request.user) and (
|
|
174
|
+
review_id := self.view.kwargs.get("review_id", None)
|
|
175
|
+
):
|
|
176
|
+
return reverse(
|
|
177
|
+
"wbcompliance:review-compliancetaskinstancenogroup-list", args=[review_id], request=self.request
|
|
178
|
+
)
|
|
179
|
+
return None
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class ComplianceTaskInstanceReviewGroupEndpointConfig(ComplianceTaskInstanceEndpointConfig):
|
|
183
|
+
def get_endpoint(self, **kwargs):
|
|
184
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
185
|
+
if (review_id := self.view.kwargs.get("review_id", None)) and (
|
|
186
|
+
group_id := self.view.kwargs.get("group_id", None)
|
|
187
|
+
):
|
|
188
|
+
return reverse(
|
|
189
|
+
"wbcompliance:review-compliancetaskinstancegroup-list",
|
|
190
|
+
args=[review_id, group_id],
|
|
191
|
+
request=self.request,
|
|
192
|
+
)
|
|
193
|
+
return None
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from wbcompliance.models import ComplianceType
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ComplianceTypeEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
if ComplianceType.is_administrator(self.request.user):
|
|
8
|
+
return super().get_endpoint()
|
|
9
|
+
return None
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from .checks import RiskCheckEndpointConfig
|
|
2
|
+
from .incidents import (
|
|
3
|
+
CheckedObjectIncidentRelationshipEndpointConfig,
|
|
4
|
+
CheckedObjectIncidentRelationshipRiskRuleEndpointConfig,
|
|
5
|
+
RiskIncidentEndpointConfig,
|
|
6
|
+
)
|
|
7
|
+
from .rules import (
|
|
8
|
+
RiskRuleEndpointConfig,
|
|
9
|
+
RuleCheckedObjectRelationshipRiskRuleEndpointConfig,
|
|
10
|
+
RuleThresholdRiskRuleEndpointConfig,
|
|
11
|
+
)
|
|
12
|
+
from .tables import RiskManagementIncidentTableEndpointConfig
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class RiskCheckEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_list_endpoint(self, **kwargs):
|
|
10
|
+
if rule_id := self.view.kwargs.get("rule_id"):
|
|
11
|
+
return reverse(
|
|
12
|
+
"wbcompliance:riskrule-check-list",
|
|
13
|
+
args=[rule_id],
|
|
14
|
+
request=self.request,
|
|
15
|
+
)
|
|
16
|
+
return super().get_endpoint(**kwargs)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class RiskIncidentEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
if rule_id := self.view.kwargs.get("rule_id"):
|
|
8
|
+
return reverse(
|
|
9
|
+
"wbcompliance:riskrule-incident-list",
|
|
10
|
+
args=[rule_id],
|
|
11
|
+
request=self.request,
|
|
12
|
+
)
|
|
13
|
+
return super().get_endpoint(**kwargs)
|
|
14
|
+
|
|
15
|
+
def get_create_endpoint(self, **kwargs):
|
|
16
|
+
return None
|
|
17
|
+
|
|
18
|
+
def get_delete_endpoint(self, **kwargs):
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class CheckedObjectIncidentRelationshipEndpointConfig(EndpointViewConfig):
|
|
23
|
+
def get_endpoint(self, **kwargs):
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
def get_list_endpoint(self, **kwargs):
|
|
27
|
+
return reverse("wbcompliance:checkedobjectincidentrelationship-list", request=self.request)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CheckedObjectIncidentRelationshipRiskRuleEndpointConfig(CheckedObjectIncidentRelationshipEndpointConfig):
|
|
31
|
+
def get_list_endpoint(self, **kwargs):
|
|
32
|
+
return reverse(
|
|
33
|
+
"wbcompliance:riskincident-relationship-list",
|
|
34
|
+
args=[self.view.kwargs["incident_id"]],
|
|
35
|
+
request=self.request,
|
|
36
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class RuleThresholdRiskRuleEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
if rule_id := self.view.kwargs.get("rule_id"):
|
|
8
|
+
return reverse(
|
|
9
|
+
"wbcompliance:riskrule-threshold-list",
|
|
10
|
+
args=[rule_id],
|
|
11
|
+
request=self.request,
|
|
12
|
+
)
|
|
13
|
+
return super().get_endpoint(**kwargs)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class RuleCheckedObjectRelationshipRiskRuleEndpointConfig(EndpointViewConfig):
|
|
17
|
+
def get_endpoint(self, **kwargs):
|
|
18
|
+
if rule_id := self.view.kwargs.get("rule_id"):
|
|
19
|
+
return reverse(
|
|
20
|
+
"wbcompliance:riskrule-relationship-list",
|
|
21
|
+
args=[rule_id],
|
|
22
|
+
request=self.request,
|
|
23
|
+
)
|
|
24
|
+
return super().get_endpoint(**kwargs)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class RiskRuleEndpointConfig(EndpointViewConfig):
|
|
28
|
+
def get_endpoint(self, **kwargs):
|
|
29
|
+
return super().get_endpoint(**kwargs)
|
|
30
|
+
|
|
31
|
+
def get_delete_endpoint(self, **kwargs):
|
|
32
|
+
return None
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class RiskManagementIncidentTableEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_list_endpoint(self, **kwargs):
|
|
10
|
+
return reverse(
|
|
11
|
+
"wbcompliance:riskmanagementincidenttable-list",
|
|
12
|
+
args=[],
|
|
13
|
+
request=self.request,
|
|
14
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from wbcompliance.permissions import (
|
|
2
|
+
is_admin_compliance,
|
|
3
|
+
is_internal_employee_compliance,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
from .compliance_form import COMPLIANCEFORM_MENU, COMPLIANCEFORMSIGNATURE_MENUITEM
|
|
7
|
+
from .compliance_task import (
|
|
8
|
+
COMPLIANCE_SETTINGS_MENU,
|
|
9
|
+
COMPLIANCEEVENT_MENUITEM,
|
|
10
|
+
COMPLIANCEREPORT_MENU,
|
|
11
|
+
)
|
|
12
|
+
from .compliance_type import COMPLIANCETYPE_MENUITEM
|
|
13
|
+
from .risk_management import (
|
|
14
|
+
RISK_INCIDENT_MENUITEM,
|
|
15
|
+
RISKINCIDENTTABLE_MENUITEM,
|
|
16
|
+
RULE_MENUITEM,
|
|
17
|
+
)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from django.utils.translation import gettext as _
|
|
2
|
+
from wbcompliance.permissions import is_admin_compliance
|
|
3
|
+
from wbcore.menus import ItemPermission, Menu, MenuItem
|
|
4
|
+
|
|
5
|
+
COMPLIANCEFORM_MENUITEM = MenuItem(
|
|
6
|
+
label=_("Forms"),
|
|
7
|
+
endpoint="wbcompliance:complianceform-list",
|
|
8
|
+
permission=ItemPermission(
|
|
9
|
+
method=is_admin_compliance,
|
|
10
|
+
permissions=["wbcompliance.view_complianceform", "wbcompliance.administrate_compliance"],
|
|
11
|
+
),
|
|
12
|
+
add=MenuItem(
|
|
13
|
+
label=_("Add Form"),
|
|
14
|
+
endpoint="wbcompliance:complianceform-list",
|
|
15
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.administrate_compliance"]),
|
|
16
|
+
),
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
COMPLIANCEFORMSIGNATURE_MENUITEM = MenuItem(
|
|
21
|
+
label=_("Form Signatures"),
|
|
22
|
+
endpoint="wbcompliance:complianceformsignature-list",
|
|
23
|
+
permission=ItemPermission(permissions=["wbcompliance.view_complianceformsignature"]),
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
ADMIN_COMPLIANCEFORMSIGNATURE_MENUITEM = MenuItem(
|
|
27
|
+
label=_("Form Signatures"),
|
|
28
|
+
endpoint="wbcompliance:complianceformsignature-list",
|
|
29
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.view_complianceformsignature"]),
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
COMPLIANCEFORMTYPE_MENUITEM = MenuItem(
|
|
33
|
+
label=_("Form Types"),
|
|
34
|
+
endpoint="wbcompliance:complianceformtype-list",
|
|
35
|
+
permission=ItemPermission(
|
|
36
|
+
method=is_admin_compliance,
|
|
37
|
+
permissions=["wbcompliance.view_complianceformtype", "wbcompliance.administrate_compliance"],
|
|
38
|
+
),
|
|
39
|
+
add=MenuItem(
|
|
40
|
+
label=_("Add Form Type"),
|
|
41
|
+
endpoint="wbcompliance:complianceformtype-list",
|
|
42
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.administrate_compliance"]),
|
|
43
|
+
),
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
COMPLIANCEFORM_MENU = Menu(
|
|
47
|
+
label=_("Forms"),
|
|
48
|
+
items=[COMPLIANCEFORM_MENUITEM, ADMIN_COMPLIANCEFORMSIGNATURE_MENUITEM, COMPLIANCEFORMTYPE_MENUITEM],
|
|
49
|
+
)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
from django.utils.translation import gettext as _
|
|
2
|
+
from wbcompliance.permissions import (
|
|
3
|
+
is_admin_compliance,
|
|
4
|
+
is_internal_employee_compliance,
|
|
5
|
+
)
|
|
6
|
+
from wbcore.menus import ItemPermission, Menu, MenuItem
|
|
7
|
+
|
|
8
|
+
from .compliance_type import COMPLIANCETYPE_MENUITEM
|
|
9
|
+
|
|
10
|
+
COMPLIANCETASKGROUP_MENUITEM = MenuItem(
|
|
11
|
+
label=_("Groups Indicator"),
|
|
12
|
+
endpoint="wbcompliance:compliancetaskgroup-list",
|
|
13
|
+
permission=ItemPermission(
|
|
14
|
+
method=is_admin_compliance,
|
|
15
|
+
permissions=["wbcompliance.view_compliancetaskgroup", "wbcompliance.administrate_compliance"],
|
|
16
|
+
),
|
|
17
|
+
add=MenuItem(
|
|
18
|
+
label=_("Add Group Indicator"),
|
|
19
|
+
endpoint="wbcompliance:compliancetaskgroup-list",
|
|
20
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.administrate_compliance"]),
|
|
21
|
+
),
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
COMPLIANCETASK_MENUITEM = MenuItem(
|
|
25
|
+
label=_("Indicators"),
|
|
26
|
+
endpoint="wbcompliance:compliancetask-list",
|
|
27
|
+
permission=ItemPermission(
|
|
28
|
+
method=is_admin_compliance,
|
|
29
|
+
permissions=["wbcompliance.view_compliancetask", "wbcompliance.administrate_compliance"],
|
|
30
|
+
),
|
|
31
|
+
add=MenuItem(
|
|
32
|
+
label=_("Add Indicator"),
|
|
33
|
+
endpoint="wbcompliance:compliancetask-list",
|
|
34
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.administrate_compliance"]),
|
|
35
|
+
),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
COMPLIANCETASKINSTANCE_MENUITEM = MenuItem(
|
|
39
|
+
label=_("Instances Indicator"),
|
|
40
|
+
endpoint="wbcompliance:compliancetaskinstance-list",
|
|
41
|
+
permission=ItemPermission(
|
|
42
|
+
method=lambda request: request.user.is_superuser,
|
|
43
|
+
permissions=["wbcompliance.view_compliancetaskinstance", "wbcompliance.administrate_compliance"],
|
|
44
|
+
),
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
COMPLIANCETASKMATRIX_MENUITEM = MenuItem(
|
|
48
|
+
label=_("Indicator Matrix"),
|
|
49
|
+
endpoint="wbcompliance:compliancetaskmatrix-list",
|
|
50
|
+
permission=ItemPermission(
|
|
51
|
+
method=is_admin_compliance,
|
|
52
|
+
permissions=[
|
|
53
|
+
"wbcompliance.view_compliancetaskinstance",
|
|
54
|
+
"wbcompliance.view_compliancetask",
|
|
55
|
+
"wbcompliance.administrate_compliance",
|
|
56
|
+
],
|
|
57
|
+
),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
COMPLIANCEACTION_MENUITEM = MenuItem(
|
|
61
|
+
label=_("Actions"),
|
|
62
|
+
endpoint="wbcompliance:complianceaction-list",
|
|
63
|
+
permission=ItemPermission(
|
|
64
|
+
method=is_admin_compliance,
|
|
65
|
+
permissions=["wbcompliance.view_complianceaction", "wbcompliance.administrate_compliance"],
|
|
66
|
+
),
|
|
67
|
+
add=MenuItem(
|
|
68
|
+
label=_("Add Compliance Action"),
|
|
69
|
+
endpoint="wbcompliance:complianceaction-list",
|
|
70
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.administrate_compliance"]),
|
|
71
|
+
),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
COMPLIANCEEVENT_MENUITEM = MenuItem(
|
|
75
|
+
label=_("Events"),
|
|
76
|
+
endpoint="wbcompliance:complianceevent-list",
|
|
77
|
+
permission=ItemPermission(
|
|
78
|
+
method=is_internal_employee_compliance, permissions=["wbcompliance.view_complianceevent"]
|
|
79
|
+
),
|
|
80
|
+
add=MenuItem(
|
|
81
|
+
label=_("Add Compliance Event"),
|
|
82
|
+
endpoint="wbcompliance:complianceevent-list",
|
|
83
|
+
permission=ItemPermission(
|
|
84
|
+
method=is_internal_employee_compliance, permissions=["wbcompliance.add_complianceevent"]
|
|
85
|
+
),
|
|
86
|
+
),
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
ADMIN_COMPLIANCEEVENT_MENUITEM = MenuItem(
|
|
90
|
+
label=_("Events"),
|
|
91
|
+
endpoint="wbcompliance:complianceevent-list",
|
|
92
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.view_complianceevent"]),
|
|
93
|
+
add=MenuItem(
|
|
94
|
+
label=_("Add Compliance Event"),
|
|
95
|
+
endpoint="wbcompliance:complianceevent-list",
|
|
96
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.add_complianceevent"]),
|
|
97
|
+
),
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
REVIEWCOMPLIANCETASK_MENUITEM = MenuItem(
|
|
101
|
+
label=_("Reports"),
|
|
102
|
+
endpoint="wbcompliance:reviewcompliancetask-list",
|
|
103
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.view_reviewcompliancetask"]),
|
|
104
|
+
add=MenuItem(
|
|
105
|
+
label=_("Add Report Indicator"),
|
|
106
|
+
endpoint="wbcompliance:reviewcompliancetask-list",
|
|
107
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.add_reviewcompliancetask"]),
|
|
108
|
+
),
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
COMPLIANCEREPORT_MENU = Menu(
|
|
113
|
+
label=_("Reports"),
|
|
114
|
+
items=[
|
|
115
|
+
REVIEWCOMPLIANCETASK_MENUITEM,
|
|
116
|
+
COMPLIANCEACTION_MENUITEM,
|
|
117
|
+
ADMIN_COMPLIANCEEVENT_MENUITEM,
|
|
118
|
+
COMPLIANCETASKMATRIX_MENUITEM,
|
|
119
|
+
],
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
COMPLIANCE_SETTINGS_MENU = Menu(
|
|
123
|
+
label=_("Settings"),
|
|
124
|
+
items=[
|
|
125
|
+
COMPLIANCETYPE_MENUITEM,
|
|
126
|
+
COMPLIANCETASKGROUP_MENUITEM,
|
|
127
|
+
COMPLIANCETASK_MENUITEM,
|
|
128
|
+
COMPLIANCETASKINSTANCE_MENUITEM,
|
|
129
|
+
],
|
|
130
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from django.utils.translation import gettext as _
|
|
2
|
+
from wbcompliance.permissions import is_admin_compliance
|
|
3
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
4
|
+
|
|
5
|
+
COMPLIANCETYPE_MENUITEM = MenuItem(
|
|
6
|
+
label=_("Administrators"),
|
|
7
|
+
endpoint="wbcompliance:compliancetype-list",
|
|
8
|
+
permission=ItemPermission(
|
|
9
|
+
method=is_admin_compliance,
|
|
10
|
+
permissions=["wbcompliance.view_compliancetype", "wbcompliance.administrate_compliance"],
|
|
11
|
+
),
|
|
12
|
+
add=MenuItem(
|
|
13
|
+
label=_("Add Compliance Type"),
|
|
14
|
+
endpoint="wbcompliance:compliancetype-list",
|
|
15
|
+
permission=ItemPermission(method=is_admin_compliance, permissions=["wbcompliance.administrate_compliance"]),
|
|
16
|
+
),
|
|
17
|
+
)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
from contextlib import suppress
|
|
2
|
+
|
|
3
|
+
from django.utils.translation import gettext as _
|
|
4
|
+
from wbcompliance.models.risk_management.rules import RuleGroup
|
|
5
|
+
from wbcore.menus import ItemPermission, Menu, MenuItem
|
|
6
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
7
|
+
|
|
8
|
+
RULE_MENUITEM = MenuItem(
|
|
9
|
+
label=_("Rules"),
|
|
10
|
+
endpoint="wbcompliance:riskrule-list",
|
|
11
|
+
permission=ItemPermission(
|
|
12
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbcompliance.view_riskrule"]
|
|
13
|
+
),
|
|
14
|
+
add=MenuItem(
|
|
15
|
+
label=_("Add Rule"),
|
|
16
|
+
endpoint="wbcompliance:riskrule-list",
|
|
17
|
+
permission=ItemPermission(
|
|
18
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbcompliance.add_riskrule"]
|
|
19
|
+
),
|
|
20
|
+
),
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _get_incident_menu():
|
|
25
|
+
items = []
|
|
26
|
+
with suppress(Exception):
|
|
27
|
+
for rule_group in RuleGroup.objects.all():
|
|
28
|
+
items.append(
|
|
29
|
+
MenuItem(
|
|
30
|
+
label=rule_group.name,
|
|
31
|
+
endpoint="wbcompliance:riskincident-list",
|
|
32
|
+
permission=ItemPermission(
|
|
33
|
+
method=lambda request: is_internal_user(request.user),
|
|
34
|
+
permissions=["wbcompliance.view_riskincident"],
|
|
35
|
+
),
|
|
36
|
+
endpoint_get_parameters={"rule_group": rule_group.id},
|
|
37
|
+
)
|
|
38
|
+
)
|
|
39
|
+
if items:
|
|
40
|
+
return Menu(label=_("Incidents"), items=items)
|
|
41
|
+
return MenuItem(
|
|
42
|
+
label=_("Incidents"),
|
|
43
|
+
endpoint="wbcompliance:riskincident-list",
|
|
44
|
+
permission=ItemPermission(
|
|
45
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbcompliance.view_riskincident"]
|
|
46
|
+
),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
RISK_INCIDENT_MENUITEM = _get_incident_menu()
|
|
51
|
+
|
|
52
|
+
RISKINCIDENTTABLE_MENUITEM = MenuItem(
|
|
53
|
+
label=_("Incident Table"),
|
|
54
|
+
endpoint="wbcompliance:riskmanagementincidenttable-list",
|
|
55
|
+
permission=ItemPermission(permissions=["wbcompliance.administrate_riskrule"]),
|
|
56
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from .checks import RiskCheckModelViewSet, RiskCheckRepresentationViewSet
|
|
2
|
+
from .incidents import (
|
|
3
|
+
CheckedObjectIncidentRelationshipModelViewSet,
|
|
4
|
+
CheckedObjectIncidentRelationshipRepresentationViewSet,
|
|
5
|
+
CheckedObjectIncidentRelationshipRiskRuleModelViewSet,
|
|
6
|
+
RiskIncidentModelViewSet,
|
|
7
|
+
RiskIncidentRepresentationViewSet,
|
|
8
|
+
RiskIncidentRiskRuleModelViewSet,
|
|
9
|
+
RiskIncidentTypeRepresentationViewSet,
|
|
10
|
+
)
|
|
11
|
+
from .rules import (
|
|
12
|
+
RuleGroupRepresentationViewSet,
|
|
13
|
+
RiskRuleModelViewSet,
|
|
14
|
+
RiskRuleRepresentationViewSet,
|
|
15
|
+
RuleBackendRepresentationViewSet,
|
|
16
|
+
RuleCheckedObjectRelationshipRepresentationViewSet,
|
|
17
|
+
RuleCheckedObjectRelationshipRiskRuleModelViewSet,
|
|
18
|
+
RuleThresholdRepresentationViewSet,
|
|
19
|
+
RuleThresholdRiskRuleModelViewSet,
|
|
20
|
+
)
|
|
21
|
+
from .tables import RiskManagementIncidentTableView
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from django.contrib.auth import get_user_model
|
|
2
|
+
from django.db import models
|
|
3
|
+
from django.db.models import F
|
|
4
|
+
from wbcompliance.filters.risk_management.checks import RiskCheckFilterSet
|
|
5
|
+
from wbcompliance.models.risk_management import RiskCheck
|
|
6
|
+
from wbcompliance.serializers import (
|
|
7
|
+
RiskCheckModelSerializer,
|
|
8
|
+
RiskCheckRepresentationSerializer,
|
|
9
|
+
)
|
|
10
|
+
from wbcompliance.viewsets.buttons import RiskCheckButtonConfig
|
|
11
|
+
from wbcompliance.viewsets.display import RiskCheckDisplayConfig
|
|
12
|
+
from wbcompliance.viewsets.endpoints import RiskCheckEndpointConfig
|
|
13
|
+
from wbcore import viewsets
|
|
14
|
+
|
|
15
|
+
User = get_user_model()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class RiskCheckRepresentationViewSet(viewsets.RepresentationViewSet):
|
|
19
|
+
queryset = RiskCheck.objects.all()
|
|
20
|
+
serializer_class = RiskCheckRepresentationSerializer
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class RiskCheckModelViewSet(viewsets.ModelViewSet):
|
|
24
|
+
button_config_class = RiskCheckButtonConfig
|
|
25
|
+
display_config_class = RiskCheckDisplayConfig
|
|
26
|
+
endpoint_config_class = RiskCheckEndpointConfig
|
|
27
|
+
queryset = RiskCheck.objects.all()
|
|
28
|
+
serializer_class = RiskCheckModelSerializer
|
|
29
|
+
|
|
30
|
+
filterset_class = RiskCheckFilterSet
|
|
31
|
+
|
|
32
|
+
def get_queryset(self):
|
|
33
|
+
return (
|
|
34
|
+
RiskCheck.objects.annotate(
|
|
35
|
+
rule_repr=F("rule_checked_object_relationship__rule__name"),
|
|
36
|
+
status_icon=models.Case(
|
|
37
|
+
*[
|
|
38
|
+
models.When(status=value, then=models.Value(RiskCheck.CheckStatus[value].icon))
|
|
39
|
+
for value in RiskCheck.CheckStatus.values
|
|
40
|
+
],
|
|
41
|
+
default=models.Value("none")
|
|
42
|
+
),
|
|
43
|
+
)
|
|
44
|
+
.select_related(
|
|
45
|
+
"rule_checked_object_relationship",
|
|
46
|
+
"trigger_content_type",
|
|
47
|
+
)
|
|
48
|
+
.prefetch_related("incidents")
|
|
49
|
+
)
|