Merge branch '700-check-socialwork-goal-result' into 'master'

Répare le filtre sur les actions et résultats

See merge request Chill-Projet/chill-bundles!506
This commit is contained in:
Julien Fastré 2023-03-26 10:01:59 +00:00
commit 54bb38bcda

View File

@ -19,7 +19,6 @@ use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Chill\PersonBundle\Templating\Entity\SocialActionRender; use Chill\PersonBundle\Templating\Entity\SocialActionRender;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\CallbackTransformer;
use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\Extension\Core\Type\HiddenType;
@ -52,45 +51,39 @@ class SocialWorkTypeFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where');
if (count($data['actionType']) > 0) { if (count($data['actionType']) > 0) {
$clause = $qb->expr()->in('acpw.socialAction', ':actionType'); $qb
->andWhere($qb->expr()->in('acpw.socialAction', ':actionType'))
if ($where instanceof Andx) { ->setParameter('actionType', $data['actionType']);
$where->add($clause);
} else {
$where = $qb->expr()->andX($clause);
}
$qb->setParameter('actionType', $data['actionType']);
} }
if (count($data['goal']) > 0) { if (count($data['goal']) > 0) {
if (!in_array('goal', $qb->getAllAliases(), true)) { if (!in_array('acpw_goal', $qb->getAllAliases(), true)) {
$qb->join('acpw.goals', 'goal'); $qb->join('acpw.goals', 'acpw_goal');
} }
$where->add( $orX = $qb->expr()->orX();
$qb->expr()->in('goal.id', ':goals') foreach ($data['goal'] as $goal) {
);
$qb->setParameter('goals', $data['goal']); /** @var Goal $goal */
} $andX = $qb->expr()->andX();
$andX->add($qb->expr()->eq('acpw_goal.goal', $goalId = ':goal_'.uniqid()));
$qb->setParameter($goalId, $goal);
if (count($data['result']) > 0) { if (count($data['result']) > 0) {
if (!in_array('result', $qb->getAllAliases(), true)) { $orXResult = $qb->expr()->orX();
$qb->join('acpw.results', 'result'); foreach ($data['result'] as $result) {
/** @var Result $result */
$orXResult->add($qb->expr()->isMemberOf($resultId = ':result_'.uniqid(), 'acpw_goal.results'));
$qb->setParameter($resultId, $result);
} }
$andX->add($orXResult);
$where->add( }
$qb->expr()->in('result.id', ':results') $orX->add($andX);
); }
$qb->andWhere($orX);
$qb->setParameter('results', $data['result']);
} }
$qb->add('where', $where);
} }
public function applyOn(): string public function applyOn(): string