refactored repositories and DB queries (#5026)
* removed unused teams from export order * added new paginator for query instead of querybuilder * added field hydrate enums * hide PARTIAL deprecation * never log deprecations in production * replaced InvoiceLoader with native Doctrine feature * prevent excessive permission queries * support loading customers of team * improved findByIds * internalized API * fix null string deprecations
This commit is contained in:
@@ -29,7 +29,6 @@ use App\Reporting\ProjectInactive\ProjectInactiveQuery;
|
||||
use App\Reporting\ProjectView\ProjectViewModel;
|
||||
use App\Reporting\ProjectView\ProjectViewQuery;
|
||||
use App\Repository\ActivityRepository;
|
||||
use App\Repository\Loader\ProjectLoader;
|
||||
use App\Repository\ProjectRepository;
|
||||
use App\Repository\TimesheetRepository;
|
||||
use App\Repository\UserRepository;
|
||||
@@ -85,7 +84,7 @@ class ProjectStatisticService
|
||||
|
||||
$qb = $this->projectRepository->createQueryBuilder('p');
|
||||
$qb
|
||||
->select('p, c')
|
||||
->select('p')
|
||||
->leftJoin('p.customer', 'c')
|
||||
->andWhere($qb->expr()->eq('p.visible', true))
|
||||
->andWhere($qb->expr()->eq('c.visible', true))
|
||||
@@ -108,15 +107,9 @@ class ProjectStatisticService
|
||||
;
|
||||
|
||||
$this->projectRepository->addPermissionCriteria($qb, $user);
|
||||
$query = $this->projectRepository->prepareProjectQuery($qb->getQuery());
|
||||
|
||||
/** @var Project[] $projects */
|
||||
$projects = $qb->getQuery()->getResult();
|
||||
|
||||
// pre-cache customer objects instead of joining them
|
||||
$loader = new ProjectLoader($this->projectRepository->createQueryBuilder('p')->getEntityManager(), false, false, false);
|
||||
$loader->loadResults($projects);
|
||||
|
||||
return $projects;
|
||||
return $this->projectRepository->getProjects($query);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -128,6 +121,10 @@ class ProjectStatisticService
|
||||
$begin = $dateRange->getBegin();
|
||||
$end = $dateRange->getEnd();
|
||||
|
||||
if ($begin === null || $end === null) {
|
||||
throw new \InvalidArgumentException('Missing date in date-range for project statistics');
|
||||
}
|
||||
|
||||
$qb = $this->projectRepository->createQueryBuilder('p');
|
||||
$qb
|
||||
->select('p')
|
||||
@@ -191,15 +188,9 @@ class ProjectStatisticService
|
||||
}
|
||||
|
||||
$this->projectRepository->addPermissionCriteria($qb, $user);
|
||||
$query = $this->projectRepository->prepareProjectQuery($qb->getQuery());
|
||||
|
||||
/** @var Project[] $projects */
|
||||
$projects = $qb->getQuery()->getResult();
|
||||
|
||||
// pre-cache customer objects instead of joining them
|
||||
$loader = new ProjectLoader($this->projectRepository->createQueryBuilder('p')->getEntityManager(), false, false, false);
|
||||
$loader->loadResults($projects);
|
||||
|
||||
return $projects;
|
||||
return $this->projectRepository->getProjects($query);
|
||||
}
|
||||
|
||||
public function getBudgetStatisticModel(Project $project, DateTimeInterface $today): ProjectBudgetStatisticModel
|
||||
@@ -687,15 +678,9 @@ class ProjectStatisticService
|
||||
}
|
||||
|
||||
$this->projectRepository->addPermissionCriteria($qb, $user);
|
||||
$query = $this->projectRepository->prepareProjectQuery($qb->getQuery());
|
||||
|
||||
/** @var Project[] $projects */
|
||||
$projects = $qb->getQuery()->getResult();
|
||||
|
||||
// pre-cache customer objects instead of joining them
|
||||
$loader = new ProjectLoader($this->projectRepository->createQueryBuilder('p')->getEntityManager(), false, false, false);
|
||||
$loader->loadResults($projects);
|
||||
|
||||
return $projects;
|
||||
return $this->projectRepository->getProjects($query);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user