From 55025a8a8f9396671fc4c91c4f87c1eb36e81ff7 Mon Sep 17 00:00:00 2001 From: Sebastian Almberg <83243306+Sebbeben@users.noreply.github.com> Date: Thu, 12 Mar 2026 08:02:51 +0100 Subject: [PATCH] Improve bulk import UI: split active/history jobs, fix text visibility, add match highlighting - Split manage page into Active Jobs and History sections - Fix source keyword text color (remove text-muted for better visibility) - Add exact match indicators: green check badge when name or MPN matches - Add translation keys for new UI elements --- .../BulkInfoProviderImportController.php | 18 +- .../bulk_import/manage.html.twig | 220 +++++++++++------- .../bulk_import/step2.html.twig | 18 +- translations/messages.en.xlf | 24 ++ 4 files changed, 183 insertions(+), 97 deletions(-) diff --git a/src/Controller/BulkInfoProviderImportController.php b/src/Controller/BulkInfoProviderImportController.php index 6d9e98fa..6612261f 100644 --- a/src/Controller/BulkInfoProviderImportController.php +++ b/src/Controller/BulkInfoProviderImportController.php @@ -303,9 +303,23 @@ class BulkInfoProviderImportController extends AbstractController } } + // Refetch after cleanup and split into active vs finished + $allJobs = $this->entityManager->getRepository(BulkInfoProviderImportJob::class) + ->findBy([], ['createdAt' => 'DESC']); + + $activeJobs = []; + $finishedJobs = []; + foreach ($allJobs as $job) { + if ($job->isCompleted() || $job->isFailed() || $job->isStopped()) { + $finishedJobs[] = $job; + } else { + $activeJobs[] = $job; + } + } + return $this->render('info_providers/bulk_import/manage.html.twig', [ - 'jobs' => $this->entityManager->getRepository(BulkInfoProviderImportJob::class) - ->findBy([], ['createdAt' => 'DESC']) // Refetch after cleanup + 'active_jobs' => $activeJobs, + 'finished_jobs' => $finishedJobs, ]); } diff --git a/templates/info_providers/bulk_import/manage.html.twig b/templates/info_providers/bulk_import/manage.html.twig index 9bbed906..fc37c562 100644 --- a/templates/info_providers/bulk_import/manage.html.twig +++ b/templates/info_providers/bulk_import/manage.html.twig @@ -22,103 +22,143 @@
- {% if jobs is not empty %} -| {% trans %}info_providers.bulk_import.job_name{% endtrans %} | -{% trans %}info_providers.bulk_import.parts_count{% endtrans %} | -{% trans %}info_providers.bulk_import.results_count{% endtrans %} | -{% trans %}info_providers.bulk_import.progress{% endtrans %} | -{% trans %}info_providers.bulk_import.status{% endtrans %} | -{% trans %}info_providers.bulk_import.created_by{% endtrans %} | -{% trans %}info_providers.bulk_import.created_at{% endtrans %} | -{% trans %}info_providers.bulk_import.completed_at{% endtrans %} | -{% trans %}info_providers.bulk_import.action.label{% endtrans %} | -
|---|---|---|---|---|---|---|---|---|
| - {{ job.displayNameKey|trans(job.displayNameParams) }} - {{ job.formattedTimestamp }} - {% if job.isInProgress %} - Active - {% endif %} - | -{{ job.partCount }} | -{{ job.resultCount }} | -
-
-
-
- {% trans with {'%current%': job.completedPartsCount + job.skippedPartsCount, '%total%': job.partCount} %}info_providers.bulk_import.progress_label{% endtrans %}
-
-
-
-
- {{ job.progressPercentage }}%
- |
- - {% if job.isPending %} - {% trans %}info_providers.bulk_import.status.pending{% endtrans %} - {% elseif job.isInProgress %} - {% trans %}info_providers.bulk_import.status.in_progress{% endtrans %} - {% elseif job.isCompleted %} - {% trans %}info_providers.bulk_import.status.completed{% endtrans %} - {% elseif job.isStopped %} - {% trans %}info_providers.bulk_import.status.stopped{% endtrans %} - {% elseif job.isFailed %} - {% trans %}info_providers.bulk_import.status.failed{% endtrans %} - {% endif %} - | -{{ job.createdBy.fullName(true) }} | -{{ job.createdAt|format_datetime('short') }} | -- {% if job.completedAt %} - {{ job.completedAt|format_datetime('short') }} - {% else %} - - - {% endif %} - | -
-
- {% if job.isInProgress or job.isCompleted or job.isStopped %}
-
- {% trans %}info_providers.bulk_import.view_results{% endtrans %}
-
- {% endif %}
- {% if job.canBeStopped %}
-
- {% endif %}
- {% if job.isCompleted or job.isFailed or job.isStopped %}
-
- {% endif %}
-
- |
-
| {% trans %}info_providers.bulk_import.job_name{% endtrans %} | +{% trans %}info_providers.bulk_import.parts_count{% endtrans %} | +{% trans %}info_providers.bulk_import.results_count{% endtrans %} | +{% trans %}info_providers.bulk_import.progress{% endtrans %} | +{% trans %}info_providers.bulk_import.status{% endtrans %} | +{% trans %}info_providers.bulk_import.created_by{% endtrans %} | +{% trans %}info_providers.bulk_import.created_at{% endtrans %} | +{% trans %}info_providers.bulk_import.action.label{% endtrans %} | +
|---|
| {% trans %}info_providers.bulk_import.job_name{% endtrans %} | +{% trans %}info_providers.bulk_import.parts_count{% endtrans %} | +{% trans %}info_providers.bulk_import.results_count{% endtrans %} | +{% trans %}info_providers.bulk_import.progress{% endtrans %} | +{% trans %}info_providers.bulk_import.status{% endtrans %} | +{% trans %}info_providers.bulk_import.created_by{% endtrans %} | +{% trans %}info_providers.bulk_import.created_at{% endtrans %} | +{% trans %}info_providers.bulk_import.completed_at{% endtrans %} | +{% trans %}info_providers.bulk_import.action.label{% endtrans %} | +
|---|