improve recent activities (#550)

This commit is contained in:
Kevin Papst
2019-02-09 23:01:35 +01:00
committed by GitHub
parent 1f99f69ecd
commit afa0aa5b3a
2 changed files with 29 additions and 10 deletions

View File

@@ -37,7 +37,7 @@ class ActivityController extends AbstractController
public function recentActivitiesAction() public function recentActivitiesAction()
{ {
$user = $this->getUser(); $user = $this->getUser();
$entries = $this->getRepository()->getRecentActivities($user, new \DateTime('-30 days')); $entries = $this->getRepository()->getRecentActivities($user, new \DateTime('-1 year'));
return $this->render( return $this->render(
'navbar/recent-activities.html.twig', 'navbar/recent-activities.html.twig',

View File

@@ -38,14 +38,15 @@ class ActivityRepository extends AbstractRepository
* @param User|null $user * @param User|null $user
* @param \DateTime|null $startFrom * @param \DateTime|null $startFrom
* @return Timesheet[] * @return Timesheet[]
* @throws Query\QueryException
*/ */
public function getRecentActivities(User $user = null, \DateTime $startFrom = null) public function getRecentActivities(User $user = null, \DateTime $startFrom = null)
{ {
$qb = $this->getEntityManager()->createQueryBuilder(); $qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('t', 'a', 'p', 'c') $qb->select($qb->expr()->max('t.id'))
->distinct()
->from(Timesheet::class, 't') ->from(Timesheet::class, 't')
->indexBy('t', 't.id')
->join('t.activity', 'a') ->join('t.activity', 'a')
->join('t.project', 'p') ->join('t.project', 'p')
->join('p.customer', 'c') ->join('p.customer', 'c')
@@ -53,7 +54,7 @@ class ActivityRepository extends AbstractRepository
->andWhere('a.visible = 1') ->andWhere('a.visible = 1')
->andWhere('p.visible = 1') ->andWhere('p.visible = 1')
->andWhere('c.visible = 1') ->andWhere('c.visible = 1')
->groupBy('a.id', 't.id') ->groupBy('a.id', 'p.id')
->orderBy('t.end', 'DESC') ->orderBy('t.end', 'DESC')
->setMaxResults(10) ->setMaxResults(10)
; ;
@@ -68,6 +69,27 @@ class ActivityRepository extends AbstractRepository
->setParameter('begin', $startFrom); ->setParameter('begin', $startFrom);
} }
$results = $qb->getQuery()->getScalarResult();
if (empty($results)) {
return [];
}
$ids = [];
foreach ($results as $result) {
$ids[] = $result[1];
}
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('t', 'a', 'p', 'c')
->from(Timesheet::class, 't')
->join('t.activity', 'a')
->join('t.project', 'p')
->join('p.customer', 'c')
->andWhere($qb->expr()->in('t.id', $ids))
->orderBy('t.end', 'DESC')
;
return $qb->getQuery()->getResult(); return $qb->getQuery()->getResult();
} }
@@ -219,7 +241,6 @@ class ActivityRepository extends AbstractRepository
* @param Activity $delete * @param Activity $delete
* @param Activity|null $replace * @param Activity|null $replace
* @throws \Doctrine\ORM\ORMException * @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/ */
public function deleteActivity(Activity $delete, ?Activity $replace = null) public function deleteActivity(Activity $delete, ?Activity $replace = null)
{ {
@@ -229,15 +250,13 @@ class ActivityRepository extends AbstractRepository
try { try {
if (null !== $replace) { if (null !== $replace) {
$qb = $em->createQueryBuilder(); $qb = $em->createQueryBuilder();
$query = $qb $qb->update(Timesheet::class, 't')
->update(Timesheet::class, 't')
->set('t.activity', ':replace') ->set('t.activity', ':replace')
->where('t.activity = :delete') ->where('t.activity = :delete')
->setParameter('delete', $delete) ->setParameter('delete', $delete)
->setParameter('replace', $replace) ->setParameter('replace', $replace);
->getQuery();
$result = $query->execute(); $qb->getQuery()->execute();
} }
$em->remove($delete); $em->remove($delete);