|
19 | 19 | from ref_geo.models import BibAreasTypes, LAreas, LiMunicipalities |
20 | 20 | from geonature.utils.config import config |
21 | 21 | from geonature.utils.env import DB, ROOT_DIR, BACKEND_DIR |
22 | | -from pypnnomenclature.models import TNomenclatures |
| 22 | +from pypnnomenclature.models import TNomenclatures, BibNomenclaturesTypes |
23 | 23 | from pypnusershub.db.models import Organisme, User |
24 | 24 | from sqlalchemy import desc, func, text, select, update, delete |
25 | 25 | from sqlalchemy.orm import aliased |
@@ -360,6 +360,8 @@ def get_pbf_complete(): |
360 | 360 | tz.menaces, |
361 | 361 | tz.diagnostic_bio, |
362 | 362 | tz.diagnostic_hydro, |
| 363 | + tz.product_owner, |
| 364 | + tz.input_scale, |
363 | 365 | Json_build_object('criteres_delim', tz.criteres_delim, |
364 | 366 | 'communes', |
365 | 367 | tz.communes, |
@@ -420,32 +422,70 @@ def get_geometries(): |
420 | 422 | DB.session.close() |
421 | 423 |
|
422 | 424 |
|
423 | | -@blueprint.route("/references/autocomplete", methods=["GET"]) |
| 425 | +@blueprint.route("/autocomplete/<string:field>", methods=["GET"]) |
424 | 426 | @permissions.check_cruved_scope("R", module_code="ZONES_HUMIDES") |
425 | 427 | @json_resp |
426 | | -def get_ref_autocomplete(): |
| 428 | +def get_autocomplete(field): |
427 | 429 | try: |
428 | 430 | 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")) |
432 | | - |
433 | | - search_title = search_title.replace(" ", "%") |
434 | | - q = q.where(TReferences.title.ilike("%" + search_title + "%")).order_by(desc("idx_trgm")) |
| 431 | + if field == "references": |
| 432 | + search_title = params.get("search_title") |
| 433 | + # search_title = 'MCD' |
| 434 | + q = select(TReferences, func.similarity(TReferences.title, search_title).label("idx_trgm")) |
| 435 | + |
| 436 | + search_title = search_title.replace(" ", "%") |
| 437 | + q = q.where(TReferences.title.ilike("%" + search_title + "%")).order_by(desc("idx_trgm")) |
| 438 | + elif field == "product_owner": |
| 439 | + search_product_owner = params.get("search_product_owner") |
| 440 | + q = select( |
| 441 | + BibOrganismes, |
| 442 | + func.similarity(BibOrganismes.name, search_product_owner).label("idx_trgm"), |
| 443 | + ) |
435 | 444 |
|
| 445 | + search_product_owner = search_product_owner.replace(" ", "%") |
| 446 | + q = ( |
| 447 | + q.where(BibOrganismes.name.ilike("%" + search_product_owner + "%")) |
| 448 | + .where(BibOrganismes.is_product_owner == True) |
| 449 | + .order_by(desc("idx_trgm")) |
| 450 | + ) |
| 451 | + elif field == "input_scale": |
| 452 | + search_input_scale = params.get("search_input_scale") |
| 453 | + id_nommenclature_type = DB.session.execute( |
| 454 | + select(BibNomenclaturesTypes.id_type).where( |
| 455 | + BibNomenclaturesTypes.mnemonique.like("INPUT_SCALE") |
| 456 | + ) |
| 457 | + ).scalar_one() |
| 458 | + q = ( |
| 459 | + select(TNomenclatures.mnemonique) |
| 460 | + .where(TNomenclatures.id_type == id_nommenclature_type) |
| 461 | + .where(TNomenclatures.mnemonique.ilike("%" + search_input_scale + "%")) |
| 462 | + ) |
| 463 | + elif field == "input_ref_geo": |
| 464 | + search_input_ref_geo = params.get("search_input_ref_geo") |
| 465 | + id_nommenclature_type = DB.session.execute( |
| 466 | + select(BibNomenclaturesTypes.id_type).where( |
| 467 | + BibNomenclaturesTypes.mnemonique.like("INPUT_REF_GEO") |
| 468 | + ) |
| 469 | + ).scalar_one() |
| 470 | + q = ( |
| 471 | + select(TNomenclatures.mnemonique) |
| 472 | + .where(TNomenclatures.id_type == id_nommenclature_type) |
| 473 | + .where(TNomenclatures.mnemonique.ilike("%" + search_input_ref_geo + "%")) |
| 474 | + ) |
| 475 | + else: |
| 476 | + raise NotFound(f"Field {field} not found for autocomplete") |
436 | 477 | limit = request.args.get("limit", 20) |
437 | | - |
438 | 478 | data = DB.session.execute(q.limit(limit)).all() |
439 | 479 | if data: |
440 | | - return [d[0].as_dict() for d in data] |
| 480 | + return [d[0].as_dict() if hasattr(d[0], "as_dict") else d[0] for d in data] |
441 | 481 | else: |
442 | 482 | return "No Result", 404 |
443 | 483 | except Exception as e: |
444 | 484 | if e.__class__.__name__ == "ZHApiError": |
445 | 485 | raise ZHApiError(message=str(e.message), details=str(e.details)) |
446 | 486 | exc_type, value, tb = sys.exc_info() |
447 | 487 | raise ZHApiError( |
448 | | - message="get_ref_autocomplete_error", |
| 488 | + message=f"get_autocomplete_error on field: {field}", |
449 | 489 | details=str(exc_type) + ": " + str(e.with_traceback(tb)), |
450 | 490 | ) |
451 | 491 | finally: |
@@ -628,7 +668,6 @@ def get_tab_data(id_tab): |
628 | 668 | raise BadRequest( |
629 | 669 | "Géométrie manquante", |
630 | 670 | ) |
631 | | - |
632 | 671 | # POST / PATCH |
633 | 672 | if "id_zh" not in form_data.keys(): |
634 | 673 | # set geometry from coordinates |
|
0 commit comments