diff --git a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php index c4b7abfcf..4f0d368d5 100644 --- a/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php +++ b/src/Bundle/ChillPersonBundle/Export/Filter/AccompanyingCourseFilters/UserJobFilter.php @@ -11,6 +11,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters; +use Chill\MainBundle\Entity\User\UserJobHistory; use Chill\MainBundle\Entity\UserJob; use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Form\Type\PickRollingDateType; @@ -22,19 +23,16 @@ use Chill\PersonBundle\Export\Declarations; use Doctrine\ORM\QueryBuilder; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\FormBuilderInterface; -use Symfony\Component\Security\Core\Security; class UserJobFilter implements FilterInterface { - private const A = 'acp_ujob_filter_uhistory'; + private const PREFIX = 'acp_filter_user_job'; - private const AU = 'acp_ujob_filter_uhistory_user'; - - private const P = 'acp_ujob_filter_date'; - - private const PJ = 'acp_ujob_filter_job'; - - public function __construct(private readonly TranslatableStringHelper $translatableStringHelper, private readonly UserJobRepositoryInterface $userJobRepository, private readonly RollingDateConverterInterface $rollingDateConverter) {} + public function __construct( + private readonly TranslatableStringHelper $translatableStringHelper, + private readonly UserJobRepositoryInterface $userJobRepository, + private readonly RollingDateConverterInterface $rollingDateConverter + ) {} public function addRole(): ?string { @@ -43,26 +41,42 @@ class UserJobFilter implements FilterInterface public function alterQuery(QueryBuilder $qb, $data) { + $p = self::PREFIX; + $qb - ->join('acp.userHistories', self::A) + ->leftJoin("acp.userHistories", "{$p}_userHistory") + ->leftJoin("{$p}_userHistory.user", "{$p}_user") + ->leftJoin( + UserJobHistory::class, + "{$p}_jobHistory", + $qb->expr()->eq("{$p}_jobHistory", "{$p}_user") + ) ->andWhere( $qb->expr()->andX( - $qb->expr()->lte(self::A . '.startDate', ':' . self::P), + $qb->expr()->lte("{$p}_userHistory.startDate", ":{$p}_date"), $qb->expr()->orX( - $qb->expr()->isNull(self::A . '.endDate'), - $qb->expr()->gt(self::A . '.endDate', ':' . self::P) + $qb->expr()->isNull("{$p}_userHistory" . ".endDate"), + $qb->expr()->gt("{$p}_userHistory.endDate", ":{$p}_date") ) ) ) - ->setParameter( - self::P, - $this->rollingDateConverter->convert($data['date_calc']) - ) - ->join(self::A . '.user', self::AU) ->andWhere( - $qb->expr()->in(self::AU . '.userJob', ':' . self::PJ) + $qb->expr()->andX( + $qb->expr()->lte("{$p}_jobHistory.startDate", ":{$p}_date"), + $qb->expr()->orX( + $qb->expr()->isNull("{$p}_jobHistory" . ".endDate"), + $qb->expr()->gt("{$p}_jobHistory.endDate", ":{$p}_date") + ) + ) ) - ->setParameter(self::PJ, $data['jobs']); + ->andWhere( + $qb->expr()->in("{$p}_jobHistory.job", ":{$p}_job") + ) + ->setParameters([ + ["{$p}_job", $data["jobs"]], + ["{$p}_date", $this->rollingDateConverter->convert($data["date_calc"])] + ]) + ; } public function applyOn() @@ -106,7 +120,7 @@ class UserJobFilter implements FilterInterface ]; } - public function getTitle() + public function getTitle():string { return 'export.filter.course.by_user_job.Filter by user job'; }