From 59ac250acae7e9abc623195d10850efcc0face6c Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Tue, 13 Aug 2024 04:19:30 +0200 Subject: [PATCH 01/31] Add the qualification field for RiskScenario --- frontend/messages/ar.json | 1 + frontend/messages/de.json | 1 + frontend/messages/en.json | 1 + frontend/messages/es.json | 1 + frontend/messages/fr.json | 1 + frontend/messages/it.json | 1 + frontend/messages/nl.json | 1 + frontend/messages/pl.json | 1 + frontend/messages/pt.json | 1 + frontend/src/lib/utils/schemas.ts | 1 + .../[id=uuid]/edit/+page.server.ts | 24 ++++++++++++------- .../[id=uuid]/edit/+page.svelte | 8 +++++++ 12 files changed, 34 insertions(+), 8 deletions(-) diff --git a/frontend/messages/ar.json b/frontend/messages/ar.json index 3bcee8945..5e4f1f606 100644 --- a/frontend/messages/ar.json +++ b/frontend/messages/ar.json @@ -97,6 +97,7 @@ "urn": "URN", "id": "معرف", "treatmentStatus": "حالة المعالجة", + "qualificationStatus": "حالة التأهيل", "currentLevel": "المستوى الحالي", "residualLevel": "المستوى المتبقي", "riskMatrix": "مصفوفة المخاطر", diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 74f5e8bd7..290cc50b6 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Behandlungsstatus", + "qualificationStatus": "Status der Qualifizierung", "currentLevel": "Aktuelles Niveau", "residualLevel": "Restrisiko-Niveau", "riskMatrix": "Risikomatrix", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index e7434855e..5fc4f97be 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Treatment status", + "qualificationStatus": "Qualification status", "currentLevel": "Current level", "residualLevel": "Residual level", "riskMatrix": "Risk matrix", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index a5952af27..edc0f845a 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Estado del tratamiento", + "qualificationStatus": "Estatus de la cualificación", "currentLevel": "Nivel actual", "residualLevel": "Nivel residual", "riskMatrix": "Matriz de riesgos", diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index 4b6fccd56..e692f006f 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Statut de traitement", + "qualificationStatus": "Statut de qualfication", "currentLevel": "Niveau courant", "residualLevel": "Niveau résiduel", "riskMatrix": "Matrice de risque", diff --git a/frontend/messages/it.json b/frontend/messages/it.json index 400bc8efb..a9b2c911b 100644 --- a/frontend/messages/it.json +++ b/frontend/messages/it.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Stato del trattamento", + "qualificationStatus": "Stato del qualificazione", "currentLevel": "Livello attuale", "residualLevel": "Livello residuo", "riskMatrix": "Matrice di rischio", diff --git a/frontend/messages/nl.json b/frontend/messages/nl.json index d0b22986a..9787c9cef 100644 --- a/frontend/messages/nl.json +++ b/frontend/messages/nl.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Behandelstatus", + "qualificationStatus": "Kwalificatiestatus", "currentLevel": "Huidig niveau", "residualLevel": "Restniveau", "riskMatrix": "Risicomatrix", diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index f0144a802..7ceaf3d74 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Status leczenia", + "qualificationStatus": "Status kwalifikacji", "currentLevel": "Obecny poziom", "residualLevel": "Poziom resztkowy", "riskMatrix": "Macierz ryzyka", diff --git a/frontend/messages/pt.json b/frontend/messages/pt.json index 50d269c79..8cb022247 100644 --- a/frontend/messages/pt.json +++ b/frontend/messages/pt.json @@ -102,6 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Status de tratamento", + "qualificationStatus": "Estatuto de qualificação", "currentLevel": "Nível atual", "residualLevel": "Nível residual", "riskMatrix": "Matriz de risco", diff --git a/frontend/src/lib/utils/schemas.ts b/frontend/src/lib/utils/schemas.ts index 678ce3a8b..156abfab5 100644 --- a/frontend/src/lib/utils/schemas.ts +++ b/frontend/src/lib/utils/schemas.ts @@ -102,6 +102,7 @@ export const RiskScenarioSchema = baseNamedObject({ residual_proba: z.number().optional(), residual_impact: z.number().optional(), treatment: z.string().optional(), + qualification: z.string().optional().nullable(), strength_of_knowledge: z.number().default(-1).optional(), justification: z.string().optional().nullable(), risk_assessment: z.string(), diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts index 0624aad3b..382f4eb8c 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts @@ -110,14 +110,21 @@ export const load: PageServerLoad = async ({ params, fetch }) => { ); const treatmentChoicesEndpoint = `${BASE_API_URL}/${URLModel}/treatment/`; - const treatmentChoices = await fetch(treatmentChoicesEndpoint) - .then((res) => res.json()) - .then((data) => - Object.entries(data).map(([key, value]) => ({ - label: value, - value: key - })) - ); + const qualificationChoicesEndpoint = `${BASE_API_URL}/${URLModel}/qualification/`; + + const [treatmentChoices, qualificationChoices] = await Promise.all([ + treatmentChoicesEndpoint, + qualificationChoicesEndpoint + ].map( + (endpoint) => fetch(endpoint) + .then((res) => res.json()) + .then((data) => + Object.entries(data).map(([key, value]) => ({ + label: value, + value: key + })) + ) + )); const strengthOfKnowledgeChoicesEndpoint = `${BASE_API_URL}/${URLModel}/${params.id}/strength_of_knowledge/`; const strengthOfKnowledgeChoices: Record = await fetch( @@ -181,6 +188,7 @@ export const load: PageServerLoad = async ({ params, fetch }) => { probabilityChoices, impactChoices, treatmentChoices, + qualificationChoices, strengthOfKnowledgeChoices: strengthOfKnowledgeChoices, tables, measureModel, diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte index 3cff1e09f..8b7c7a9b9 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte @@ -172,6 +172,14 @@ label="Owner(s)" /> +
+ Date: Wed, 14 Aug 2024 10:59:29 +0200 Subject: [PATCH 02/31] Add the qualification field for RiskScenario (again ?) --- .../0021_riskscenario_qualification.py | 18 +++++++++++++ backend/core/models.py | 24 ++++++++++++++++++ backend/core/views.py | 6 +++++ .../[id=uuid]/edit/+page.server.ts | 25 +++++++++---------- 4 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 backend/core/migrations/0021_riskscenario_qualification.py diff --git a/backend/core/migrations/0021_riskscenario_qualification.py b/backend/core/migrations/0021_riskscenario_qualification.py new file mode 100644 index 000000000..789bb1d1b --- /dev/null +++ b/backend/core/migrations/0021_riskscenario_qualification.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.7 on 2024-08-13 01:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0020_fix_libraries_objects_meta'), + ] + + operations = [ + migrations.AddField( + model_name='riskscenario', + name='qualification', + field=models.CharField(choices=[('Financial', 'Financial'), ('Legal', 'Legal'), ('Reputation', 'Reputation'), ('Operational', 'Operational'), ('Confidentiality', 'Confidentiality'), ('Integrity', 'Integrity'), ('Availability', 'Availability')], max_length=20, null=True, verbose_name='Financial'), + ), + ] diff --git a/backend/core/models.py b/backend/core/models.py index 3cbac1622..9a4b409ba 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -1680,6 +1680,23 @@ class RiskScenario(NameDescriptionMixin): ("transfer", _("Transfer")), ] + QUALIFICATIONS = [ + ("Financial", _("Financial")), + ("Legal", _("Legal")), + ("Reputation", _("Reputation")), + ("Operational", _("Operational")), + ("Confidentiality", _("Confidentiality")), + ("Integrity", _("Integrity")), + ("Availability", _("Availability")) + ] + + class Status(models.TextChoices): + TODO = "to_do", _("To do") + IN_PROGRESS = "in_progress", _("In progress") + IN_REVIEW = "in_review", _("In review") + DONE = "done", _("Done") + + DEFAULT_SOK_OPTIONS = { -1: { "name": _("--"), @@ -1787,6 +1804,13 @@ class RiskScenario(NameDescriptionMixin): verbose_name=_("Treatment status"), ) + qualification = models.CharField( + max_length=20, + choices=QUALIFICATIONS, + null=True, + verbose_name=_("Financial"), + ) + strength_of_knowledge = models.IntegerField( default=-1, verbose_name=_("Strength of Knowledge"), diff --git a/backend/core/views.py b/backend/core/views.py index dde1366d3..5fc25942e 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -585,6 +585,7 @@ def duplicate(self, request, pk): description=scenario.description, existing_controls=scenario.existing_controls, treatment=scenario.treatment, + qualification=scenario.qualification, current_proba=scenario.current_proba, current_impact=scenario.current_impact, residual_proba=scenario.residual_proba, @@ -736,6 +737,7 @@ class RiskScenarioViewSet(BaseModelViewSet): "risk_assessment__project", "risk_assessment__project__folder", "treatment", + "qualification", "threats", "assets", "applied_controls", @@ -745,6 +747,10 @@ class RiskScenarioViewSet(BaseModelViewSet): def treatment(self, request): return Response(dict(RiskScenario.TREATMENT_OPTIONS)) + @action(detail=False, name="Get qualificatio choices") + def qualification(self, request) : + return Response(dict(RiskScenario.QUALIFICATIONS)) + @action(detail=True, name="Get probability choices") def probability(self, request, pk): undefined = dict([(-1, "--")]) diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts index 382f4eb8c..c31733d17 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.server.ts @@ -112,19 +112,18 @@ export const load: PageServerLoad = async ({ params, fetch }) => { const treatmentChoicesEndpoint = `${BASE_API_URL}/${URLModel}/treatment/`; const qualificationChoicesEndpoint = `${BASE_API_URL}/${URLModel}/qualification/`; - const [treatmentChoices, qualificationChoices] = await Promise.all([ - treatmentChoicesEndpoint, - qualificationChoicesEndpoint - ].map( - (endpoint) => fetch(endpoint) - .then((res) => res.json()) - .then((data) => - Object.entries(data).map(([key, value]) => ({ - label: value, - value: key - })) - ) - )); + const [treatmentChoices, qualificationChoices] = await Promise.all( + [treatmentChoicesEndpoint, qualificationChoicesEndpoint].map((endpoint) => + fetch(endpoint) + .then((res) => res.json()) + .then((data) => + Object.entries(data).map(([key, value]) => ({ + label: value, + value: key + })) + ) + ) + ); const strengthOfKnowledgeChoicesEndpoint = `${BASE_API_URL}/${URLModel}/${params.id}/strength_of_knowledge/`; const strengthOfKnowledgeChoices: Record = await fetch( From 1d5993bc3987e53b5aa008692a84508e411289f1 Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Wed, 14 Aug 2024 15:17:23 +0200 Subject: [PATCH 03/31] Formatter --- .../0021_riskscenario_qualification.py | 22 ++++++++++++++----- backend/core/models.py | 3 +-- backend/core/views.py | 2 +- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/backend/core/migrations/0021_riskscenario_qualification.py b/backend/core/migrations/0021_riskscenario_qualification.py index 789bb1d1b..9b8bcc63f 100644 --- a/backend/core/migrations/0021_riskscenario_qualification.py +++ b/backend/core/migrations/0021_riskscenario_qualification.py @@ -4,15 +4,27 @@ class Migration(migrations.Migration): - dependencies = [ - ('core', '0020_fix_libraries_objects_meta'), + ("core", "0020_fix_libraries_objects_meta"), ] operations = [ migrations.AddField( - model_name='riskscenario', - name='qualification', - field=models.CharField(choices=[('Financial', 'Financial'), ('Legal', 'Legal'), ('Reputation', 'Reputation'), ('Operational', 'Operational'), ('Confidentiality', 'Confidentiality'), ('Integrity', 'Integrity'), ('Availability', 'Availability')], max_length=20, null=True, verbose_name='Financial'), + model_name="riskscenario", + name="qualification", + field=models.CharField( + choices=[ + ("Financial", "Financial"), + ("Legal", "Legal"), + ("Reputation", "Reputation"), + ("Operational", "Operational"), + ("Confidentiality", "Confidentiality"), + ("Integrity", "Integrity"), + ("Availability", "Availability"), + ], + max_length=20, + null=True, + verbose_name="Financial", + ), ), ] diff --git a/backend/core/models.py b/backend/core/models.py index 9a4b409ba..a3173f485 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -1687,7 +1687,7 @@ class RiskScenario(NameDescriptionMixin): ("Operational", _("Operational")), ("Confidentiality", _("Confidentiality")), ("Integrity", _("Integrity")), - ("Availability", _("Availability")) + ("Availability", _("Availability")), ] class Status(models.TextChoices): @@ -1696,7 +1696,6 @@ class Status(models.TextChoices): IN_REVIEW = "in_review", _("In review") DONE = "done", _("Done") - DEFAULT_SOK_OPTIONS = { -1: { "name": _("--"), diff --git a/backend/core/views.py b/backend/core/views.py index 5fc25942e..f7d362958 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -748,7 +748,7 @@ def treatment(self, request): return Response(dict(RiskScenario.TREATMENT_OPTIONS)) @action(detail=False, name="Get qualificatio choices") - def qualification(self, request) : + def qualification(self, request): return Response(dict(RiskScenario.QUALIFICATIONS)) @action(detail=True, name="Get probability choices") From b31941dcb7510bfc681f3043f21b2efe3353eb0e Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Wed, 14 Aug 2024 16:14:26 +0200 Subject: [PATCH 04/31] Fix important typo --- .../src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte index 8b7c7a9b9..4209c40ce 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte @@ -177,7 +177,7 @@ {form} options={data.qualificationChoices} field="qualification" - label={m.qualficationStatus()} + label={m.qualificationStatus()} />
From bee69155e526198fddaa9f0a22660afd2c4356a7 Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Wed, 14 Aug 2024 16:26:44 +0200 Subject: [PATCH 05/31] zip(range(infinity),data) = enumerate(data) --- backend/core/views.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/backend/core/views.py b/backend/core/views.py index f7d362958..6bdb62edb 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -780,19 +780,14 @@ def strength_of_knowledge(self, request, pk): undefined = {-1: RiskScenario.DEFAULT_SOK_OPTIONS[-1]} _sok_choices = self.get_object().get_matrix().get("strength_of_knowledge") if _sok_choices is not None: - sok_choices = dict( - zip( - list(range(0, 64)), - [ - { - "name": x["name"], - "description": x.get("description"), - "symbol": x.get("symbol"), - } - for x in _sok_choices - ], - ) - ) + sok_choices = dict(enumerate( + { + "name": x["name"], + "description": x.get("description"), + "symbol": x.get("symbol"), + } + for x in _sok_choices + )) else: sok_choices = RiskScenario.DEFAULT_SOK_OPTIONS choices = undefined | sok_choices From 753837337cf638166088890bc656eb0a15a441b8 Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Wed, 14 Aug 2024 16:31:19 +0200 Subject: [PATCH 06/31] Formatter --- backend/core/views.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/backend/core/views.py b/backend/core/views.py index 6bdb62edb..a8a025e83 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -780,14 +780,16 @@ def strength_of_knowledge(self, request, pk): undefined = {-1: RiskScenario.DEFAULT_SOK_OPTIONS[-1]} _sok_choices = self.get_object().get_matrix().get("strength_of_knowledge") if _sok_choices is not None: - sok_choices = dict(enumerate( - { - "name": x["name"], - "description": x.get("description"), - "symbol": x.get("symbol"), - } - for x in _sok_choices - )) + sok_choices = dict( + enumerate( + { + "name": x["name"], + "description": x.get("description"), + "symbol": x.get("symbol"), + } + for x in _sok_choices + ) + ) else: sok_choices = RiskScenario.DEFAULT_SOK_OPTIONS choices = undefined | sok_choices From d8c202b7d64e368ea992dc207f060080836cf060 Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Wed, 14 Aug 2024 17:14:07 +0200 Subject: [PATCH 07/31] Correct the placement of the qualification select component and display qualification in detail view --- .../(app)/risk-scenarios/[id=uuid]/+page.svelte | 8 ++++++++ .../risk-scenarios/[id=uuid]/edit/+page.svelte | 14 ++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte index 35cc2f44d..870459e6e 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte @@ -230,6 +230,14 @@
+
+

{m.qualificationStatus()}

+

+ + {localItems()[toCamelCase(data.scenario.qualification)] || data.scenario.qualification || localItems()["undefined"]} + +

+

{m.strengthOfKnowledge()}

diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte index 4209c40ce..43a0dffb3 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte @@ -172,14 +172,6 @@ label="Owner(s)" />

-
-
+ Date: Wed, 14 Aug 2024 17:18:25 +0200 Subject: [PATCH 08/31] Rename qualification status into qualification --- frontend/messages/ar.json | 2 +- frontend/messages/de.json | 2 +- frontend/messages/en.json | 2 +- frontend/messages/es.json | 2 +- frontend/messages/fr.json | 2 +- frontend/messages/it.json | 2 +- frontend/messages/nl.json | 2 +- frontend/messages/pl.json | 2 +- frontend/messages/pt.json | 2 +- frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte | 2 +- .../src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/frontend/messages/ar.json b/frontend/messages/ar.json index 5e4f1f606..3a3125b0f 100644 --- a/frontend/messages/ar.json +++ b/frontend/messages/ar.json @@ -97,7 +97,7 @@ "urn": "URN", "id": "معرف", "treatmentStatus": "حالة المعالجة", - "qualificationStatus": "حالة التأهيل", + "qualification": "المؤهلات", "currentLevel": "المستوى الحالي", "residualLevel": "المستوى المتبقي", "riskMatrix": "مصفوفة المخاطر", diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 290cc50b6..1056c0e34 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Behandlungsstatus", - "qualificationStatus": "Status der Qualifizierung", + "qualification": "Qualifizierung", "currentLevel": "Aktuelles Niveau", "residualLevel": "Restrisiko-Niveau", "riskMatrix": "Risikomatrix", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 5fc4f97be..cd1062a44 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Treatment status", - "qualificationStatus": "Qualification status", + "qualification": "Qualification", "currentLevel": "Current level", "residualLevel": "Residual level", "riskMatrix": "Risk matrix", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index edc0f845a..db4b9e528 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Estado del tratamiento", - "qualificationStatus": "Estatus de la cualificación", + "qualification": "Cualificación", "currentLevel": "Nivel actual", "residualLevel": "Nivel residual", "riskMatrix": "Matriz de riesgos", diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json index e692f006f..22579e979 100644 --- a/frontend/messages/fr.json +++ b/frontend/messages/fr.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Statut de traitement", - "qualificationStatus": "Statut de qualfication", + "qualification": "Qualfication", "currentLevel": "Niveau courant", "residualLevel": "Niveau résiduel", "riskMatrix": "Matrice de risque", diff --git a/frontend/messages/it.json b/frontend/messages/it.json index a9b2c911b..f3343a429 100644 --- a/frontend/messages/it.json +++ b/frontend/messages/it.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Stato del trattamento", - "qualificationStatus": "Stato del qualificazione", + "qualification": "Qualificazione", "currentLevel": "Livello attuale", "residualLevel": "Livello residuo", "riskMatrix": "Matrice di rischio", diff --git a/frontend/messages/nl.json b/frontend/messages/nl.json index 9787c9cef..1ea64d5aa 100644 --- a/frontend/messages/nl.json +++ b/frontend/messages/nl.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Behandelstatus", - "qualificationStatus": "Kwalificatiestatus", + "qualification": "Kwalificatie", "currentLevel": "Huidig niveau", "residualLevel": "Restniveau", "riskMatrix": "Risicomatrix", diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json index 7ceaf3d74..87a26fd8b 100644 --- a/frontend/messages/pl.json +++ b/frontend/messages/pl.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Status leczenia", - "qualificationStatus": "Status kwalifikacji", + "qualification": "Kwalifikacja", "currentLevel": "Obecny poziom", "residualLevel": "Poziom resztkowy", "riskMatrix": "Macierz ryzyka", diff --git a/frontend/messages/pt.json b/frontend/messages/pt.json index 8cb022247..f109007ec 100644 --- a/frontend/messages/pt.json +++ b/frontend/messages/pt.json @@ -102,7 +102,7 @@ "urn": "URN", "id": "ID", "treatmentStatus": "Status de tratamento", - "qualificationStatus": "Estatuto de qualificação", + "qualification": "Qualificação", "currentLevel": "Nível atual", "residualLevel": "Nível residual", "riskMatrix": "Matriz de risco", diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte index 870459e6e..88e659c5c 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/+page.svelte @@ -231,7 +231,7 @@
-

{m.qualificationStatus()}

+

{m.qualification()}

{localItems()[toCamelCase(data.scenario.qualification)] || data.scenario.qualification || localItems()["undefined"]} diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte index 43a0dffb3..1dcbc6b57 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte @@ -315,7 +315,7 @@ {form} options={data.qualificationChoices} field="qualification" - label={m.qualificationStatus()} + label={m.qualification()} /> From 27d622c27355cc0993706e892911e96fe963344e Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Thu, 22 Aug 2024 15:57:05 +0200 Subject: [PATCH 22/31] Remove dead code --- backend/core/models.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/backend/core/models.py b/backend/core/models.py index 025c6ea0f..cb26540d1 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -1690,12 +1690,6 @@ class RiskScenario(NameDescriptionMixin): ("Availability", _("Availability")), ] - class Status(models.TextChoices): - TODO = "to_do", _("To do") - IN_PROGRESS = "in_progress", _("In progress") - IN_REVIEW = "in_review", _("In review") - DONE = "done", _("Done") - DEFAULT_SOK_OPTIONS = { -1: { "name": _("--"), From 2910ba456abf24ca966b5fb0d116a6e506f76819 Mon Sep 17 00:00:00 2001 From: monsieurswag Date: Thu, 22 Aug 2024 16:21:24 +0200 Subject: [PATCH 23/31] Make qualification plural --- .../migrations/0022_riskscenario_qualification.py | 13 ++++++------- backend/core/models.py | 8 +++----- backend/core/views.py | 3 +-- frontend/src/lib/utils/schemas.ts | 2 +- .../risk-scenarios/[id=uuid]/edit/+page.svelte | 4 ++-- 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/backend/core/migrations/0022_riskscenario_qualification.py b/backend/core/migrations/0022_riskscenario_qualification.py index 146738076..3e5f354a7 100644 --- a/backend/core/migrations/0022_riskscenario_qualification.py +++ b/backend/core/migrations/0022_riskscenario_qualification.py @@ -1,19 +1,18 @@ -# Generated by Django 5.0.7 on 2024-08-20 03:26 +# Generated by Django 5.0.7 on 2024-08-22 07:45 from django.db import migrations, models class Migration(migrations.Migration): + dependencies = [ - ("core", "0021_alter_framework_urn_alter_loadedlibrary_urn_and_more"), + ('core', '0021_alter_framework_urn_alter_loadedlibrary_urn_and_more'), ] operations = [ migrations.AddField( - model_name="riskscenario", - name="qualification", - field=models.CharField( - blank=True, default="", max_length=20, verbose_name="Financial" - ), + model_name='riskscenario', + name='qualification', + field=models.JSONField(default=list, verbose_name='Qualification'), ), ] diff --git a/backend/core/models.py b/backend/core/models.py index cb26540d1..37c0427a9 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -1797,11 +1797,9 @@ class RiskScenario(NameDescriptionMixin): verbose_name=_("Treatment status"), ) - qualification = models.CharField( - max_length=20, - blank=True, - default="", - verbose_name=_("Financial"), + qualification = models.JSONField( + default=list, + verbose_name=_("Qualification") ) strength_of_knowledge = models.IntegerField( diff --git a/backend/core/views.py b/backend/core/views.py index a8a025e83..6b5cf36a7 100644 --- a/backend/core/views.py +++ b/backend/core/views.py @@ -49,7 +49,6 @@ User = get_user_model() - class BaseModelViewSet(viewsets.ModelViewSet): filter_backends = [ DjangoFilterBackend, @@ -737,12 +736,12 @@ class RiskScenarioViewSet(BaseModelViewSet): "risk_assessment__project", "risk_assessment__project__folder", "treatment", - "qualification", "threats", "assets", "applied_controls", ] + @action(detail=False, name="Get treatment choices") def treatment(self, request): return Response(dict(RiskScenario.TREATMENT_OPTIONS)) diff --git a/frontend/src/lib/utils/schemas.ts b/frontend/src/lib/utils/schemas.ts index 08064cfdb..ccf1c43de 100644 --- a/frontend/src/lib/utils/schemas.ts +++ b/frontend/src/lib/utils/schemas.ts @@ -102,7 +102,7 @@ export const RiskScenarioSchema = baseNamedObject({ residual_proba: z.number().optional(), residual_impact: z.number().optional(), treatment: z.string().optional(), - qualification: z.string().optional(), + qualification: z.string().optional().array().optional(), strength_of_knowledge: z.number().default(-1).optional(), justification: z.string().optional().nullable(), risk_assessment: z.string(), diff --git a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte index c4d1340ce..2f84949b1 100644 --- a/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte +++ b/frontend/src/routes/(app)/risk-scenarios/[id=uuid]/edit/+page.svelte @@ -311,10 +311,10 @@

- Date: Mon, 26 Aug 2024 12:57:25 +0200 Subject: [PATCH 31/31] Formatter --- .../core/migrations/0022_riskscenario_qualifications.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/backend/core/migrations/0022_riskscenario_qualifications.py b/backend/core/migrations/0022_riskscenario_qualifications.py index 3255f3f4a..668669cc5 100644 --- a/backend/core/migrations/0022_riskscenario_qualifications.py +++ b/backend/core/migrations/0022_riskscenario_qualifications.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('core', '0021_alter_framework_urn_alter_loadedlibrary_urn_and_more'), + ("core", "0021_alter_framework_urn_alter_loadedlibrary_urn_and_more"), ] operations = [ migrations.AddField( - model_name='riskscenario', - name='qualifications', - field=models.JSONField(default=list, verbose_name='Qualifications'), + model_name="riskscenario", + name="qualifications", + field=models.JSONField(default=list, verbose_name="Qualifications"), ), ]