improve recent activities (#550)
This commit is contained in:
@@ -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',
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user