leftJoin('activity.users', "{$p}_user") ->leftJoin( UserJobHistory::class, "{$p}_history", Expr\Join::WITH, $qb->expr()->eq("{$p}_history.user", "{$p}_user") ) // job_at based on activity.date ->andWhere( $qb->expr()->andX( $qb->expr()->lte("{$p}_history.startDate", 'activity.date'), $qb->expr()->orX( $qb->expr()->isNull("{$p}_history.endDate"), $qb->expr()->gt("{$p}_history.endDate", 'activity.date') ) ) ) ->addSelect("IDENTITY({$p}_history.job) AS {$p}_select") ->addGroupBy("{$p}_select"); } public function applyOn(): string { return Declarations::ACTIVITY; } public function buildForm(FormBuilderInterface $builder): void {} public function getNormalizationVersion(): int { return 1; } public function normalizeFormData(array $formData): array { return []; } public function denormalizeFormData(array $formData, int $fromVersion): array { return []; } public function getFormDefaultData(): array { return []; } public function getLabels($key, array $values, $data): callable { return function ($value): string { if ('_header' === $value) { return 'Users \'s job'; } if (null === $value || '' === $value) { return ''; } $j = $this->userJobRepository->find($value); return $this->translatableStringHelper->localize( $j->getLabel() ); }; } public function getQueryKeys($data): array { return [self::PREFIX.'_select']; } public function getTitle(): string { return 'export.aggregator.activity.by_user_job.Aggregate by users job'; } }