Features: [export] Apply person filters and aggreators on Count Evaluation

This commit is contained in:
Julien Fastré 2022-11-14 10:46:13 +01:00
parent 91e3588e76
commit 400770123a
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB

View File

@ -15,25 +15,22 @@ use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
use Chill\PersonBundle\Entity\Person\PersonCenterHistory; use Chill\PersonBundle\Entity\Person\PersonCenterHistory;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use LogicException; use LogicException;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class CountEvaluation implements ExportInterface, GroupedExportInterface class CountEvaluation implements ExportInterface, GroupedExportInterface
{ {
private EntityRepository $repository; private EntityManagerInterface $entityManager;
public function __construct( public function __construct(
EntityManagerInterface $em EntityManagerInterface $em
) { ) {
$this->repository = $em->getRepository(AccompanyingPeriod::class); $this->entityManager = $em;
} }
public function buildForm(FormBuilderInterface $builder) public function buildForm(FormBuilderInterface $builder)
@ -96,22 +93,19 @@ class CountEvaluation implements ExportInterface, GroupedExportInterface
return $el['center']; return $el['center'];
}, $acl); }, $acl);
$qb = $this->repository->createQueryBuilder('acp'); $qb = $this->entityManager->createQueryBuilder();
if (!in_array('acpw', $qb->getAllAliases(), true)) {
$qb->join('acp.works', 'acpw');
}
if (!in_array('workeval', $qb->getAllAliases(), true)) {
$qb->join('acpw.accompanyingPeriodWorkEvaluations', 'workeval');
}
$qb $qb
->from(AccompanyingPeriod\AccompanyingPeriodWorkEvaluation::class, 'workeval')
->join('workeval.accompanyingPeriodWork', 'acpw')
->join('acpw.accompanyingPeriod', 'acp')
->join('acp.participations', 'acppart')
->join('acppart.person', 'person')
->andWhere('acppart.startDate != acppart.endDate OR acppart.endDate IS NULL')
->andWhere( ->andWhere(
$qb->expr()->exists( $qb->expr()->exists(
'SELECT 1 FROM ' . AccompanyingPeriodParticipation::class . ' acl_count_part 'SELECT 1 FROM ' . PersonCenterHistory::class . ' acl_count_person_history WHERE acl_count_person_history.person = person
JOIN ' . PersonCenterHistory::class . ' acl_count_person_history WITH IDENTITY(acl_count_person_history.person) = IDENTITY(acl_count_part.person) AND acl_count_person_history.center IN (:authorized_centers)
WHERE acl_count_part.accompanyingPeriod = acp.id AND acl_count_person_history.center IN (:authorized_centers)
' '
) )
) )
@ -133,6 +127,7 @@ class CountEvaluation implements ExportInterface, GroupedExportInterface
Declarations::EVAL_TYPE, Declarations::EVAL_TYPE,
Declarations::SOCIAL_WORK_ACTION_TYPE, Declarations::SOCIAL_WORK_ACTION_TYPE,
Declarations::ACP_TYPE, Declarations::ACP_TYPE,
Declarations::PERSON_TYPE,
]; ];
} }
} }