diff --git a/Makefile b/Makefile index 4009e63109..5c3a7ba0b0 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ PG_USER_PASSWD ?= gn_passwd GEONATURE_APP_NAME ?= 'DEV' -WITH_SAMPLE_DATA ?= true +WITH_SAMPLE_DATA ?= false MODULE_DASHBOARD_TAG ?= 1.5.0 MODULE_EXPORT_TAG ?= 1.7.2 @@ -38,7 +38,7 @@ GEONATURE_LOCAL_CONFIG_FILE = config/geonature_config.toml GEONATURE_DEFAULT_SETTING_FILE = config/settings.ini.sample GEONATURE_LOCAL_SETTING_FILE = config/settings.ini -GEONATURE_APP_SECRET_KEY ?= '8551a7a-64a4-4216-bda4-9a919fcc7a27' +GEONATURE_APP_SECRET_KEY ?= 'yoursecretkey' SUPERGRANT_GROUP ?= "Grp_admin" @@ -154,11 +154,15 @@ db_status: autoupgrade: source backend/venv/bin/activate && geonature db autoupgrade +compile_requirements: + source backend/venv/bin/activate && cd backend && piptools compile requirements.in + source backend/venv/bin/activate && cd backend && piptools compile requirements-dev.in + test_frontend: - cd frontend && source ~/.nvm/nvm.sh && nvm use && npm run cypress:run + . ${NVM_DIR}/nvm.sh; cd frontend; nvm use && npm run cypress:run lint_frontend: - cd frontend && source ~/.nvm/nvm.sh && nvm use && npm run format + . ${NVM_DIR}/nvm.sh; cd frontend; nvm use; npm run format lint_backend: source backend/venv/bin/activate && black . diff --git a/VERSION b/VERSION index 07d875c2d2..6480dd5ed8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.15.2 +2.15.3 diff --git a/backend/dependencies/TaxHub b/backend/dependencies/TaxHub index 1e505008fa..9b858d657c 160000 --- a/backend/dependencies/TaxHub +++ b/backend/dependencies/TaxHub @@ -1 +1 @@ -Subproject commit 1e505008fa74b9cdc6ccf096db00a5b6dfd8568e +Subproject commit 9b858d657c0f9297e599fe3a94ebbdf472ba6d45 diff --git a/backend/dependencies/UsersHub-authentification-module b/backend/dependencies/UsersHub-authentification-module index ac32c2de08..19991fb1ae 160000 --- a/backend/dependencies/UsersHub-authentification-module +++ b/backend/dependencies/UsersHub-authentification-module @@ -1 +1 @@ -Subproject commit ac32c2de0857d913972cd9356af757379aad322a +Subproject commit 19991fb1aeb5376413f3f14961c3bbaf6cb28d48 diff --git a/backend/geonature/core/errors.py b/backend/geonature/core/errors.py index cad5bc5ab8..d0ca078817 100644 --- a/backend/geonature/core/errors.py +++ b/backend/geonature/core/errors.py @@ -26,7 +26,10 @@ def handle_unauthenticated_request(e): else: base_url = current_app.config["URL_APPLICATION"] login_path = "/#/login" # FIXME: move in config - query_string = urlencode({"next": request.url}) + query_string = "" + if not request.url.endswith("/auth/logout"): # TODO : remove this hack + query_string = urlencode({"next": request.url}) + return redirect(f"{base_url}{login_path}?{query_string}") diff --git a/backend/geonature/core/gn_commons/routes.py b/backend/geonature/core/gn_commons/routes.py index e82a8ac264..d9ee3b41c5 100644 --- a/backend/geonature/core/gn_commons/routes.py +++ b/backend/geonature/core/gn_commons/routes.py @@ -93,6 +93,11 @@ def list_modules(): "" if module.active_frontend else module.module_external_url ) module_dict["module_url"] = module.module_path if module.active_frontend else "" + + # Setup manually TAXHUB URL + if module_dict["module_code"] == "TAXHUB": + module_dict["module_external_url"] = f"{config['API_ENDPOINT']}/admin" + module_dict["module_objects"] = {} # get cruved for each object for obj_dict in module_dict["objects"]: diff --git a/backend/geonature/core/gn_synthese/utils/blurring.py b/backend/geonature/core/gn_synthese/utils/blurring.py index d05e7b005e..dd76e4a270 100644 --- a/backend/geonature/core/gn_synthese/utils/blurring.py +++ b/backend/geonature/core/gn_synthese/utils/blurring.py @@ -62,7 +62,7 @@ def build_blurred_precise_geom_queries( columns.append(sa.literal(0).label("size_hierarchy")) precise_geom_query = SyntheseQuery( Synthese, - sa.select(*columns).where(sa.and_(*where_clauses)).order_by(Synthese.id_synthese.desc()), + sa.select(*columns).where(sa.and_(*where_clauses)).order_by(Synthese.date_min.desc()), filters=dict(filters), # not to edit the actual filter object ) @@ -100,14 +100,14 @@ def build_blurred_precise_geom_queries( == Synthese.id_nomenclature_sensitivity ) .where(sa.and_(*where_clauses)) - .order_by(Synthese.id_synthese.desc()), + .order_by(Synthese.date_min.desc()), filters=dict(filters), query_joins=sa.join( Synthese, CorAreaSyntheseAlias, CorAreaSyntheseAlias.id_synthese == Synthese.id_synthese, ), - geom_column=LAreas.geom_4326, + geom_column=LAreas.geom, ) # Joins here are needed to retrieve the blurred geometry blurred_geom_query.add_join(LAreasAlias, LAreasAlias.id_area, CorAreaSyntheseAlias.id_area) @@ -182,8 +182,12 @@ def build_synthese_obs_query(observations, allowed_geom_cte, limit): allowed_geom_cte, allowed_geom_cte.c.id_synthese == VSyntheseForWebApp.id_synthese ) ) - .order_by(VSyntheseForWebApp.id_synthese, allowed_geom_cte.c.priority) - .distinct(VSyntheseForWebApp.id_synthese) + .order_by( + VSyntheseForWebApp.date_min.desc(), + VSyntheseForWebApp.id_synthese.desc(), + allowed_geom_cte.c.priority, + ) + .distinct(VSyntheseForWebApp.date_min, VSyntheseForWebApp.id_synthese) .limit(limit) ) return obs_query diff --git a/backend/geonature/core/gn_synthese/utils/query_select_sqla.py b/backend/geonature/core/gn_synthese/utils/query_select_sqla.py index 6496c0888d..c546c1e2ec 100644 --- a/backend/geonature/core/gn_synthese/utils/query_select_sqla.py +++ b/backend/geonature/core/gn_synthese/utils/query_select_sqla.py @@ -103,6 +103,14 @@ def __init__( ) ) + self.srid = DB.session.scalar( + select( + func.Find_SRID( + self.geom_column.table.schema, self.geom_column.table.name, self.geom_column.key + ) + ) + ) + def add_join(self, right_table, right_column, left_column, join_type="right"): if self.first: if join_type == "right": @@ -437,12 +445,18 @@ def filter_other_filters(self, user): geo_filters = [] for feature in features: geom_wkb = from_shape(shape(feature["geometry"]), srid=4326) + if self.srid != 4326: + geom_wkb = func.ST_Transform( + func.ST_GeogFromWKB(geom_wkb), + self.srid, + ) + geom_wkb = func.ST_GeogFromWKB(geom_wkb) # if the geom is a circle if "radius" in feature["properties"]: radius = feature["properties"]["radius"] geo_filter = func.ST_DWithin( func.ST_GeogFromWKB(self.geom_column), - func.ST_GeogFromWKB(geom_wkb), + geom_wkb, radius, ) else: @@ -479,9 +493,31 @@ def filter_other_filters(self, user): if colname.startswith("area"): if self.geom_column.class_ != self.model: l_areas_cte = LAreas.query.filter(LAreas.id_area.in_(value)).cte("area_filter") - self.query = self.query.where( - func.ST_Intersects(self.geom_column, l_areas_cte.c.geom) - ) + if self.srid != 4326: + srid_l_areas = DB.session.scalar( + select( + func.Find_SRID( + LAreas.__table__.schema, LAreas.__table__.name, "geom" + ) + ) + ) + if self.srid != srid_l_areas: + self.query = self.query.where( + func.ST_Intersects( + self.geom_column, + func.ST_Transform(l_areas_cte.c.geom, self.srid), + ) + ) + + else: + self.query = self.query.where( + func.ST_Intersects(self.geom_column, l_areas_cte.c.geom) + ) + + else: + self.query = self.query.where( + func.ST_Intersects(self.geom_column, l_areas_cte.c.geom_4326) + ) else: cor_area_synthese_alias = aliased(CorAreaSynthese) self.add_join( @@ -623,7 +659,8 @@ def build_bdc_status_filters(self, protection_status_value, red_list_filters): func.count(distinct(bdc_status_by_type_cte.c.cd_type_statut)) == (len(protection_status_value) + len(red_list_filters)) ) - bdc_status_cte = bdc_status_cte.cte(name="status") + + bdc_status_cte = bdc_status_cte.cte() # Jointure sur le taxon # et vĂ©rification que l'ensemble des textes diff --git a/backend/geonature/core/imports/tasks.py b/backend/geonature/core/imports/tasks.py index ad7b123195..bb161ef00d 100644 --- a/backend/geonature/core/imports/tasks.py +++ b/backend/geonature/core/imports/tasks.py @@ -93,15 +93,29 @@ def do_import_in_destination(self, import_id): BibFields.name_field.in_(imprt.fieldmapping.keys()), ) ).all() - columns_to_count_unique_entities = [ - transient_table.c[field.dest_column] for field in fields - ] - n_valid_data = db.session.execute( - select(func.count(func.distinct(*columns_to_count_unique_entities))) - .select_from(transient_table) - .where(transient_table.c.id_import == imprt.id_import) - .where(transient_table.c[entity.validity_column] == True) - ).scalar() + + id_field = ( + entity.unique_column.dest_field if entity.unique_column.dest_field in fields else None + ) + data_fields_query = [transient_table.c[field.dest_field] for field in fields] + + query = select(*data_fields_query).where( + transient_table.c.id_import == imprt.id_import, + transient_table.c[entity.validity_column] == True, + ) + + def count_select(query_cte): + count_ = "*" + # if multiple entities and the entity has a unique column we base the count on the unique column + + if entity.unique_column and len(entities) > 1 and id_field: + count_ = func.distinct(query_cte.c[id_field]) + return count_ + + valid_data_cte = query.cte() + n_valid_data = db.session.scalar( + select(func.count(count_select(valid_data_cte))).select_from(valid_data_cte) + ) count_entities += n_valid_data imprt.statistics["import_count"] = count_entities diff --git a/backend/requirements-dependencies.in b/backend/requirements-dependencies.in index a70d9dca40..aa0e7a07d9 100644 --- a/backend/requirements-dependencies.in +++ b/backend/requirements-dependencies.in @@ -1,7 +1,7 @@ -pypnusershub>=3.0.1,<4 +pypnusershub>=3.0.2,<4 pypnnomenclature>=1.6.4,<2 pypn_habref_api>=0.4.1,<1 utils-flask-sqlalchemy-geo>=0.3.2,<1 utils-flask-sqlalchemy>=0.4.1,<1 -taxhub==2.1.1 +taxhub==2.1.2 pypn-ref-geo>=1.5.3,<2 diff --git a/backend/requirements-dev.in b/backend/requirements-dev.in index 3e57bc0f07..a08dd360a7 100644 --- a/backend/requirements-dev.in +++ b/backend/requirements-dev.in @@ -1,2 +1,3 @@ -r requirements-common.in --r requirements-submodules.in \ No newline at end of file +-r requirements-submodules.in +black==24.10.0 \ No newline at end of file diff --git a/backend/requirements-dev.txt b/backend/requirements-dev.txt index b628e5b45e..4b16154de8 100644 --- a/backend/requirements-dev.txt +++ b/backend/requirements-dev.txt @@ -58,6 +58,8 @@ bcrypt==4.2.1 # via pypnusershub billiard==4.2.1 # via celery +black==24.10.0 + # via -r requirements-dev.in blinker==1.9.0 # via # flask @@ -84,6 +86,7 @@ charset-normalizer==3.4.1 click==8.1.8 # via # -r requirements-common.in + # black # celery # click-didyoumean # click-plugins @@ -252,6 +255,8 @@ marshmallow-sqlalchemy==1.1.1 # taxhub # usershub # utils-flask-sqlalchemy-geo +mypy-extensions==1.0.0 + # via black numpy==2.0.2 # via # bokeh @@ -261,6 +266,7 @@ numpy==2.0.2 packaging==24.2 # via # -r requirements-common.in + # black # bokeh # geoalchemy2 # gunicorn @@ -269,12 +275,16 @@ pandas==2.2.3 # via # -r requirements-common.in # bokeh +pathspec==0.12.1 + # via black pillow==9.5.0 # via # -r requirements-common.in # bokeh # taxhub # weasyprint +platformdirs==4.3.6 + # via black prompt-toolkit==3.0.48 # via click-repl psycopg2==2.9.10 @@ -359,11 +369,14 @@ toml==0.10.2 # via # -r requirements-common.in # taxhub +tomli==2.2.1 + # via black tornado==6.4.2 # via bokeh typing-extensions==4.12.2 # via # alembic + # black # kombu tzdata==2024.2 # via @@ -401,6 +414,7 @@ wtforms==3.1.2 # -r requirements-common.in # flask-admin # flask-wtf + # taxhub # usershub # wtforms-components # wtforms-sqlalchemy diff --git a/backend/requirements.txt b/backend/requirements.txt index 683da3c34d..253e0f2ec8 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -255,7 +255,7 @@ pypn-ref-geo==1.5.4 # taxhub pypnnomenclature==1.6.4 # via -r requirements-dependencies.in -pypnusershub==3.0.1 +pypnusershub==3.0.2 # via # -r requirements-dependencies.in # taxhub @@ -314,7 +314,7 @@ sqlalchemy==1.4.54 # utils-flask-sqlalchemy # utils-flask-sqlalchemy-geo # wtforms-sqlalchemy -taxhub==2.1.1 +taxhub==2.1.2 # via # -r requirements-dependencies.in # pypnnomenclature @@ -381,6 +381,7 @@ wtforms==3.1.2 # -r requirements-common.in # flask-admin # flask-wtf + # taxhub # wtforms-sqlalchemy wtforms-sqlalchemy==0.4.2 # via -r requirements-common.in diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index bcaa4548df..ae64927129 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,31 @@ # CHANGELOG +## 2.15.3 (2025-02-14) + +**🚀 NouveautĂ©s** + +- [Synthese] Affichage du `cdNom`, `cdRef` et du `nomCite` dans la fiche d'observation (#3334 par @edelclaux). +- [Documentation] La compilation de documentation est effectuĂ©e Ă  chaque merge dans la branche principale (`master`) (#3338 par @jacquesfize) +- [Import] Ajout d'une barre de progression dans l'import Occhab (#2928 par @Pierre-Narcisi) +- [TaxHub] Mise Ă  jour de TaxHub en version 2.1.2 +- [Authentification] Mise Ă  jour UsersHub-autentification-module en 3.0.2. + +**🐛 Corrections** + +- [Import] Correction du nombre d'entitĂ©s valides des donnĂ©es importĂ©es (#3336, #3355 par @jacquesfize) +- [Import] Suppression des variables de configurations inutiles dans la nouvelle version (#3341 par @jacquesfize) +- [Import] Correction la barre de progression pour l’import dans la synthĂšse (#2928 par @Pierre-Narcisi) +- [Authentification] Correction des valeurs dans defaut_config.toml.sample (#3339 par @jacquesfize) +- [Documentation] RĂ©intĂ©gration de la documentation sur l'authentification avec un fournisseur d'identitĂ© externe (#3338 par @jacquesfize) +- [DĂ©veloppement] Correction des modĂšles SQLAlchemy pour pouvoir utiliser le mode debug (#3346 par @jacquesfize) +- [SynthĂšse] Correction de l'ordre d'affichage des observations sensibles (#3354 par @VincentCauchois et @Christophe-Ramet; #3249). +- [SynthĂšse] Correction de la recherche dans la Synthese avec un ou plusieurs filtre parmi "Listes rouges" (#3351 par @VincentCauchois et @Christophe-Ramet). +- [TaxHub] Correction de la synchonisation avec Occtax-mobile (https://github.com/PnX-SI/TaxHub/pull/599 par @amandine-sahl) +- [SynthĂšse] Correction de la recherche avec filtre par gĂ©omĂ©trie avec des SRIDs diffĂ©rents (#3372 par @jacquesfize) +- [MĂ©tadonnĂ©es] Correction du rafraichissement du formulaire de recherche (#3365 par @jacquesfize) +- [TaxHub] Ajout d'un bouton TaxHub dans le menu latĂ©ral (#3355 par @jacquesfize) +- [Authentification] Correction du lien de l'accĂšs public (#3353 par @VincentCauchois) + ## 2.15.2 (2025-01-16) **🚀 NouveautĂ©s** diff --git a/docs/admin-manual.rst b/docs/admin-manual.rst index 1673795697..20f5a379b6 100644 --- a/docs/admin-manual.rst +++ b/docs/admin-manual.rst @@ -735,11 +735,12 @@ La base de donnĂ©es contient de nombreuses fonctions. .. code:: sql - gn_profiles.get_profiles_parameters(mycdnom integer) - RETURNS TABLE (cd_ref integer, spatial_precision integer, temporal_precision_days integer, active_life_stage boolean, distance smallint) - -- fonction permettant de rĂ©cupĂ©rer les paramĂštres les plus adaptĂ©s (dĂ©finis au plus proche du taxon) pour calculer le profil d'un taxon donnĂ© - -- par exemple, s'il existe des paramĂštres pour les "Animalia" des paramĂštres pour le renard, les paramĂštres du renard surcoucheront les paramĂštres Animalia pour cette espĂšce - + gn_profiles.get_parameters(mycdnom integer) + RETURNS TABLE(cd_ref integer, spatial_precision integer, temporal_precision_days integer, active_life_stage boolean, distance smallint) + -- fonction permettant de rĂ©cupĂ©rer les paramĂštres les plus adaptĂ©s + -- (dĂ©finis au plus proche du taxon) pour calculer le profil d'un taxon donnĂ© + -- par exemple, s'il existe des paramĂštres pour les "Animalia" des paramĂštres pour le renard, + -- les paramĂštres du renard surcoucheront les paramĂštres Animalia pour cette espĂšce .. code:: sql @@ -940,19 +941,19 @@ Pour les versions prĂ©cĂ©dentes de GeoNature, Ă  chaque modification du fichier - relancer le backend : ``sudo systemctl restart geonature`` - regĂ©nĂ©rer le fichier de configuration du frontend : -.. code-block:: bash + .. code-block:: bash - source backend/venv/bin/activate - geonature generate-frontend-config + source backend/venv/bin/activate + geonature generate-frontend-config - rebuilder le frontend : -.. code-block:: bash + .. code-block:: bash - cd frontend - nvm use - npm run build + cd frontend + nvm use + npm run build Vous pouvez Ă©galement lancer la commande ``geonature update-configuration`` qui gĂ©nĂšrera la configuration frontend de GeoNature ainsi que de l’ensemble des modules installĂ©s avant de lancer le build du frontend. @@ -1338,7 +1339,9 @@ GeoNature est fourni avec des donnĂ©es gĂ©ographiques de base sur la mĂ©tropole * https://github.com/PnX-SI/GeoNature/blob/master/backend/geonature/migrations/versions/1715cf31a75d_insert_ign_250m_bd_alti_in_dem.py * https://github.com/PnX-SI/GeoNature/blob/master/backend/geonature/migrations/versions/87651375c2e8_vectorize_ign_bd_alti.py -*TODO : ProcĂ©dure Ă  amĂ©liorer et simplifier : https://github.com/PnX-SI/GeoNature/issues/235* +.. note:: + + ProcĂ©dure Ă  amĂ©liorer et simplifier : https://github.com/PnX-SI/GeoNature/issues/235 Si vous n'avez pas choisi d'intĂ©grer le raster MNT national Ă  250m fourni par dĂ©faut lors de l'installation ou que vous souhaitez le remplacer, voici les commandes qui vous permettront de le faire. @@ -1492,7 +1495,11 @@ Deux modes sont alors disponibles. Soit l'utilisateur est automatiquement accept AUTO_ACCOUNT_CREATION = false VALIDATOR_EMAIL = 'email@validateur.io' -L'utilisateur qui demande la crĂ©ation de compte est automatiquement mis dans un "groupe" UsersHub (par dĂ©faut, il s'agit du groupe "En poste"). Ce groupe est paramĂ©trable depuis la table ``utilisateurs.cor_role_app_profil``. (La ligne oĂč ``is_default_group_for_app = true`` sera utilisĂ©e comme groupe par dĂ©faut pour GeoNature). Il n'est pas en paramĂštre de GeoNature pusqu'il serait falsifiable via l'API. ⚠ **Attention**, si vous effectuez une migration depuis une version de GeoNature < 2.2.0, aucun groupe par dĂ©faut n'est dĂ©fini, vous devez dĂ©finir Ă  la main le groupe par dĂ©faut pour l'application GeoNature dans la table ``utilisateurs.cor_role_app_profil``. +L'utilisateur qui demande la crĂ©ation de compte est automatiquement mis dans un "groupe" UsersHub (par dĂ©faut, il s'agit du groupe "En poste"). Ce groupe est paramĂ©trable depuis la table ``utilisateurs.cor_role_app_profil``. (La ligne oĂč ``is_default_group_for_app = true`` sera utilisĂ©e comme groupe par dĂ©faut pour GeoNature). Il n'est pas en paramĂštre de GeoNature pusqu'il serait falsifiable via l'API. + +.. warning:: + + Si vous effectuez une migration depuis une version de GeoNature < 2.2.0, aucun groupe par dĂ©faut n'est dĂ©fini, vous devez dĂ©finir Ă  la main le groupe par dĂ©faut pour l'application GeoNature dans la table ``utilisateurs.cor_role_app_profil``. Dans le mode "crĂ©ation de compte validĂ© par administrateur", lorsque l'inscription est validĂ©e par un administrateur, un email est envoyĂ© Ă  l'utilisateur pour lui indiquer la confirmation de son inscription. Il est possible de personnaliser le texte de la partie finale de cet email situĂ©e juste avant la signature Ă  l'aide du paramĂštre ``ADDON_USER_EMAIL`` (toujours Ă  ajouter Ă  la rubrique ``[ACCOUNT_MANAGEMENT]``). @@ -1572,21 +1579,20 @@ Cela ajoute sur la page d'authentification de GeoNature, un bouton "AccĂšs publi Etapes : 1/ UsersHub : - - Aller dans la section `Utilisateurs` - - CrĂ©er un utilisateur - - DĂ©finir un identifiant et un mot de passe (par exemple utilisateur 'public' et mot de passe 'public') - - S’assurer qu’il ne soit dans aucun groupe - - Aller ensuite dans la section `Applications` - - Pour GeoNature, cliquer sur le premier icĂŽne 'Voir les membres' - - Cliquer sur ajouter un rĂŽle - - Choisir l'utilisateur juste crĂ©Ă© - - Attribuer le rĂŽle 1, 'Lecteur' + - Aller dans la section `Utilisateurs` + - CrĂ©er un utilisateur + - DĂ©finir un identifiant et un mot de passe (par exemple utilisateur 'public' et mot de passe 'public') + - S’assurer qu’il ne soit dans aucun groupe + - Aller ensuite dans la section `Applications` + - Pour GeoNature, cliquer sur le premier icĂŽne 'Voir les membres' + - Cliquer sur ajouter un rĂŽle + - Choisir l'utilisateur juste crĂ©Ă© + - Attribuer le rĂŽle 1, 'Lecteur' 2/ Configuration GeoNature : - - Dans le fichier de configuration de GeoNature (``config/geonature_config.toml``), spĂ©cifier le nom d'utilisateur pour l'accĂšs public via le paramĂštre ``PUBLIC_ACCESS_USERNAME`` : -.. code-block:: ini + .. code-block:: ini PUBLIC_ACCESS_USERNAME = 'public' @@ -1597,12 +1603,11 @@ A ce moment-lĂ , cet utilisateur n’a aucune permission dans GeoNature. Il s'agit maintenant de gĂ©rer ses permissions dans GeoNature. 3/ GeoNature - - - Se connecter Ă  GeoNature avec un utilisateur administrateur - - Aller dans le module Admin - - Cliquer sur 'Backoffice', puis "Permissions" / "Par utilisateurs" - - Choisissez l'utilisateur sĂ©lectionnĂ© - - Ajouter des permissions pour chacun des modules de l'instance auquel vous souhaitez que l'utilisateur public accĂšde + - Se connecter Ă  GeoNature avec un utilisateur administrateur + - Aller dans le module Admin + - Cliquer sur 'Backoffice', puis "Permissions" / "Par utilisateurs" + - Choisissez l'utilisateur sĂ©lectionnĂ© + - Ajouter des permissions pour chacun des modules de l'instance auquel vous souhaitez que l'utilisateur public accĂšde AccĂšs public automatique ```````````````````````` @@ -1871,7 +1876,7 @@ La ligne doit contenir les informations suivantes : Exemple : -:: +.. code:: sql INSERT INTO gn_commons.t_modules (module_code, module_label, module_picto, module_desc, module_path,active_frontend, active_backend, ng_module) VALUES ('FLORE_STATION','Flore station v2','fa-leaf','Module de saisie Flore station (sous module Occtax)','flore_station',true,false,'occtax'); @@ -1880,7 +1885,7 @@ Ajoutez ensuite une "source" dans la synthese (``gn_synthese.t_sources``) pour c Dans l'exemple ci-dessous, remplacez ```` par le contenu de la colonne ``module_path`` ainsi que ```` par l'id du module que vous venez de crĂ©er. -:: +.. code:: sql INSERT INTO gn_synthese.t_sources (name_source,desc_source,entity_source_pk_field,url_source,,id_module) VALUES ('Flore station (sous-module Occtax)','DonnĂ©es issues du protocole Flore station','pr_occtax.cor_counting_occtax.id_counting_occtax','#//info/id_counting', ); @@ -2292,7 +2297,7 @@ Pour chaque dictionnaire, voici le dĂ©tail des champs (ils sont tous obligatoire Au niveau de la base de donnĂ©es, il est possible de limiter les recherches uniquement aux textes correspondant Ă  la zone gĂ©ographique des observations de votre installation. Pour cela, il suffit de mettre une valeur ``false`` dans le champ ``enable`` de la table ``taxonomie.bdc_statut_text`` pour tous les textes que vous ne souhaitez pas prendre en compte. Si vous avez une grande quantitĂ© d'observations, cette Ă©tape est fortement recommandĂ©e ! -Exemple de requĂȘte de mise Ă  jour de la table ``taxonomie.bdc_statut_text`` pour dĂ©sactiver les textes des DOM-TOM : : +Exemple de requĂȘte de mise Ă  jour de la table ``taxonomie.bdc_statut_text`` pour dĂ©sactiver les textes des DOM-TOM : .. code:: sql diff --git a/docs/admin/import-admin.rst b/docs/admin/import-admin.rst index 5c40719cac..8153e811ef 100644 --- a/docs/admin/import-admin.rst +++ b/docs/admin/import-admin.rst @@ -53,28 +53,28 @@ Configuration du module d’import Vous pouvez surcoucher ces diffĂ©rents paramĂštres en les ajoutant directement dans le fichier de configuration principal de GeoNature (``geonature_config.toml``). - ============================================== ============================================================================================================================================================================ - Variable Description - ============================================== ============================================================================================================================================================================ - ENCODAGE Liste des encodages - acceptĂ©s - MAX_FILE_SIZE Taille maximale du fichier chargĂ© (en Mo) - SRID SRID autorisĂ©s pour les fichiers en entrĂ©e - ALLOWED_EXTENSIONS Extensions autorisĂ©es (seul le format CSV est acceptĂ© actuellement) - ALLOW_VALUE_MAPPING Activer ou non l'Ă©tape du mapping des valeurs - DEFAULT_VALUE_MAPPING_ID Si le mapping des valeurs est dĂ©sactivĂ©, specifier l'identifiant du mapping qui doit ĂȘtre utilisĂ© - FILL_MISSING_NOMENCLATURE_WITH_DEFAULT_VALUE Rempli les valeurs de nomenclature erronĂ©es par la valeur par dĂ©faut - CHECK_PRIVATE_JDD_BLURING Active la vĂ©rification de l'existence du champs "floutage" si le JDD est privĂ© - CHECK_REF_BIBLIO_LITTERATURE Active la vĂ©rification de la rĂ©fĂ©rence bibliographique fournie si la valeur du champs source = "litterature" - CHECK_EXIST_PROOF Active la vĂ©rification qu'une preuve d'existence est fournie si preuve existence = "oui" - EXPORT_REPORT_PDF_FILENAME Customiser le nom du fichier de rapport de l'import - DEFAULT_RANK ParamĂštre pour dĂ©finir le rang utilisĂ© pour le diagramme camembert du rapport d'import. - DEFAULT_GENERATE_MISSING_UUID L'UUID d'une entitĂ© importĂ©e sera gĂ©nĂ©rĂ© s'il n'est pas indiquĂ© dans le fichier source - ID_AREA_RESTRICTION Identifiant d'une gĂ©omĂ©trie prĂ©sente dans RefGeo. Si diffĂ©rent de -1, vĂ©rifie si les gĂ©omĂ©tries des entitĂ©s importĂ©es sont bien dans l'emprise spatiale de cette derniĂšre. - ID_LIST_TAXA_RESTRICTION Identifiant d'une liste de taxons permettant de restreindre l'import d'observations dont les taxons appartiennent Ă  cette derniĂšre - MODULE_URL URL d'accĂšs au module d'import - DATAFRAME_BATCH_SIZE Taille des `batch` de donnĂ©es importĂ©es en mĂȘme temps - ============================================== ============================================================================================================================================================================ +============================================== ============================================================================================================================================================================ +Variable Description +============================================== ============================================================================================================================================================================ +ENCODAGE Liste des encodages +acceptĂ©s +MAX_FILE_SIZE Taille maximale du fichier chargĂ© (en Mo) +SRID SRID autorisĂ©s pour les fichiers en entrĂ©e +ALLOWED_EXTENSIONS Extensions autorisĂ©es (seul le format CSV est acceptĂ© actuellement) +ALLOW_VALUE_MAPPING Activer ou non l'Ă©tape du mapping des valeurs +DEFAULT_VALUE_MAPPING_ID Si le mapping des valeurs est dĂ©sactivĂ©, specifier l'identifiant du mapping qui doit ĂȘtre utilisĂ© +FILL_MISSING_NOMENCLATURE_WITH_DEFAULT_VALUE Rempli les valeurs de nomenclature erronĂ©es par la valeur par dĂ©faut +CHECK_PRIVATE_JDD_BLURING Active la vĂ©rification de l'existence du champs "floutage" si le JDD est privĂ© +CHECK_REF_BIBLIO_LITTERATURE Active la vĂ©rification de la rĂ©fĂ©rence bibliographique fournie si la valeur du champs source = "litterature" +CHECK_EXIST_PROOF Active la vĂ©rification qu'une preuve d'existence est fournie si preuve existence = "oui" +EXPORT_REPORT_PDF_FILENAME Customiser le nom du fichier de rapport de l'import +DEFAULT_RANK ParamĂštre pour dĂ©finir le rang utilisĂ© pour le diagramme camembert du rapport d'import. +DEFAULT_GENERATE_MISSING_UUID L'UUID d'une entitĂ© importĂ©e sera gĂ©nĂ©rĂ© s'il n'est pas indiquĂ© dans le fichier source +ID_AREA_RESTRICTION Identifiant d'une gĂ©omĂ©trie prĂ©sente dans RefGeo. Si diffĂ©rent de -1, vĂ©rifie si les gĂ©omĂ©tries des entitĂ©s importĂ©es sont bien dans l'emprise spatiale de cette derniĂšre. +ID_LIST_TAXA_RESTRICTION Identifiant d'une liste de taxons permettant de restreindre l'import d'observations dont les taxons appartiennent Ă  cette derniĂšre +MODULE_URL URL d'accĂšs au module d'import +DATAFRAME_BATCH_SIZE Taille des `batch` de donnĂ©es importĂ©es en mĂȘme temps +============================================== ============================================================================================================================================================================ Permissions de l’import @@ -115,68 +115,68 @@ ContrĂŽles de donnĂ©es Le tableau ci-dessous liste les codes d'erreur et leur description. - =================================== ============================================================================================================================================================================================================================================================================================================== - Code Erreur Description - =================================== ============================================================================================================================================================================================================================================================================================================== - DATASET_NOT_FOUND L’identifiant ne correspond Ă  aucun jeu de donnĂ©es existant. - DATASET_NOT_AUTHORIZED L’utilisateur ne peut pas importer de nouvelles entitĂ©s dans le jeu de donnĂ©es. - DATASET_NOT_ACTIVE Aucune donnĂ©e ne peut ĂȘtre importĂ©e dans le JDD indiquĂ© car il n’est pas actif. - MULTIPLE_ATTACHMENT_TYPE_CODE Plusieurs gĂ©orĂ©fĂ©rencements sont indiquĂ©s dans les colonnes : codeCommune, codeMaille, codeDĂ©partement (Erreur SynthĂšse) - MULTIPLE_CODE_ATTACHMENT Plusieurs codes de rattachement fournis pour une mĂȘme ligne. Une ligne doit avoir un seul code rattachement (code commune OU code maille OU code dĂ©partement) - INVALID_DATE Format de date invalide (Voir formats de date autorisĂ©s) - INVALID_UUID Format de l’identifiant donnĂ© ne respecte pas le format UUID (https://fr.wikipedia.org/wiki/Universally_unique_identifier) - INVALID_INTEGER La donnĂ©e indiquĂ©e ne correspond pas un nombre entier. - INVALID_NUMERIC La donnĂ©e indiquĂ©e ne correspond pas Ă  un nombre rĂ©el (float) - INVALID_WKT La donnĂ©e indiquĂ©e ne respecte pas le format WKT https://fr.wikipedia.org/wiki/Well-known_text - INVALID_GEOMETRY La gĂ©omĂ©trie de la donnĂ©e renseignĂ©e est invalide (c.f  ST_VALID) - INVALID_BOOL La donnĂ©e fournie n’est pas un boolĂ©en - INVALID_ATTACHMENT_CODE Le code commune/maille/dĂ©partement indiquĂ© ne fait pas partie du rĂ©fĂ©rentiel des gĂ©ographique. - INVALID_CHAR_LENGTH La chaine de caractĂšre de la donnĂ©e est trop longue - DATE_MIN_TOO_HIGH La date de dĂ©but est dans le futur - DATE_MAX_TOO_LOW La date de fin est infĂ©rieure Ă  1900 - DATE_MAX_TOO_HIGH La date de fin est dans le futur - DATE_MIN_TOO_LOW La date de dĂ©but est infĂ©rieure Ă  1900 - DATE_MIN_SUP_DATE_MAX La date de dĂ©but est supĂ©rieure Ă  la date de fin - DEPTH_MIN_SUP_ALTI_MAX La profondeur minimum est supĂ©rieure Ă  la profondeur maximale - ALTI_MIN_SUP_ALTI_MAX L’altitude minimum est supĂ©rieure Ă  l’altitude maximale - ORPHAN_ROW La ligne du fichier n’a pĂ» ĂȘtre rattachĂ©e Ă  aucune entitĂ©. - DUPLICATE_ROWS Deux lignes du fichier sont identiques ; les lignes ne peuvent pas ĂȘtre dupliquĂ©es. - DUPLICATE_UUID L'identifiant UUID d’une entitĂ© n'est pas unique dans le fichier fournis - EXISTING_UUID L'identifiant UUID d’une entitĂ© fournie existe dĂ©jĂ  dans la base de donnĂ©es. Il faut en fournir un autre ou laisser la valeur vide pour une attribution automatique. - SKIP_EXISTING_UUID Les entitĂ©s existantes selon UUID sont ignorĂ©es. - MISSING_VALUE Valeur manquante dans un champs obligatoire - MISSING_GEOM GĂ©orĂ©fĂ©rencement manquant ; un gĂ©orĂ©fĂ©rencement doit ĂȘtre fourni, c’est Ă  dire qu’il faut livrer : soit une gĂ©omĂ©trie, soit une ou plusieurs commune(s), ou dĂ©partement(s), ou maille(s), dont le champ “typeInfoGeo” est indiquĂ© Ă  1. - GEOMETRY_OUTSIDE La gĂ©omĂ©trie se trouve Ă  l'extĂ©rieur du territoire renseignĂ© - NO-GEOM Aucune gĂ©ometrie fournie (ni X/Y, WKT ou code) - GEOMETRY_OUT_OF_BOX CoordonnĂ©es gĂ©ographiques en dehors du pĂ©rimĂštre gĂ©ographique de l'instance - ERRONEOUS_PARENT_ENTITY L’entitĂ© parente est en erreur. - NO_PARENT_ENTITY Aucune entitĂ© parente identifiĂ©e. - DUPLICATE_ENTITY_SOURCE_PK Deux lignes du fichier ont la mĂȘme clĂ© primaire d’origine ; les clĂ©s primaires du fichier source ne peuvent pas ĂȘtre dupliquĂ©es. - COUNT_MIN_SUP_COUNT_MAX IncohĂ©rence entre les champs dĂ©nombrement. La valeur de denombrement_min est supĂ©rieure Ă  celle de denombrement_max ou la valeur de denombrement_max est infĂ©rieure Ă  denombrement_min. - INVALID_NOMENCLATURE Code nomenclature erronĂ© ; La valeur du champ n’est pas dans la liste des codes attendus pour ce champ. Pour connaĂźtre la liste des codes autorisĂ©s, reportez-vous au Standard en cours. - INVALID_EXISTING_PROOF_VALUE IncohĂ©rence entre les champs de preuve ; si le champ “preuveExistante” vaut oui, alors l’un des deux champs “preuveNumĂ©rique” ou “preuveNonNumĂ©rique” doit ĂȘtre rempli. A l’inverse, si l’un de ces deux champs est rempli, alors “preuveExistante” ne doit pas prendre une autre valeur que "oui" (code 1). - INVALID_NOMENCLATURE_WARNING (Non bloquant) Code nomenclature erronĂ© et remplacĂ© par sa valeur par dĂ©faut ; La valeur du champ n’est pas dans la liste des codes attendus pour ce champ. Pour connaĂźtre la liste des codes autorisĂ©s, reportez-vous au Standard en cours. - CONDITIONAL_MANDATORY_FIELD_ERROR Champs obligatoires conditionnels manquants. Il existe des ensembles de champs liĂ©s Ă  un concept qui sont “obligatoires conditionnels”, c’est Ă  dire que si l'un des champs du concept est utilisĂ©, alors d'autres champs du concept deviennent obligatoires. - UNKNOWN_ERROR Erreur inconnue - INVALID_STATUT_SOURCE_VALUE RĂ©fĂ©rence bibliographique manquante ; si le champ “statutSource” a la valeur “Li” (LittĂ©rature), alors une rĂ©fĂ©rence bibliographique doit ĂȘtre indiquĂ©e. - CONDITIONAL_INVALID_DATA Erreur de valeur - INVALID_URL_PROOF PreuveNumerique n’est pas une url ; le champ “preuveNumĂ©rique” indique l’adresse web Ă  laquelle on pourra trouver la preuve numĂ©rique ou l’archive contenant toutes les preuves numĂ©riques. Il doit commencer par “http://”, “https://”, ou “ftp://”. - ROW_HAVE_TOO_MUCH_COLUMN Une ligne du fichier source a plus de colonnes que l'en-tĂȘte. - ROW_HAVE_LESS_COLUMN Une ligne du fichier source a moins de colonnes que l'en-tĂȘte. - EMPTY_ROW Une ligne dans le fichier source est vide - HEADER_SAME_COLUMN_NAME Au moins deux colonnes du fichier source possĂšdent des noms identiques - EMPTY_FILE Le fichier source est vide - NO_FILE_SENDED Aucun fichier source n’a Ă©tĂ© tĂ©lĂ©versĂ©. - ERROR_WHILE_LOADING_FILE Une erreur s’est produite lors du chargement du fichier. - FILE_FORMAT_ERROR Le format du fichier est incorrect. - FILE_EXTENSION_ERROR L'extension de fichier source est incorrect - FILE_OVERSIZE Volume du fichier source est trop important - FILE_NAME_TOO_LONG Nom du fichier de donnĂ©es trop long - FILE_WITH_NO_DATA Pas de donnĂ©es dans le fichier source - INCOHERENT_DATA Une mĂȘme entitĂ© est dĂ©clarĂ© avec diffĂ©rents attributs dans le fichier source - CD_HAB_NOT_FOUND CdHab n’existe pas dans le rĂ©fĂ©rentiel Habref installĂ© - CD_NOM_NOT_FOUND CdNom n’existe pas dans le rĂ©fĂ©rentiel TaxRef installĂ© - =================================== ============================================================================================================================================================================================================================================================================================================== +=================================== ============================================================================================================================================================================================================================================================================================================== +Code Erreur Description +=================================== ============================================================================================================================================================================================================================================================================================================== +DATASET_NOT_FOUND L’identifiant ne correspond Ă  aucun jeu de donnĂ©es existant. +DATASET_NOT_AUTHORIZED L’utilisateur ne peut pas importer de nouvelles entitĂ©s dans le jeu de donnĂ©es. +DATASET_NOT_ACTIVE Aucune donnĂ©e ne peut ĂȘtre importĂ©e dans le JDD indiquĂ© car il n’est pas actif. +MULTIPLE_ATTACHMENT_TYPE_CODE Plusieurs gĂ©orĂ©fĂ©rencements sont indiquĂ©s dans les colonnes : codeCommune, codeMaille, codeDĂ©partement (Erreur SynthĂšse) +MULTIPLE_CODE_ATTACHMENT Plusieurs codes de rattachement fournis pour une mĂȘme ligne. Une ligne doit avoir un seul code rattachement (code commune OU code maille OU code dĂ©partement) +INVALID_DATE Format de date invalide (Voir formats de date autorisĂ©s) +INVALID_UUID Format de l’identifiant donnĂ© ne respecte pas le format UUID (https://fr.wikipedia.org/wiki/Universally_unique_identifier) +INVALID_INTEGER La donnĂ©e indiquĂ©e ne correspond pas un nombre entier. +INVALID_NUMERIC La donnĂ©e indiquĂ©e ne correspond pas Ă  un nombre rĂ©el (float) +INVALID_WKT La donnĂ©e indiquĂ©e ne respecte pas le format WKT https://fr.wikipedia.org/wiki/Well-known_text +INVALID_GEOMETRY La gĂ©omĂ©trie de la donnĂ©e renseignĂ©e est invalide (c.f  ST_VALID) +INVALID_BOOL La donnĂ©e fournie n’est pas un boolĂ©en +INVALID_ATTACHMENT_CODE Le code commune/maille/dĂ©partement indiquĂ© ne fait pas partie du rĂ©fĂ©rentiel des gĂ©ographique. +INVALID_CHAR_LENGTH La chaine de caractĂšre de la donnĂ©e est trop longue +DATE_MIN_TOO_HIGH La date de dĂ©but est dans le futur +DATE_MAX_TOO_LOW La date de fin est infĂ©rieure Ă  1900 +DATE_MAX_TOO_HIGH La date de fin est dans le futur +DATE_MIN_TOO_LOW La date de dĂ©but est infĂ©rieure Ă  1900 +DATE_MIN_SUP_DATE_MAX La date de dĂ©but est supĂ©rieure Ă  la date de fin +DEPTH_MIN_SUP_ALTI_MAX La profondeur minimum est supĂ©rieure Ă  la profondeur maximale +ALTI_MIN_SUP_ALTI_MAX L’altitude minimum est supĂ©rieure Ă  l’altitude maximale +ORPHAN_ROW La ligne du fichier n’a pĂ» ĂȘtre rattachĂ©e Ă  aucune entitĂ©. +DUPLICATE_ROWS Deux lignes du fichier sont identiques ; les lignes ne peuvent pas ĂȘtre dupliquĂ©es. +DUPLICATE_UUID L'identifiant UUID d’une entitĂ© n'est pas unique dans le fichier fournis +EXISTING_UUID L'identifiant UUID d’une entitĂ© fournie existe dĂ©jĂ  dans la base de donnĂ©es. Il faut en fournir un autre ou laisser la valeur vide pour une attribution automatique. +SKIP_EXISTING_UUID Les entitĂ©s existantes selon UUID sont ignorĂ©es. +MISSING_VALUE Valeur manquante dans un champs obligatoire +MISSING_GEOM GĂ©orĂ©fĂ©rencement manquant ; un gĂ©orĂ©fĂ©rencement doit ĂȘtre fourni, c’est Ă  dire qu’il faut livrer : soit une gĂ©omĂ©trie, soit une ou plusieurs commune(s), ou dĂ©partement(s), ou maille(s), dont le champ “typeInfoGeo” est indiquĂ© Ă  1. +GEOMETRY_OUTSIDE La gĂ©omĂ©trie se trouve Ă  l'extĂ©rieur du territoire renseignĂ© +NO-GEOM Aucune gĂ©ometrie fournie (ni X/Y, WKT ou code) +GEOMETRY_OUT_OF_BOX CoordonnĂ©es gĂ©ographiques en dehors du pĂ©rimĂštre gĂ©ographique de l'instance +ERRONEOUS_PARENT_ENTITY L’entitĂ© parente est en erreur. +NO_PARENT_ENTITY Aucune entitĂ© parente identifiĂ©e. +DUPLICATE_ENTITY_SOURCE_PK Deux lignes du fichier ont la mĂȘme clĂ© primaire d’origine ; les clĂ©s primaires du fichier source ne peuvent pas ĂȘtre dupliquĂ©es. +COUNT_MIN_SUP_COUNT_MAX IncohĂ©rence entre les champs dĂ©nombrement. La valeur de denombrement_min est supĂ©rieure Ă  celle de denombrement_max ou la valeur de denombrement_max est infĂ©rieure Ă  denombrement_min. +INVALID_NOMENCLATURE Code nomenclature erronĂ© ; La valeur du champ n’est pas dans la liste des codes attendus pour ce champ. Pour connaĂźtre la liste des codes autorisĂ©s, reportez-vous au Standard en cours. +INVALID_EXISTING_PROOF_VALUE IncohĂ©rence entre les champs de preuve ; si le champ “preuveExistante” vaut oui, alors l’un des deux champs “preuveNumĂ©rique” ou “preuveNonNumĂ©rique” doit ĂȘtre rempli. A l’inverse, si l’un de ces deux champs est rempli, alors “preuveExistante” ne doit pas prendre une autre valeur que "oui" (code 1). +INVALID_NOMENCLATURE_WARNING (Non bloquant) Code nomenclature erronĂ© et remplacĂ© par sa valeur par dĂ©faut ; La valeur du champ n’est pas dans la liste des codes attendus pour ce champ. Pour connaĂźtre la liste des codes autorisĂ©s, reportez-vous au Standard en cours. +CONDITIONAL_MANDATORY_FIELD_ERROR Champs obligatoires conditionnels manquants. Il existe des ensembles de champs liĂ©s Ă  un concept qui sont “obligatoires conditionnels”, c’est Ă  dire que si l'un des champs du concept est utilisĂ©, alors d'autres champs du concept deviennent obligatoires. +UNKNOWN_ERROR Erreur inconnue +INVALID_STATUT_SOURCE_VALUE RĂ©fĂ©rence bibliographique manquante ; si le champ “statutSource” a la valeur “Li” (LittĂ©rature), alors une rĂ©fĂ©rence bibliographique doit ĂȘtre indiquĂ©e. +CONDITIONAL_INVALID_DATA Erreur de valeur +INVALID_URL_PROOF PreuveNumerique n’est pas une url ; le champ “preuveNumĂ©rique” indique l’adresse web Ă  laquelle on pourra trouver la preuve numĂ©rique ou l’archive contenant toutes les preuves numĂ©riques. Il doit commencer par “http://”, “https://”, ou “ftp://”. +ROW_HAVE_TOO_MUCH_COLUMN Une ligne du fichier source a plus de colonnes que l'en-tĂȘte. +ROW_HAVE_LESS_COLUMN Une ligne du fichier source a moins de colonnes que l'en-tĂȘte. +EMPTY_ROW Une ligne dans le fichier source est vide +HEADER_SAME_COLUMN_NAME Au moins deux colonnes du fichier source possĂšdent des noms identiques +EMPTY_FILE Le fichier source est vide +NO_FILE_SENDED Aucun fichier source n’a Ă©tĂ© tĂ©lĂ©versĂ©. +ERROR_WHILE_LOADING_FILE Une erreur s’est produite lors du chargement du fichier. +FILE_FORMAT_ERROR Le format du fichier est incorrect. +FILE_EXTENSION_ERROR L'extension de fichier source est incorrect +FILE_OVERSIZE Volume du fichier source est trop important +FILE_NAME_TOO_LONG Nom du fichier de donnĂ©es trop long +FILE_WITH_NO_DATA Pas de donnĂ©es dans le fichier source +INCOHERENT_DATA Une mĂȘme entitĂ© est dĂ©clarĂ© avec diffĂ©rents attributs dans le fichier source +CD_HAB_NOT_FOUND CdHab n’existe pas dans le rĂ©fĂ©rentiel Habref installĂ© +CD_NOM_NOT_FOUND CdNom n’existe pas dans le rĂ©fĂ©rentiel TaxRef installĂ© +=================================== ============================================================================================================================================================================================================================================================================================================== **Format de dates autorisĂ©es** diff --git a/docs/development.rst b/docs/development.rst index c6536d10e9..21f944fbaa 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -396,7 +396,7 @@ Il est donc nĂ©cessaire de restreindre les champs Ă  inclure dans la sĂ©rialisat parent_schema = ParentModelSchema(exclude=['childs.parent']) - + Cependant, l’utilisation de ``exclude`` est hautement problĂ©matique ! En effet, l’ajout d’un nouveau champs ``Nested`` au schĂ©ma nĂ©cessiterait de le rajouter dans la liste des exclusions partout oĂč le schĂ©ma est utilisĂ© (que ça soit pour Ă©viter une rĂ©cursion infinie, d’alourdir une rĂ©ponse JSON avec des donnĂ©es inutiles ou pour Ă©viter un problĂšme n+1 - voir section dĂ©diĂ©e). @@ -530,8 +530,8 @@ vous pouvez devoir crĂ©er votre propre convertisseur de modĂšle hĂ©ritant Ă  la model_converter = NomenclaturesGeoModelConverter -ModĂšles Ă  permission -"""""""""""""""""""" +ModĂšles de permission +""""""""""""""""""""" Le mixin ``CruvedSchemaMixin`` permet d’ajouter un champs ``cruved`` Ă  la sĂ©rialisation qui contiendra un dictionnaire avec en clĂ© les actions du cruved et en valeur des boolĂ©ens indiquant si l’action est disponible. @@ -541,7 +541,7 @@ Pour l’utiliser, il faut : Ces propriĂ©tĂ©s sont passĂ©es en argument Ă  la fonction ``get_scopes_by_action``. - Le **modĂšle** doit dĂ©finir une fonction ``has_instance_permission(scope)`` prenant en argument une portĂ©e (0, 1, 2 ou 3) et renvoyant un boolĂ©en. -Par dĂ©faut, pour des raisons de performance, le cruved est exclu de la sĂ©rialisation. +Par dĂ©faut, le CRUVED est exclu de la sĂ©rialisation pour des raisons de performance. Il faut donc demander sa sĂ©rialisation lors de la crĂ©ation du schĂ©ma avec ``only=["+cruved"]``. Le prĂ©fixe ``+`` permet de spĂ©cifier que l’on souhaite rajouter le cruved aux champs Ă  sĂ©rialiser (et non que l’on souhaite sĂ©rialiser uniquement le cruved). @@ -744,14 +744,14 @@ ModĂšles gĂ©ographiques La bibliothĂšque maison `Utils-Flask-SQLAlchemy-Geo `_ fournit des dĂ©corateurs supplĂ©mentaires pour la sĂ©rialisation des modĂšles contenant des champs gĂ©ographiques. - ``utils_flask_sqla_geo.serializers.geoserializable`` + DĂ©corateur pour les modĂšles SQLA : Ajoute une mĂ©thode as_geofeature qui + retourne un dictionnaire serialisable sous forme de Feature geojson. - DĂ©corateur pour les modĂšles SQLA : Ajoute une mĂ©thode as_geofeature qui - retourne un dictionnaire serialisable sous forme de Feature geojson. + Fichier dĂ©finition modĂšle - - Fichier dĂ©finition modĂšle .. code:: python + from geonature.utils.env import DB from utils_flask_sqla_geo.serializers import geoserializable @@ -762,20 +762,23 @@ La bibliothĂšque maison `Utils-Flask-SQLAlchemy-Geo `_ : + .. code-block:: python -.. code-block:: python - - from werkzeug.exceptions import Fobridden, Badrequest, NotFound + from werkzeug.exceptions import Fobridden, Badrequest, NotFound - def restricted_action(pk): - if not is_allowed(): - raise Forbidden + def restricted_action(pk): + if not is_allowed(): + raise Forbidden - Penser Ă  utiliser ``get_or_404`` plutĂŽt que de lancer une exception ``NotFound`` - Si l’utilisateur n’a pas le droit d’effectuer une action, utiliser l’exception ``Forbidden`` (code HTTP 403), et non l’exception ``Unauthorized`` (code HTTP 401), cette derniĂšre Ă©tant rĂ©servĂ©e aux utilisateurs non authentifiĂ©s. - VĂ©rifier la validitĂ© des donnĂ©es fournies par l’utilisateur (``request.json`` ou ``request.args``) et lever une exception ``BadRequest`` si celles-ci ne sont pas valides (l’utilisateur ne doit pas ĂȘtre en mesure de dĂ©clencher une erreur 500 en fournissant une string plutĂŽt qu’un int par exemple !). - - - Marshmallow peut servir Ă  cela :: - - from marshmallow import Schema, fields, ValidationError - def my_route(): - class RequestSchema(Schema): - value = fields.Float() - try: - data = RequestSchema().load(request.json) - except ValidationError as error: - raise BadRequest(error.messages) + - Marshmallow peut servir Ă  cela + .. code:: python + + from marshmallow import Schema, fields, ValidationError + def my_route(): + class RequestSchema(Schema): + value = fields.Float() + try: + data = RequestSchema().load(request.json) + except ValidationError as error: + raise BadRequest(error.messages) - Cela peut ĂȘtre fait avec *jsonschema* : - - :: - - from from jsonschema import validate as validate_json, ValidationError - - def my_route(): - request_schema = { - "type": "object", - "properties": { - "value": { "type": "number", }, - }, - "minProperties": 1, - "additionalProperties": False, - } - try: - validate_json(request.json, request_schema) - except ValidationError as err: - raise BadRequest(err.message) + .. code:: python + + from from jsonschema import validate as validate_json, ValidationError + + def my_route(): + request_schema = { + "type": "object", + "properties": { + "value": { "type": "number", }, + }, + "minProperties": 1, + "additionalProperties": False, + } + try: + validate_json(request.json, request_schema) + except ValidationError as err: + raise BadRequest(err.message) - Pour les rĂ©ponses vides (exemple : route de type delete), on pourra utiliser le code de retour 204 : + .. code-block:: python - :: - - return '', 204 + return '', 204 Lorsque par exemple une action est traitĂ©e mais aucun rĂ©sultat n'est Ă  renvoyer, inutile d’envoyer une rĂ©ponse « OK ». C’est l’envoi d’une rĂ©ponse HTTP avec un code Ă©gale Ă  400 ou supĂ©rieur qui entrainera le traitement d’une erreur cĂŽtĂ© frontend, plutĂŽt que de se fonder sur le contenu d’une rĂ©ponse non normalisĂ©e. @@ -989,7 +988,7 @@ Pour cela, plusieurs solutions : - Le spĂ©cifier dans la relationship : - :: + .. code:: python class AcquisitionFramework(db.Model) datasets = db.relationships(Dataset, uselist=True, lazy='joined') @@ -997,12 +996,11 @@ Pour cela, plusieurs solutions : Cependant, cette stratĂ©gie s’appliquera (sauf contre-ordre) dans tous les cas, mĂȘme lorsque les DS ne sont pas nĂ©cessaires, alourdissant potentiellement certaines requĂȘtes qui n’en ont pas usage. - Le spĂ©cifier au moment oĂč la requĂȘte est effectuĂ©e : + .. code:: python - :: - - from sqlalchemy.orm import joinedload + from sqlalchemy.orm import joinedload - af_list = AcquisitionFramework.query.options(joinedload('datasets')).all() + af_list = AcquisitionFramework.query.options(joinedload('datasets')).all() Il est Ă©galement possible de joindre les relations d’une relation, par exemple le crĂ©ateur des jeux de donnĂ©es : diff --git a/docs/installation-all.rst b/docs/installation-all.rst index ade7f723ee..e0aa7cd797 100644 --- a/docs/installation-all.rst +++ b/docs/installation-all.rst @@ -24,10 +24,13 @@ TĂ©lĂ©chargement .. code:: console - $ wget https://raw.githubusercontent.com/PnX-SI/GeoNature/X.Y.Z/install/install_all/install_all.ini - $ wget https://raw.githubusercontent.com/PnX-SI/GeoNature/X.Y.Z/install/install_all/install_all.sh + wget https://raw.githubusercontent.com/PnX-SI/GeoNature/X.Y.Z/install/install_all/install_all.ini + wget https://raw.githubusercontent.com/PnX-SI/GeoNature/X.Y.Z/install/install_all/install_all.sh -*Attention* : l'installation globale fonctionne uniquement si les scripts sont placĂ©s Ă  la racine du ``home`` de l'utilisateur courant. +.. warning:: + + L'installation globale fonctionne uniquement si les scripts sont placĂ©s Ă  la racine du ``home`` de l'utilisateur courant. + Configuration ^^^^^^^^^^^^^ @@ -36,7 +39,7 @@ Configuration .. code:: console - $ nano install_all.ini + nano install_all.ini * Renseignez Ă  minima : @@ -55,17 +58,17 @@ Pour l'installation d'une instance de production ou de test ``mode=prod``, pour Installation ^^^^^^^^^^^^^ -* Lancer l'installation : +Lancer l'installation Ă  l'aide des commandes suivantes : - .. code:: shell +.. code:: shell - touch install_all.log - chmod +x install_all.sh - ./install_all.sh 2>&1 | tee install_all.log + touch install_all.log + chmod +x install_all.sh + ./install_all.sh 2>&1 | tee install_all.log Une fois l'installation terminĂ©e, lancez la commande suivante: - .. code:: shell +.. code:: shell exec bash diff --git a/docs/installation.rst b/docs/installation.rst index 8a28d2a21a..e5f90133b2 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -205,25 +205,25 @@ Installer le module avec ``pip`` en mode Ă©ditable aprĂšs avoir activĂ© le venv * CrĂ©er un lien symbolique dans le dossier ``frontend/external_modules`` de GeoNature vers le dossier ``frontend`` du module. Le lien symbolique doit ĂȘtre nommĂ© suivant le code du module en minuscule : -.. code-block:: bash + .. code-block:: bash - cd ~/geonature/frontend/external_modules/ - ln -s /frontend + cd ~/geonature/frontend/external_modules/ + ln -s /frontend -Exemple pour le module Import : + Exemple pour le module Import : -.. code-block:: bash + .. code-block:: bash - cd ~/geonature/frontend/external_modules/ - ln -s ~/gn_module_import/frontend import + cd ~/geonature/frontend/external_modules/ + ln -s ~/gn_module_import/frontend import * Re-builder le frontend : -.. code-block:: bash + .. code-block:: bash - cd ~/geonature/frontend/ - nvm use - npm run build + cd ~/geonature/frontend/ + nvm use + npm run build **Installation de la base de donnĂ©es** @@ -282,19 +282,19 @@ La mise Ă  jour doit ĂȘtre rĂ©alisĂ©e avec votre utilisateur linux courant (``ge * TĂ©lĂ©charger la derniĂšre version de GeoNature : -.. code-block:: bash + .. code-block:: bash - wget https://github.com/PnX-SI/GeoNature/archive/X.Y.Z.zip - unzip X.Y.Z.zip - rm X.Y.Z.zip + wget https://github.com/PnX-SI/GeoNature/archive/X.Y.Z.zip + unzip X.Y.Z.zip + rm X.Y.Z.zip * Renommer l'ancien repertoire de l'application, ainsi que le nouveau : -.. code-block:: bash + .. code-block:: bash - mv ~/geonature/ ~/geonature_old/ - mv ~/GeoNature-X.Y.Z ~/geonature/ - cd ~/geonature + mv ~/geonature/ ~/geonature_old/ + mv ~/GeoNature-X.Y.Z ~/geonature/ + cd ~/geonature * Suivez les Ă©ventuelles notes de version spĂ©cifiques dĂ©crites au niveau de chaque version : https://github.com/PnX-SI/GeoNature/releases. @@ -304,9 +304,9 @@ Sauf mentions contraires dans les notes de version, vous pouvez sauter des versi * Lancez le script de ``migration.sh`` Ă  la racine du dossier ``geonature``: -.. code-block:: bash + .. code-block:: bash - ./install/migration/migration.sh 2>&1 | tee install/migration/migration.log + ./install/migration/migration.sh 2>&1 | tee install/migration/migration.log Depuis la version 2.12, le script `migration.sh` peut prendre en argument le chemin vers l'ancien dossier d'installation de GeoNature. Il peut s’agir du mĂȘme dossier que la nouvelle installation de GeoNature. Cela permet d'utiliser ce script si la nouvelle version de GeoNature est dans le mĂȘme dossier et donc de gĂ©rer le cas oĂč GeoNature est installĂ© et mis Ă  jour avec git. diff --git a/docs/sensitivity.rst b/docs/sensitivity.rst index 13f4983946..f084e352c3 100644 --- a/docs/sensitivity.rst +++ b/docs/sensitivity.rst @@ -113,48 +113,44 @@ Le rĂ©fĂ©rentiel de sensibilitĂ© fourni par le SINP est normalement intĂ©grĂ© intĂ©grĂ© ou mis Ă  jour avec l’une ou l’autre des commandes suivantes (selon votre version de Taxref) : Taxref v17 : + .. code-block:: bash -.. code-block:: bash - - geonature sensitivity add-referential \ - --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v17 20240325" \ - --url https://geonature.fr/data/inpn/sensitivity/RefSensibiliteV17_20240325.zip \ - --zipfile RefSensibiliteV17_20240325.zip \ - --csvfile RefSensibilite_17.csv \ - --encoding=utf-8 + geonature sensitivity add-referential \ + --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v17 20240325" \ + --url https://geonature.fr/data/inpn/sensitivity/RefSensibiliteV17_20240325.zip \ + --zipfile RefSensibiliteV17_20240325.zip \ + --csvfile RefSensibilite_17.csv \ + --encoding=utf-8 Taxref v16 : + .. code-block:: bash -.. code-block:: bash - - geonature sensitivity add-referential \ - --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v16 20230203" \ - --url https://geonature.fr/data/inpn/sensitivity/RefSensibiliteV16_20230203.zip \ - --zipfile RefSensibiliteV16_20230203.zip \ - --csvfile RefSensibiliteV16_20230203/RefSensibilite_16.csv \ - --encoding=iso-8859-15 + geonature sensitivity add-referential \ + --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v16 20230203" \ + --url https://geonature.fr/data/inpn/sensitivity/RefSensibiliteV16_20230203.zip \ + --zipfile RefSensibiliteV16_20230203.zip \ + --csvfile RefSensibiliteV16_20230203/RefSensibilite_16.csv \ + --encoding=iso-8859-15 Taxref v15 : + .. code-block:: bash -.. code-block:: bash - - geonature sensitivity add-referential \ - --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v15 20220331" \ - --url https://inpn.mnhn.fr/docs-web/docs/download/401875 \ - --zipfile RefSensibiliteV15_20220331.zip \ - --csvfile RefSensibilite_V15_31032022/RefSensibilite_15.csv \ - --encoding=iso-8859-15 + geonature sensitivity add-referential \ + --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v15 20220331" \ + --url https://inpn.mnhn.fr/docs-web/docs/download/401875 \ + --zipfile RefSensibiliteV15_20220331.zip \ + --csvfile RefSensibilite_V15_31032022/RefSensibilite_15.csv \ + --encoding=iso-8859-15 Taxref v14 : + .. code-block:: bash -.. code-block:: bash - - geonature sensitivity add-referential \ - --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v14 20220331" \ - --url https://inpn.mnhn.fr/docs-web/docs/download/401876 \ - --zipfile RefSensibiliteV14_20220331.zip \ - --csvfile RefSensibilite_V14_31032022/RefSensibilite_14.csv \ - --encoding=iso-8859-15 + geonature sensitivity add-referential \ + --source-name "RĂ©fĂ©rentiel sensibilitĂ© TAXREF v14 20220331" \ + --url https://inpn.mnhn.fr/docs-web/docs/download/401876 \ + --zipfile RefSensibiliteV14_20220331.zip \ + --csvfile RefSensibilite_V14_31032022/RefSensibilite_14.csv \ + --encoding=iso-8859-15 Le jeu de rĂšgles est fourni pour chaque version prĂ©cise de Taxref, certaines espĂšces sensibles pouvant voir leur *cd_nom* changer d’une version Ă  l’autre. diff --git a/docs/utilisateur/import.rst b/docs/utilisateur/import.rst index 44177b5d29..317769d300 100644 --- a/docs/utilisateur/import.rst +++ b/docs/utilisateur/import.rst @@ -22,44 +22,45 @@ Pour rĂ©aliser un import dans une des destinations de GeoNature, vous devez : les permissions de l'utilisateur connectĂ©. Vous pouvez alors finir un import en cours, commencer un nouvel import ou supprimer un import. -.. image:: images/import/import_steps/00_imports_list.png + .. image:: images/import/import_steps/00_imports_list.png 2. Pour commencer un nouvel import, cliquez sur le bouton "+" en bas de la liste des imports. Dans la fenĂȘtre qui s'affiche, sĂ©lectionner la destination (e.g. Occhab, SynthĂšse) de votre import. -.. image:: images/import/import_steps/01_destination_choice.png + .. image:: images/import/import_steps/01_destination_choice.png 3. Une fois la destination choisie, vous serez redirigĂ© vers une nouvelle page. Dans ce nouveau formulaire, choisissez le jeu de donnĂ©es qui sera associĂ© aux donnĂ©es importĂ©es. Puis, tĂ©lĂ©verser le fichier contenant les donnĂ©es que vous souhaitez importer. À ce jour, seul le format de fichier CSV est acceptĂ© par GeoNature. Une fois les champs remplis, cliquez sur le bouton "Suivant". -.. note:: - Si aucun jeu de donnĂ©es n'apparait dans la liste dĂ©roulante, vĂ©rifier que le jeu de donnĂ©es souhaitĂ© est bien activĂ© et associĂ© Ă  la destination souhaitĂ©e. + .. note:: + Si aucun jeu de donnĂ©es n'apparait dans la liste dĂ©roulante, vĂ©rifier que le jeu de donnĂ©es souhaitĂ© est bien activĂ© et associĂ© Ă  la destination souhaitĂ©e. -.. image:: images/import/import_steps/02_upload_file.png + .. image:: images/import/import_steps/02_upload_file.png 4. Dans ce nouveau formulaire, indiquez les paramĂštres de lecture de votre fichier. Plusieurs paramĂštres seront automatiquement dĂ©tectĂ©s par GeoNature. Une fois, les champs remplis, cliquez sur le bouton "Suivant". -.. note:: - A partir de cette Ă©tape, il est possible d'enregistrer votre import et le reprendre plus tard depuis la liste d'import. + .. note:: -.. image:: images/import/import_steps/03_parameter_selection.png + A partir de cette Ă©tape, il est possible d'enregistrer votre import et le reprendre plus tard depuis la liste d'import. + + .. image:: images/import/import_steps/03_parameter_selection.png 5. Maintenant que le fichier est tĂ©lĂ©versĂ©, il s'agit de faire correspondre les champs du fichier importĂ© aux champs accessibles d'une (ou plusieurs) entitĂ©.s (e.g. Station). Pour vous aider dans la saisie, vous pouvez utiliser un mapping existant ou crĂ©er un nouveau. Lors de la validation du formulaire, il sera possible d'enregistrer votre mapping pour pouvoir le rĂ©utiliser plus tard. Une fois, la mise en correspondance terminĂ©e, cliquez sur le bouton "Suivant". -.. warning:: - Dans le cas oĂč la destination comporte plusieurs entitĂ©s, les champs requis pour une entitĂ© ne seront affichĂ©s uniquement si un des champs de l'entitĂ© est remplie (hors identifiant UUID). + .. warning:: + Dans le cas oĂč la destination comporte plusieurs entitĂ©s, les champs requis pour une entitĂ© ne seront affichĂ©s uniquement si un des champs de l'entitĂ© est remplie (hors identifiant UUID). -.. image:: images/import/import_steps/04_01_mapping_cols.png + .. image:: images/import/import_steps/04_01_mapping_cols.png -.. note:: - Chaque destination contient un mapping par dĂ©faut. Ce dernier s'appuie sur les fichiers exportĂ©s par le module depuis l'interface de saisie. + .. note:: + Chaque destination contient un mapping par dĂ©faut. Ce dernier s'appuie sur les fichiers exportĂ©s par le module depuis l'interface de saisie. - À la fin du formulaire, vous pouvez visualiser le nombre de correspondances effectuĂ©es - et les colonnes du fichier source qui n'ont pas Ă©tĂ© utilisĂ©es. + À la fin du formulaire, vous pouvez visualiser le nombre de correspondances effectuĂ©es + et les colonnes du fichier source qui n'ont pas Ă©tĂ© utilisĂ©es. .. image:: images/import/import_steps/04_02_mapping_cols_validate.png @@ -67,7 +68,7 @@ paramĂštres seront automatiquement dĂ©tectĂ©s par GeoNature. Une fois, les champ Tout comme le mapping des colonnes, vous pouvez utiliser un mapping de valeur existant ou crĂ©er un nouveau. Une fois la correspondance terminĂ©e, cliquez sur le bouton "Suivant". -.. image:: images/import/import_steps/05_mapping_value.png + .. image:: images/import/import_steps/05_mapping_value.png 7. Pour pouvoir importer les donnĂ©es prĂ©sentes dans le fichier source, il est nĂ©cessaire d' @@ -75,20 +76,20 @@ effectuer des contrĂŽles sur les donnĂ©es : vĂ©rification des types, vĂ©rificati vĂ©rification de cohĂ©rence de donnĂ©es (date dĂ©but < date fin), etc. Pour lancer, le contrĂŽle de donnĂ©es cliquez sur le bouton "Lancer la vĂ©rification". -.. image:: images/import/import_steps/06_01_control_data.png + .. image:: images/import/import_steps/06_01_control_data.png 8. Une fois la vĂ©rification des donnĂ©es effectuĂ©e, un aperçu des donnĂ©es valides ainsi que leur emprise spatiale (*bounding box*) sont affichĂ©s. Si des erreurs sont prĂ©sentes dans les donnĂ©es, un bouton "Rapport d'import/erreurs/avertissement" permet d'afficher les erreurs et d'ajuster votre fichier source ou les paramĂštres de l'import. De plus, il est possible de tĂ©lĂ©charge un fichier contenant unique les lignes contenant des erreurs. Si l'aperçu des donnĂ©es qui seront importĂ©es vous convient, cliquez sur le bouton "Importer les [n] entitĂ©s valides". -.. image:: images/import/import_steps/06_02_import_part1.png + .. image:: images/import/import_steps/06_02_import_part1.png 9. Une fois l'import terminĂ©, un rapport rĂ©capitulatif est affichĂ© avec les diffĂ©rents paramĂštres de l'import mais aussi plusieurs indicateurs statistiques sous forme de tableau et de graphique(s). Il est aussi possible d'exporter une version PDF de ce rapport. -.. image:: images/import/import_steps/07_report_part1.png + .. image:: images/import/import_steps/07_report_part1.png Modifier un import """""""""""""""""" diff --git a/frontend/src/app/metadataModule/metadata.component.ts b/frontend/src/app/metadataModule/metadata.component.ts index b085320587..c108ab8102 100644 --- a/frontend/src/app/metadataModule/metadata.component.ts +++ b/frontend/src/app/metadataModule/metadata.component.ts @@ -84,7 +84,7 @@ export class MetadataComponent implements OnInit { this.rapidSearchControl.valueChanges .pipe( startWith(''), - debounceTime(500), + debounceTime(500), distinctUntilChanged(), tap((term) => { if (term !== null) { @@ -97,7 +97,9 @@ export class MetadataComponent implements OnInit { }), switchMap(() => this.metadataService.search(this.searchTerms)) ) - .subscribe(() => {return;}); + .subscribe(() => { + return; + }); // format areas filter this.areaFilters = this.config.METADATA.METADATA_AREA_FILTERS.map((area) => { @@ -116,6 +118,7 @@ export class MetadataComponent implements OnInit { refreshFilters() { this.metadataService.resetForm(); + this.rapidSearchControl.reset(); this.advancedSearch(); this.metadataService.expandAccordions = false; } diff --git a/frontend/src/app/modules/imports/components/import_process/content-mapping-step/content-mapping-step.component.html b/frontend/src/app/modules/imports/components/import_process/content-mapping-step/content-mapping-step.component.html index c6b05dbc67..f4b556bfda 100644 --- a/frontend/src/app/modules/imports/components/import_process/content-mapping-step/content-mapping-step.component.html +++ b/frontend/src/app/modules/imports/components/import_process/content-mapping-step/content-mapping-step.component.html @@ -4,14 +4,14 @@ data-qa="import-contentmapping-form" >
-
Correspondance des nomenclatures
+
{{ 'Import.ContentMapping.Title' | translate }}
- Choix du modĂšle d'import + {{ 'Import.Mapping.ChooseMapping' | translate }}