diff --git a/backend/gn_module_monitoring/config/repositories.py b/backend/gn_module_monitoring/config/repositories.py index 94fe53738..34b28b9dd 100644 --- a/backend/gn_module_monitoring/config/repositories.py +++ b/backend/gn_module_monitoring/config/repositories.py @@ -138,6 +138,8 @@ def get_config(module_code=None, force=False,customSpecConfig=None): get_config_objects(module_code, config,customSpecConfig=customSpecConfig) # customize config + # TODO: Adapter lorsqu'on entre par site (où est lié les liste des observateurs au moment on on propose lla lsite des observateurs ? + # , où est ce qu'on associe les organismes ? Bref tout ce qui est dans t_module_complements) if module: custom = {} config['custom'] = {} diff --git a/backend/gn_module_monitoring/monitoring/objects.py b/backend/gn_module_monitoring/monitoring/objects.py index 002f60113..c1dff173b 100644 --- a/backend/gn_module_monitoring/monitoring/objects.py +++ b/backend/gn_module_monitoring/monitoring/objects.py @@ -27,6 +27,8 @@ class MonitoringSite(MonitoringObjectGeom): def preprocess_data(self, data): if len(data["types_site"]) > 0 and all(isinstance(x, int) for x in data["types_site"]): data["id_nomenclature_type_site"] = data["types_site"][0] + elif "data" in data and data["data"]["id_nomenclature_type_site"]: + data["id_nomenclature_type_site"] = data["data"]["id_nomenclature_type_site"] else: data["id_nomenclature_type_site"] = data["types_site"][0]["id_nomenclature_type_site"] # TODO: A enlever une fois qu'on aura enelever le champ "id_nomenclature_type_site" du model et de la bdd diff --git a/backend/gn_module_monitoring/monitoring/schemas.py b/backend/gn_module_monitoring/monitoring/schemas.py index be2abd1b6..57acd6a6b 100644 --- a/backend/gn_module_monitoring/monitoring/schemas.py +++ b/backend/gn_module_monitoring/monitoring/schemas.py @@ -62,11 +62,13 @@ class Meta: class MonitoringSitesSchema(MA.SQLAlchemyAutoSchema): class Meta: model = TMonitoringSites + include_fk = True exclude = ("geom_geojson", "geom") geometry = fields.Method("serialize_geojson", dump_only=True) pk = fields.Method("set_pk",dump_only=True) types_site = MA.Nested(BibTypeSiteSchema, many=True) + medias = MA.Nested(MediaSchema,many=True) def serialize_geojson(self, obj): if obj.geom is not None: diff --git a/backend/gn_module_monitoring/routes/monitoring.py b/backend/gn_module_monitoring/routes/monitoring.py index 9a9f86e48..48b5c0962 100644 --- a/backend/gn_module_monitoring/routes/monitoring.py +++ b/backend/gn_module_monitoring/routes/monitoring.py @@ -144,6 +144,35 @@ def create_or_update_object_api_sites_sites_group(module_code, object_type, id=N ) +def get_config_object(module_code, object_type, id): + ''' + renvoie un object, à partir de type de l'object et de son id + + :param module_code: reference le module concerne + :param object_type: le type d'object (site, visit, obervation) + :param id : l'identifiant de l'object (de id_base_site pour site) + :type module_code: str + :type object_type: str + :type id: int + + :return: renvoie l'object requis + :rtype: dict + ''' + + # field_name = param.get('field_name') + # value = module_code if object_type == 'module' + get_config(module_code, force=True) + + depth = to_int(request.args.get('depth', 1)) + + return ( + monitoring_definitions + .monitoring_object_instance(module_code, object_type, id) + .get(depth=depth) + # .get(value=value, field_name = field_name) + .serialize(depth) + ) + # update object @blueprint.route('object///', methods=['PATCH']) @blueprint.route( diff --git a/backend/gn_module_monitoring/routes/site.py b/backend/gn_module_monitoring/routes/site.py index 0fd3f7d40..093238ab6 100644 --- a/backend/gn_module_monitoring/routes/site.py +++ b/backend/gn_module_monitoring/routes/site.py @@ -14,7 +14,7 @@ TNomenclatures, ) from gn_module_monitoring.monitoring.schemas import BibTypeSiteSchema, MonitoringSitesSchema -from gn_module_monitoring.routes.monitoring import create_or_update_object_api_sites_sites_group +from gn_module_monitoring.routes.monitoring import create_or_update_object_api_sites_sites_group, get_config_object from gn_module_monitoring.utils.routes import ( filter_params, geojson_query, @@ -25,6 +25,14 @@ ) +@blueprint.route("/sites/config", + defaults={'id': None, 'object_type': "site",'module_code':'generic'}, + methods=["GET"]) +def get_config_sites(module_code, object_type, id): + obj = get_config_object(module_code, object_type, id) + return obj['properties'] + + @blueprint.route("/sites/types", methods=["GET"]) def get_types_site(): params = MultiDict(request.args) diff --git a/backend/gn_module_monitoring/routes/sites_groups.py b/backend/gn_module_monitoring/routes/sites_groups.py index 6535b8e9a..0da117a75 100644 --- a/backend/gn_module_monitoring/routes/sites_groups.py +++ b/backend/gn_module_monitoring/routes/sites_groups.py @@ -19,10 +19,18 @@ paginate, sort, ) -from gn_module_monitoring.routes.monitoring import create_or_update_object_api_sites_sites_group +from gn_module_monitoring.routes.monitoring import create_or_update_object_api_sites_sites_group, get_config_object from gn_module_monitoring.utils.utils import to_int +@blueprint.route("/sites_groups/config", + defaults={'id': None, 'object_type': "sites_group",'module_code':'generic'}, + methods=["GET"]) +def get_config_sites_groups(module_code, object_type, id): + obj = get_config_object(module_code, object_type, id) + return obj['properties'] + + @blueprint.route("/sites_groups", methods=["GET"]) def get_sites_groups(): params = MultiDict(request.args) diff --git a/backend/gn_module_monitoring/tests/fixtures/site.py b/backend/gn_module_monitoring/tests/fixtures/site.py index 8c9f6ad1c..bc6b2747e 100644 --- a/backend/gn_module_monitoring/tests/fixtures/site.py +++ b/backend/gn_module_monitoring/tests/fixtures/site.py @@ -53,9 +53,10 @@ def site_to_post_with_types(users, types_site, site_group_without_sites): specific_dic = {"owner_name": "Propriétaire", "threat": "Menaces", "owner_tel": "0609090909"} schema_type_site = BibTypeSiteSchema() mock_db_type_site = [schema_type_site.dump(type) for type in types_site.values()] + mock_model_type_site = [type for type in types_site.values()] - for type in mock_db_type_site: - list_nomenclature_id.append(type["id_nomenclature_type_site"]) + for type in mock_model_type_site: + list_nomenclature_id.append(type.id_nomenclature_type_site) site_to_post_with_types = TMonitoringSites( id_inventor=user.id_role, @@ -65,7 +66,7 @@ def site_to_post_with_types(users, types_site, site_group_without_sites): base_site_code=f"New Code", geom=geom_4326, id_nomenclature_type_site=list_nomenclature_id[0], - types_site=list_nomenclature_id, + types_site=mock_model_type_site, id_sites_group=site_group_without_sites.id_sites_group, ) diff --git a/backend/gn_module_monitoring/tests/test_routes/test_site.py b/backend/gn_module_monitoring/tests/test_routes/test_site.py index 7b66c59a2..8a3e873f9 100644 --- a/backend/gn_module_monitoring/tests/test_routes/test_site.py +++ b/backend/gn_module_monitoring/tests/test_routes/test_site.py @@ -149,7 +149,7 @@ def test_get_types_site_by_label(self, types_site): "page": 1, "sort_label": "label_fr", "sort_dir": "asc", - "label_fr": string_contains + "label_fr": string_contains, } r = self.client.get( url_for("monitorings.get_types_site_by_label"), query_string=query_string @@ -176,7 +176,7 @@ def test_post_sites(self, site_to_post_with_types, types_site, site_group_withou res.as_dict()["base_site_name"] == site_to_post_with_types["properties"]["base_site_name"] ) - + def test_delete_site(self, sites): site = list(sites.values())[0] id_base_site = site.id_base_site @@ -190,3 +190,18 @@ def test_delete_site(self, sites): with pytest.raises(Exception) as e: TMonitoringSites.query.get_or_404(id_base_site) assert "404 Not Found" in str(e.value) + + def test_get_config_sites(self, sites): + schema = MonitoringSitesSchema() + + r = self.client.get(url_for("monitorings.get_config_sites")) + list_sites = [schema.dump(site).keys() for site in sites.values()] + attr_post_added = "id_parent" + assert all( + [ + attr in site + for site in list_sites + for attr in r.json.keys() + if attr != attr_post_added + ] + ) diff --git a/frontend/app/components/monitoring-form-g/monitoring-form.component-g.html b/frontend/app/components/monitoring-form-g/monitoring-form.component-g.html index 27b66a108..fff8e04f6 100644 --- a/frontend/app/components/monitoring-form-g/monitoring-form.component-g.html +++ b/frontend/app/components/monitoring-form-g/monitoring-form.component-g.html @@ -18,12 +18,12 @@

Attention

-
+
- +
@@ -94,14 +94,15 @@

Attention

aria-hidden="true" > - - - Valider + > + Valider + +