Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: improve synthese doc #315

Open
wants to merge 213 commits into
base: dev-suivi-eolien
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
213 commits
Select commit Hold shift + click to select a range
12e3531
Merged feat/package-module-alembic
Dec 6, 2022
790997f
Merged feat/bib-categorie-site
Dec 9, 2022
c71a897
feat: [6.2] Page d'accueil module monitoring layout et config title e…
andriacap Dec 12, 2022
23ad834
Feat/monitoring sites (#16)
mvergez Dec 19, 2022
048d10d
Feat/site type categories and module categorie (#18)
mvergez Dec 22, 2022
d905b2a
Feat/edit categories module (#19)
mvergez Dec 22, 2022
6844f56
test: refactor fixtures to load them automatically (#20)
mvergez Dec 23, 2022
9104f85
test: move test_route in parent dir (#17)
mvergez Dec 23, 2022
0ee1cee
Feat/create marshmallow schemas and remove id_module (#21)
mvergez Jan 4, 2023
6706af0
refactor(api): remove id_type in admin (#22)
mvergez Jan 4, 2023
e4f0069
style(config): rename attribut label of categories (#23)
mvergez Jan 4, 2023
b6c5101
Fix/paginate utils (#24)
mvergez Jan 4, 2023
1999255
Feat/improve filter (#25)
mvergez Jan 4, 2023
8fc9e21
fix(config): changed categories into items (#29)
mvergez Jan 5, 2023
e70bc4c
Fix/db migrations (#31)
mvergez Jan 13, 2023
46d44dc
perf(api): improved loading of modules (#30)
mvergez Jan 13, 2023
6951fb5
Fix/pagination (#28)
mvergez Jan 13, 2023
a551b81
style(api): restore data_utils spaces (#33)
mvergez Jan 13, 2023
9689c16
Fix/db migrations checkconstrainton bib_type_site.id_nomenclature (#34)
andriacap Jan 16, 2023
93064bc
fix(api): invert filter condition with Unicode (#35)
mvergez Jan 17, 2023
91c643f
fix(db): add NOT VALID in constraint for bib_type_site (#36)
mvergez Jan 17, 2023
2daf64d
Fix/review checkpoint1 (#37)
mvergez Jan 18, 2023
667b4d2
Add comments on new table
amandine-sahl Mar 3, 2023
9b353fa
improve downgrade migration
amandine-sahl Mar 3, 2023
641f340
Black
amandine-sahl Mar 3, 2023
a22dc92
Fix/db migrations (#31)
mvergez Jan 13, 2023
79c4df2
Feat/get all sites (#26)
mvergez Jan 23, 2023
858d908
Feat/crud/gp sites components (#38)
mvergez Feb 24, 2023
ae6400d
fix: remove no existing function and component visit (#39)
andriacap Mar 2, 2023
9f9524d
Feat/dynamic form/site (#42)
mvergez Apr 14, 2023
34648dd
Feat/prepare edit site component & some visits (#43)
mvergez Apr 14, 2023
b4d7c46
Refactor to prepare for visits (#44)
mvergez Apr 18, 2023
252fee8
feat(front): add seeObjLabel (#45)
mvergez Apr 18, 2023
e6883f2
Feat/get sites sites group models (#46)
mvergez Apr 18, 2023
fe87d88
test: routes for type site and post site (#57)
andriacap Apr 25, 2023
0811256
style(front): no data support & line return (#58)
mvergez Apr 25, 2023
900939b
fix: make breadcrumb work from sites and modules (#61)
mvergez Apr 25, 2023
43c6d49
feat: delete site (#62)
andriacap Apr 25, 2023
cf3163b
Feat/edit site (#56)
andriacap Apr 26, 2023
2030a69
style: formatter json in flask admin (#63)
andriacap May 4, 2023
fcd7a4d
feat(front): try to make breadcrumb work
May 4, 2023
ece0f81
feat(front): make breadcrumn logic inside component
andriacap May 15, 2023
c7e0b0f
feat(wip): merge chainInput and display-data-info
andriacap May 26, 2023
a746f12
feat: remove unused function
andriacap May 30, 2023
f273f1a
fix: put outside updateBreadCrumb in sitegp comp
andriacap May 30, 2023
6a95734
feat: remove onInit to mapListComponent
andriacap May 30, 2023
997dd6f
feat(wip): manage geometry type into form
andriacap May 30, 2023
9795855
feat(wip) change way to manage map obj component
andriacap May 30, 2023
8a835b1
fix: rename obj Form and fix pb load confi obj
andriacap May 30, 2023
b2a228e
fix: remove unused edit site component
andriacap Jun 1, 2023
a1d8938
fix: loading config object site
andriacap Jun 1, 2023
c368998
fix: existing little problem
andriacap Jun 1, 2023
0efb622
fix: problem to load specific site
andriacap Jun 1, 2023
8889b1e
feat(wip) : manage map
andriacap Jun 1, 2023
677f8fd
fix: error on form with obj properties/config
andriacap Jun 1, 2023
ce8f97c
fix(css): height of form zone scrollable
andriacap Jun 1, 2023
ba0db5c
fix: problem when delete site child
andriacap Jun 27, 2023
ec6704b
fix: problem adding site child by data-table comp
andriacap Jun 27, 2023
9f6d35a
fix: problem redirection on delete site action
andriacap Jun 27, 2023
96b53b8
fix: untracked gitlab-ci.yml
andriacap Jun 27, 2023
b9d4bf0
fix: load specific properties obj
andriacap Jun 29, 2023
c1b25d7
feat: page not found specific to monitoring
andriacap Jun 29, 2023
0ce8e5a
feat: not found working for request status 404
andriacap Jun 30, 2023
540de8a
fix: change format scc to css not-found comp
andriacap Jun 30, 2023
01a9b39
feat: display types_site label in table and prop
andriacap Jul 3, 2023
bda1913
feat(api): return label of nomenclature type site
Jul 4, 2023
134ea0e
style(config): types site attribut label
Jul 4, 2023
1665c0f
feat(wip): display specific properties
andriacap Jul 4, 2023
41c463f
feat: ignore html field when submit form
andriacap Jul 10, 2023
1843baf
feat(wip): display specific properties
andriacap Jul 10, 2023
6a477d6
feat: display specific properties
andriacap Jul 11, 2023
ea69661
fix: remove call api for types_site
andriacap Jul 11, 2023
cba7e8e
feat(back): json formatter on edit column
andriacap Jul 18, 2023
54bddfd
feat(back): edition site work for module enter
andriacap Jul 18, 2023
93aa748
refact: remove useless call service in btn-select
andriacap Jul 18, 2023
6788bf8
fix: error on tab spec properties
andriacap Jul 18, 2023
a33e4de
feat(front): architecture form with dynamic field
andriacap Jul 18, 2023
066a60f
feat: update form from btn-select
andriacap Jul 19, 2023
1566d00
feat: create form according to btn-select comp
andriacap Jul 19, 2023
96cda80
fix: remove unused property binding FormGroup
andriacap Jul 19, 2023
c88f5a3
feat: redirection on delete prevent to reload obj
andriacap Jul 19, 2023
cd05f69
feat: using service to update and create dyn form
andriacap Jul 19, 2023
b92d683
feat(front): displaying dynamic and static form
andriacap Jul 19, 2023
91a9f6c
fix: check obj initialized for FormGroup
andriacap Jul 19, 2023
d9b26a8
fix: error on build
andriacap Jul 20, 2023
b88bd49
fix: change down revision and error id_nomenclatur
andriacap Jul 20, 2023
a997390
fix: icon edition geometry problem
andriacap Jul 20, 2023
5e73efd
test: move conftest.py to root project
andriacap Jul 21, 2023
43b5e92
fix: error constructor failed for this service
andriacap Jul 21, 2023
77d5cbf
feat(db): alembic revision (ATTENTION)
andriacap Jul 21, 2023
9986498
fix: error default argument in route
andriacap Jul 21, 2023
ad271f3
fix(front): angular-material matchiplist
andriacap Jul 21, 2023
fbdf8b5
fix: material angulr tab (group site and site)
andriacap Jul 25, 2023
08bd997
fix: angular material adapt for properties comp
andriacap Jul 26, 2023
fa5a045
fix: problem action button to add obj
andriacap Jul 26, 2023
de93337
fix: adapt visit, site component to datatable
andriacap Jul 26, 2023
6f672f3
fix: correction display btn to add protocol
andriacap Jul 26, 2023
77b7f44
fix: error when loading page with specific field
andriacap Jul 26, 2023
ca30247
fix: error localstorage cyclic object
andriacap Jul 27, 2023
46cce0f
Feat/show map according to tab (#79)
andriacap Jul 27, 2023
c624bb7
lint(back): apply black
andriacap Jul 28, 2023
95c938f
lint(front): apply prettier
andriacap Jul 28, 2023
a480b2e
feat: prevent user to delete site and gp site (#81)
andriacap Aug 11, 2023
404c4d9
Feat/enter tab site features (#80)
andriacap Aug 14, 2023
27f8984
feat: edit and create geom
andriacap Aug 10, 2023
dd55e46
fix: error displaying types site
andriacap Aug 11, 2023
71ce37e
style : improve ux/ui for form component
andriacap Aug 11, 2023
f5bda27
feat: observers displaying and editing form
andriacap Aug 16, 2023
e440a97
Feat/edit delete through table (#86)
andriacap Aug 22, 2023
25c29c2
Feat/filter columns relationship (#87)
andriacap Aug 22, 2023
40050f3
style: apply black and prettier
andriacap Aug 22, 2023
29aad50
feat: use code list observers for observers site (#88)
andriacap Aug 23, 2023
e6fe43b
style(front): apply prettier
andriacap Aug 23, 2023
6a05131
Feat/conditional edit and delete entrance protocol (#89)
andriacap Aug 29, 2023
43e4599
fix: specific form and properties types site (#90)
andriacap Sep 5, 2023
e3aaf25
feat: add variable config in json (#91)
andriacap Sep 7, 2023
ae4b3b4
feat: optional observers_txt field (#92)
andriacap Sep 11, 2023
ade6c45
Feat/observers txt last (#93)
andriacap Sep 15, 2023
a317710
Feat/permission (#94)
andriacap Sep 22, 2023
c59620a
fix: redirection , permission form, reloading (#95)
andriacap Sep 22, 2023
faa4306
Feat/change model migration (#96)
andriacap Sep 25, 2023
56237a4
Reorder migration and add data migration
amandine-sahl Sep 26, 2023
b4d3f74
fix: redirection and permission grp_site
andriacap Sep 28, 2023
b7bb24d
fix: paginate not found
andriacap Sep 28, 2023
7603471
style: apply lint front and back
andriacap Sep 28, 2023
dc28566
fix: change id on delete route
andriacap Sep 29, 2023
5876433
hotfix: problem refreshing page with guard
andriacap Sep 29, 2023
df2a4a6
Reorder migration post rebase
amandine-sahl Oct 5, 2023
0de5633
Use config instead of MonitoringPermissions_dict
amandine-sahl Oct 5, 2023
3d508d0
Alter not null constraint for t_sites_groups, t_observations
amandine-sahl Oct 5, 2023
6591a24
Erreur rebase
amandine-sahl Oct 5, 2023
9042504
Répercussion renomage de GNM en MONITORINGS et suppression de
amandine-sahl Oct 5, 2023
d09c392
db: remove migration alembic
andriacap Oct 6, 2023
a498296
Rename GNM to MONITORINGS
amandine-sahl Oct 6, 2023
1fb9723
ux/ui: change layout home page monitoring
andriacap Oct 9, 2023
9dc1ae8
fix: size of div container Acces site
andriacap Oct 9, 2023
ad918c3
Correction tests
amandine-sahl Oct 9, 2023
8882c0a
Black
amandine-sahl Oct 10, 2023
a3b2f05
pytest install monitoring module
amandine-sahl Oct 10, 2023
02a2cb1
Test if migration is run during installation or migration
amandine-sahl Oct 10, 2023
e0a0b80
refact: load all types site from btn-select comp
andriacap Oct 10, 2023
9956e14
style: apply lint frontend
andriacap Oct 10, 2023
0d46a50
fix: specific field kept in form
andriacap Oct 10, 2023
d78560a
hotfix: problem create visit
andriacap Oct 19, 2023
feaf7b3
style: centered protocol home page
andriacap Oct 20, 2023
3b72945
wip: manage geometry site group
andriacap Oct 17, 2023
e073bdc
fix:multiple layer and geom site group
andriacap Oct 10, 2023
8954250
feat: geom site group (edit and create)
andriacap Oct 20, 2023
d625afe
ux: add message to inform about geom site group
andriacap Oct 20, 2023
09462bf
lint: backend
andriacap Oct 20, 2023
59ddd43
fix: problem to read data same organism
andriacap Oct 20, 2023
dafb8aa
docs: add documentation for new features (wip)
andriacap Oct 30, 2023
58a6052
docs: add description type site form
andriacap Oct 31, 2023
8e47aa7
Optimize model and serialization
amandine-sahl Oct 6, 2023
3b5cb20
Use marshmallow serializer
amandine-sahl Oct 9, 2023
03eb4e5
feat: manage geom through protocol
andriacap Nov 10, 2023
7a7a2a7
fix: create site group without geom
andriacap Nov 15, 2023
30db12a
hotfix: remove import AppConfig
andriacap Nov 22, 2023
29a19f7
docs: add observers_txt in "sous_module"
andriacap Nov 22, 2023
fc7956c
Resolve conflicts
amandine-sahl Dec 8, 2023
1f4d039
Use load_default for marshmallow schema - cf #268
amandine-sahl Dec 8, 2023
f38082c
add id_digititer to generic observation.json - cf #274
amandine-sahl Dec 8, 2023
6959fd9
fix migrations downgrade - cf #269
amandine-sahl Dec 8, 2023
78d6d98
create site with type without custom properties - cf #266
amandine-sahl Dec 8, 2023
64d7e15
frontend datatable fix canCreateChild
amandine-sahl Dec 8, 2023
e9b70d8
[frontend] Style margin and map height - cf #270
amandine-sahl Dec 8, 2023
2d0e36b
fix site not visible in visit (#272)
joelclems Dec 8, 2023
8487571
fix error on site create from module (#275)
joelclems Dec 8, 2023
5064649
fix site property not displayed (#277)
joelclems Dec 8, 2023
2943fee
lint prettier 3.1.0 (#278)
joelclems Dec 8, 2023
f750aeb
Remove laizy joined
amandine-sahl Dec 8, 2023
800ce6c
Correction yml
amandine-sahl Dec 8, 2023
4b2c4d5
Correction fixture sites
amandine-sahl Dec 8, 2023
616a5a6
Add asset type de site (#282)
amandine-sahl Dec 8, 2023
c27c601
Lint prettier (#281)
amandine-sahl Dec 11, 2023
c1965b4
add dev-suivi-eolien in pytest.yml
amandine-sahl Jan 11, 2024
8650b1d
[SqlAlchemy 1.4] compat sqlalchemy 1.4
amandine-sahl Dec 11, 2023
67a179e
[SqlAlchemy 1.4] Add test command + correction post_site
amandine-sahl Jan 11, 2024
788036a
Bump GeoNature
amandine-sahl Jan 11, 2024
569359e
Remove debian 10 support
amandine-sahl Jan 11, 2024
f49fa67
[SqlAlchemy 1.4] Correction post review
amandine-sahl Jan 11, 2024
5bd65fe
[SqlAlchemy 1.4] Sqlalchemy 1.4 tests
amandine-sahl Jan 12, 2024
2eed161
[SqlAlchemy 1.4] Use GenericQueryGeo and Marshmallow for csv export
amandine-sahl Jan 12, 2024
cad4a5b
[SqlAlchemy 1.4] Remove query
amandine-sahl Jan 12, 2024
8b6dc3c
[SqlAlchemy 1.4] Remove GenericModel
amandine-sahl Jan 15, 2024
8626cb6
[SqlAlchemy 1.4] Remove Query and filter
amandine-sahl Jan 15, 2024
008d297
bump GeoNature/develop
jacquesfize Jan 15, 2024
e9a7d54
Correction test test_get_export_csv
amandine-sahl Jan 15, 2024
5db5a0c
Remove export as csv test
amandine-sahl Jan 16, 2024
f600cd9
Merge pull request #283 from PnX-SI/feat/sqlalchemy2
amandine-sahl Jan 16, 2024
af94d17
Fix/migrations (#285)
amandine-sahl Jan 19, 2024
c2ea908
db downgrade does not work with data (#280)
joelclems Jan 19, 2024
33fcb71
fix: organism_actors attributes
mathieu-roudaut-crea Jan 16, 2024
651339e
Fix test export route (#293)
jacquesfize Jan 23, 2024
e8ae2e3
Merge pull request #289 from CREA-Mont-Blanc/feat/add-unit-tests
amandine-sahl Jan 23, 2024
ccd3cc8
fix: clean python files imports + BLACK 24 (#290)
MathRdt Jan 26, 2024
184199c
fix: use table models migrated in geonature core BibTypesSites (#292)
MathRdt Jan 26, 2024
545883b
Fix/clean transfert permissions ALL TO MONTORING_XXX (#291)
amandine-sahl Jan 26, 2024
4df62eb
Fix : sqlalchemy query
amandine-sahl Jan 26, 2024
7f71419
Fix/detail site url - cf #298 (#299)
amandine-sahl Jan 30, 2024
efb10e1
Fix/synchro on synthese (#288)
TheoLechemia Jan 30, 2024
38d018f
Feat/multiple geom type (#296)
TheoLechemia Jan 30, 2024
7ef4793
Correction affichage propriétés spécifiques - cf #303 (#304)
amandine-sahl Feb 1, 2024
707d5b2
Fix : migration modification for permissions (#305)
amandine-sahl Feb 1, 2024
8f1a28a
Ajout interaction carte liste (#300)
amandine-sahl Feb 1, 2024
f8ee7ce
Fix downgrade declare available types sites
amandine-sahl Feb 1, 2024
86e53de
feat: add unit tests for generic monitoring routes and utils (#295)
mathieu-roudaut-crea Feb 2, 2024
9b5dc1f
Harmonisation des processus d'exécution de sql (#308)
amandine-sahl Feb 2, 2024
8677eb0
fix: filter ,sort and page on datatable (#310)
andriacap Feb 15, 2024
bcdce88
doc on synthese synchro
TheoLechemia Jan 12, 2024
2cfbf02
doc on synthese
TheoLechemia Jan 24, 2024
d139320
Update synthese.md
amandine-sahl Feb 26, 2024
79b1fcd
feat: update doc on synthese commands
mathieu-roudaut-crea Feb 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
uses: psf/black@stable
with:
src: "setup.py ./backend/gn_module_monitoring"

frontend:
runs-on: ubuntu-latest
steps:
Expand All @@ -23,4 +24,5 @@ jobs:
uses: creyD/[email protected]
with:
dry: True
prettier_options: --config frontend/.prettierrc --ignore-path frontend/.prettierignore --check frontend/**/*.ts
prettier_version: 3.1.0
prettier_options: --config frontend/.prettierrc --check frontend/**/*.ts
11 changes: 7 additions & 4 deletions .github/workflows/pytest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ on:
- hotfixes
- develop
- workshop
- dev-suivi-eolien
pull_request:
branches:
- master
- hotfixes
- develop
- workshop
- workshop
- dev-suivi-eolien

jobs:
build:
Expand All @@ -23,10 +26,6 @@ jobs:
fail-fast: false
matrix:
include:
- name: "Debian 10"
python-version: "3.7"
postgres-version: 11
postgis-version: 2.5
- name: "Debian 11"
python-version: "3.9"
postgres-version: 13
Expand Down Expand Up @@ -91,6 +90,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`
9 changes: 8 additions & 1 deletion backend/gn_module_monitoring/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@
"""

from flask import Blueprint, current_app
from .command.cmd import commands

from geonature.utils.env import DB
from geonature.core.admin.admin import admin as flask_admin

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

blueprint = Blueprint(
"monitorings", __name__, template_folder=current_app.config["MEDIA_FOLDER"] + "/monitorings"
Expand All @@ -14,3 +19,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"))
80 changes: 39 additions & 41 deletions backend/gn_module_monitoring/command/cmd.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,26 @@
import os
from pydoc import cli
import click

from pathlib import Path
from flask.cli import with_appcontext
from sqlalchemy.sql import text
from sqlalchemy.sql import text, select

from geonature.utils.env import DB, BACKEND_DIR
from geonature.utils.env import DB
from geonature.core.gn_synthese.models import TSources
from geonature.core.gn_synthese.utils.process import import_from_table
from geonature.core.gn_commons.models import TModules

from gn_module_monitoring.config.repositories import get_config
from gn_module_monitoring.config.utils import monitoring_module_config_path
from gn_module_monitoring.monitoring.models import TMonitoringModules
from gn_module_monitoring.modules.repositories import get_simple_module

from ..monitoring.models import TMonitoringModules
from ..config.repositories import get_config
from ..config.utils import json_from_file, monitoring_module_config_path
from ..modules.repositories import get_module, get_simple_module

from .utils import (
process_export_csv,
from gn_module_monitoring.command.utils import (
process_available_permissions,
remove_monitoring_module,
add_nomenclature,
available_modules,
installed_modules,
process_sql_files,
)


Expand All @@ -33,19 +30,34 @@
def cmd_process_all(module_code):
"""
Met à jour les paramètres de configuration pour un module
Fichiers sql synthese et export
"""
# process export csv
process_export_csv(module_code)
if module_code:
modules = [module_code]
else:
modules = [module["module_code"] for module in installed_modules()]

for module in modules:
# process Synthese
process_sql_files(dir=None, module_code=module, depth=1)
# process Exports
process_sql_files(dir="exports/csv", module_code=module, depth=None, allowed_files=None)


@click.command("process_export_csv")
@click.argument("module_code", type=str, required=False, default="")
@with_appcontext
def cmd_process_export_csv(module_code):
"""
Met à jour les fichiers pour les exports pdf
Met à jour les fichiers pour les exports csv
"""
process_export_csv(module_code)
if module_code:
modules = [module_code]
else:
modules = [module["module_code"] for module in installed_modules()]

for module in modules:
process_sql_files(dir="exports/csv", module_code=module, depth=None, allowed_files=None)


@click.command("install")
Expand Down Expand Up @@ -98,8 +110,10 @@ def cmd_install_monitoring_module(module_code):
except Exception:
pass

# process export csv
process_export_csv(module_code)
# process Synthese
process_sql_files(dir=None, module_code=module_code, depth=1)
# process Exports
process_sql_files(dir=None, module_code=module_code, depth=None, allowed_files=None)

config = get_config(module_code, force=True)

Expand Down Expand Up @@ -141,23 +155,6 @@ def cmd_install_monitoring_module(module_code):
process_available_permissions(module_code, session=DB.session)
DB.session.commit()

#  run specific sql
if (module_config_dir_path / "synthese.sql").exists:
click.secho("Execution du script synthese.sql")
sql_script = module_config_dir_path / "synthese.sql"
try:
DB.engine.execute(
text(
open(sql_script, "r")
.read()
.replace(":'module_code'", "'{}'".format(module_code))
.replace(":module_code", "{}".format(module_code))
).execution_options(autocommit=True)
)
except Exception as e:
print(e)
click.secho("Erreur dans le script synthese.sql", fg="red")

# insert nomenclature
add_nomenclature(module_code)

Expand Down Expand Up @@ -195,14 +192,13 @@ def cmd_process_available_permission_module(module_code):
module_code ([string]): code du sous module

"""

if module_code:
process_available_permissions(module_code, session=DB.session)
DB.session.commit()
return
modules = [module_code]
else:
modules = [module["module_code"] for module in installed_modules()]

for module in installed_modules():
process_available_permissions(module["module_code"], session=DB.session)
for module in modules:
process_available_permissions(module, session=DB.session)
DB.session.commit()


Expand Down Expand Up @@ -238,7 +234,9 @@ def synchronize_synthese(module_code, offset):
Synchronise les données d'un module dans la synthese
"""
click.secho(f"Start synchronize data for module {module_code} ...", fg="green")
module = TModules.query.filter_by(module_code=module_code).one()
module = DB.session.execute(
select(TModules).where(TModules.module_code == module_code)
).scalar_one()
table_name = "v_synthese_{}".format(module_code)
import_from_table(
"gn_monitoring",
Expand Down
Loading
Loading