Skip to content

Commit

Permalink
Merge pull request #361 from PnX-SI/fix/relecture
Browse files Browse the repository at this point in the history
Fix/relecture
  • Loading branch information
TheoLechemia authored Jul 31, 2024
2 parents f541bb0 + 7bbf5b1 commit b0381cf
Show file tree
Hide file tree
Showing 15 changed files with 146 additions and 390 deletions.
143 changes: 91 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,39 +1,36 @@
# Module GeoNature générique de suivis
# Module monitoring

## Module générique de gestion des données de protocoles de type suivis

Ce module permet de gérer de façon générique des données de protocoles "simples" articulés jusqu'à 4 niveaux : des groupes de site, puis des sites associés à ces groupes de site (nom, type, localisation) dans lesquels on fait des visites (dates, observateurs) dans lesquelles on peut faire des observations (espèces).

Les 3 niveaux que sont le sites, visites et observations peuvent être complétés des données spécifiques à chaque protocole, qui sont stockées dynamiquement dans la base de données sous forme de jsonb.

![Liste des sites du protocole de test](docs/images/apercu.png)

Le module permet de générer des sous-modules (stockés dans la table `gn_commons.t_modules`) pour chaque protocole de suivi. Ils s'appuient sur les champs fixes des 3 tables `gn_monitoring.t_base_sites`, `gn_monitoring.t_base_visits` et `gn_monitoring.t_observations` qui peuvent chacunes être étendues avec des champs spécifiques et dynamiques stockés dans des champs de type `JSONB`.
## Sommaire

