Fix: export actions and their results in csv even when action does not have any goals attached to it.

This commit is contained in:
2025-10-29 14:38:50 +01:00
parent 9c2abb2dfa
commit 36dfce6613
2 changed files with 31 additions and 12 deletions

View File

@@ -0,0 +1,6 @@
kind: Fixed
body: 'Fix: export actions and their results in csv even when action does not have any goals attached to it.'
time: 2025-10-29T14:38:36.195220844+01:00
custom:
Issue: "453"
SchemaChange: No schema change

View File

@@ -42,28 +42,41 @@ final readonly class SocialActionCSVExportService
$csv->insertOne($headers);
foreach ($actions as $action) {
if ($action->getGoals()->isEmpty() && $action->getResults()->isEmpty() && $action->getEvaluations()->isEmpty()) {
$hasGoals = !$action->getGoals()->isEmpty();
$hasResults = !$action->getResults()->isEmpty();
$hasEvaluations = !$action->getEvaluations()->isEmpty();
// If action has no goals, results, or evaluations, insert a single row
if (!$hasGoals && !$hasResults && !$hasEvaluations) {
$csv->insertOne($this->formatRow($action));
continue;
}
foreach ($action->getGoals() as $goal) {
if ($goal->getResults()->isEmpty()) {
$csv->insertOne($this->formatRow($action, $goal));
}
foreach ($goal->getResults() as $goalResult) {
$csv->insertOne($this->formatRow($action, $goal, $goalResult));
// Process goals and their results
if ($hasGoals) {
foreach ($action->getGoals() as $goal) {
if ($goal->getResults()->isEmpty()) {
$csv->insertOne($this->formatRow($action, $goal));
} else {
foreach ($goal->getResults() as $goalResult) {
$csv->insertOne($this->formatRow($action, $goal, $goalResult));
}
}
}
}
foreach ($action->getResults() as $result) {
if ($result->getGoals()->isEmpty()) {
// Process results that are linked to this action (regardless of whether they have goals elsewhere)
if ($hasResults && !$hasGoals) {
foreach ($action->getResults() as $result) {
$csv->insertOne($this->formatRow($action, null, null, $result));
}
}
foreach ($action->getEvaluations() as $evaluation) {
$csv->insertOne($this->formatRow($action, evaluation: $evaluation));
// Process evaluations
if ($hasEvaluations) {
foreach ($action->getEvaluations() as $evaluation) {
$csv->insertOne($this->formatRow($action, evaluation: $evaluation));
}
}
}