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

Refactoring + doc

parent 5bb92ffe
Loading
Loading
Loading
Loading
Loading

CHANGELOG.md

0 → 100644
+8 −0
Original line number Diff line number Diff line
Version 6.2.0 17/01/2025

* Intégration d'une première version des périmétres 

/!\ nouvelle colonne `perimetre` dans la table `unicaen_indicateur_indicateur` /!\
```sql
alter table unicaen_indicateur_indicateur add perimetre varchar(256) default 'aucun' not null;
```
+4 −0
Original line number Diff line number Diff line
@@ -31,4 +31,8 @@ return [
            ],
        ],
    ],

    'unicaen-indicateur' => [
        'perimetreService' => 'Chemin vers le service retournant les périmètres',
    ],
];
 No newline at end of file
+50 −12
Original line number Diff line number Diff line
Module Unicaen Indiciateur
=======================
------------------------
Module Unicaen Indicateur : `unicaen/indicateur`
==========================
----

Description
-----------
Le module **unicaen/indicateur** est en charge 
# Périmètres

Description du fonctionnement
============================
## Principe des périmètres

Tables pour les données du modules
==================================
La notion de périmètres permet de filtrer les résultats d'un indicateur en fonction de ceux-ci.
Ce qui permet de ne présenter des résultats que dans le périmètre d'action d'un User/Role.

Dépendances extérieurs
======================
Exemple :
```markdown
Pour un indicateur présentant des inscriptions à des formations pour lequel on précise le périmètre de structure des inscrit·es.
Alors, on pourra filtrer les données en fonction des structures associées aux responsables.

Si on expose un périmètre de domaine des formations sur ce même indicateur.
Alors, on pourra filtrer les données pour les référents selon les domaines dont ils sont référents
```

## Périmètres implementés/hardcodés

Seulement un périmètre est aujourd'hui implemnté dans la bibliothèque :

* Structure : 
Filtrage selon les structures associés aux rôles. 
Ce périmètre suppose d'ajouter la colonne `perimetre_structure_id` dans les colonnes déclarées de l'indicateur.

**N.B.** : Les colonnes de travail seront masqué des affichages et exportations.

## Récupération des périmètres depuis l'application maîtresse

Dans la configuration de la biliothèque, il est nécessaire de déclarer le chemin vers un service en charge de renvoyer les périmètres.

peut être déclarer dans le fichier [unicaen-indicateur.global.php](config/unicaen-indicateur.global.php.dist)
```php
return [
    'unicaen-indicateur' => [
            'perimetreService' => PerimetreService::class,
    ],
];
```
Cette classe devra implentée l'interface [PerimetreServiceInterface](src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceInterface.php).
La fonction getPerimetres dans le contrat de l'interface prend en paramètres un utilisateur `AbstractUser` et  un rôle `AbstractRole` et retour un tabeau de chaine de caractères contenant les périmètres.

Par exemple pour les périmètres de structure 5 et 12 et de domaine 1 cette méthode retourne :
```php
['STRUCTURE_5','STRUCTURE_12', 'DOMAINE_1']
```

Améliorations
-------------
1. **PERIMÈTRE**  Exposer plusieurs périmètres

1. **PERIMÈTRE**  Déclarer des périmètres hors de l'application
 No newline at end of file
+6 −20
Original line number Diff line number Diff line
@@ -67,29 +67,11 @@ class IndicateurController extends AbstractActionController {

        $user = $this->getUserService()->getConnectedUser();
        $role = $this->getUserService()->getConnectedRole();

        $perimetres = $this->getPerimetreService()->getPerimetres($user, $role);

        $indicateurPerimetre = $indicateur->getPerimetre();
        $perimetreValides = array_filter($perimetres, function(string $p) use ($indicateurPerimetre) {
            return (strtolower(explode('_', $p)[0]) === strtolower($indicateurPerimetre));
        });
        $userPerimetre = array_map(function ($p) { return explode('_', $p)[1];}, $perimetreValides);

//        $userPerimetre = null;
//        switch ($indicateur->getPerimetre()) {
//            case Indicateur::PERIMETRE_STRUCTURE:
////                $userPerimetre = $user->getPerimetreStructure();
//                $userPerimetre = $userStructurePerimetre;
//                break;
//            case Indicateur::PERIMETRE_ROLE:
////                $userPerimetre = $user->getPerimetreRole();
//                $userPerimetre = $userRolePerimetre;
//                break;
//        }

        $exists = $this->getIndicateurService()->verifierExistanceMaterializedView($indicateur->getViewId());
        if ($exists === true) $result = $this->getIndicateurService()->getIndicateurData($indicateur, $userPerimetre);
        if ($exists === true) $result = $this->getIndicateurService()->getIndicateurData($indicateur, $perimetres);

        return new ViewModel([
            'indicateur' => $indicateur,
@@ -227,7 +209,11 @@ class IndicateurController extends AbstractActionController {
        $date = new DateTime();
        $filename = "preecog_".$indicateur->getViewId()."_".$date->format('Ymd-Hms').".csv";

        $result = $this->getIndicateurService()->getIndicateurData($indicateur);
        $user = $this->getUserService()->getConnectedUser();
        $role = $this->getUserService()->getConnectedRole();
        $perimetres = $this->getPerimetreService()->getPerimetres($user, $role);

        $result = $this->getIndicateurService()->getIndicateurData($indicateur, $perimetres);

        $CSV = new CsvModel();
        $CSV->setDelimiter(';');
+0 −1
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@ class Indicateur {

    const PERIMETRE_AUCUN = 'aucun';
    const PERIMETRE_STRUCTURE = 'structure';
    const PERIMETRE_ROLE = 'role';

    private ?int $id = null;
    private ?string $code = null;
Loading