From c4fc3fcef02c67fa26a2f28e16b21aa72695bfde Mon Sep 17 00:00:00 2001 From: Ruslan Baidan Date: Tue, 10 Feb 2026 16:34:40 +0100 Subject: [PATCH] Fixed the Implementation plan report generation where recommendations duplicated, fixed the recommendations display in the treatmant plan to show as many as linked to the risks of the same asset. --- src/Service/AnrRecommendationRiskService.php | 23 +++++++++++--------- src/Service/DeliverableGenerationService.php | 5 +++++ 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/Service/AnrRecommendationRiskService.php b/src/Service/AnrRecommendationRiskService.php index b2b204ab..b1b45a53 100755 --- a/src/Service/AnrRecommendationRiskService.php +++ b/src/Service/AnrRecommendationRiskService.php @@ -46,21 +46,22 @@ public function getList(FormattedInputParams $formattedInputParams): array $globalObjectsUuids = []; /** @var Entity\RecommendationRisk $recommendationRisk */ foreach ($this->recommendationRiskTable->findByParams($formattedInputParams) as $recommendationRisk) { - if ($includeRelations - && $recommendationRisk->getGlobalObject() !== null - && isset($globalObjectsUuids[$recommendationRisk->getGlobalObject()->getUuid()]) - ) { - continue; + if ($includeRelations && $recommendationRisk->hasGlobalObjectRelation()) { + $recommendation = $recommendationRisk->getRecommendation(); + $key = 'o' . $recommendationRisk->getGlobalObject()->getUuid() + . '-' . $recommendationRisk->getInstanceRisk()->getThreat()->getUuid() + . '-' . $recommendationRisk->getInstanceRisk()->getVulnerability()->getUuid() + . '-' . $recommendation->getUuid(); + if (isset($globalObjectsRecommendationsKeys[$key])) { + continue; + } + $globalObjectsRecommendationsKeys[$key] = $key; } $recommendationRisksData[] = $this->getPreparedRecommendationRiskData( $recommendationRisk, $includeRelations ); - - if ($includeRelations && $recommendationRisk->getGlobalObject() !== null) { - $globalObjectsUuids[$recommendationRisk->getGlobalObject()->getUuid()] = true; - } } return $recommendationRisksData; @@ -238,7 +239,9 @@ public function getTreatmentPlan(Entity\Anr $anr): array 'maxRisk' => $instanceRisk->getCacheMaxRisk(), ]; } else { - $path = $instanceRisk->getInstance()->getHierarchyString(); + /** @var Entity\Instance $instance */ + $instance = $instanceRisk->getInstance(); + $path = $instance->getHierarchyString(); } $instanceRisksData[$type][$index] = array_merge($instanceRiskData, [ diff --git a/src/Service/DeliverableGenerationService.php b/src/Service/DeliverableGenerationService.php index ce7a8484..18a21465 100644 --- a/src/Service/DeliverableGenerationService.php +++ b/src/Service/DeliverableGenerationService.php @@ -2420,8 +2420,13 @@ private function generateTableImplementationPlan() } $globalObjectsRecommendationsKeys = []; + $processedRecommendationsUuids = []; foreach ($recommendationRisks as $recommendationRisk) { $recommendation = $recommendationRisk->getRecommendation(); + if (isset($processedRecommendationsUuids[$recommendation->getUuid()])) { + continue; + } + $processedRecommendationsUuids[$recommendation->getUuid()] = true; if ($recommendationRisk->hasGlobalObjectRelation()) { $key = 'o' . $recommendationRisk->getGlobalObject()->getUuid() . '-' . $recommendationRisk->getInstanceRisk()->getThreat()->getUuid()