added search modal for timesheet export (#2728)
This commit is contained in:
56
src/Repository/Result/TimesheetResult.php
Normal file
56
src/Repository/Result/TimesheetResult.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Repository\Result;
|
||||
|
||||
use App\Repository\Loader\TimesheetLoader;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
|
||||
class TimesheetResult
|
||||
{
|
||||
private $queryBuilder;
|
||||
|
||||
public function __construct(QueryBuilder $queryBuilder)
|
||||
{
|
||||
$this->queryBuilder = $queryBuilder;
|
||||
}
|
||||
|
||||
public function getStatistic(): TimesheetResultStatistic
|
||||
{
|
||||
$qb = clone $this->queryBuilder;
|
||||
$qb
|
||||
->resetDQLPart('select')
|
||||
->resetDQLPart('orderBy')
|
||||
->select('COUNT(t.id) as counter')
|
||||
->addSelect('COALESCE(SUM(t.duration), 0) as duration')
|
||||
;
|
||||
|
||||
$result = $qb->getQuery()->getArrayResult()[0];
|
||||
|
||||
return new TimesheetResultStatistic($result['counter'], $result['duration']);
|
||||
}
|
||||
|
||||
public function toIterable(): iterable
|
||||
{
|
||||
$query = $this->queryBuilder->getQuery();
|
||||
|
||||
return $query->toIterable();
|
||||
}
|
||||
|
||||
public function getResults(bool $fullyHydrated = false): array
|
||||
{
|
||||
$query = $this->queryBuilder->getQuery();
|
||||
$results = $query->getResult();
|
||||
|
||||
$loader = new TimesheetLoader($this->queryBuilder->getEntityManager(), $fullyHydrated);
|
||||
$loader->loadResults($results);
|
||||
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
32
src/Repository/Result/TimesheetResultStatistic.php
Normal file
32
src/Repository/Result/TimesheetResultStatistic.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Kimai time-tracking app.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace App\Repository\Result;
|
||||
|
||||
class TimesheetResultStatistic
|
||||
{
|
||||
private $count = 0;
|
||||
private $duration = 0;
|
||||
|
||||
public function __construct(int $count, int $duration)
|
||||
{
|
||||
$this->count = $count;
|
||||
$this->duration = $duration;
|
||||
}
|
||||
|
||||
public function getCount(): int
|
||||
{
|
||||
return $this->count;
|
||||
}
|
||||
|
||||
public function getDuration(): int
|
||||
{
|
||||
return $this->duration;
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ use App\Repository\Loader\TimesheetLoader;
|
||||
use App\Repository\Paginator\LoaderPaginator;
|
||||
use App\Repository\Paginator\PaginatorInterface;
|
||||
use App\Repository\Query\TimesheetQuery;
|
||||
use App\Repository\Result\TimesheetResult;
|
||||
use DateInterval;
|
||||
use DateTime;
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
@@ -749,7 +750,7 @@ class TimesheetRepository extends EntityRepository
|
||||
* Especially the following question is still un-answered!
|
||||
*
|
||||
* Should a teamlead:
|
||||
* 1 . see all records of his team-members, even if they recorded times for projects invisible to him
|
||||
* 1. see all records of his team-members, even if they recorded times for projects invisible to him
|
||||
* 2. only see records for projects which can be accessed by hom (current situation)
|
||||
*/
|
||||
private function addPermissionCriteria(QueryBuilder $qb, ?User $user = null, array $teams = []): bool
|
||||
@@ -835,6 +836,13 @@ class TimesheetRepository extends EntityRepository
|
||||
return $this->getHydratedResultsByQuery($qb, $fullyHydrated);
|
||||
}
|
||||
|
||||
public function getTimesheetResult(TimesheetQuery $query): TimesheetResult
|
||||
{
|
||||
$qb = $this->getQueryBuilderForQuery($query);
|
||||
|
||||
return new TimesheetResult($qb);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param QueryBuilder $qb
|
||||
* @param bool $fullyHydrated
|
||||
|
||||
Reference in New Issue
Block a user