Skip to content

Commit

Permalink
Merge pull request #238 from naturalsolutions/dev-suivi-eolien-rebased
Browse files Browse the repository at this point in the history
Dev suivi eolien rebased on develop
  • Loading branch information
amandine-sahl authored Dec 8, 2023
2 parents 9e9878e + 3096589 commit c710880
Show file tree
Hide file tree
Showing 185 changed files with 11,224 additions and 660 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ jobs:
-e ..[tests] \
-r requirements-dev.txt
working-directory: ./dependencies/GeoNature/backend
- name: Install monitoring module
run: |
python -m pip install -e .
working-directory: .
- name: Install database
run: |
geonature db upgrade geonature@head -x local-srid=2154
Expand Down
61 changes: 47 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## 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 en 3 niveaux : des sites (nom, type, localisation) dans lesquels on fait des visites (dates, observateurs) dans lesquelles on peut faire des observations (espèces).
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).

Ces 3 niveaux 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.
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)

Expand All @@ -16,14 +16,21 @@ Pour chaque sous-module, correspondant à un protocole spécifique de suivi, il

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.

![MCD du schema gn_monitoring](docs/images/2020-06-MCD-monitoring.jpg)
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.

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

Les sites et groupes de sites sont désormais multi protocoles.

![MCD du schema gn_monitoring](docs/images/2023-10-MCD_schema_monitoring.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)
Expand Down Expand Up @@ -69,7 +76,32 @@ Créer le dossier suivant dans le dossier `media` de GeoNature
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.
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.

### 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`.

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>

### Installation d'un sous-module

Expand Down Expand Up @@ -125,7 +157,7 @@ Modules installés :
- module2: Module 2 (Deuxième exemple de module)
```

Il vous faut désormais attribuer des permissions aux groupes ou utilisateurs que vous souhaitez, pour qu'ils puissent accéder et utiliser le sous-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.
Il vous faut désormais attribuer des permissions aux groupes ou utilisateurs que vous souhaitez, pour qu'ils puissent accéder et utiliser le sous-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.

### Configurer le sous-module

Expand Down Expand Up @@ -173,19 +205,20 @@ D'autres exemples de sous-modules sont disponibles sur le dépôt

## Permissions

Les permissions ne sont implémentées que partiellement. La notion de portée (mes données, les données de mon organisme, toutes les données) n'est pas prise en compte. Si un utilisateur a le droit de réaliser une action sur un type d'objet, il peut le faire sur l'ensemble des données.
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 et observations) :
* 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
Les permissions sont définis pour chaque type d'objet (modules, groupes de sites, sites, visites, observations et types de site) :

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.
- 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

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`
6 changes: 6 additions & 0 deletions backend/gn_module_monitoring/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
"""

from flask import Blueprint, current_app
from geonature.core.admin.admin import admin as flask_admin
from geonature.utils.env import DB

from gn_module_monitoring.monitoring.admin import BibTypeSiteView
from .command.cmd import commands

blueprint = Blueprint(
Expand All @@ -14,3 +18,5 @@
blueprint.cli.short_help = "Commandes pour l" "administration du module MONITORINGS"
for cmd in commands:
blueprint.cli.add_command(cmd)

flask_admin.add_view(BibTypeSiteView(DB.session, name="Types de site", category="Monitorings"))
6 changes: 5 additions & 1 deletion backend/gn_module_monitoring/conf_schema_toml.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Fichier à ne pas modifier. Paramètres surcouchables dans config/config_gn_module.tml
"""

from marshmallow import Schema, fields, validates_schema, ValidationError
from marshmallow import Schema, fields


# Permissions associés à chaque objet monitoring
Expand All @@ -19,6 +19,10 @@


class GnModuleSchemaConf(Schema):
DESCRIPTION_MODULE = fields.String(default="Vous trouverez ici la liste des modules")
TITLE_MODULE = fields.String(default="Module de suivi")
CODE_OBSERVERS_LIST = fields.String(default="obsocctax")

PERMISSION_LEVEL = fields.Dict(
keys=fields.Str(), values=fields.Str(), load_default=PERMISSION_LEVEL_DEFAULT
)
Expand Down
14 changes: 8 additions & 6 deletions backend/gn_module_monitoring/config/generic/config.json
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
{
"tree": {
"module": {
"site": {
"visit": {
"observation": null
"sites_group": {
"site": {
"visit": {
"observation": null
}
}
}
}
},
"synthese" : "__MODULE.B_SYNTHESE",
"synthese": "__MODULE.B_SYNTHESE",
"default_display_field_names": {
"user": "nom_complet",
"nomenclature": "label_fr",
"dataset": "dataset_name",
"observer_list": "nom_liste",
"taxonomy" : "__MODULE.TAXONOMY_DISPLAY_FIELD_NAME",
"taxonomy": "__MODULE.TAXONOMY_DISPLAY_FIELD_NAME",
"taxonomy_list": "nom_liste",
"sites_group": "sites_group_name",
"habitat": "lb_hab_fr",
"area": "area_name",
"municipality": "nom_com_dept",
"site": "base_site_name"
}
}
}
15 changes: 15 additions & 0 deletions backend/gn_module_monitoring/config/generic/module.json
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,21 @@
"attribut_label": "Afficher dans le menu ?",
"definition": "Afficher le module dans le menu de GeoNature. (Recharger la page pour voir les modifications)."
},

