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

View file

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

View file

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

View file

@ -314,7 +314,8 @@ def dashboard(request):
# Residual Risks # Residual Risks
residual_review_required = ResidualRisk.objects.filter(review_required=True).count() 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")) controls_by_status = Control.objects.values("status").annotate(count=Count("id"))
incidents_status = Incident.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_level": risks_by_level,
"risks_by_cia": dict(cia_counter), "risks_by_cia": dict(cia_counter),
"residual_review_required": residual_review_required, "residual_review_required": residual_review_required,
"risks_by_status": risks_by_status,
"controls_by_status": controls_by_status, "controls_by_status": controls_by_status,
"incidents_status": incidents_status, "incidents_status": incidents_status,
"notifications_unread": notifications_unread, "notifications_unread": notifications_unread,

View file

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