Commit f5070362 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Fix : Les organisations s'affichent correctement pour les responsables de structure.

parent d47b8ffb
Loading
Loading
Loading
Loading
Loading
+10 −18
Original line number Diff line number Diff line
@@ -2400,11 +2400,13 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                $startEmpty = false;
            }

            $organizationsIdsPerimeter = null;

            if ($this->getOrganizationPerimeter()) {
                $include = $this->params()->fromQuery('include', null);
                if ($include) {
                    foreach ($include as $index => $value) {
                        $include[$index] = intval($value);
                        $include[] = intval($value);
                    }
                    $include = array_intersect(
                        $include,
@@ -2413,6 +2415,11 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
                } else {
                    $include = $this->getOrganizationPerimeter();
                }

                // IDS concernés
                $organizationsIdsPerimeter = $this->getActivityService()
                    ->getActivityRepository()
                    ->getIdsWithOrganizations($include);
            }

            // Type de recherche supportée
@@ -2615,14 +2622,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
            if (!$search && count($criteria) === 0) {
                $ids = [];
                if ($include) {
                    $organizationsPerimeterIds = implode(',', $include);
                    $qb->andWhere(
                        'p1.organization IN('
                        . $organizationsPerimeterIds
                        . ') OR p2.organization IN('
                        . $organizationsPerimeterIds
                        . ')'
                    );
                    $qb->andWhere('c.id IN(' . implode(',', $organizationsIdsPerimeter) .')');
                }
            } else {
                if ($search) {
@@ -3048,15 +3048,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif

            // FILTRE STATIC SUR LES ORGA
            if ($this->getOrganizationPerimeter()) {
                $organizationsPerimeterIds = implode(',', $include);

                $qb->andWhere(
                    'p1.organization IN('
                    . $organizationsPerimeterIds
                    . ') OR p2.organization IN('
                    . $organizationsPerimeterIds
                    . ')'
                );
                $qb->andWhere('c.id IN(' . implode(',', $organizationsIdsPerimeter) .')');
            }

            $activities = null;
+13 −0
Original line number Diff line number Diff line
@@ -55,6 +55,19 @@ class ActivityRepository extends EntityRepository
            ->leftJoin('p2.organization', 'orga2');
    }

    public function getIdsWithOrganizations( array $organisationsIds ): array
    {
        $queryBuilder = $this->baseQueryWithOrganizationOf()
            ->where('orga1.id IN (:organizations_ids) OR orga2.id IN (:organizations_ids)');

        $queryBuilder->setParameters(
            [
                'organizations_ids' => $organisationsIds
            ]
        );
        return array_map('current', $queryBuilder->getQuery()->getArrayResult());
    }

    /**
     * Retourne les IDS des activités impliquant une organisation d'un des types spécifiés.
     *