From 4f5dd5e997e281784c8f367553979371a65b7038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tonon=20Gr=C3=A9gory?= Date: Wed, 15 Jan 2025 16:39:24 +0100 Subject: [PATCH 1/2] #33 Add duration filter on Process Execution Crud. --- .../Filter/ProcessExecutionDurationFilter.php | 58 +++++++++++++++++++ .../Admin/ProcessExecutionCrudController.php | 9 ++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/Admin/Filter/ProcessExecutionDurationFilter.php diff --git a/src/Admin/Filter/ProcessExecutionDurationFilter.php b/src/Admin/Filter/ProcessExecutionDurationFilter.php new file mode 100644 index 0000000..b7b4ab1 --- /dev/null +++ b/src/Admin/Filter/ProcessExecutionDurationFilter.php @@ -0,0 +1,58 @@ +setFilterFqcn(__CLASS__) + ->setProperty($propertyName) + ->setLabel($label) + ->setFormType(NumericFilterType::class) + ->setFormTypeOption('translation_domain', 'EasyAdminBundle'); + } + + public function apply(QueryBuilder $queryBuilder, FilterDataDto $filterDataDto, ?FieldDto $fieldDto, EntityDto $entityDto): void + { + if (\in_array($filterDataDto->getComparison(), ['=', '>', '>=', '<', '<=', '!='])) { + $queryBuilder->andWhere( + \sprintf( + 'entity.endDate %s date_add(entity.startDate, %s, \'SECOND\')', + $filterDataDto->getComparison(), + $filterDataDto->getValue() + ) + ); + } elseif ('between' === $filterDataDto->getComparison()) { + $queryBuilder->andWhere( + \sprintf( + 'entity.endDate BETWEEN date_add(entity.startDate, %s, \'SECOND\') and date_add(entity.startDate, %s, \'SECOND\')', + $filterDataDto->getValue(), + $filterDataDto->getValue2() + ) + ); + } + } +} diff --git a/src/Controller/Admin/ProcessExecutionCrudController.php b/src/Controller/Admin/ProcessExecutionCrudController.php index 5e60a60..bd7f27b 100644 --- a/src/Controller/Admin/ProcessExecutionCrudController.php +++ b/src/Controller/Admin/ProcessExecutionCrudController.php @@ -15,6 +15,7 @@ use CleverAge\UiProcessBundle\Admin\Field\ContextField; use CleverAge\UiProcessBundle\Admin\Field\EnumField; +use CleverAge\UiProcessBundle\Admin\Filter\ProcessExecutionDurationFilter; use CleverAge\UiProcessBundle\Entity\ProcessExecution; use CleverAge\UiProcessBundle\Repository\ProcessExecutionRepository; use EasyCorp\Bundle\EasyAdminBundle\Config\Action; @@ -143,7 +144,13 @@ public function downloadLogFile( public function configureFilters(Filters $filters): Filters { - return $filters->add('code')->add('startDate'); + return $filters + ->add('code') + ->add('startDate') + ->add( + ProcessExecutionDurationFilter::new('duration', 'Duration (in seconds)') + ->setFormTypeOption('mapped', false) + ); } private function getLogFilePath(ProcessExecution $processExecution): string From d4624e719aabfdcca70c803fbaa9c4a2c726a42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tonon=20Gr=C3=A9gory?= Date: Wed, 15 Jan 2025 16:49:43 +0100 Subject: [PATCH 2/2] #33 Add duration filter on Process Execution Crud. Quality --- src/Admin/Filter/ProcessExecutionDurationFilter.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Admin/Filter/ProcessExecutionDurationFilter.php b/src/Admin/Filter/ProcessExecutionDurationFilter.php index b7b4ab1..5f5836f 100644 --- a/src/Admin/Filter/ProcessExecutionDurationFilter.php +++ b/src/Admin/Filter/ProcessExecutionDurationFilter.php @@ -3,7 +3,7 @@ declare(strict_types=1); /* - * This file is part of the CleverAge/ProcessBundleDemo package. + * This file is part of the CleverAge/UiProcessBundle package. * * Copyright (c) Clever-Age * @@ -25,10 +25,10 @@ class ProcessExecutionDurationFilter implements FilterInterface { use FilterTrait; - public static function new(string $propertyName, $label = null): self + public static function new(string $propertyName, ?string $label = null): self { return (new self()) - ->setFilterFqcn(__CLASS__) + ->setFilterFqcn(self::class) ->setProperty($propertyName) ->setLabel($label) ->setFormType(NumericFilterType::class)