Skip to content

Commit a03cf6c

Browse files
clever-age-gtononxaviermarchegay
authored andcommitted
#33 Add duration filter on Process Execution Crud.
1 parent e575297 commit a03cf6c

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/*
6+
* This file is part of the CleverAge/ProcessBundleDemo package.
7+
*
8+
* Copyright (c) Clever-Age
9+
*
10+
* For the full copyright and license information, please view the LICENSE
11+
* file that was distributed with this source code.
12+
*/
13+
14+
namespace CleverAge\UiProcessBundle\Admin\Filter;
15+
16+
use Doctrine\ORM\QueryBuilder;
17+
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Filter\FilterInterface;
18+
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
19+
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
20+
use EasyCorp\Bundle\EasyAdminBundle\Dto\FilterDataDto;
21+
use EasyCorp\Bundle\EasyAdminBundle\Filter\FilterTrait;
22+
use EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\NumericFilterType;
23+
24+
class ProcessExecutionDurationFilter implements FilterInterface
25+
{
26+
use FilterTrait;
27+
28+
public static function new(string $propertyName, $label = null): self
29+
{
30+
return (new self())
31+
->setFilterFqcn(__CLASS__)
32+
->setProperty($propertyName)
33+
->setLabel($label)
34+
->setFormType(NumericFilterType::class)
35+
->setFormTypeOption('translation_domain', 'EasyAdminBundle');
36+
}
37+
38+
public function apply(QueryBuilder $queryBuilder, FilterDataDto $filterDataDto, ?FieldDto $fieldDto, EntityDto $entityDto): void
39+
{
40+
if (\in_array($filterDataDto->getComparison(), ['=', '>', '>=', '<', '<=', '!='])) {
41+
$queryBuilder->andWhere(
42+
\sprintf(
43+
'entity.endDate %s date_add(entity.startDate, %s, \'SECOND\')',
44+
$filterDataDto->getComparison(),
45+
$filterDataDto->getValue()
46+
)
47+
);
48+
} elseif ('between' === $filterDataDto->getComparison()) {
49+
$queryBuilder->andWhere(
50+
\sprintf(
51+
'entity.endDate BETWEEN date_add(entity.startDate, %s, \'SECOND\') and date_add(entity.startDate, %s, \'SECOND\')',
52+
$filterDataDto->getValue(),
53+
$filterDataDto->getValue2()
54+
)
55+
);
56+
}
57+
}
58+
}

src/Controller/Admin/ProcessExecutionCrudController.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use CleverAge\UiProcessBundle\Admin\Field\ContextField;
1717
use CleverAge\UiProcessBundle\Admin\Field\EnumField;
18+
use CleverAge\UiProcessBundle\Admin\Filter\ProcessExecutionDurationFilter;
1819
use CleverAge\UiProcessBundle\Entity\ProcessExecution;
1920
use CleverAge\UiProcessBundle\Repository\ProcessExecutionRepository;
2021
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
@@ -143,7 +144,13 @@ public function downloadLogFile(
143144

144145
public function configureFilters(Filters $filters): Filters
145146
{
146-
return $filters->add('code')->add('startDate');
147+
return $filters
148+
->add('code')
149+
->add('startDate')
150+
->add(
151+
ProcessExecutionDurationFilter::new('duration', 'Duration (in seconds)')
152+
->setFormTypeOption('mapped', false)
153+
);
147154
}
148155

149156
private function getLogFilePath(ProcessExecution $processExecution): string

0 commit comments

Comments
 (0)