Commit fe3681ac authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Perimetre sur le table mes indicateurs

parent ce52f2ac
Loading
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -8,17 +8,20 @@ use UnicaenIndicateur\Entity\Db\Abonnement;
use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Service\Abonnement\AbonnementServiceAwareTrait;
use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
use UnicaenIndicateur\Service\Perimetre\PerimetreServiceAwareTrait;
use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;

class IndexController extends AbstractActionController {
    use AbonnementServiceAwareTrait;
    use IndicateurServiceAwareTrait;
    use PerimetreServiceAwareTrait;
    use UserServiceAwareTrait;

    public function indexAction() : ViewModel
    {
        $user = $this->getUserService()->getConnectedUser();
        $role = $this->getUserService()->getConnectedRole();
        $perimetres = $this->getPerimetreService()->getPerimetres($user, $role);

        $abonnements = $this->getAbonnementService()->getAbonnementsByUser($user);
        $abonnements = array_filter($abonnements, function (Abonnement $abonnement) use ($role) {
@@ -30,7 +33,7 @@ class IndexController extends AbstractActionController {
        $result = [];
        foreach ($abonnements as $abonnement) {
            $indicateur = $abonnement->getIndicateur();
            $data = $this->getIndicateurService()->getIndicateurData($indicateur);
            $data = $this->getIndicateurService()->getIndicateurData($indicateur, $perimetres);
            $result[$indicateur->getId()] = count($data[1]);
        }

+8 −1
Original line number Diff line number Diff line
@@ -2,11 +2,12 @@

namespace UnicaenIndicateur\Controller;

use Interop\Container\ContainerInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenIndicateur\Service\Abonnement\AbonnementService;
use UnicaenIndicateur\Service\Indicateur\IndicateurService;
use UnicaenIndicateur\Service\Perimetre\PerimetreServiceInterface;
use UnicaenUtilisateur\Service\User\UserService;

class IndexControllerFactory {
@@ -19,6 +20,11 @@ class IndexControllerFactory {
     */
    public function __invoke(ContainerInterface $container) : IndexController
    {
        $config = $container->get('config');
        $perimetreServiceKey = $container->get($config['unicaen-indicateur']['perimetreService']);
        /** @var PerimetreServiceInterface $perimetreService */
        $perimetreService = $container->get($perimetreServiceKey::class);

        /**
         * @var AbonnementService $abonnementService
         * @var IndicateurService $indicateurService
@@ -31,6 +37,7 @@ class IndexControllerFactory {
        $controller  = new IndexController();
        $controller->setAbonnementService($abonnementService);
        $controller->setIndicateurService($indicateurService);
        $controller->setPerimetreService($perimetreService);
        $controller->setUserService($userService);
        return $controller;
    }
+13 −3
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace UnicaenIndicateur\Controller;

use DateTime;
use Exception;
use Laminas\Http\Response;
use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Entity\Db\Categorie;
@@ -70,9 +71,18 @@ class IndicateurController extends AbstractActionController {
        $role = $this->getUserService()->getConnectedRole();
        $perimetres = $this->getPerimetreService()->getPerimetres($user, $role);


        try {
            $exists = $this->getIndicateurService()->verifierExistanceMaterializedView($indicateur->getViewId());
            if ($exists !== true) {
                $this->getIndicateurService()->createView($indicateur);
            } else {
                $result = $this->getIndicateurService()->getIndicateurData($indicateur, $perimetres);
            }
        } catch (Exception $e) {
            $this->getIndicateurService()->refresh($indicateur);
            $exists = $this->getIndicateurService()->verifierExistanceMaterializedView($indicateur->getViewId());
            if ($exists === true) $result = $this->getIndicateurService()->getIndicateurData($indicateur, $perimetres);
        }

        return new ViewModel([
            'indicateur' => $indicateur,
+8 −3
Original line number Diff line number Diff line
@@ -79,11 +79,9 @@ class IndicateurService
     */
    public function fetch(Indicateur $indicateur, ?array $userPerimetre = null): ?array
    {

        $exist = $this->verifierExistanceMaterializedView($indicateur->getViewId());
        if ($exist === false) return null;


        $sql = "SELECT * FROM " . $indicateur->getViewId() . " WHERE 1=1";

        if ($indicateur->getPerimetre() !== null and $indicateur->getPerimetre() !== "aucun") {
@@ -109,8 +107,15 @@ class IndicateurService
            $res = $this->getObjectManager()->getConnection()->executeQuery($sql, [], []);
            $tmp = $res->fetchAllAssociative();
        } catch (DBA_Driver_Exception $e) {
            try {
                $this->refresh($indicateur);
                $this->getObjectManager()->getConnection()->prepare($sql);
                $res = $this->getObjectManager()->getConnection()->executeQuery($sql, [], []);
                $tmp = $res->fetchAllAssociative();
            } catch(Exception $e) {
                throw new RuntimeException("Un problème est survenu lors de la récupération de des données de l'indicateur.", 0, $e);
            }
        }
        return $tmp;
    }