Skip to content

Commit 7a76084

Browse files
committed
add is_product_owner, product_owner, input_scale, input_ref_geo fields (refs PnX-SI#52)
1 parent 8d7e9ad commit 7a76084

21 files changed

+719
-18
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ venv.bak/
106106

107107
# vscode
108108
.vscode/
109+
110+
.idea
111+
cache
109112
# config module
110113
frontend/app/module.config.ts
111114

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
(à déterminer)
66

7+
**🚀 Nouveautés**
8+
9+
- Ajout de 3 nouveau champs "product_owner", "input_scale", "input_ref_geo"(#52, by @juggler31)
10+
711
**🐛 Corrections**
812

913
- Ajout du boutton "quitter" sur l'onglet 9 (#114, by @juggler31)

backend/gn_module_zh/blueprint.py

Lines changed: 104 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from ref_geo.models import BibAreasTypes, LAreas, LiMunicipalities
2020
from geonature.utils.config import config
2121
from geonature.utils.env import DB, ROOT_DIR, BACKEND_DIR
22-
from pypnnomenclature.models import TNomenclatures
22+
from pypnnomenclature.models import TNomenclatures, BibNomenclaturesTypes
2323
from pypnusershub.db.models import Organisme, User
2424
from sqlalchemy import desc, func, text, select, update, delete
2525
from sqlalchemy.orm import aliased
@@ -360,6 +360,8 @@ def get_pbf_complete():
360360
tz.menaces,
361361
tz.diagnostic_bio,
362362
tz.diagnostic_hydro,
363+
tz.product_owner,
364+
tz.input_scale,
363365
Json_build_object('criteres_delim', tz.criteres_delim,
364366
'communes',
365367
tz.communes,
@@ -419,33 +421,123 @@ def get_geometries():
419421
finally:
420422
DB.session.close()
421423

424+
@blueprint.route("/product_owners", methods=["GET"])
425+
@permissions.check_cruved_scope("R", module_code="ZONES_HUMIDES")
426+
@json_resp
427+
def get_product_owners():
428+
try:
429+
q = (
430+
select(BibOrganismes)
431+
.where(BibOrganismes.is_product_owner == True)
432+
)
433+
limit = request.args.get("limit", 20)
434+
data = DB.session.execute(q.limit(limit)).all()
435+
if data:
436+
return [d[0].as_dict() if hasattr(d[0], "as_dict") else d[0] for d in data]
437+
else:
438+
return "No Result", 404
439+
except Exception as e:
440+
if e.__class__.__name__ == "ZHApiError":
441+
raise ZHApiError(message=str(e.message), details=str(e.details))
442+
exc_type, value, tb = sys.exc_info()
443+
raise ZHApiError(
444+
message="get_product_owners",
445+
details=str(exc_type) + ": " + str(e.with_traceback(tb)),
446+
)
447+
finally:
448+
DB.session.close()
422449

423-
@blueprint.route("/references/autocomplete", methods=["GET"])
450+
@blueprint.route("/input_ref_geo", methods=["GET"])
424451
@permissions.check_cruved_scope("R", module_code="ZONES_HUMIDES")
425452
@json_resp
426-
def get_ref_autocomplete():
453+
def get_input_ref_geo():
427454
try:
428-
params = request.args
429-
search_title = params.get("search_title")
430-
# search_title = 'MCD'
431-
q = select(TReferences, func.similarity(TReferences.title, search_title).label("idx_trgm"))
455+
id_nommenclature_type = DB.session.execute(
456+
select(BibNomenclaturesTypes.id_type).where(
457+
BibNomenclaturesTypes.mnemonique.like("INPUT_REF_GEO")
458+
)
459+
).scalar_one()
460+
q = (
461+
select(TNomenclatures.mnemonique)
462+
.where(TNomenclatures.id_type == id_nommenclature_type)
463+
)
464+
data = DB.session.execute(q).all()
465+
if data:
466+
return [d[0].as_dict() if hasattr(d[0], "as_dict") else d[0] for d in data]
467+
else:
468+
return "No Result", 404
469+
except Exception as e:
470+
if e.__class__.__name__ == "ZHApiError":
471+
raise ZHApiError(message=str(e.message), details=str(e.details))
472+
exc_type, value, tb = sys.exc_info()
473+
raise ZHApiError(
474+
message="get_product_owners",
475+
details=str(exc_type) + ": " + str(e.with_traceback(tb)),
476+
)
477+
finally:
478+
DB.session.close()
479+
480+
@blueprint.route("/input_scale", methods=["GET"])
481+
@permissions.check_cruved_scope("R", module_code="ZONES_HUMIDES")
482+
@json_resp
483+
def get_input_scale():
484+
try:
485+
id_nommenclature_type = DB.session.execute(
486+
select(BibNomenclaturesTypes.id_type).where(
487+
BibNomenclaturesTypes.mnemonique.like("INPUT_SCALE")
488+
)
489+
).scalar_one()
490+
q = (
491+
select(TNomenclatures.mnemonique)
492+
.where(TNomenclatures.id_type == id_nommenclature_type)
493+
)
494+
data = DB.session.execute(q).all()
495+
if data:
496+
return [d[0].as_dict() if hasattr(d[0], "as_dict") else d[0] for d in data]
497+
else:
498+
return "No Result", 404
499+
except Exception as e:
500+
if e.__class__.__name__ == "ZHApiError":
501+
raise ZHApiError(message=str(e.message), details=str(e.details))
502+
exc_type, value, tb = sys.exc_info()
503+
raise ZHApiError(
504+
message="get_product_owners",
505+
details=str(exc_type) + ": " + str(e.with_traceback(tb)),
506+
)
507+
finally:
508+
DB.session.close()
432509

433-
search_title = search_title.replace(" ", "%")
434-
q = q.where(TReferences.title.ilike("%" + search_title + "%")).order_by(desc("idx_trgm"))
510+
@blueprint.route("/autocomplete/<string:field>", methods=["GET"])
511+
@permissions.check_cruved_scope("R", module_code="ZONES_HUMIDES")
512+
@json_resp
513+
def get_autocomplete(field):
514+
try:
515+
params = request.args
516+
if field == "references":
517+
search_title = params.get("search_title")
518+
# search_title = 'MCD'
519+
q = select(
520+
TReferences, func.similarity(TReferences.title, search_title).label("idx_trgm")
521+
)
435522

523+
search_title = search_title.replace(" ", "%")
524+
q = q.where(TReferences.title.ilike("%" + search_title + "%")).order_by(
525+
desc("idx_trgm")
526+
)
527+
else:
528+
raise NotFound(f"Field {field} not found for autocomplete")
436529
limit = request.args.get("limit", 20)
437-
438530
data = DB.session.execute(q.limit(limit)).all()
439531
if data:
440-
return [d[0].as_dict() for d in data]
532+
return [d[0].as_dict() if hasattr(d[0], "as_dict") else d[0] for d in data]
441533
else:
442534
return "No Result", 404
443535
except Exception as e:
444536
if e.__class__.__name__ == "ZHApiError":
445537
raise ZHApiError(message=str(e.message), details=str(e.details))
446538
exc_type, value, tb = sys.exc_info()
447539
raise ZHApiError(
448-
message="get_ref_autocomplete_error",
540+
message=f"get_autocomplete_error on field: {field}",
449541
details=str(exc_type) + ": " + str(e.with_traceback(tb)),
450542
)
451543
finally:
@@ -628,7 +720,6 @@ def get_tab_data(id_tab):
628720
raise BadRequest(
629721
"Géométrie manquante",
630722
)
631-
632723
# POST / PATCH
633724
if "id_zh" not in form_data.keys():
634725
# set geometry from coordinates

backend/gn_module_zh/conf_schema_toml.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class MapListConfig(Schema):
2626
{"prop": "code", "name": "Code"},
2727
{"prop": "sdage", "name": "Typologie SDAGE", "sortable": True},
2828
{"prop": "bassin_versant", "name": "Bassin versant", "sortable": True},
29+
{"prop": "input_scale", "name": "Échelle de saisie"},
2930
{"prop": "delims", "name": "Critères délimitation (de la zh)", "sortable": True},
3031
{"prop": "create_date", "name": "Date de création"},
3132
{"prop": "author", "name": "Auteur"},

0 commit comments

Comments
 (0)