feat: feedback export to excel

addresses #869dv9k9z
This commit is contained in:
2026-09-01 10:20:31 +02:00
parent 2f747fc22f
commit 496a707a16
7 changed files with 835 additions and 79 deletions
+33 -2
View File
@@ -9,6 +9,7 @@ use App\Model\FeedbackFilterDto;
use App\Repository\Traits\QueryHelperTrait;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder;
use Doctrine\Persistence\ManagerRegistry;
/**
@@ -38,6 +39,38 @@ class FeedbackRepository extends ServiceEntityRepository
->innerJoin('teamer.user', 'user')
;
$this->applyFilterCriteria($qb, $filterDto);
return $qb->getQuery();
}
/**
* Published feedback matching the given filter, one row per record, with the
* FeedbackSet eagerly loaded and rows grouped per teamer and ordered by season.
*/
public function getExportQuery(FeedbackFilterDto $filterDto): Query
{
$qb = $this->createQueryBuilder('feedback');
$qb
->select('feedback', 'teamer', 'user', 'feedbackSet')
->innerJoin('feedback.teamer', 'teamer')
->innerJoin('teamer.user', 'user')
->innerJoin('feedback.feedbackSet', 'feedbackSet')
->andWhere($qb->expr()->eq('feedback.status', ':status'))
->setParameter('status', Feedback::STATUS_PUBLISHED)
->orderBy('teamer.lastName', 'ASC')
->addOrderBy('teamer.firstName', 'ASC')
->addOrderBy('feedback.assignmentDateFrom', 'ASC')
;
$this->applyFilterCriteria($qb, $filterDto);
return $qb->getQuery();
}
private function applyFilterCriteria(QueryBuilder $qb, FeedbackFilterDto $filterDto): void
{
if (null !== $teamer = $filterDto->getTeamer()) {
$qb
->andWhere($qb->expr()->eq('feedback.teamer', ':teamer'))
@@ -73,8 +106,6 @@ class FeedbackRepository extends ServiceEntityRepository
->setParameter('dateTo', $dateTo)
;
}
return $qb->getQuery();
}
public function getNew(int $limit = 5): array