Add Risks by Status to Dashboard

This commit is contained in:
Kevin Heyer 2025-09-19 11:05:21 +02:00
parent ac3c6db486
commit 301a0cb83d
6 changed files with 216 additions and 170 deletions

Binary file not shown.

View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: wira-risk-management\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-16 14:08+0200\n"
"POT-Creation-Date: 2025-09-19 11:02+0200\n"
"PO-Revision-Date: 2025-09-09 13:45+0200\n"
"Last-Translator: Kevin Heyer <kevin@example.com>\n"
"Language-Team: German\n"
@ -49,7 +49,7 @@ msgid "Users"
msgstr "Benutzer"
#: risks/admin.py:166 risks/models.py:370 templates/risks/item_control.html:96
#: templates/risks/item_incident.html:88 templates/risks/item_risk.html:245
#: templates/risks/item_incident.html:88 templates/risks/item_risk.html:260
msgid "User"
msgstr "Benutzer"
@ -114,10 +114,11 @@ msgid "Risk Management"
msgstr "Risikomanagement"
#: risks/forms.py:13 risks/models.py:87 templates/risks/dashboard.html:83
#: templates/risks/dashboard.html:108 templates/risks/item_control.html:35
#: templates/risks/item_incident.html:36 templates/risks/item_risk.html:51
#: templates/risks/item_risk.html:189 templates/risks/item_risk.html:219
#: templates/risks/list_controls.html:48 templates/risks/list_controls.html:100
#: templates/risks/dashboard.html:108 templates/risks/dashboard.html:133
#: templates/risks/item_control.html:35 templates/risks/item_incident.html:36
#: templates/risks/item_risk.html:54 templates/risks/item_risk.html:204
#: templates/risks/item_risk.html:234 templates/risks/list_controls.html:48
#: templates/risks/list_controls.html:100
#: templates/risks/list_incidents.html:48
#: templates/risks/list_incidents.html:99 templates/risks/list_risks.html:128
msgid "Status"
@ -197,7 +198,7 @@ msgid "Availability"
msgstr "Verfügbarkeit"
#: risks/models.py:78 risks/models.py:201 risks/models.py:270
#: templates/risks/item_risk.html:188
#: templates/risks/item_risk.html:203
msgid "Title"
msgstr "Titel"
@ -207,34 +208,34 @@ msgid "Description"
msgstr "Beschreibung"
#: risks/models.py:80 templates/risks/item_control.html:68
#: templates/risks/item_incident.html:60 templates/risks/item_risk.html:40
#: templates/risks/item_incident.html:60 templates/risks/item_risk.html:42
#: templates/risks/list_risks.html:119
msgid "Asset"
msgstr "Asset"
#: risks/models.py:81 templates/risks/item_control.html:69
#: templates/risks/item_incident.html:61 templates/risks/item_risk.html:41
#: templates/risks/item_incident.html:61 templates/risks/item_risk.html:43
#: templates/risks/list_risks.html:125
msgid "Process"
msgstr "Prozess"
#: risks/models.py:82 templates/risks/item_control.html:67
#: templates/risks/item_incident.html:59 templates/risks/item_risk.html:42
#: templates/risks/item_incident.html:59 templates/risks/item_risk.html:44
#: templates/risks/list_risks.html:122
msgid "Category"
msgstr "Kategorie"
#: risks/models.py:83 templates/risks/item_control.html:46
#: templates/risks/item_incident.html:39 templates/risks/item_risk.html:55
#: templates/risks/item_incident.html:39 templates/risks/item_risk.html:70
msgid "Created at"
msgstr "Erstellt am"
#: risks/models.py:84 templates/risks/item_control.html:47
#: templates/risks/item_incident.html:40 templates/risks/item_risk.html:56
#: templates/risks/item_incident.html:40 templates/risks/item_risk.html:71
msgid "Updated at"
msgstr "Aktualisiert am"
#: risks/models.py:85 templates/risks/item_risk.html:63
#: risks/models.py:85 templates/risks/item_risk.html:78
msgid "Effects"
msgstr "Auswirkungen"
@ -280,7 +281,7 @@ msgid "Auditlogs"
msgstr "Audit-Logs"
#: risks/models.py:261 templates/risks/item_incident.html:33
#: templates/risks/item_risk.html:218 templates/risks/list_incidents.html:97
#: templates/risks/item_risk.html:233 templates/risks/list_incidents.html:97
msgid "Incident"
msgstr "Vorfall"
@ -374,7 +375,7 @@ msgstr "Benutzer gelöscht"
msgid "Notification"
msgstr "Nachricht"
#: risks/models.py:322 templates/base.html:96
#: risks/models.py:322 templates/base.html:98
#: templates/risks/notifications.html:4
msgid "Notifications"
msgstr "Nachrichten"
@ -409,7 +410,8 @@ msgstr "Sende an alle App-Mitarbeiter"
#: risks/models.py:438
msgid "Extra recipients (emails, comma or newline separated)"
msgstr "Zusätzliche Empfänger (E-Mails, durch Komma oder Zeilenumbruch getrennt)"
msgstr ""
"Zusätzliche Empfänger (E-Mails, durch Komma oder Zeilenumbruch getrennt)"
#: risks/signals.py:71
#, python-brace-format
@ -457,7 +459,8 @@ msgstr "Maßnahme gelöscht: {t}"
#: risks/signals.py:218
#, python-brace-format
msgid "Residual review required for risk '{t}' due to control change"
msgstr "Restrisikoprüfung nötig für das Risiko: '{t}', da Maßnahmen geändert wurden"
msgstr ""
"Restrisikoprüfung nötig für das Risiko: '{t}', da Maßnahmen geändert wurden"
#: risks/signals.py:245
#, python-brace-format
@ -505,29 +508,23 @@ msgstr "Das Risiko wurde geprüft und als geschlossen markiert"
#: risks/views.py:220
msgid "Not all controls are completed. Risk cannot be closed yet."
msgstr "Nicht alle Maßnhamen sind abgeschlossen, das Risiko kann nicht geschlossen werden."
msgstr ""
"Nicht alle Maßnhamen sind abgeschlossen, das Risiko kann nicht geschlossen "
"werden."
#: risks/views.py:378
msgid "Notification marked as read."
msgstr "Nachricht als gelesen markiert"
#: risks/views.py:388
msgid "All notifications marked as read."
msgstr "Alle Benachrichtigungen wurden als gelesen Markiert"
#: risks/views.py:407
#: risks/views.py:409
msgid "Risk status updated."
msgstr "Risikostatus Aktualisiert"
#: risks/views.py:423
#: risks/views.py:425
msgid "Control status updated."
msgstr "Maßnahmenstatus Aktualisiert"
#: risks/views.py:439
#: risks/views.py:441
msgid "Incident status updated."
msgstr "Vorfallstatus Aktualisiert"
#: risks/views.py:456
#: risks/views.py:458
msgid "Residual review flag updated."
msgstr "Restrisiko geprüft"
@ -549,27 +546,27 @@ msgstr "Risikomatrix"
msgid "Risk analysis"
msgstr "Risikoanalyse"
#: templates/base.html:91
#: templates/base.html:93
msgid "AdminCP"
msgstr "Adminbereich"
#: templates/base.html:104
#: templates/base.html:106
msgid "Derk Mode"
msgstr "Dark Mode"
#: templates/base.html:110
#: templates/base.html:112
msgid "Logout"
msgstr "Logout"
#: templates/base.html:125
#: templates/base.html:127
msgid "Login"
msgstr "Login"
#: templates/base.html:160 templates/base.html:167
#: templates/base.html:162 templates/base.html:169
msgid "Light Mode"
msgstr "Light Mode"
#: templates/base.html:170
#: templates/base.html:172
msgid "Dark Mode"
msgstr "Dark Mode"
@ -583,7 +580,7 @@ msgstr "Risiken"
#: templates/risks/dashboard.html:36
msgid "Residual Risks Needing Review"
msgstr "Restrisiken ohne Verifizierung"
msgstr "Fehlende Restrisiken"
#: templates/risks/dashboard.html:44
msgid "Unread Notifications"
@ -594,23 +591,28 @@ msgid "Risks by CIA"
msgstr "CIA Risiken"
#: templates/risks/dashboard.html:78
msgid "Controls by Status"
msgstr "Maßnahmen nach Status"
msgid "Risks by Status"
msgstr "Risiken nach Status"
#: templates/risks/dashboard.html:84 templates/risks/dashboard.html:109
#: templates/risks/dashboard.html:134
msgid "Count"
msgstr "Anzahl"
#: templates/risks/dashboard.html:94 templates/risks/dashboard.html:119
#: templates/risks/list_risks.html:185
#: templates/risks/dashboard.html:144 templates/risks/list_risks.html:185
msgid "No data"
msgstr "Keine Daten"
#: templates/risks/dashboard.html:103
msgid "Controls by Status"
msgstr "Maßnahmen nach Status"
#: templates/risks/dashboard.html:128
msgid "Incidents by Status"
msgstr "Vorfälle nach Status"
#: templates/risks/dashboard.html:127
#: templates/risks/dashboard.html:152
msgid "Risk Trend (per Month)"
msgstr "Risikotrend (pro Monat)"
@ -637,17 +639,17 @@ msgstr "Maßnahme bearbeiten"
msgid "Delete Control"
msgstr "Maßnahme löschen"
#: templates/risks/item_control.html:34 templates/risks/item_risk.html:191
#: templates/risks/item_control.html:34 templates/risks/item_risk.html:206
#: templates/risks/list_controls.html:63 templates/risks/list_controls.html:99
msgid "Responsible"
msgstr "Verantwortliche/r"
#: templates/risks/item_control.html:37 templates/risks/item_risk.html:192
#: templates/risks/item_control.html:37 templates/risks/item_risk.html:207
#: templates/risks/list_controls.html:102
msgid "Link"
msgstr "Link"
#: templates/risks/item_control.html:48 templates/risks/item_risk.html:190
#: templates/risks/item_control.html:48 templates/risks/item_risk.html:205
#: templates/risks/list_controls.html:101
msgid "Deadline"
msgstr "Frist"
@ -661,17 +663,17 @@ msgid "No linked risks."
msgstr "Keine zugehörigen Risiken"
#: templates/risks/item_control.html:95 templates/risks/item_incident.html:87
#: templates/risks/item_risk.html:244
#: templates/risks/item_risk.html:259
msgid "Time"
msgstr "Zeitpunkt"
#: templates/risks/item_control.html:97 templates/risks/item_incident.html:89
#: templates/risks/item_risk.html:246
#: templates/risks/item_risk.html:261
msgid "Action"
msgstr "Aktion"
#: templates/risks/item_control.html:108 templates/risks/item_incident.html:100
#: templates/risks/item_risk.html:257
#: templates/risks/item_risk.html:272
msgid "No history found."
msgstr "Keine Historie vorhanden"
@ -683,7 +685,7 @@ msgstr "Vorfall bearbeiten"
msgid "Delete Incident"
msgstr "Vorfall löschen"
#: templates/risks/item_incident.html:35 templates/risks/item_risk.html:220
#: templates/risks/item_incident.html:35 templates/risks/item_risk.html:235
#: templates/risks/list_incidents.html:100
msgid "Reported on"
msgstr "Gemeldet am"
@ -700,67 +702,67 @@ msgstr "Risiko bearbeiten"
msgid "Delete Risk"
msgstr "Risiko löschen"
#: templates/risks/item_risk.html:26 templates/risks/item_risk.html:27
#: templates/risks/item_risk.html:27 templates/risks/item_risk.html:28
msgid "Mark Risk as reviewed"
msgstr "Risiko als geprüft markieren"
#: templates/risks/item_risk.html:44
#: templates/risks/item_risk.html:46
msgid "Protection goals"
msgstr "Schutzziele"
#: templates/risks/item_risk.html:48
#: templates/risks/item_risk.html:50
msgid "Not yet assigned"
msgstr "Keine Zugewiesenen Ziele"
#: templates/risks/item_risk.html:54
#: templates/risks/item_risk.html:69
msgid "Risk owner"
msgstr "Risikoeigner"
#: templates/risks/item_risk.html:57
#: templates/risks/item_risk.html:72
msgid "Resubmission"
msgstr "Wiedervorlagedatum"
#: templates/risks/item_risk.html:70
#: templates/risks/item_risk.html:85
msgid "Risk assessment"
msgstr "Risikomanagement"
#: templates/risks/item_risk.html:79
#: templates/risks/item_risk.html:94
msgid "Gross (before measures)"
msgstr "Brutto (vor Maßnahmen)"
#: templates/risks/item_risk.html:85 templates/risks/item_risk.html:131
#: templates/risks/item_risk.html:100 templates/risks/item_risk.html:146
#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79
#: templates/risks/risk_matrix.html:121
msgid "Likelihood"
msgstr "Eintritt"
#: templates/risks/item_risk.html:94 templates/risks/item_risk.html:140
#: templates/risks/item_risk.html:109 templates/risks/item_risk.html:155
#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79
#: templates/risks/risk_matrix.html:121
msgid "Impact"
msgstr "Schaden"
#: templates/risks/item_risk.html:103 templates/risks/item_risk.html:149
#: templates/risks/item_risk.html:118 templates/risks/item_risk.html:164
msgid "Level"
msgstr "Stufe"
#: templates/risks/item_risk.html:112 templates/risks/item_risk.html:158
#: templates/risks/item_risk.html:127 templates/risks/item_risk.html:173
msgid "Score"
msgstr "Score"
#: templates/risks/item_risk.html:125
#: templates/risks/item_risk.html:140
msgid "Net (after measures)"
msgstr "Netto (nach Maßnahmen)"
#: templates/risks/item_risk.html:169
#: templates/risks/item_risk.html:184
msgid "Add net Risk"
msgstr "Restrisiko hinzufügen"
#: templates/risks/item_risk.html:205
#: templates/risks/item_risk.html:220
msgid "No measures recorded."
msgstr "Keine Maßnahmen gefunden."
#: templates/risks/item_risk.html:231
#: templates/risks/item_risk.html:246
msgid "No incidents recorded."
msgstr "Keine Vorfälle gefunden."
@ -862,6 +864,12 @@ msgstr "Brutto"
msgid "Net"
msgstr "Netto"
#~ msgid "Notification marked as read."
#~ msgstr "Nachricht als gelesen markiert"
#~ msgid "All notifications marked as read."
#~ msgstr "Alle Benachrichtigungen wurden als gelesen Markiert"
#~ msgid "No net risk recorded yet."
#~ msgstr "Kein Restrisiko vergeben"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-09-16 14:08+0200\n"
"POT-Creation-Date: 2025-09-19 11:02+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -55,7 +55,7 @@ msgid "Users"
msgstr ""
#: risks/admin.py:166 risks/models.py:370 templates/risks/item_control.html:96
#: templates/risks/item_incident.html:88 templates/risks/item_risk.html:245
#: templates/risks/item_incident.html:88 templates/risks/item_risk.html:260
msgid "User"
msgstr ""
@ -120,10 +120,11 @@ msgid "Risk Management"
msgstr ""
#: risks/forms.py:13 risks/models.py:87 templates/risks/dashboard.html:83
#: templates/risks/dashboard.html:108 templates/risks/item_control.html:35
#: templates/risks/item_incident.html:36 templates/risks/item_risk.html:51
#: templates/risks/item_risk.html:189 templates/risks/item_risk.html:219
#: templates/risks/list_controls.html:48 templates/risks/list_controls.html:100
#: templates/risks/dashboard.html:108 templates/risks/dashboard.html:133
#: templates/risks/item_control.html:35 templates/risks/item_incident.html:36
#: templates/risks/item_risk.html:54 templates/risks/item_risk.html:204
#: templates/risks/item_risk.html:234 templates/risks/list_controls.html:48
#: templates/risks/list_controls.html:100
#: templates/risks/list_incidents.html:48
#: templates/risks/list_incidents.html:99 templates/risks/list_risks.html:128
msgid "Status"
@ -203,7 +204,7 @@ msgid "Availability"
msgstr ""
#: risks/models.py:78 risks/models.py:201 risks/models.py:270
#: templates/risks/item_risk.html:188
#: templates/risks/item_risk.html:203
msgid "Title"
msgstr ""
@ -213,34 +214,34 @@ msgid "Description"
msgstr ""
#: risks/models.py:80 templates/risks/item_control.html:68
#: templates/risks/item_incident.html:60 templates/risks/item_risk.html:40
#: templates/risks/item_incident.html:60 templates/risks/item_risk.html:42
#: templates/risks/list_risks.html:119
msgid "Asset"
msgstr ""
#: risks/models.py:81 templates/risks/item_control.html:69
#: templates/risks/item_incident.html:61 templates/risks/item_risk.html:41
#: templates/risks/item_incident.html:61 templates/risks/item_risk.html:43
#: templates/risks/list_risks.html:125
msgid "Process"
msgstr ""
#: risks/models.py:82 templates/risks/item_control.html:67
#: templates/risks/item_incident.html:59 templates/risks/item_risk.html:42
#: templates/risks/item_incident.html:59 templates/risks/item_risk.html:44
#: templates/risks/list_risks.html:122
msgid "Category"
msgstr ""
#: risks/models.py:83 templates/risks/item_control.html:46
#: templates/risks/item_incident.html:39 templates/risks/item_risk.html:55
#: templates/risks/item_incident.html:39 templates/risks/item_risk.html:70
msgid "Created at"
msgstr ""
#: risks/models.py:84 templates/risks/item_control.html:47
#: templates/risks/item_incident.html:40 templates/risks/item_risk.html:56
#: templates/risks/item_incident.html:40 templates/risks/item_risk.html:71
msgid "Updated at"
msgstr ""
#: risks/models.py:85 templates/risks/item_risk.html:63
#: risks/models.py:85 templates/risks/item_risk.html:78
msgid "Effects"
msgstr ""
@ -286,7 +287,7 @@ msgid "Auditlogs"
msgstr ""
#: risks/models.py:261 templates/risks/item_incident.html:33
#: templates/risks/item_risk.html:218 templates/risks/list_incidents.html:97
#: templates/risks/item_risk.html:233 templates/risks/list_incidents.html:97
msgid "Incident"
msgstr ""
@ -380,7 +381,7 @@ msgstr ""
msgid "Notification"
msgstr ""
#: risks/models.py:322 templates/base.html:96
#: risks/models.py:322 templates/base.html:98
#: templates/risks/notifications.html:4
msgid "Notifications"
msgstr ""
@ -513,27 +514,19 @@ msgstr ""
msgid "Not all controls are completed. Risk cannot be closed yet."
msgstr ""
#: risks/views.py:378
msgid "Notification marked as read."
msgstr ""
#: risks/views.py:388
msgid "All notifications marked as read."
msgstr ""
#: risks/views.py:407
#: risks/views.py:409
msgid "Risk status updated."
msgstr ""
#: risks/views.py:423
#: risks/views.py:425
msgid "Control status updated."
msgstr ""
#: risks/views.py:439
#: risks/views.py:441
msgid "Incident status updated."
msgstr ""
#: risks/views.py:456
#: risks/views.py:458
msgid "Residual review flag updated."
msgstr ""
@ -555,27 +548,27 @@ msgstr ""
msgid "Risk analysis"
msgstr ""
#: templates/base.html:91
#: templates/base.html:93
msgid "AdminCP"
msgstr ""
#: templates/base.html:104
#: templates/base.html:106
msgid "Derk Mode"
msgstr ""
#: templates/base.html:110
#: templates/base.html:112
msgid "Logout"
msgstr ""
#: templates/base.html:125
#: templates/base.html:127
msgid "Login"
msgstr ""
#: templates/base.html:160 templates/base.html:167
#: templates/base.html:162 templates/base.html:169
msgid "Light Mode"
msgstr ""
#: templates/base.html:170
#: templates/base.html:172
msgid "Dark Mode"
msgstr ""
@ -600,23 +593,28 @@ msgid "Risks by CIA"
msgstr ""
#: templates/risks/dashboard.html:78
msgid "Controls by Status"
msgid "Risks by Status"
msgstr ""
#: templates/risks/dashboard.html:84 templates/risks/dashboard.html:109
#: templates/risks/dashboard.html:134
msgid "Count"
msgstr ""
#: templates/risks/dashboard.html:94 templates/risks/dashboard.html:119
#: templates/risks/list_risks.html:185
#: templates/risks/dashboard.html:144 templates/risks/list_risks.html:185
msgid "No data"
msgstr ""
#: templates/risks/dashboard.html:103
msgid "Controls by Status"
msgstr ""
#: templates/risks/dashboard.html:128
msgid "Incidents by Status"
msgstr ""
#: templates/risks/dashboard.html:127
#: templates/risks/dashboard.html:152
msgid "Risk Trend (per Month)"
msgstr ""
@ -643,17 +641,17 @@ msgstr ""
msgid "Delete Control"
msgstr ""
#: templates/risks/item_control.html:34 templates/risks/item_risk.html:191
#: templates/risks/item_control.html:34 templates/risks/item_risk.html:206
#: templates/risks/list_controls.html:63 templates/risks/list_controls.html:99
msgid "Responsible"
msgstr ""
#: templates/risks/item_control.html:37 templates/risks/item_risk.html:192
#: templates/risks/item_control.html:37 templates/risks/item_risk.html:207
#: templates/risks/list_controls.html:102
msgid "Link"
msgstr ""
#: templates/risks/item_control.html:48 templates/risks/item_risk.html:190
#: templates/risks/item_control.html:48 templates/risks/item_risk.html:205
#: templates/risks/list_controls.html:101
msgid "Deadline"
msgstr ""
@ -667,17 +665,17 @@ msgid "No linked risks."
msgstr ""
#: templates/risks/item_control.html:95 templates/risks/item_incident.html:87
#: templates/risks/item_risk.html:244
#: templates/risks/item_risk.html:259
msgid "Time"
msgstr ""
#: templates/risks/item_control.html:97 templates/risks/item_incident.html:89
#: templates/risks/item_risk.html:246
#: templates/risks/item_risk.html:261
msgid "Action"
msgstr ""
#: templates/risks/item_control.html:108 templates/risks/item_incident.html:100
#: templates/risks/item_risk.html:257
#: templates/risks/item_risk.html:272
msgid "No history found."
msgstr ""
@ -689,7 +687,7 @@ msgstr ""
msgid "Delete Incident"
msgstr ""
#: templates/risks/item_incident.html:35 templates/risks/item_risk.html:220
#: templates/risks/item_incident.html:35 templates/risks/item_risk.html:235
#: templates/risks/list_incidents.html:100
msgid "Reported on"
msgstr ""
@ -706,67 +704,67 @@ msgstr ""
msgid "Delete Risk"
msgstr ""
#: templates/risks/item_risk.html:26 templates/risks/item_risk.html:27
#: templates/risks/item_risk.html:27 templates/risks/item_risk.html:28
msgid "Mark Risk as reviewed"
msgstr ""
#: templates/risks/item_risk.html:44
#: templates/risks/item_risk.html:46
msgid "Protection goals"
msgstr ""
#: templates/risks/item_risk.html:48
#: templates/risks/item_risk.html:50
msgid "Not yet assigned"
msgstr ""
#: templates/risks/item_risk.html:54
#: templates/risks/item_risk.html:69
msgid "Risk owner"
msgstr ""
#: templates/risks/item_risk.html:57
#: templates/risks/item_risk.html:72
msgid "Resubmission"
msgstr ""
#: templates/risks/item_risk.html:70
#: templates/risks/item_risk.html:85
msgid "Risk assessment"
msgstr ""
#: templates/risks/item_risk.html:79
#: templates/risks/item_risk.html:94
msgid "Gross (before measures)"
msgstr ""
#: templates/risks/item_risk.html:85 templates/risks/item_risk.html:131
#: templates/risks/item_risk.html:100 templates/risks/item_risk.html:146
#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79
#: templates/risks/risk_matrix.html:121
msgid "Likelihood"
msgstr ""
#: templates/risks/item_risk.html:94 templates/risks/item_risk.html:140
#: templates/risks/item_risk.html:109 templates/risks/item_risk.html:155
#: templates/risks/risk_matrix.html:21 templates/risks/risk_matrix.html:79
#: templates/risks/risk_matrix.html:121
msgid "Impact"
msgstr ""
#: templates/risks/item_risk.html:103 templates/risks/item_risk.html:149
#: templates/risks/item_risk.html:118 templates/risks/item_risk.html:164
msgid "Level"
msgstr ""
#: templates/risks/item_risk.html:112 templates/risks/item_risk.html:158
#: templates/risks/item_risk.html:127 templates/risks/item_risk.html:173
msgid "Score"
msgstr ""
#: templates/risks/item_risk.html:125
#: templates/risks/item_risk.html:140
msgid "Net (after measures)"
msgstr ""
#: templates/risks/item_risk.html:169
#: templates/risks/item_risk.html:184
msgid "Add net Risk"
msgstr ""
#: templates/risks/item_risk.html:205
#: templates/risks/item_risk.html:220
msgid "No measures recorded."
msgstr ""
#: templates/risks/item_risk.html:231
#: templates/risks/item_risk.html:246
msgid "No incidents recorded."
msgstr ""

