Skip to content

Commit b9e251b

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

21 files changed

+767
-17
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: 55 additions & 12 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,
@@ -420,32 +422,74 @@ def get_geometries():
420422
DB.session.close()
421423

422424

423-
@blueprint.route("/references/autocomplete", methods=["GET"])
425+
@blueprint.route("/autocomplete/<string:field>", methods=["GET"])
424426
@permissions.check_cruved_scope("R", module_code="ZONES_HUMIDES")
425427
@json_resp
426-
def get_ref_autocomplete():
428+
def get_autocomplete(field):
427429
try:
428430
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"))
431+
if field == "references":
432+
search_title = params.get("search_title")
433+
# search_title = 'MCD'
434+
q = select(
435+
TReferences, func.similarity(TReferences.title, search_title).label("idx_trgm")
436+
)
432437

433-
search_title = search_title.replace(" ", "%")
434-
q = q.where(TReferences.title.ilike("%" + search_title + "%")).order_by(desc("idx_trgm"))
438+
search_title = search_title.replace(" ", "%")
439+
q = q.where(TReferences.title.ilike("%" + search_title + "%")).order_by(
440+
desc("idx_trgm")
441+
)
442+
elif field == "product_owner":
443+
search_product_owner = params.get("search_product_owner")
444+
q = select(
445+
BibOrganismes,
446+
func.similarity(BibOrganismes.name, search_product_owner).label("idx_trgm"),
447+
)
435448

449+
search_product_owner = search_product_owner.replace(" ", "%")
450+
q = (
451+
q.where(BibOrganismes.name.ilike("%" + search_product_owner + "%"))
452+
.where(BibOrganismes.is_product_owner == True)
453+
.order_by(desc("idx_trgm"))
454+
)
455+
elif field == "input_scale":
456+
search_input_scale = params.get("search_input_scale")
457+
id_nommenclature_type = DB.session.execute(
458+
select(BibNomenclaturesTypes.id_type).where(
459+
BibNomenclaturesTypes.mnemonique.like("INPUT_SCALE")
460+
)
461+
).scalar_one()
462+
q = (
463+
select(TNomenclatures.mnemonique)
464+
.where(TNomenclatures.id_type == id_nommenclature_type)
465+
.where(TNomenclatures.mnemonique.ilike("%" + search_input_scale + "%"))
466+
)
467+
elif field == "input_ref_geo":
468+
search_input_ref_geo = params.get("search_input_ref_geo")
469+
id_nommenclature_type = DB.session.execute(
470+
select(BibNomenclaturesTypes.id_type).where(
471+
BibNomenclaturesTypes.mnemonique.like("INPUT_REF_GEO")
472+
)
473+
).scalar_one()
474+
q = (
475+
select(TNomenclatures.mnemonique)
476+
.where(TNomenclatures.id_type == id_nommenclature_type)
477+
.where(TNomenclatures.mnemonique.ilike("%" + search_input_ref_geo + "%"))
478+
)
479+
else:
480+
raise NotFound(f"Field {field} not found for autocomplete")
436481
limit = request.args.get("limit", 20)
437-
438482
data = DB.session.execute(q.limit(limit)).all()
439483
if data:
440-
return [d[0].as_dict() for d in data]
484+
return [d[0].as_dict() if hasattr(d[0], "as_dict") else d[0] for d in data]
441485
else:
442486
return "No Result", 404
443487
except Exception as e:
444488
if e.__class__.__name__ == "ZHApiError":
445489
raise ZHApiError(message=str(e.message), details=str(e.details))
446490
exc_type, value, tb = sys.exc_info()
447491
raise ZHApiError(
448-
message="get_ref_autocomplete_error",
492+
message=f"get_autocomplete_error on field: {field}",
449493
details=str(exc_type) + ": " + str(e.with_traceback(tb)),
450494
)
451495
finally:
@@ -628,7 +672,6 @@ def get_tab_data(id_tab):
628672
raise BadRequest(
629673
"Géométrie manquante",
630674
)
631-
632675
# POST / PATCH
633676
if "id_zh" not in form_data.keys():
634677
# 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)