From a8d40c4fb0cc3611a79b9cebde1ed07dfa63ae1b Mon Sep 17 00:00:00 2001 From: Jean-Pascal MILCENT Date: Tue, 7 May 2024 17:14:43 +0200 Subject: [PATCH] feat(identityCard): improve subtaxa modal Refactor SQL queries and Python source code. Fix map bounds error for municipality view for sensitive taxa with no data. Fix HTML tags and Jinja conditions. Add changelog entry. Improve subtaxa table responsiveness. Resolve #558. --- .../repositories/vmTaxrefRepository.py | 52 ++++++++------ atlas/static/mapAreas.js | 5 -- atlas/static/mapGenerator.js | 4 +- .../templates/speciesSheet/identityCard.html | 72 ++++++++++--------- docs/changelog.rst | 8 +++ 5 files changed, 77 insertions(+), 64 deletions(-) diff --git a/atlas/modeles/repositories/vmTaxrefRepository.py b/atlas/modeles/repositories/vmTaxrefRepository.py index a5e5b51d0..8eab16957 100644 --- a/atlas/modeles/repositories/vmTaxrefRepository.py +++ b/atlas/modeles/repositories/vmTaxrefRepository.py @@ -11,29 +11,34 @@ def searchEspece(connection, cd_ref): """ recherche l espece corespondant au cd_nom et tout ces fils """ - sql = """ + query = """ WITH limit_obs AS ( SELECT - :thiscdref AS cd_ref, min(yearmin) AS yearmin, - max(yearmax) AS yearmax, SUM(nb_obs) AS nb_obs + :cdRef AS cd_ref, + MIN(yearmin) AS yearmin, + MAX(yearmax) AS yearmax, + SUM(nb_obs) AS nb_obs FROM atlas.vm_taxons - WHERE - cd_ref IN (SELECT * FROM atlas.find_all_taxons_childs(:thiscdref)) - OR cd_ref = :thiscdref + WHERE cd_ref IN (SELECT * FROM atlas.find_all_taxons_childs(:cdRef)) + OR cd_ref = :cdRef ) SELECT taxref.*, - l.cd_ref, l.yearmin, l.yearmax, COALESCE(l.nb_obs, 0) AS nb_obs, - t2.patrimonial, t2.protection_stricte - FROM atlas.vm_taxref taxref - JOIN limit_obs l - ON l.cd_ref = taxref.cd_nom - LEFT JOIN atlas.vm_taxons t2 - ON t2.cd_ref = taxref.cd_ref - WHERE taxref.cd_nom = :thiscdref + l.cd_ref, + l.yearmin, + l.yearmax, + COALESCE(l.nb_obs, 0) AS nb_obs, + t2.patrimonial, + t2.protection_stricte + FROM atlas.vm_taxref AS taxref + JOIN limit_obs AS l + ON l.cd_ref = taxref.cd_nom + LEFT JOIN atlas.vm_taxons AS t2 + ON t2.cd_ref = taxref.cd_ref + WHERE taxref.cd_nom = :cdRef """ - req = connection.execute(text(sql), thiscdref=cd_ref) + results = connection.execute(text(query), cdRef=cd_ref) taxonSearch = dict() - for r in req: + for r in results: nom_vern = None if r.nom_vern: nom_vern = ( @@ -54,7 +59,7 @@ def searchEspece(connection, cd_ref): "protection": r.protection_stricte, } - sql = """ + query = """ SELECT tax.lb_nom, tax.nom_vern, @@ -64,16 +69,17 @@ def searchEspece(connection, cd_ref): tax.patrimonial, tax.protection_stricte, tax.nb_obs - FROM atlas.vm_taxons tax - JOIN atlas.bib_taxref_rangs br - ON br.id_rang = tax.id_rang + FROM atlas.vm_taxons AS tax + JOIN atlas.bib_taxref_rangs AS br + ON br.id_rang = tax.id_rang WHERE tax.cd_ref IN ( - SELECT * FROM atlas.find_all_taxons_childs(:thiscdref) + SELECT * FROM atlas.find_all_taxons_childs(:cdRef) ) + ORDER BY tax.lb_nom ASC, tax.nb_obs DESC """ - req = connection.execute(text(sql), thiscdref=cd_ref) + results = connection.execute(text(query), cdRef=cd_ref) listTaxonsChild = list() - for r in req: + for r in results: temp = { "lb_nom": r.lb_nom, "nom_vern": r.nom_vern, diff --git a/atlas/static/mapAreas.js b/atlas/static/mapAreas.js index 66e00b73f..1baeb8a15 100644 --- a/atlas/static/mapAreas.js +++ b/atlas/static/mapAreas.js @@ -148,11 +148,6 @@ function displayObsTaxonMaille(areaCode, cd_ref) { dataType: "json", beforeSend: function () { $("#loaderSpinner").show(); - // $("#loadingGif").show(); - // $("#loadingGif").attr( - // "src", - // configuration.URL_APPLICATION + "/static/images/loading.svg" - // ); } }).done(function (observations) { $("#loaderSpinner").hide(); diff --git a/atlas/static/mapGenerator.js b/atlas/static/mapGenerator.js index 58c5892cb..e26446eb6 100644 --- a/atlas/static/mapGenerator.js +++ b/atlas/static/mapGenerator.js @@ -340,7 +340,9 @@ function displayGridLayerArea(observations) { style: styleMaille, }); currentLayer.addTo(map); - map.fitBounds(currentLayer.getBounds()); + if (currentLayer.getBounds().isValid()) { + map.fitBounds(currentLayer.getBounds()); + } // ajout de la légende generateLegendMaille(); diff --git a/atlas/templates/speciesSheet/identityCard.html b/atlas/templates/speciesSheet/identityCard.html index 9d7c4d273..f54a82bc8 100644 --- a/atlas/templates/speciesSheet/identityCard.html +++ b/atlas/templates/speciesSheet/identityCard.html @@ -109,17 +109,19 @@

{{ taxon.taxonSearch.nom_complet_html|safe }}