View file

@ -4,6 +4,7 @@ from ..models import Control, Incident, Risk
register = template.Library()
_RISK_STATUS_MAP = dict(Risk.STATUS_CHOICES)
_CONTROL_STATUS_MAP = dict(Control.STATUS_CHOICES)
_INCIDENT_STATUS_MAP = dict(Incident.STATUS_CHOICES)
_LIKELIHOOD_LABELS = dict(Risk.LIKELIHOOD_CHOICES)
@ -75,6 +76,9 @@ def impact_id_label(val):
short = _short(str(label)) if label else ""
return format_html("{} ({})", i, short) if label else format_html("{}", i)
@register.filter
def risk_status_label(code):
return _RISK_STATUS_MAP.get(code, code)
@register.filter
def control_status_label(code):

View file

@ -314,7 +314,8 @@ def dashboard(request):
# Residual Risks
residual_review_required = ResidualRisk.objects.filter(review_required=True).count()
# Controls & Incidents
# Risks, Controls & Incidents
risks_by_status = Risk.objects.values("status").annotate(count=Count("id"))
controls_by_status = Control.objects.values("status").annotate(count=Count("id"))
incidents_status = Incident.objects.values("status").annotate(count=Count("id"))
@ -344,6 +345,7 @@ def dashboard(request):
"risks_by_level": risks_by_level,
"risks_by_cia": dict(cia_counter),
"residual_review_required": residual_review_required,
"risks_by_status": risks_by_status,
"controls_by_status": controls_by_status,
"incidents_status": incidents_status,
"notifications_unread": notifications_unread,

