From 0e54d5baf9fb1a617f045bbd836b2e4ec76cfcb8 Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Tue, 11 Feb 2025 15:47:51 +0100 Subject: [PATCH 1/3] fix: AutompleteSelect when options is already filled --- .../Forms/AutocompleteSelect.svelte | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/frontend/src/lib/components/Forms/AutocompleteSelect.svelte b/frontend/src/lib/components/Forms/AutocompleteSelect.svelte index c0f51a6b42..e1f0bf7870 100644 --- a/frontend/src/lib/components/Forms/AutocompleteSelect.svelte +++ b/frontend/src/lib/components/Forms/AutocompleteSelect.svelte @@ -95,7 +95,7 @@ let selected: (typeof options)[] = []; let selectedValues: (string | undefined)[] = []; let isInternalUpdate = false; - let optionsLoaded = false; + let optionsLoaded = options.length ? true: false; let initialValue = $value; // Store initial value const default_value = nullable ? null : selectedValues[0]; @@ -141,21 +141,19 @@ if (updateMissingConstraint) { updateMissingConstraint(field, isMissing); } - - // After options are loaded, set initial selection using stored initial value - if (initialValue) { - selected = options.filter((item) => - Array.isArray(initialValue) - ? initialValue.includes(item.value) - : item.value === initialValue - ); - } else if (options.length === 1 && $constraints?.required) { - selected = [options[0]]; - } - optionsLoaded = true; } } + // After options are loaded, set initial selection using stored initial value + if (initialValue) { + selected = options.filter((item) => + Array.isArray(initialValue) + ? initialValue.includes(item.value) + : item.value === initialValue + ); + } else if (options.length === 1 && $constraints?.required) { + selected = [options[0]]; + } } catch (error) { console.error(`Error fetching ${optionsEndpoint}:`, error); } finally { From f56e64d482e5bbc769fc19b8b584c0b915f044c6 Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Tue, 11 Feb 2025 15:54:37 +0100 Subject: [PATCH 2/3] chore: format --- frontend/src/lib/components/Forms/AutocompleteSelect.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/lib/components/Forms/AutocompleteSelect.svelte b/frontend/src/lib/components/Forms/AutocompleteSelect.svelte index e1f0bf7870..f9288e8816 100644 --- a/frontend/src/lib/components/Forms/AutocompleteSelect.svelte +++ b/frontend/src/lib/components/Forms/AutocompleteSelect.svelte @@ -95,7 +95,7 @@ let selected: (typeof options)[] = []; let selectedValues: (string | undefined)[] = []; let isInternalUpdate = false; - let optionsLoaded = options.length ? true: false; + let optionsLoaded = Boolean(options.length); let initialValue = $value; // Store initial value const default_value = nullable ? null : selectedValues[0]; From 16e404a62e51babbc322b42eaa341f6a101cb651 Mon Sep 17 00:00:00 2001 From: Mohamed-Hacene Date: Tue, 11 Feb 2025 16:34:04 +0100 Subject: [PATCH 3/3] fix: selected implementation groups in analytics summary StackedBarsNormalized --- backend/core/models.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/backend/core/models.py b/backend/core/models.py index 3e3bb6d1d6..93cf221b4e 100644 --- a/backend/core/models.py +++ b/backend/core/models.py @@ -2958,16 +2958,31 @@ def get_requirements_status_count(self): def get_requirements_result_count(self): requirements_result_count = [] - for rs in RequirementAssessment.Result: - requirements_result_count.append( - ( - RequirementAssessment.objects.filter(result=rs) - .filter(compliance_assessment=self) - .filter(requirement__assessable=True) - .count(), - rs, - ) - ) + selected_implementation_groups_set = ( + set(self.selected_implementation_groups) + if self.selected_implementation_groups + else None + ) + + requirements = RequirementAssessment.objects.filter( + compliance_assessment=self, requirement__assessable=True + ).select_related("requirement") + + if selected_implementation_groups_set is not None: + result_groups = {} + for req in requirements: + req_groups = set(req.requirement.implementation_groups or []) + if selected_implementation_groups_set & req_groups: + result_groups.setdefault(req.result, []).append(req) + + for rs in RequirementAssessment.Result: + count = len(result_groups.get(rs, [])) + requirements_result_count.append((count, rs)) + else: + for rs in RequirementAssessment.Result: + count = requirements.filter(result=rs).count() + requirements_result_count.append((count, rs)) + return requirements_result_count def get_measures_status_count(self):