Les champs spécifiques de chaque sous-module sont définis dans des fichiers de configuration au format json.
* [Concepts du module](#concepts)
* [Installation du module](#installation)
* [Installation d'un sous module](#installation-dun-sous-module)
* [Configuration des champs spécifiques d'un sous-module](docs/sous_module.md)
* [Gestion des sites et groupes de site](docs/gestion_sites_groupes_de_site.md)
* [Permissions](#permissions)
* [Base de données](#base-de-données)
* [Gestion de la synthèse](docs/synthese.md)
* [Documentation technique](docs/documentation_technique.md)
* [Liste des commandes](docs/commandes.md)

Pour chaque sous-module, correspondant à un protocole spécifique de suivi, il est ainsi possible d'ajouter dynamiquement des champs de différent type (liste, nomenclature, booléen, date, radio, observateurs, texte, taxonomie...). Ceux-ci peuvent être obligatoires ou non, affichés ou non et avoir des valeurs par défaut. Les listes d'observateurs et d'espèces peuvent aussi être définies au niveau de chaque sous-module, en fonction du contexte du protocole de suivi.
## Concepts

Des fonctions SQL ainsi qu'une vue définie pour chaque protocole permettent d'alimenter automatiquement la synthèse de GeoNature à partir des données saisies dans chaque sous-module.
Ce module permet de générer de façon générique des interfaces de saisies correspondant à des protocoles de suivi.
Par "suivi", on entend un protocole dont le point d'entrée est un site géographique, sur lequel on va revenir régulièrement effectuer des relevés. Il s'oppose par sa structure au module "Occtax" dont l'objecif est de faire de la saisie de données opportunistes (sans revenir régulièrement sur le même site de suivi).

Via le module monitoring on peut également entrer directement via les sites et groupes de sites. Il est possible de crééer des groups de sites, des sites, associer des sites à des groupes de sites et ensuite pouvoir associer ces sites / groupes de site à différents sous modules.
Le module est articulé autour des trois concepts :

![Page d'accueil accès aux sites](docs/images/page_accueil_monitoring_acces_sites.png)
- les sites : l'objet géographique de suivi (qui peuvent être regroupés en groupe de sites)
- les visites : une visite est effectué sur un site (date, observateurs)
- le observations : observations faites durant la visite (espèces)

Les sites et groupes de sites sont désormais multi protocoles.
Les 3 niveaux que sont le site, les visites et les observations sont fourni avec un tronc commun (les champs génériques) qui peuvent être complétés par des champs spécifiques à chaque protocole. Ces champs spécifiques sont défini par des fichiers de configurations JSON.
Pour chaque sous-module, correspondant à un protocole spécifique de suivi, il est ainsi possible d'ajouter dynamiquement des champs de différents types (liste, nomenclature, booléen, date, radio, observateurs, texte, taxonomie...). Ceux-ci peuvent être obligatoires ou non, affichés ou non et avoir des valeurs par défaut (voir doc détaillé : [Création d'un sous-module](docs/sous_module.md)
)

![MCD du schema gn_monitoring](docs/images/2023-10-MCD_schema_monitoring.png)
![Liste des sites du protocole de test](docs/images/apercu.png)

## Sommaire

* [Installation](#installation)
* [Gestion de la synthèse](docs/synthese.md)
* [Documentation technique](docs/documentation_technique.md)
* [Création d'un sous-module](docs/sous_module.md)
* [Gestion des sites et groupes de site](docs/gestion_sites_groupes_de_site.md)
* [Mise à jour du module](docs/MAJ.md)
* [Liste des commandes](docs/commandes.md)
* [Permissions](#permissions)

## Installation

Expand Down Expand Up @@ -78,6 +75,10 @@ mkdir ~/geonature/backend/media/monitorings

Il vous faut désormais attribuer des permissions aux groupes ou utilisateurs que vous souhaitez, pour qu'ils puissent accéder et utiliser le module (voir <https://docs.geonature.fr/admin-manual.html#gestion-des-droits>). Si besoin une commande permet d'attribuer automatiquement toutes les permissions dans tous les modules à un groupe ou utilisateur administrateur.

### Mise à jour

Pour mettre à jour le modue monitoring, suivre la documentation de [mise à jour d'un module GeoNature](https://docs.geonature.fr/installation.html#mise-a-jour-du-module)

### Configuration générale du module monitoring

Un fichier de config `monitorings_config.toml.example` peut être modifié puis copié à la racine du dossier de config de GeoNature : `~/geonature/config`.
Expand All @@ -86,22 +87,7 @@ Trois champs sont paramétrable :

- `TITLE_MODULE` : Titre présent sur la page d'accueil du module monitoring
- `DESCRIPTION_MODULE` : Description du module monitoring également présente sur la page d'accueil
- `CODE_OBSERVERS_LIST` : Liste d'observateur qui est utilisé pour le fichier de config de `site.json` , qui permet d'avoir une liste d'observateur spécifique aux créateurs lorsqu'on entre directement par les sites/groupe de site . (Par défaut c'est la liste d'observateur occtax qui est utilisée)

<details open><summary> Exemple d'utilisation du paramètre `CODE_OBSERVERS_LIST`</summary>

```json
"id_inventor": {
"type_widget": "observers",
"attribut_label": "Observateur",
"type_util": "user",
"code_list":"CODE_OBSERVERS_LIST",
"required": true,
"multi_select": false
}
```

</details>
- `CODE_OBSERVERS_LIST` : Code de la liste d'observateur qui est utilisé par défaut

### Installation d'un sous-module

Expand Down Expand Up @@ -195,12 +181,18 @@ Le formulaire d'édition du sous-module s'affiche et vous pouvez choisir les var
* Afficher dans le menu ? *(non obligatoire, non affiché par défaut)* :
* On peut décider que le sous-module soit accessible directement depuis le menu de gauche de GeoNature.
* `active_frontend`
* Type de site :
* Permet d'associer des sites créé dans le gestionnaire de site à un module. Tous les sites dont le type est défini ici remonteront dans le module ( [voir documentation sur le gestionnaire de sites (#gestionnaire-de-sites) )
* Options spécifiques du sous-module :
* Un sous-module peut présenter des options qui lui sont propres et définies dans les paramètres spécifiques du sous-module.


### Exemples de sous-modules
### Configuration des champs spécifiques du sous-module

D'autres exemples de sous-modules sont disponibles sur le dépôt
Maintenant que le sous-module est installé, vous pouvez ajouter des champs spécifiques pour le faire correspondre à votre protocole de suivi.
Le documentation détaillé de la configuration des champs additionnels est ici : [Configuration des champs d'un sous module](docs/sous_module.md)

Des exemples de sous-modules sont disponibles sur le dépôt
<https://github.com/PnX-SI/protocoles_suivi/> :

* Protocole de suivi des oedicnèmes,
Expand All @@ -209,22 +201,69 @@ D'autres exemples de sous-modules sont disponibles sur le dépôt
* Protocole Suivi Temporel des Oiseaux de Montagne (STOM)
* Autres...

## Gestionnaire de sites

Chaque module permet de créer ses propres sites et groupe de sites. Cependant certains sites peuvent faire l'objet de plusieurs protocoles de suivi, c'est pouquoi le module monitoring offre la possibilité de créer des sites et des groupes de site dans le **gestionnaire de site** et de les mobiliser dans plusieurs sous-modules.

![Page d'accueil accès aux sites](docs/images/page_accueil_monitoring_acces_sites.png)

Dans le gestionnaire de site il est possible de créer, éditer, supprimer, modifier des sites et des groupes de site de manière indépendante à la gestion de sous modules. Il est également possible de saisir directement des visites et des observations en rattachant les visites au sous-module que l'on souhaite.

> [!IMPORTANT]
> **Associer un site à un module**
>
> Plutôt que d'associer un à un les sites à des modules, l'association entre un site et un module se fait via la notion de **type de site**. Une type de site est un concept permettant de regrouper des sites qui font l'objet de multiples protocoles et qui partage potentiellement une série de descripteurs communs.
>
> Un "point d'écoute" qui va par exemple faire l'objet de plusieurs protocoles ornithologiques (STOC, oiseaux migrateurs etc...) peut être définit comme un type de site.
>
> Lors de la configuration d'un module (en interface), on doit associer le module à un ou des types de site. Tous les sites créés via le gestionnaire de site dont le type correspond à celui définit au niveau du module, remonteront dans la liste des sites du module.
>
> **Associer un groupe de sites à un module**
>
> L'association entre un groupe de site et un module se fait elle directement. Lorsque l'on crée un groupe de site dans le gestionnaire de site, on l'associe directement à un ou plusieurs groupes de site

**Définir des champs spécifique à un type de site**

Il est possible de définir des champs spécifiques communs à des type de sites.
Contrairement aux configurations des modules, celle-ci ne se fait pas dans un fichier JSON, mais dans le backoffice de GeoNature (rubrique monitoring / type de sites).

![admin type de sites](docs/images/admin_type_site.png)

La syntaxe est la même que pour la création de champs d'un sous-module (voir [Création d'un sous-module](docs/sous_module.md)
). La clé `specific` permettant de configurer les champs et la clé `display_properties` d'afficher les champs sur les fiches info des sites.

## Permissions

Les permissions peuvent désormais être définies avec une notion de portée ('mes données', 'les données de mon organisme', 'toutes les données' si on ne précise pas de portée mais qu'on accorde une permission). Ces permissions peuvent être définies sur chaque objet défini ci dessous.

La gestion des permissions pour les rôles (utilisateur ou groupe) se réalise au niveau de l'interface d'administration des permissions de GeoNature.

Les permissions sont définis pour chaque type d'objet (modules, groupes de sites, sites, visites, observations et types de site) :
Les permissions sont définis par sous-modules pour chaque type d'objet (modules, groupes de sites, sites, visites, observations et types de site) :

- MONITORINGS_MODULES - R : permet a l'utilisateur d'accéder au module, de le voir dans la liste des modules
- MONITORINGS_MODULES - U : action administrateur qui permet de configurer le module et de synchroniser la synthèse
- MONITORINGS_MODULES - E : action qui permet aux utilisateurs d'exporter les données (si défini par le module)
- MONITORINGS_GRP_SITES - CRUD : action de lire, créer, modifier, supprimer un groupe de site
- MONITORINGS_SITES - CRUD : action de lire, créer, modifier, supprimer un site
- MONITORINGS_VISITES - CRUD : action de lire, créer, modifier, supprimer les visites, observations, observations détails
- TYPES_SITES- CRUD : action de lire, créer, modifier, supprimer les types de sites via l'interface administrateur
- `MONITORINGS_MODULES` - R : permet a l'utilisateur d'accéder au module, de le voir dans la liste des modules
- `MONITORINGS_MODULES` - U : action administrateur qui permet de configurer le module et de synchroniser la synthèse
- `MONITORINGS_MODULES` - E : action qui permet aux utilisateurs d'exporter les données (si défini par le module)
- `MONITORINGS_GRP_SITES` - CRUD : action de lire, créer, modifier, supprimer un groupe de site
- `MONITORINGS_SITES` - CRUD : action de lire, créer, modifier, supprimer un site
- `MONITORINGS_VISITES` - CRUD : action de lire, créer, modifier, supprimer les visites, observations, observations détails
- `TYPES_SITES`- CRUD : action de lire, créer, modifier, supprimer les types de sites via l'interface administrateur (uniquement pour le module monitorings et non les sous modules)

Par défaut, dès qu'un utilisateur a un droit supérieur à 0 pour une action (c-a-d aucune portée) il peut réaliser cette action.

Il est possible de mettre à jour les permissions disponibles pour un module en utilisant la commande `update_module_available_permissions`


## Base de données

Le module permet de générer des sous-modules (stockés dans la table `gn_commons.t_modules`) pour chaque protocole de suivi. Ils s'appuient sur les champs fixes des 3 tables `gn_monitoring.t_base_sites`, `gn_monitoring.t_base_visits` et `gn_monitoring.t_observations` qui peuvent chacunes être étendues avec des champs spécifiques et dynamiques stockés dans des champs de type `JSONB`.


Des fonctions SQL ainsi qu'une vue définie pour chaque protocole permettent d'alimenter automatiquement la synthèse de GeoNature à partir des données saisies dans chaque sous-module.



Les sites et groupes de sites multi modules.

![MCD du schema gn_monitoring](docs/images/2023-10-MCD_schema_monitoring.png)

5 changes: 4 additions & 1 deletion backend/gn_module_monitoring/command/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,14 @@ def insert_module_available_permissions(module_code, perm_object_code, session):
)
).scalar_one()
except NoResultFound:
label = f"{ACTION_LABEL[action]} {object_label}"
if action == "E" and perm_object.code_object == "MONITORINGS_MODULES":
label = "Export les données du module"
perm = PermissionAvailable(
module=module,
object=perm_object,
action=permaction,
label=f"{ACTION_LABEL[action]} {object_label}",
label=label,
scope_filter=True,
)
session.add(perm)
Expand Down
12 changes: 8 additions & 4 deletions backend/gn_module_monitoring/config/generic/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@
"application": "GeoNature",
"required": true,
"type_util": "observer_list",
"definition": "Liste des observateurs. À gérer dans UsersHub."
"definition": "Liste des observateurs. À gérer dans UsersHub.",
"designStyle": "bootstrap"
},

"id_list_taxonomy": {
Expand All @@ -82,7 +83,8 @@
"required": true,
"type_util": "taxonomy_list",
"data_path": "data",
"definition": "Liste des taxons. À gérer dans TaxHub."
"definition": "Liste des taxons. À gérer dans TaxHub.",
"designStyle": "bootstrap"
},

"b_synthese": {
Expand Down Expand Up @@ -111,7 +113,8 @@
"value": "lb_nom"
}
],
"required": true
"required": true,
"designStyle": "bootstrap"
},

"active_frontend": {
Expand All @@ -131,7 +134,8 @@
"application": "GeoNature",
"required": true,
"data_path": "items",
"definition": "Permet de paramétrer la compatibilité de ce module avec les types de sites"
"definition": "Permet de paramétrer la compatibilité de ce module avec les types de sites",
"designStyle": "bootstrap"
},

"medias": {
Expand Down
5 changes: 3 additions & 2 deletions backend/gn_module_monitoring/config/generic/site.json
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,12 @@
"application": "GeoNature",
"required": true,
"nullDefault": true,
"definition": "Permet de n'avoir que les types de site lié au module"
"definition": "Permet de n'avoir que les types de site lié au module",
"designStyle": "bootstrap"
},
"id_sites_group": {
"hidden": true,
"required": false
}
}
}
}
9 changes: 4 additions & 5 deletions backend/gn_module_monitoring/config/repositories.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ def config_object_from_files(module_code, object_type, custom=None, is_sites_gro
"application": "GeoNature",
"required": True,
"nullDefault": True,
"designStyle": "bootstrap",
"definition": "Permet de n'avoir que les types de site lié au module",
}

Expand Down Expand Up @@ -195,11 +196,9 @@ def get_config(module_code=None, force=False):
config["custom"][var_name] = getattr(module, field_name)
config["module"][field_name] = getattr(module, field_name)

# # Types de sites
# if hasattr(module, field_name):
# config["module"]["types_site"] = [
# ts.id_nomenclature_type_site for ts in getattr(module, "types_site")
# ]
config["custom"]["__MODULE.TYPES_SITE"] = [
type_site.as_dict() for type_site in module.types_site
]

config["custom"]["__MONITORINGS_PATH"] = get_monitorings_path()

Expand Down
54 changes: 0 additions & 54 deletions docs/MAJ.md

This file was deleted.

Loading

0 comments on commit b0381cf

Please sign in to comment.