View file

@ -73,55 +73,89 @@
</div>
</div><!-- Risks by CIA End -->
<!-- Controls by Status -->
<div class="box">
<h2 class="title is-5">{% trans "Controls by Status" %}</h2>
<div class="table-container">
<table class="table is-fullwidth is-narrow is-hoverable">
<thead>
<tr>
<th>{% trans "Status" %}</th>
<th>{% trans "Count" %}</th>
</tr>
</thead>
<tbody>
{% for row in controls_by_status %}
<tr>
<td>{{ row.status|control_status_label }}</td>
<td>{{ row.count }}</td>
</tr>
{% empty %}
<tr><td colspan="2" class="has-text-grey has-text-centered">{% trans "No data" %}</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</div><!-- Controls by Status End -->
<div class="columns">
<!-- Risks by Status -->
<div class="column">
<div class="box">
<h2 class="title is-5">{% trans "Risks by Status" %}</h2>
<div class="table-container">
<table class="table is-fullwidth is-narrow is-hoverable">
<thead>
<tr>
<th>{% trans "Status" %}</th>
<th>{% trans "Count" %}</th>
</tr>
</thead>
<tbody>
{% for row in risks_by_status %}
<tr>
<td>{{ row.status|risk_status_label }}</td>
<td>{{ row.count }}</td>
</tr>
{% empty %}
<tr><td colspan="2" class="has-text-grey has-text-centered">{% trans "No data" %}</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div><!-- Risks End -->
<!-- Incidents by Status -->
<div class="box">
<h2 class="title is-5">{% trans "Incidents by Status" %}</h2>
<div class="table-container">
<table class="table is-fullwidth is-narrow is-hoverable">
<thead>
<tr>
<th>{% trans "Status" %}</th>
<th>{% trans "Count" %}</th>
</tr>
</thead>
<tbody>
{% for row in incidents_status %}
<tr>
<td>{{ row.status|incident_status_label }}</td>
<td>{{ row.count }}</td>
</tr>
{% empty %}
<tr><td colspan="2" class="has-text-grey has-text-centered">{% trans "No data" %}</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</div><!-- Incidents by Status End -->
<!-- Controls by Status -->
<div class="column">
<div class="box">
<h2 class="title is-5">{% trans "Controls by Status" %}</h2>
<div class="table-container">
<table class="table is-fullwidth is-narrow is-hoverable">
<thead>
<tr>
<th>{% trans "Status" %}</th>
<th>{% trans "Count" %}</th>
</tr>
</thead>
<tbody>
{% for row in controls_by_status %}
<tr>
<td>{{ row.status|control_status_label }}</td>
<td>{{ row.count }}</td>
</tr>
{% empty %}
<tr><td colspan="2" class="has-text-grey has-text-centered">{% trans "No data" %}</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div><!-- Controls End -->
<!-- Incidents by Status -->
<div class="column">
<div class="box">
<h2 class="title is-5">{% trans "Incidents by Status" %}</h2>
<div class="table-container">
<table class="table is-fullwidth is-narrow is-hoverable">
<thead>
<tr>
<th>{% trans "Status" %}</th>
<th>{% trans "Count" %}</th>
</tr>
</thead>
<tbody>
{% for row in incidents_status %}
<tr>
<td>{{ row.status|incident_status_label }}</td>
<td>{{ row.count }}</td>
</tr>
{% empty %}
<tr><td colspan="2" class="has-text-grey has-text-centered">{% trans "No data" %}</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div><!-- Incidents End -->
</div><!-- columns End -->
<div class="box">
<h2 class="title is-5">{% trans "Risk Trend (per Month)" %}</h2>