"types_site": {
"type_widget": "datalist",
"attribut_label": "Types de sites",
"type_util": "types_site",
"keyValue": "id_nomenclature_type_site",
"keyLabel": "label",
"multiple": true,
"api" : "__MONITORINGS_PATH/sites/types",
"application": "GeoNature",
"required": true,
"data_path": "items",
"definition": "Permet de paramétrer la compatibilité de ce module avec les types de sites"
},

"medias": {
"type_widget": "medias",
"attribut_label": "Médias",
Expand Down
87 changes: 42 additions & 45 deletions backend/gn_module_monitoring/config/generic/site.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,21 @@
"base_site_name",
"base_site_code",
"base_site_description",
"id_nomenclature_type_site",
"id_inventor",
"first_use_date",
"last_visit",
"nb_visits",
"altitude_min",
"altitude_max"
"altitude_max",
"types_site"
],
"display_list": [
"base_site_name",
"base_site_code",
"id_nomenclature_type_site",
"last_visit",
"nb_visits"
"id_inventor",
"nb_visits",
"types_site"
],
"sorts": [
{"prop": "last_visit", "dir": "desc"}
Expand All @@ -35,11 +36,6 @@
"attribut_label": "Id site",
"hidden": true
},
"id_module": {
"type_widget": "text",
"attribut_label": "ID Module",
"hidden": true
},
"base_site_code": {
"type_widget": "text",
"attribut_label": "Code",
Expand All @@ -54,45 +50,20 @@
"type_widget": "textarea",
"attribut_label": "Description"
},

"id_sites_group": {
"type_widget": "datalist",
"attribut_label": "Groupe de sites",
"type_util": "sites_group",
"keyValue": "id_sites_group",
"keyLabel": "sites_group_name",
"api": "__MONITORINGS_PATH/list/__MODULE.MODULE_CODE/sites_group?id_module=__MODULE.ID_MODULE&fields=id_sites_group&fields=sites_group_name",
"application": "GeoNature",
"required": false,
"hidden": true
},
"id_nomenclature_type_site": {
"type_widget": "datalist",
"attribut_label": "Type site",
"api": "nomenclatures/nomenclature/TYPE_SITE",
"application": "GeoNature",
"keyValue": "id_nomenclature",
"keyLabel": "label_fr",
"data_path": "values",
"type_util": "nomenclature",
"required": true
},
"id_inventor": {
"type_widget": "datalist",
"attribut_label": "Descripteur",
"api": "users/menu/__MODULE.ID_LIST_OBSERVER",
"application": "GeoNature",
"keyValue": "id_role",
"keyLabel": "nom_complet",
"type_widget": "observers",
"attribut_label": "Observateur",
"type_util": "user",
"required": true
"code_list":"CODE_OBSERVERS_LIST",
"required": true,
"multi_select": false
},
"id_digitiser": {
"type_widget": "text",
"attribut_label": "Numérisateur",
"attribut_label": "Digitiser",
"type_util": "user",
"required": true,
"hidden": true,
"type_util": "user"
"hidden": true
},
"first_use_date": {
"type_widget": "date",
Expand All @@ -118,9 +89,35 @@
"type_widget": "integer",
"attribut_label": "Altitude (min)"
},
"altitude_max": {
"altitude_max": {
"type_widget": "integer",
"attribut_label": "Altitude (max)"
}
}
},
"types_site": {
"type_widget": "datalist",
"attribut_label": "Type(s) de site",
"type_util": "types_site",
"keyValue": "id_nomenclature_type_site",
"keyLabel": "label",
"multiple": true,
"api" : "__MONITORINGS_PATH/modules/__MODULE.MODULE_CODE/types_sites",
"application": "GeoNature",
"required": true,
"nullDefault":true,
"definition": "Permet de n'avoir que les types de site lié au module"
},
"id_sites_group": {
"type_widget": "datalist",
"attribut_label": "Groupe de site",
"keyValue": "id_sites_group",
"keyLabel": "sites_group_name",
"multiple": false,
"api" : "monitorings/sites_groups",
"application": "GeoNature",
"data_path":"items",
"required": false,
"default":null,
"nullDefault":true,
"definition": "Associer un site à un groupe de site"
} }
}
26 changes: 19 additions & 7 deletions backend/gn_module_monitoring/config/generic/sites_group.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
"label_list": "Groupes de sites",
"genre": "M",
"uuid_field_name": "uuid_sites_group",
"geom_field_name": "geom",
"geometry_type": "Polygon",
"display_properties": [
"sites_group_name",
"sites_group_code",
Expand All @@ -22,11 +24,6 @@
"attribut_label": "Id site",
"hidden": true
},
"id_module": {
"type_widget": "text",
"attribut_label": "ID Module",
"hidden": true
},
"sites_group_name": {
"type_widget": "text",
"attribut_label": "Nom",
Expand Down Expand Up @@ -58,6 +55,21 @@
"type_widget": "medias",
"attribut_label": "Médias",
"schema_dot_table": "gn_monitoring.t_sites_groups"
}
}
},
"altitude_min": {
"type_widget": "integer",
"attribut_label": "Altitude (min)"
},
"altitude_max": {
"type_widget": "integer",
"attribut_label": "Altitude (max)"
},
"id_digitiser": {
"type_widget": "text",
"attribut_label": "Digitiser",
"type_util": "user",
"required": true,
"hidden": true
}
}
}
Loading

0 comments on commit c710880

Please sign in to comment.