Skip to content

Commit 5af0a26

Browse files
authored
feat: extra settings to enable mail notifications and matrix aggregation (#1434)
1 parent 1130357 commit 5af0a26

File tree

8 files changed

+72
-6
lines changed

8 files changed

+72
-6
lines changed

backend/global_settings/serializers.py

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
"ebios_radar_green_zone_radius",
99
"ebios_radar_yellow_zone_radius",
1010
"ebios_radar_red_zone_radius",
11+
"interface_agg_scenario_matrix",
12+
"notifications_enable_mailing",
1113
]
1214

1315

backend/global_settings/views.py

+20
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ def object(self, request, pk=None):
6565
"ebios_radar_green_zone_radius": 0.2,
6666
"ebios_radar_yellow_zone_radius": 0.9,
6767
"ebios_radar_red_zone_radius": 2.5,
68+
"notifications_enable_mailing": False,
69+
"interface_agg_scenario_matrix": False,
6870
}
6971

7072
settings, created = GlobalSettings.objects.get_or_create(name="general")
@@ -102,6 +104,24 @@ def ebios_radar_parameters(self, request):
102104
}
103105
return Response(ebios_rm_parameters)
104106

107+
@action(detail=True, name="Get notifications settings")
108+
def notifications_settings(self, request):
109+
notifications_settings = {
110+
"notifications_enable_mailing": self.get_object().value.get(
111+
"notifications_enable_mailing"
112+
),
113+
}
114+
return Response(notifications_settings)
115+
116+
@action(detail=True, name="Get interface settings")
117+
def interface_settings(self, request):
118+
interface_settings = {
119+
"interface_agg_scenario_matrix": self.get_object().value.get(
120+
"interface_agg_scenario_matrix"
121+
),
122+
}
123+
return Response(interface_settings)
124+
105125

106126
@api_view(["GET"])
107127
@permission_classes([permissions.AllowAny])

frontend/messages/en.json

+4
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,10 @@
606606
"secret": "Secret",
607607
"key": "Key",
608608
"settings": "Settings",
609+
"settingsInterface": "Interface",
610+
"settingsAggregateMatrix": "Aggregate scenarios on risk matrices",
611+
"settingsNotifications": "Notifications settings",
612+
"settingsNotificationsMail": "Enable email notifications",
609613
"identityProvider": "Identity provider",
610614
"identityProviders": "Identity providers",
611615
"clientIDHelpText": "App ID, or consumer key",

frontend/messages/fr.json

+4
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,10 @@
606606
"secret": "Secret",
607607
"key": "Clé",
608608
"settings": "Paramètres",
609+
"settingsInterface": "Interface",
610+
"settingsAggregateMatrix": "Agréger les scénarios sur les matrices",
611+
"settingsNotifications": "Paramètres de notifications",
612+
"settingsNotificationsMail": "Activer les emails",
609613
"identityProvider": "Fournisseur d'identité",
610614
"identityProviders": "Fournisseurs d'identité",
611615
"clientIDHelpText": "ID d'application ou clé consommateur",

frontend/src/lib/components/Forms/ModelForm/GeneralSettingForm.svelte

+32-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import type { CacheLock, ModelInfo } from '$lib/utils/types';
66
import type { SuperForm } from 'sveltekit-superforms';
77
import { Accordion, AccordionItem } from '@skeletonlabs/skeleton';
8-
8+
import Checkbox from '$lib/components/Forms/Checkbox.svelte';
99
export let form: SuperForm<any>;
1010
export let model: ModelInfo;
1111
export let cacheLocks: Record<string, CacheLock> = {};
@@ -14,7 +14,36 @@
1414

1515
<Accordion regionControl="font-bold">
1616
<AccordionItem open>
17-
<svelte:fragment slot="summary"><i class="fa-solid fa-gem mr-2"></i>{m.asset()}</svelte:fragment
17+
<svelte:fragment slot="summary"
18+
><i class="fa-solid fa-bell mr-2"></i>{m.settingsNotifications()}</svelte:fragment
19+
>
20+
<svelte:fragment slot="content">
21+
<div class="p-4">
22+
<Checkbox
23+
{form}
24+
field="notifications_enable_mailing"
25+
label={m.settingsNotificationsMail()}
26+
/>
27+
</div>
28+
</svelte:fragment>
29+
</AccordionItem>
30+
<AccordionItem open>
31+
<svelte:fragment slot="summary">
32+
<i class="fa-solid fa-asterisk mr-2" />{m.settingsInterface()}
33+
</svelte:fragment>
34+
<svelte:fragment slot="content">
35+
<div class="p-4">
36+
<Checkbox
37+
{form}
38+
field="interface_agg_scenario_matrix"
39+
label={m.settingsAggregateMatrix()}
40+
/>
41+
</div>
42+
</svelte:fragment>
43+
</AccordionItem>
44+
<AccordionItem>
45+
<svelte:fragment slot="summary"
46+
><i class="fa-solid fa-gem mr-2"></i>{m.assets()}</svelte:fragment
1847
>
1948
<svelte:fragment slot="content">
2049
<Select
@@ -28,7 +57,7 @@
2857
/>
2958
</svelte:fragment>
3059
</AccordionItem>
31-
<AccordionItem open>
60+
<AccordionItem>
3261
<svelte:fragment slot="summary"
3362
><i class="fa-solid fa-gopuram mr-2"></i>{m.ebiosRadarParameters()}</svelte:fragment
3463
>

frontend/src/lib/utils/schemas.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,9 @@ export const GeneralSettingsSchema = z.object({
297297
ebios_radar_max: z.number(),
298298
ebios_radar_green_zone_radius: z.number(),
299299
ebios_radar_yellow_zone_radius: z.number(),
300-
ebios_radar_red_zone_radius: z.number()
300+
ebios_radar_red_zone_radius: z.number(),
301+
notifications_enable_mailing: z.boolean().optional(),
302+
interface_agg_scenario_matrix: z.boolean().optional()
301303
});
302304

303305
export const SSOSettingsSchema = z.object({

frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/+layout.server.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ export const load: LayoutServerLoad = async ({ fetch, params }) => {
2020
`${BASE_API_URL}/risk-matrices/${risk_assessment.risk_matrix.id}/`
2121
).then((res) => res.json());
2222

23+
const interface_settings = await fetch(`${BASE_API_URL}/settings/general/object`).then((res) =>
24+
res.json()
25+
);
26+
2327
const headFields = [
2428
'ref_id',
2529
'name',
@@ -146,6 +150,7 @@ export const load: LayoutServerLoad = async ({ fetch, params }) => {
146150
scenarioCreateForm,
147151
riskAssessmentDuplicateForm,
148152
riskAssessmentModel,
149-
title: risk_assessment.str
153+
title: risk_assessment.str,
154+
useBubbles: interface_settings.interface_agg_scenario_matrix
150155
};
151156
};

frontend/src/routes/(app)/(internal)/risk-assessments/[id=uuid]/+page.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
2222
export let data;
2323
const showRisks = true;
24-
const useBubbles = true;
24+
const useBubbles = data.useBubbles;
2525
const risk_assessment = data.risk_assessment;
2626
2727
const modalStore: ModalStore = getModalStore();

0 commit comments

Comments
 (0)